summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2010-08-18 14:24:29 +0200
committerDaniel Baumann <daniel@debian.org>2011-03-09 17:59:20 +0100
commitd9b6d4f6a85850a317bf57dfdbae3c04e7d4c9b1 (patch)
treeda63120cc000119912e1a4f4a90f58080424b436
parent1971df3ac4688ca174e0df067e57d4398d96fd59 (diff)
downloadlive-boot-d9b6d4f6a85850a317bf57dfdbae3c04e7d4c9b1.tar.gz
live-boot-d9b6d4f6a85850a317bf57dfdbae3c04e7d4c9b1.zip
Adding reformated patch from Stephan Hermann <sh@sourcecode.de> based on the work of Holger Fischer <hoo.mb@web.de> to add support for BOOTIF in cases where pxelinux is being used with IPAPPEND (Closes: #593284).
-rwxr-xr-xscripts/live52
1 files changed, 52 insertions, 0 deletions
diff --git a/scripts/live b/scripts/live
index a17eb42..2976dae 100755
--- a/scripts/live
+++ b/scripts/live
@@ -68,6 +68,10 @@ Arguments ()
export DEFCONSOLE
;;
+ BOOTIF=*)
+ BOOTIF="${x#BOOTIF=}"
+ ;;
+
debug)
DEBUG="Yes"
export DEBUG
@@ -581,6 +585,54 @@ do_netsetup ()
[ -z "${HTTPFS}" ] && [ -z "${FTPFS}" ]
then
+
+ # support for Syslinux IPAPPEND parameter
+ # it sets the BOOTIF variable on the kernel parameter
+
+ if [ -n "${BOOTIF}" ]
+ then
+ # pxelinux sets BOOTIF to a value based on the mac address of the
+ # network card used to PXE boot, so use this value for DEVICE rather
+ # than a hard-coded device name from initramfs.conf. this facilitates
+ # network booting when machines may have multiple network cards.
+ # pxelinux sets BOOTIF to 01-$mac_address
+
+ # strip off the leading "01-", which isn't part of the mac
+ # address
+ temp_mac=${BOOTIF#*-}
+
+ # convert to typical mac address format by replacing "-" with ":"
+ bootif_mac=""
+ IFS='-'
+ for x in $temp_mac
+ do
+ if [ -z "$bootif_mac" ]
+ then
+ bootif_mac="$x"
+ else
+ bootif_mac="$bootif_mac:$x"
+ fi
+ done
+ unset IFS
+
+ # look for devices with matching mac address, and set DEVICE to
+ # appropriate value if match is found.
+
+ for device in /sys/class/net/*
+ do
+ if [ -f "$device/address" ]
+ then
+ current_mac=$(cat "$device/address")
+
+ if [ "$bootif_mac" = "$current_mac" ]
+ then
+ DEVICE=${device##*/}
+ break
+ fi
+ fi
+ done
+ fi
+
# if ethdevice was not specified on the kernel command line
# make sure we try to get a working network configuration
# for *every* present network device (except for loopback of course)