[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