From: Daniel Baumann Date: Wed, 18 Aug 2010 12:24:29 +0000 (+0200) Subject: Adding reformated patch from Stephan Hermann based on the work... X-Git-Tag: debian/3.0_a15-1~71 X-Git-Url: http://git.grml.org/?a=commitdiff_plain;h=d9b6d4f6a85850a317bf57dfdbae3c04e7d4c9b1;p=live-boot-grml.git Adding reformated patch from Stephan Hermann based on the work of Holger Fischer to add support for BOOTIF in cases where pxelinux is being used with IPAPPEND (Closes: #593284). --- 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)