From 935b37ee8bb02d7cd22b89d7930081eced303655 Mon Sep 17 00:00:00 2001 From: Dave Young Date: Thu, 2 Feb 2012 15:59:52 +0800 Subject: [PATCH] auto setup network without netroot Current dracut network only will be setup when netroot is used. But there are some cases we need network even without netroot. For example kdump will need copy vmcore to remote machine via scp or nfs mount. OTOH, if we use dracut as a recovery system the network is helpful even root is not a network device. This implementation is based on the manually bring up method. Here add a kernel cmdline argument rd.neednet. If rd.neednet is set dracut will bring up network with ifup $INTERFACE -m. If netroot is used we still keep original behavior. Signed-off-by: Dave Young --- dracut.cmdline.7.xml | 8 ++++++++ modules.d/40network/net-genrules.sh | 20 ++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/dracut.cmdline.7.xml b/dracut.cmdline.7.xml index 0fa476265..2dc9096df 100644 --- a/dracut.cmdline.7.xml +++ b/dracut.cmdline.7.xml @@ -507,6 +507,14 @@ Required if multiple ip= lines are used. turn on/off biosdevname network interface renaming + + + rd.neednet=<0|1> + + + boolean, bring up network even without netroot set + + diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh index 17839097f..d6a88e900 100755 --- a/modules.d/40network/net-genrules.sh +++ b/modules.d/40network/net-genrules.sh @@ -14,7 +14,7 @@ fix_bootif() { } # Don't continue if we don't need network -[ -z "$netroot" ] && return; +[ -z "$netroot" ] && ! getargbool 0 rd.neednet && return; # Write udev rules { @@ -35,17 +35,29 @@ fix_bootif() { BOOTIF=$(getarg 'BOOTIF=') if [ -n "$BOOTIF" ] ; then BOOTIF=$(fix_bootif "$BOOTIF") - printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", RUN+="/sbin/ifup $env{INTERFACE}"\n' "$BOOTIF" + if [ -n "$netroot" ]; then + printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", RUN+="/sbin/ifup $env{INTERFACE}"\n' "$BOOTIF" + else + printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", RUN+="/sbin/ifup $env{INTERFACE} -m"\n' "$BOOTIF" + fi # If we have to handle multiple interfaces, handle only them. elif [ -n "$IFACES" ] ; then for iface in $IFACES ; do - printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", RUN+="/sbin/ifup $env{INTERFACE}"\n' "$iface" + if [ -n "$netroot" ]; then + printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", RUN+="/sbin/ifup $env{INTERFACE}"\n' "$iface" + else + printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", RUN+="/sbin/ifup $env{INTERFACE} -m"\n' "$iface" + fi done # Default: We don't know the interface to use, handle all else - printf 'SUBSYSTEM=="net", RUN+="/sbin/ifup $env{INTERFACE}"\n' + if [ -n "$netroot" ]; then + printf 'SUBSYSTEM=="net", RUN+="/sbin/ifup $env{INTERFACE}"\n' + else + printf 'SUBSYSTEM=="net", RUN+="/sbin/ifup $env{INTERFACE} -m"\n' + fi fi } > /etc/udev/rules.d/60-net.rules -- 2.47.3