Blame 0022-Rewrite-rootok-and-netroot-logic.patch

Harald Hoyer fe48c9
From de74e1ef41148f72b572252eaa5a8e4859cfa929 Mon Sep 17 00:00:00 2001
Harald Hoyer fe48c9
From: Harald Hoyer <harald@redhat.com>
Harald Hoyer fe48c9
Date: Wed, 4 Sep 2013 09:45:04 +0200
Harald Hoyer fe48c9
Subject: [PATCH] Rewrite "rootok" and "netroot" logic
Harald Hoyer fe48c9
Harald Hoyer fe48c9
Previously if "$rootok" = 1, parsing of netroot command line arguments
Harald Hoyer fe48c9
was skipped. For multiple netroot arguments, all parse scripts have to
Harald Hoyer fe48c9
run.
Harald Hoyer fe48c9
Harald Hoyer fe48c9
Previously only the first netroot argument was taken into account for
Harald Hoyer fe48c9
the parsing scripts. Now every netroot argument is processed.
Harald Hoyer fe48c9
---
Harald Hoyer fe48c9
 modules.d/40network/dhcp-root.sh     | 16 ++++++++++------
Harald Hoyer fe48c9
 modules.d/40network/netroot.sh       |  1 +
Harald Hoyer fe48c9
 modules.d/95cifs/parse-cifsroot.sh   | 16 +++++++---------
Harald Hoyer fe48c9
 modules.d/95iscsi/parse-iscsiroot.sh |  7 ++++++-
Harald Hoyer fe48c9
 modules.d/95nbd/parse-nbdroot.sh     | 12 +++++++-----
Harald Hoyer fe48c9
 modules.d/95nfs/parse-nfsroot.sh     | 20 ++++++++++++++------
Harald Hoyer fe48c9
 6 files changed, 45 insertions(+), 27 deletions(-)
Harald Hoyer fe48c9
Harald Hoyer fe48c9
diff --git a/modules.d/40network/dhcp-root.sh b/modules.d/40network/dhcp-root.sh
Harald Hoyer fe48c9
index 85c7f08..f2a04e0 100755
Harald Hoyer fe48c9
--- a/modules.d/40network/dhcp-root.sh
Harald Hoyer fe48c9
+++ b/modules.d/40network/dhcp-root.sh
Harald Hoyer fe48c9
@@ -2,20 +2,24 @@
Harald Hoyer fe48c9
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer fe48c9
 # ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
-# Don't continue if root is ok
Harald Hoyer fe48c9
-[ -n "$rootok" ] && return
Harald Hoyer fe48c9
-
Harald Hoyer fe48c9
 # This script is sourced, so root should be set. But let's be paranoid
Harald Hoyer fe48c9
 [ -z "$root" ] && root=$(getarg root=)
Harald Hoyer fe48c9
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
-if [ "$root" = "dhcp" ] || [ "$root" = "dhcp6" ] || [ "$netroot" = "dhcp" ] ; then
Harald Hoyer fe48c9
+if [ -z "$netroot" ]; then
Harald Hoyer fe48c9
+    for netroot in $(getargs netroot=); do
Harald Hoyer fe48c9
+        [ "$netroot" = "dhcp" ] && break
Harald Hoyer fe48c9
+        [ "$netroot" = "dhcp6" ] && break
Harald Hoyer fe48c9
+    done
Harald Hoyer fe48c9
+    [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ] || unset netroot
Harald Hoyer fe48c9
+fi
Harald Hoyer fe48c9
+
Harald Hoyer fe48c9
+if [ "$root" = "dhcp" ] || [ "$root" = "dhcp6" ] || [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ]; then
Harald Hoyer fe48c9
     # Tell ip= checker that we need dhcp
Harald Hoyer fe48c9
     NEEDDHCP="1"
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
     # Done, all good!
Harald Hoyer fe48c9
     rootok=1
Harald Hoyer fe48c9
-    if [ "$netroot" != "dhcp" ] ; then
Harald Hoyer fe48c9
+    if [ "$netroot" != "dhcp" ] && [ "$netroot" != "dhcp6" ]; then
Harald Hoyer fe48c9
         netroot=$root
Harald Hoyer fe48c9
     fi
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
diff --git a/modules.d/40network/netroot.sh b/modules.d/40network/netroot.sh
Harald Hoyer fe48c9
index daeb14c..8f6945f 100755
Harald Hoyer fe48c9
--- a/modules.d/40network/netroot.sh
Harald Hoyer fe48c9
+++ b/modules.d/40network/netroot.sh
Harald Hoyer fe48c9
@@ -51,6 +51,7 @@ if [ -z "$2" ]; then
Harald Hoyer fe48c9
         netroot=$new_root_path
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
         # FIXME!
