]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
Move running dhclient on DHCP interfaces into a pre-mount hook.
authorVictor Lowther <victor.lowther-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Thu, 26 Feb 2009 02:42:11 +0000 (18:42 -0800)
committerHarald Hoyer <harald@redhat.com>
Wed, 4 Mar 2009 15:55:05 +0000 (16:55 +0100)
Static interfaces are still configured on the fly as we add them, but
discussions on the mailing list have suggested that we need to have finer
control over bringing up dhcp interfaces.

The default hook just runs all the requested dhclients in parallel and waits
for them to all return.  If you need something more complicated than this, or
need to have more control over bringing interfaces up, you will probably need
to override some stuff in the 40network hook.

dhclient-script
hooks/kill-dhclient.sh [changed mode: 0644->0755]
hooks/run-dhclient.sh [new file with mode: 0755]
ifup
modules/40network.sh

index 5a2c66b8a1b86a48583b317841743894b04026b3..dc2d9e1e13441c4fb9f72aa0c52edd49c66ffaa3 100755 (executable)
@@ -19,7 +19,9 @@ case $reason in
        for s in $new_domain_name_servers; do
            echo "nameserver $s" >> /etc/resolv.conf
        done
-       set |grep -e '^new_[a-z_]=' >/net.$interface.dhcpopts
+       set |grep -e '^new_[a-z_]=' |while read line; do
+           echo "${line%%=*}=\'${line#*=}\'">>/net.$interface.dhcpopts
+       done
        >/net.$interface.up ;;
     *) ;;
 esac
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/hooks/run-dhclient.sh b/hooks/run-dhclient.sh
new file mode 100755 (executable)
index 0000000..fcf890e
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+for i in /net.*.dhcp; do
+    dev=${i#net.}; dev=${i%.dhcp}
+    dhclient -1 -q $dev &
+done
+wait
+    
\ No newline at end of file
diff --git a/ifup b/ifup
index 79607db801a966c193b50fb6d0c82f38b1fad7ac..83f65229fd6c2b7d7c8f60081d43071b9ae339f4 100755 (executable)
--- a/ifup
+++ b/ifup
@@ -1,5 +1,4 @@
 #!/bin/sh
->/net.$1
 
 # loopback is always handled the same way
 [ "$1" = "lo" ] && {
@@ -14,13 +13,13 @@ for p in $(cat /proc/cmdline); do
     p=${p#ip=}
     case $p in
        none|off) exit 0;; # we were told to not configure anything
-       dhcp|on|any) dhclient -nw "$1"; exit 0;; 
+       dhcp|on|any) >/net.$1.dhcp; exit 0;; 
        bootp|rarp|both) exit 0;; #dunno how to do this
        *) echo ${ip#ip=} | \
            (IFS=':' read client server gw netmask hostname device autoconf
                if [ -z "$device" -o "$device" = "$1"  ]; then
                    case $autoconf in
-                       dhcp|on|any) dhclient -nw "$1";;
+                       dhcp|on|any) >/net.$1.dhcp ;;
                        none|off|'') # do some basic configuration
                            ip link set $1 up
                            ip addr add $client/$netmask dev $1
index 3def1540557665e94b42d8dc309b644448f06ac2..b477a9c446709682868862adc11d925c91c7f775 100755 (executable)
@@ -5,3 +5,4 @@ inst "$dsrc/dhclient-script" "/sbin/dhclient-script"
 instmods =networking ecb arc4
 inst_rules "$dsrc/rules.d/60-net.rules"
 inst_hook pre-pivot 10 "$dsrc/hooks/kill-dhclient.sh"
+inst_hook pre-mount 70 "$dsrc/hooks/run-dhclient.sh"