From: Harald Hoyer Date: Wed, 4 Sep 2013 07:45:04 +0000 (+0200) Subject: Rewrite "rootok" and "netroot" logic X-Git-Tag: 033~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de74e1ef41148f72b572252eaa5a8e4859cfa929;p=thirdparty%2Fdracut.git Rewrite "rootok" and "netroot" logic 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. --- diff --git a/modules.d/40network/dhcp-root.sh b/modules.d/40network/dhcp-root.sh index 85c7f08ab..f2a04e07a 100755 --- a/modules.d/40network/dhcp-root.sh +++ b/modules.d/40network/dhcp-root.sh @@ -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 diff --git a/modules.d/40network/netroot.sh b/modules.d/40network/netroot.sh index daeb14cea..8f6945fe8 100755 --- a/modules.d/40network/netroot.sh +++ b/modules.d/40network/netroot.sh @@ -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 diff --git a/modules.d/95cifs/parse-cifsroot.sh b/modules.d/95cifs/parse-cifsroot.sh index f376b166b..52d5809dd 100755 --- a/modules.d/95cifs/parse-cifsroot.sh +++ b/modules.d/95cifs/parse-cifsroot.sh @@ -14,22 +14,20 @@ 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 diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh index e83ef32ba..0c8b524b6 100755 --- a/modules.d/95iscsi/parse-iscsiroot.sh +++ b/modules.d/95iscsi/parse-iscsiroot.sh @@ -15,7 +15,12 @@ # 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" diff --git a/modules.d/95nbd/parse-nbdroot.sh b/modules.d/95nbd/parse-nbdroot.sh index ec9e1f664..49c44b6f3 100755 --- a/modules.d/95nbd/parse-nbdroot.sh +++ b/modules.d/95nbd/parse-nbdroot.sh @@ -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" diff --git a/modules.d/95nfs/parse-nfsroot.sh b/modules.d/95nfs/parse-nfsroot.sh index 283420ad8..9fc2a8c32 100755 --- a/modules.d/95nfs/parse-nfsroot.sh +++ b/modules.d/95nfs/parse-nfsroot.sh @@ -27,18 +27,19 @@ 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