Harald Hoyer fe48c9
+        unset rootok
Harald Hoyer fe48c9
         for f in $hookdir/cmdline/90*.sh; do
Harald Hoyer fe48c9
             [ -f "$f" ] && . "$f";
Harald Hoyer fe48c9
         done
Harald Hoyer fe48c9
diff --git a/modules.d/95cifs/parse-cifsroot.sh b/modules.d/95cifs/parse-cifsroot.sh
Harald Hoyer fe48c9
index f376b16..52d5809 100755
Harald Hoyer fe48c9
--- a/modules.d/95cifs/parse-cifsroot.sh
Harald Hoyer fe48c9
+++ b/modules.d/95cifs/parse-cifsroot.sh
Harald Hoyer fe48c9
@@ -14,22 +14,20 @@
Harald Hoyer fe48c9
 type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
Harald Hoyer fe48c9
 . /lib/cifs-lib.sh
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
-#Don't continue if root is ok
Harald Hoyer fe48c9
-[ -n "$rootok" ] && return
Harald Hoyer fe48c9
-
Harald Hoyer fe48c9
 # This script is sourced, so root should be set. But let's be paranoid
Harald Hoyer fe48c9
 [ -z "$root" ] && root=$(getarg root=)
Harald Hoyer fe48c9
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
Harald Hoyer fe48c9
+
Harald Hoyer fe48c9
+if [ -z "$netroot" ]; then
Harald Hoyer fe48c9
+    for netroot in $(getargs netroot=); do
Harald Hoyer fe48c9
+        [ "${netroot%%:*}" = "cifs" ] && break
Harald Hoyer fe48c9
+    done
Harald Hoyer fe48c9
+    [ "${netroot%%:*}" = "cifs" ] || unset netroot
Harald Hoyer fe48c9
+fi
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
 # Root takes precedence over netroot
Harald Hoyer fe48c9
 if [ "${root%%:*}" = "cifs" ] ; then
Harald Hoyer fe48c9
-
Harald Hoyer fe48c9
-    # Don't continue if root is ok
Harald Hoyer fe48c9
-    [ -n "$rootok" ] && return
Harald Hoyer fe48c9
-
Harald Hoyer fe48c9
     if [ -n "$netroot" ] ; then
Harald Hoyer fe48c9
         warn "root takes precedence over netroot. Ignoring netroot"
Harald Hoyer fe48c9
-
Harald Hoyer fe48c9
     fi
Harald Hoyer fe48c9
     netroot=$root
Harald Hoyer fe48c9
     unset root
Harald Hoyer fe48c9
diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
Harald Hoyer fe48c9
index e83ef32..0c8b524 100755
Harald Hoyer fe48c9
--- a/modules.d/95iscsi/parse-iscsiroot.sh
Harald Hoyer fe48c9
+++ b/modules.d/95iscsi/parse-iscsiroot.sh
Harald Hoyer fe48c9
@@ -15,7 +15,12 @@
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
 # This script is sourced, so root should be set. But let's be paranoid
Harald Hoyer fe48c9
 [ -z "$root" ] && root=$(getarg root=)
Harald Hoyer fe48c9
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
Harald Hoyer fe48c9
+if [ -z "$netroot" ]; then
Harald Hoyer fe48c9
+    for netroot in $(getargs netroot=); do
Harald Hoyer fe48c9
+        [ "${netroot%%:*}" = "iscsi" ] && break
Harald Hoyer fe48c9
+    done
Harald Hoyer fe48c9
+    [ "${netroot%%:*}" = "iscsi" ] || unset netroot
Harald Hoyer fe48c9
+fi
Harald Hoyer fe48c9
 [ -z "$iscsiroot" ] && iscsiroot=$(getarg iscsiroot=)
