Calling udevadm settle in scripts/init-premount/select_eth_device (Closes: #570100).
authorAndreas Teuchert <ant+bdo@hsg-kl.de>
Sun, 14 Mar 2010 21:52:32 +0000 (22:52 +0100)
committerDaniel Baumann <daniel@debian.org>
Wed, 9 Mar 2011 16:48:07 +0000 (17:48 +0100)
scripts/init-premount/select_eth_device

index 6ab8bfe..4323880 100755 (executable)
@@ -3,8 +3,6 @@
 # Original script by Andreas Teuchert <ant+dl@hsg-kl.de>
 # Modified by Frédéric Boiteux <fboiteux@calistel.com>
 
-
-
 PREREQ="blacklist udev"
 
 prereqs()
@@ -25,16 +23,28 @@ bootconf=$(egrep '^BOOT=' /conf/initramfs.conf | tail -1)
 
 # can be superseded by command line (used by Debian-Live's netboot for example)
 for ARGUMENT in $(cat /proc/cmdline); do
-    case "${ARGUMENT}" in
-        netboot=*)
-        NETBOOT="${ARGUMENT#netboot=}"
-        ;;
-    esac
+       case "${ARGUMENT}" in
+               netboot=*)
+                       NETBOOT="${ARGUMENT#netboot=}"
+                       ;;
+       esac
 done
 
 if [ "$bootconf" != "BOOT=nfs" ] && [ "$NETBOOT" = "" ]; then
-    # Not a net boot : nothing to do
-    exit 0
+       # Not a net boot : nothing to do
+       exit 0
+fi
+
+# be sure this has been run (*should* be done by scripts/init-premount/udev)
+if [ -x /sbin/udevadm ]
+then
+       # lenny
+       udevadm trigger
+       udevadm settle
+else
+       # etch
+       udevtrigger
+       udevsettle
 fi
 
 # we want to do some basic IP
@@ -44,34 +54,35 @@ modprobe -q af_packet
 l_interfaces=$(cd /sys/class/net/ && ls -d eth* 2>/dev/null)
 
 if [ $(echo $l_interfaces | wc -w) -lt 2 ]; then
-    # only one interface : no choice
-    echo "DEVICE=$l_interfaces" >> /conf/param.conf
-    exit 0
+       # only one interface : no choice
+       echo "DEVICE=$l_interfaces" >> /conf/param.conf
+       exit 0
 fi
 
 while true; do
-        echo -n "Looking for a connected Ethernet interface ..."
+       echo -n "Looking for a connected Ethernet interface ..."
 
        for interface in $l_interfaces; do
                # ATTR{carrier} is not set if this is not done
-                echo -n " $interface ?"
+               echo -n " $interface ?"
                ipconfig -c none -d $interface -t 1 >/dev/null 2>&1
-        done
-        echo ''
+       done
+
+       echo ''
 
-        for step in 1 2 3 4 5; do
-               for interface in $l_interfaces; do
-                        carrier=$(cat /sys/class/net/$interface/carrier \
-                                  2>/dev/null)
-                        # link detected
-                        if [ "$carrier" = 1 ]; then
-                                echo " found $interface."
-                                # inform initrd's init script :
-                                echo "DEVICE=$interface" >> /conf/param.conf
-                                exit 0
-                       fi
-               done
-                # wait a bit
-                sleep 1
-        done
+       for step in 1 2 3 4 5; do
+               for interface in $l_interfaces; do
+                       carrier=$(cat /sys/class/net/$interface/carrier \
+                               2>/dev/null)
+                       # link detected
+                       if [ "$carrier" = 1 ]; then
+                               echo " found $interface."
+                               # inform initrd's init script :
+                               echo "DEVICE=$interface" >> /conf/param.conf
+                               exit 0
+                       fi
+               done
+               # wait a bit
+               sleep 1
+       done
 done