]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
auto setup network without netroot
authorDave Young <dyoung@redhat.com>
Thu, 2 Feb 2012 07:59:52 +0000 (15:59 +0800)
committerHarald Hoyer <harald@redhat.com>
Tue, 7 Feb 2012 11:14:22 +0000 (12:14 +0100)
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 <dyoung@redhat.com>
dracut.cmdline.7.xml
modules.d/40network/net-genrules.sh

index 0fa4762655ca44aba4a9e9a809b4e6faf8dc4905..2dc9096dfe2508235a9963037cfdea91e577dc24 100644 (file)
@@ -507,6 +507,14 @@ Required if multiple ip= lines are used.</para>
             <para>turn on/off biosdevname network interface renaming</para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term>
+            <envar>rd.neednet=</envar><replaceable>&lt;0|1&gt;</replaceable>
+          </term>
+          <listitem>
+            <para>boolean, bring up network even without netroot set</para>
+          </listitem>
+        </varlistentry>
       </variablelist>
     </refsect2>
     <refsect2>
index 17839097fc61d2b617c010a070c1c9ce5021d3c5..d6a88e900bf76be506cdd45c17c8d9f072cc0592 100755 (executable)
@@ -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