Harald Hoyer fe48c9
 [ -z "$iscsi_firmware" ] && getargbool 0 rd.iscsi.firmware -y iscsi_firmware && iscsi_firmware="1"
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
diff --git a/modules.d/95nbd/parse-nbdroot.sh b/modules.d/95nbd/parse-nbdroot.sh
Harald Hoyer fe48c9
index ec9e1f6..49c44b6 100755
Harald Hoyer fe48c9
--- a/modules.d/95nbd/parse-nbdroot.sh
Harald Hoyer fe48c9
+++ b/modules.d/95nbd/parse-nbdroot.sh
Harald Hoyer fe48c9
@@ -26,14 +26,16 @@ netroot_to_var() {
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
 # This script is sourced, so root should be set. But let's be paranoid
Harald Hoyer fe48c9
 [ -z "$root" ] && root=$(getarg root=)
Harald Hoyer fe48c9
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
Harald Hoyer fe48c9
+
Harald Hoyer fe48c9
+if [ -z "$netroot" ]; then
Harald Hoyer fe48c9
+    for netroot in $(getargs netroot=); do
Harald Hoyer fe48c9
+        [ "${netroot%%:*}" = "nbd" ] && break
Harald Hoyer fe48c9
+    done
Harald Hoyer fe48c9
+    [ "${netroot%%:*}" = "nbd" ] || unset netroot
Harald Hoyer fe48c9
+fi
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
 # Root takes precedence over netroot
Harald Hoyer fe48c9
 if [ "${root%%:*}" = "nbd" ] ; then
Harald Hoyer fe48c9
-
Harald Hoyer fe48c9
-    # Don't continue if root is ok
Harald Hoyer fe48c9
-    [ -n "$rootok" ] && return
Harald Hoyer fe48c9
-
Harald Hoyer fe48c9
     if [ -n "$netroot" ] ; then
Harald Hoyer fe48c9
         warn "root takes precedence over netroot. Ignoring netroot"
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
diff --git a/modules.d/95nfs/parse-nfsroot.sh b/modules.d/95nfs/parse-nfsroot.sh
Harald Hoyer fe48c9
index 283420a..9fc2a8c 100755
Harald Hoyer fe48c9
--- a/modules.d/95nfs/parse-nfsroot.sh
Harald Hoyer fe48c9
+++ b/modules.d/95nfs/parse-nfsroot.sh
Harald Hoyer fe48c9
@@ -27,18 +27,19 @@
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
 type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
-#Don't continue if root is ok
Harald Hoyer fe48c9
-[ -n "$rootok" ] && return
Harald Hoyer fe48c9
-
Harald Hoyer fe48c9
 # This script is sourced, so root should be set. But let's be paranoid
Harald Hoyer fe48c9
 [ -z "$root" ] && root=$(getarg root=)
Harald Hoyer fe48c9
-[ -z "$netroot" ] && netroot=$(getarg netroot=)
Harald Hoyer fe48c9
 [ -z "$nfsroot" ] && nfsroot=$(getarg nfsroot=)
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
+[ -n "$netroot" ] && oldnetroot="$netroot"
Harald Hoyer fe48c9
+
Harald Hoyer fe48c9
 # netroot= cmdline argument must be ignored, but must be used if
Harald Hoyer fe48c9
 # we're inside netroot to parse dhcp root-path
Harald Hoyer fe48c9
 if [ -n "$netroot" ] ; then
Harald Hoyer fe48c9
-    if [ "$netroot" = "$(getarg netroot=)" ] ; then
Harald Hoyer fe48c9
+    for n in $(getargs netroot=); do
Harald Hoyer fe48c9
+        [ "$n" = "$netroot" ] && break
Harald Hoyer fe48c9
+    done
Harald Hoyer fe48c9
+    if [ "$n" = "$netroot" ]; then
Harald Hoyer fe48c9
         warn "Ignoring netroot argument for NFS"
Harald Hoyer fe48c9
         netroot=$root
Harald Hoyer fe48c9
     fi
Harald Hoyer fe48c9
@@ -67,7 +68,14 @@ esac
Harald Hoyer fe48c9
 # Continue if nfs
Harald Hoyer fe48c9
 case "${netroot%%:*}" in
Harald Hoyer fe48c9
     nfs|nfs4|/dev/nfs);;
Harald Hoyer fe48c9
-    *) unset netroot; return;;
Harald Hoyer fe48c9
+    *)
Harald Hoyer fe48c9
+        if [ -n "$oldnetroot" ]; then
Harald Hoyer fe48c9
+            netroot="$oldnetroot"
Harald Hoyer fe48c9
+        else
Harald Hoyer fe48c9
+            unset netroot
Harald Hoyer fe48c9
+        fi
Harald Hoyer fe48c9
+        return
Harald Hoyer fe48c9
+        ;;
Harald Hoyer fe48c9
 esac
Harald Hoyer fe48c9
 
Harald Hoyer fe48c9
 # Check required arguments