]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
network: dhcp before parsing specified dns through cmdline
authorXunlei Pang <xlpang@redhat.com>
Tue, 26 Apr 2016 10:05:10 +0000 (18:05 +0800)
committerHarald Hoyer <harald@redhat.com>
Tue, 26 Apr 2016 11:03:30 +0000 (13:03 +0200)
I met a problem when passing kdump dns to dracut via "nameserver=x.x.x.x",
the dns I provided didn't appear in the "/etc/resolv.conf".

After some debugging, found that when setup dhcp DNS, in setup_interface()
and setup_interface6(), it has:
    echo "search $search $domain" > /tmp/net.$netif.resolv.conf

So if "$search $domain" isn't NULL(this is ture in my kdump environment),
the dns contents(that is, dns1, dns2, nameserver) in "ifup" before dhcp
will be discarded.

This patch addresses it by handling dhcp first. In fact this is also the
way the NetworkManager in 1st kernel works.

Signed-off-by: Xunlei Pang <xlpang@redhat.com>
modules.d/40network/ifup.sh

index 118552316ae764b5e24be1c5f483ae2fb08ff20a..41282e7d01fe9fe3849d8460236753dbc05a5e67 100755 (executable)
@@ -321,16 +321,16 @@ fi
 ip=$(getarg ip)
 
 if [ -z "$NO_AUTO_DHCP" ] && [ -z "$ip" ]; then
-    for s in $(getargs nameserver); do
-        [ -n "$s" ] || continue
-        echo nameserver $s >> /tmp/net.$netif.resolv.conf
-    done
-
     if [ "$netroot" = "dhcp6" ]; then
         do_dhcp -6
     else
         do_dhcp -4
     fi
+
+    for s in $(getargs nameserver); do
+        [ -n "$s" ] || continue
+        echo nameserver $s >> /tmp/net.$netif.resolv.conf
+    done
 fi
 
 
@@ -355,17 +355,6 @@ for p in $(getargs ip=); do
     # If this option isn't directed at our interface, skip it
     [ -n "$dev" ] && [ "$dev" != "$netif" ] && continue
 
-    # setup nameserver
-    for s in "$dns1" "$dns2" $(getargs nameserver); do
-        [ -n "$s" ] || continue
-        echo nameserver $s >> /tmp/net.$netif.resolv.conf
-    done
-
-    # Store config for later use
-    for i in ip srv gw mask hostname macaddr mtu dns1 dns2; do
-        eval '[ "$'$i'" ] && echo '$i'="$'$i'"'
-    done > /tmp/net.$netif.override
-
     for autoopt in $(str_replace "$autoconf" "," " "); do
         case $autoopt in
             dhcp|on|any)
@@ -381,6 +370,17 @@ for p in $(getargs ip=); do
     done
     ret=$?
 
+    # setup nameserver
+    for s in "$dns1" "$dns2" $(getargs nameserver); do
+        [ -n "$s" ] || continue
+        echo nameserver $s >> /tmp/net.$netif.resolv.conf
+    done
+
+    # Store config for later use
+    for i in ip srv gw mask hostname macaddr mtu dns1 dns2; do
+        eval '[ "$'$i'" ] && echo '$i'="$'$i'"'
+    done > /tmp/net.$netif.override
+
     if [ $ret -eq 0 ]; then
         > /tmp/net.${netif}.up