diff options
| author | Steven Shiau <steven@nchc.org.tw> | 2010-03-16 18:56:01 +0100 |
|---|---|---|
| committer | Daniel Baumann <daniel@debian.org> | 2011-03-09 17:48:07 +0100 |
| commit | 916bfc9fa4b28c67a8f29310cf9928a7e6995738 (patch) | |
| tree | a7145d283d839b044920d412788e6b5896e551f3 | |
| parent | cae2693a5c6bc93bf8c0fb5ede1941dc5d871485 (diff) | |
| download | live-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-x | scripts/init-premount/select_eth_device | 29 |
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 ..." |
