From: Will Woods Date: Thu, 5 Apr 2012 17:01:37 +0000 (-0400) Subject: network: add save_netinfo, fix problems with nfs->NM takeover X-Git-Tag: 019~116 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e173f0b384f699c2519db879f3f562b1f6676d8d;p=thirdparty%2Fdracut.git network: add save_netinfo, fix problems with nfs->NM takeover For NetworkManager to properly take over a NFS-root system, we need to have the interface name(s) in /tmp/net.ifaces and save the dhclient lease. This lets the ifcfg module do its magic. save_netinfo should properly write out /tmp/net.ifaces when needed, and copies the dhclient files into place. --- diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh index a7abe819b..c0f73da12 100644 --- a/modules.d/40network/net-lib.sh +++ b/modules.d/40network/net-lib.sh @@ -105,6 +105,22 @@ setup_net() { > /tmp/net.$netif.did-setup } +save_netinfo() { + local netif="$1" IFACES="" f="" i="" + [ -e /tmp/net.ifaces ] && read IFACES < /tmp/net.ifaces + # Add $netif to the front of IFACES (if it's not there already). + set -- "$netif" + for i in $IFACES; do [ "$i" != "$netif" ] && set -- "$@" "$i"; done + IFACES="$*" + for i in $IFACES; do + for f in /tmp/dhclient.$i.*; do + [ -f $f ] && cp -f $f /tmp/net.${f#/tmp/dhclient.} + done + done + echo $IFACES > /tmp/.net.ifaces.new + mv /tmp/.net.ifaces.new /tmp/net.ifaces +} + set_ifname() { local name="$1" mac="$2" num=0 n="" # if it's already set, return the existing name diff --git a/modules.d/40network/netroot.sh b/modules.d/40network/netroot.sh index ac1c215ac..1bb62bb93 100755 --- a/modules.d/40network/netroot.sh +++ b/modules.d/40network/netroot.sh @@ -84,14 +84,8 @@ source_hook netroot # Run the handler; don't store the root, it may change from device to device # XXX other variables to export? if $handler $netif $netroot $NEWROOT; then - # Network rootfs mount successful - for iface in $IFACES ; do - [ -f /tmp/dhclient.$iface.lease ] && cp /tmp/dhclient.$iface.lease /tmp/net.$iface.lease - [ -f /tmp/dhclient.$iface.dhcpopts ] && cp /tmp/dhclient.$iface.dhcpopts /tmp/net.$iface.dhcpopts - done - - # Save used netif for later use - [ ! -f /tmp/net.ifaces ] && echo $netif > /tmp/net.ifaces + # Network rootfs mount successful - save interface info for ifcfg etc. + save_netinfo $netif else warn "Mounting root via '$netif' failed" # If we're trying with multiple interfaces, put that one down.