summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Shiau <steven@nchc.org.tw>2010-03-16 18:56:01 +0100
committerDaniel Baumann <daniel@debian.org>2011-03-09 17:48:07 +0100
commit916bfc9fa4b28c67a8f29310cf9928a7e6995738 (patch)
treea7145d283d839b044920d412788e6b5896e551f3
parentcae2693a5c6bc93bf8c0fb5ede1941dc5d871485 (diff)
downloadlive-boot-916bfc9fa4b28c67a8f29310cf9928a7e6995738.tar.gz
live-boot-916bfc9fa4b28c67a8f29310cf9928a7e6995738.zip
Making select_eth_device work with 2nd NIC linked only and FETCH assigned.
The differences: 1. If user uses "FETCH", "HTTPFS", or "FTPFS", select_eth_device should not exit since network is also required to get the filesystem.squashfs. 2. Files in "/sys/class/net/" maybe not be up so quick, so it's better to use a while loop to wait for that. 3. Another case is, for example, if eth0 and eth1 are linked, but only eth1 is able to get filesystem.squashfs, the original select_eth_device will try eth0 only. It's better to provide an alternative way to allow user to specify the device in boot parameter. Here in the patch live-netdev=eth1, for example, can be used to make it.
-rwxr-xr-xscripts/init-premount/select_eth_device29
1 files changed, 25 insertions, 4 deletions
diff --git a/scripts/init-premount/select_eth_device b/scripts/init-premount/select_eth_device
index 4803314..4258fba 100755
--- a/scripts/init-premount/select_eth_device
+++ b/scripts/init-premount/select_eth_device
@@ -30,9 +30,14 @@ for ARGUMENT in $(cat /proc/cmdline); do
esac
done
-if [ "$bootconf" != "BOOT=nfs" ] && [ "$NETBOOT" = "" ]; then
- # Not a net boot : nothing to do
- exit 0
+if [ "$bootconf" != "BOOT=nfs" ] &&
+ [ "$NETBOOT" = "" ] &&
+ [ "$FETCH" = "" ] &&
+ [ "$FTPFS" = "" ] &&
+ [ "$HTTPFS" = "" ]
+then
+ # Not a net boot : nothing to do
+ exit 0
fi
# be sure this has been run (*should* be done by scripts/init-premount/udev)
@@ -43,7 +48,11 @@ udevadm settle
modprobe -q af_packet
# Available Ethernet interfaces ?
-l_interfaces=$(cd /sys/class/net/ && ls -d eth* 2>/dev/null)
+l_interfaces=""
+echo "Waiting for ethernet card(s) up... If this fails, maybe the ethernet card is not supported by the kernel `uname -r`?"
+while [ -z "$l_interfaces" ]; do
+ l_interfaces="$(cd /sys/class/net/ && ls -d eth* 2>/dev/null)"
+done
if [ $(echo $l_interfaces | wc -w) -lt 2 ]; then
# only one interface : no choice
@@ -51,6 +60,18 @@ if [ $(echo $l_interfaces | wc -w) -lt 2 ]; then
exit 0
fi
+# If user force to use specific device, write it
+for ARGUMENT in $(cat /proc/cmdline); do
+ case "${ARGUMENT}" in
+ live-netdev=*)
+ NETDEV="${ARGUMENT#live-netdev=}"
+ echo "DEVICE=$NETDEV" >> /conf/param.conf
+ echo "Found live-netdev parameter in /proc/cmdline. Force to use network device $NETDEV."
+ exit 0
+ ;;
+ esac
+done
+
while true; do
echo -n "Looking for a connected Ethernet interface ..."