]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
Rewrite "rootok" and "netroot" logic
authorHarald Hoyer <harald@redhat.com>
Wed, 4 Sep 2013 07:45:04 +0000 (09:45 +0200)
committerHarald Hoyer <harald@redhat.com>
Wed, 4 Sep 2013 07:49:19 +0000 (09:49 +0200)
Previously if "$rootok" = 1, parsing of netroot command line arguments
was skipped. For multiple netroot arguments, all parse scripts have to
run.

Previously only the first netroot argument was taken into account for
the parsing scripts. Now every netroot argument is processed.

modules.d/40network/dhcp-root.sh
modules.d/40network/netroot.sh
modules.d/95cifs/parse-cifsroot.sh
modules.d/95iscsi/parse-iscsiroot.sh
modules.d/95nbd/parse-nbdroot.sh
modules.d/95nfs/parse-nfsroot.sh

index 85c7f08ab7426ccfe2ff819ffac43542939d4ca9..f2a04e07a2e62d99770f1bbe0ef3a9fb60bed1ad 100755 (executable)
@@ -2,20 +2,24 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 
-# Don't continue if root is ok
-[ -n "$rootok" ] && return
-
 # This script is sourced, so root should be set. But let's be paranoid
 [ -z "$root" ] && root=$(getarg root=)
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
 
-if [ "$root" = "dhcp" ] || [ "$root" = "dhcp6" ] || [ "$netroot" = "dhcp" ] ; then
+if [ -z "$netroot" ]; then
+    for netroot in $(getargs netroot=); do
+        [ "$netroot" = "dhcp" ] && break
+        [ "$netroot" = "dhcp6" ] && break
+    done
+    [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ] || unset netroot
+fi
+
+if [ "$root" = "dhcp" ] || [ "$root" = "dhcp6" ] || [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ]; then
     # Tell ip= checker that we need dhcp
     NEEDDHCP="1"
 
     # Done, all good!
     rootok=1
-    if [ "$netroot" != "dhcp" ] ; then
+    if [ "$netroot" != "dhcp" ] && [ "$netroot" != "dhcp6" ]; then
         netroot=$root
     fi
 
index daeb14ceab3cd8862fe103523701740dda116530..8f6945fe8f457b9838188bcc10a38d236bd59af3 100755 (executable)
@@ -51,6 +51,7 @@ if [ -z "$2" ]; then
         netroot=$new_root_path
 
         # FIXME!
+        unset rootok
         for f in $hookdir/cmdline/90*.sh; do
             [ -f "$f" ] && . "$f";
         done
index f376b166bc71ea98910fd65d2311a75f42aa50fe..52d5809dd779b774fb985f829635b672a9beaafa 100755 (executable)
 type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
 . /lib/cifs-lib.sh
 
-#Don't continue if root is ok
-[ -n "$rootok" ] && return
-
 # This script is sourced, so root should be set. But let's be paranoid
 [ -z "$root" ] && root=$(getarg root=)
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
+
+if [ -z "$netroot" ]; then
+    for netroot in $(getargs netroot=); do
+        [ "${netroot%%:*}" = "cifs" ] && break
+    done
+    [ "${netroot%%:*}" = "cifs" ] || unset netroot
+fi
 
 # Root takes precedence over netroot
 if [ "${root%%:*}" = "cifs" ] ; then
-
-    # Don't continue if root is ok
-    [ -n "$rootok" ] && return
-
     if [ -n "$netroot" ] ; then
         warn "root takes precedence over netroot. Ignoring netroot"
-
     fi
     netroot=$root
     unset root
index e83ef32babd345b1b73730278999ef6c0fdeb993..0c8b524b6b8e0fc6ed8ebb975b812edf46d6983a 100755 (executable)
 
 # This script is sourced, so root should be set. But let's be paranoid
 [ -z "$root" ] && root=$(getarg root=)
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
+if [ -z "$netroot" ]; then
+    for netroot in $(getargs netroot=); do
+        [ "${netroot%%:*}" = "iscsi" ] && break
+    done
+    [ "${netroot%%:*}" = "iscsi" ] || unset netroot
+fi
 [ -z "$iscsiroot" ] && iscsiroot=$(getarg iscsiroot=)
 [ -z "$iscsi_firmware" ] && getargbool 0 rd.iscsi.firmware -y iscsi_firmware && iscsi_firmware="1"
 
index ec9e1f664ac7928df40cfe4dc6caaba41443a7d5..49c44b6f37f82e963883dc725c04f9b8f26bc8d0 100755 (executable)
@@ -26,14 +26,16 @@ netroot_to_var() {
 
 # This script is sourced, so root should be set. But let's be paranoid
 [ -z "$root" ] && root=$(getarg root=)
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
+
+if [ -z "$netroot" ]; then
+    for netroot in $(getargs netroot=); do
+        [ "${netroot%%:*}" = "nbd" ] && break
+    done
+    [ "${netroot%%:*}" = "nbd" ] || unset netroot
+fi
 
 # Root takes precedence over netroot
 if [ "${root%%:*}" = "nbd" ] ; then
-
-    # Don't continue if root is ok
-    [ -n "$rootok" ] && return
-
     if [ -n "$netroot" ] ; then
         warn "root takes precedence over netroot. Ignoring netroot"
 
index 283420ad81944bf08cf61b41a9d60bb2b3c721ee..9fc2a8c324709436a7fd7dab5f7e2c37b95c406d 100755 (executable)
 
 type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
 
-#Don't continue if root is ok
-[ -n "$rootok" ] && return
-
 # This script is sourced, so root should be set. But let's be paranoid
 [ -z "$root" ] && root=$(getarg root=)
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
 [ -z "$nfsroot" ] && nfsroot=$(getarg nfsroot=)
 
+[ -n "$netroot" ] && oldnetroot="$netroot"
+
 # netroot= cmdline argument must be ignored, but must be used if
 # we're inside netroot to parse dhcp root-path
 if [ -n "$netroot" ] ; then
-    if [ "$netroot" = "$(getarg netroot=)" ] ; then
+    for n in $(getargs netroot=); do
+        [ "$n" = "$netroot" ] && break
+    done
+    if [ "$n" = "$netroot" ]; then
         warn "Ignoring netroot argument for NFS"
         netroot=$root
     fi
@@ -67,7 +68,14 @@ esac
 # Continue if nfs
 case "${netroot%%:*}" in
     nfs|nfs4|/dev/nfs);;
-    *) unset netroot; return;;
+    *)
+        if [ -n "$oldnetroot" ]; then
+            netroot="$oldnetroot"
+        else
+            unset netroot
+        fi
+        return
+        ;;
 esac
 
 # Check required arguments