[SCM] live-initramfs branch, master, updated. debian/1.177.1-1-2-g0cda291
Daniel Baumann
daniel at debian.org
Fri Apr 2 14:34:00 UTC 2010
The following commit has been merged in the master branch:
commit 0cda29165822d9400592277d82bca255b19c4aa8
Author: Michael Prokop <mika at grml.org>
Date: Fri Apr 2 16:28:33 2010 +0200
Support bootoptions ethdevice and ethdevice-timeout for specifying from which device you want to boot from and using which timeout (being 30 seconds if unconfigured), if ethdevice is not specified try to get a working network configuration for each existing network device.
diff --git a/scripts/live b/scripts/live
index d05080d..bae9193 100755
--- a/scripts/live
+++ b/scripts/live
@@ -100,6 +100,16 @@ Arguments ()
export DEVICE
;;
+ ethdevice=*)
+ ETHDEVICE="${ARGUMENT#ethdevice=}"
+ export ETHDEVICE
+ ;;
+
+ ethdevice-timeout=*)
+ ETHDEV_TIMEOUT="${ARGUMENT#ethdevice-timeout=}"
+ export ETHDEV_TIMEOUT
+ ;;
+
fetch=*)
FETCH="${ARGUMENT#fetch=}"
export FETCH
@@ -765,7 +775,48 @@ do_netmount ()
udevadm trigger
udevadm settle
- ipconfig ${DEVICE} | tee /netboot.config
+ # 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)
+ if [ -z "$ETHDEVICE" ] ; then
+ echo "If you want to boot from a specific device use bootoption ethdevice=..."
+ for device in /sys/class/net/*; do
+ dev=${device##*/} ;
+ if [ "$dev" != "lo" ] ; then
+ ETHDEVICE="$ETHDEVICE $dev"
+ fi
+ done
+ fi
+
+ # split args of ethdevice=eth0,eth1 into "eth0 eth1"
+ for device in $(echo $ETHDEVICE | sed 's/,/ /g') ; do
+ devlist="$devlist $device"
+ done
+
+ [ -n "$ETHDEV_TIMEOUT" ] || ETHDEV_TIMEOUT=15
+ echo "Using timeout of $ETHDEV_TIMEOUT seconds for network configuration."
+
+ # this is tricky (and ugly) because ipconfig sometimes just hangs/runs into
+ # an endless loop; iff execution fails give it two further tries, that's
+ # why we use '$devlist $devlist $devlist' for the other for loop
+ for dev in $devlist $devlist $devlist ; do
+ echo "Executing ipconfig -t $ETHDEV_TIMEOUT $dev"
+ ipconfig -t "$ETHDEV_TIMEOUT" $dev | tee -a /netboot.config &
+ jobid=$!
+ sleep "$ETHDEV_TIMEOUT" ; sleep 1
+ if [ -r /proc/"$jobid"/status ] ; then
+ echo "Killing job $jobid for device $dev as ipconfig ran into recursion..."
+ kill -9 $jobid
+ fi
+
+ # if configuration of device worked we should have an assigned
+ # IP address, iff so let's use the according as $DEVICE for later usage
+ # simple and primitive approach which seems to work fine
+ if ifconfig $dev | grep -q 'inet.*addr:' ; then
+ export DEVICE="$dev"
+ break
+ fi
+ done
# source relevant ipconfig output
OLDHOSTNAME=${HOSTNAME}
@@ -774,7 +825,8 @@ do_netmount ()
export HOSTNAME
# Check if we have a network device at all
- if ! ls /sys/class/net/eth0 > /dev/null 2>&1 && \
+ if ! ls /sys/class/net/"$DEVICE" > /dev/null 2>&1 && \
+ ! ls /sys/class/net/eth0 > /dev/null 2>&1 && \
! ls /sys/class/net/wlan0 > /dev/null 2>&1 && \
! ls /sys/class/net/ath0 > /dev/null 2>&1 && \
! ls /sys/class/net/ra0 > /dev/null 2>&1
--
live-initramfs
More information about the debian-live-changes
mailing list