Now that netroot is serialized and only one interface can be configured at a time, netif is almost completely unneeded by the netroot handlers. The remaining hold out is nfsroot, which uses it to get the command line overrides and the DHCP root information. By adding that information to the calling convention, we can get rid of netif, and prepare for the next steps of moving parsing and validation into the handlers themselves. --- modules.d/40network/netroot | 16 ++++++++++------ modules.d/95iscsi/iscsiroot | 7 +++---- modules.d/95nbd/nbdroot | 9 ++++----- modules.d/95nfs/nfsroot | 20 ++++++++------------ 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/modules.d/40network/netroot b/modules.d/40network/netroot index 645bbba..c9ebf4c 100755 --- a/modules.d/40network/netroot +++ b/modules.d/40network/netroot @@ -44,15 +44,20 @@ done netif=$1 [ -e "/tmp/net.bootdev" ] && read netif < /tmp/net.bootdev +# Load command line overrides to get the server override +[ -e /tmp/net.$netif.override ] && . /tmp/net.$netif.override +[ -n "$srv" ] && server_id=$srv + +# Load dhcp options and get the first fallback to the server +[ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts +[ -z "$server_id" ] && server_id=$new_dhcp_server_identifier + # Figure out the handler for root=dhcp by recalling all netroot cmdline # handlers if [ "$netroot" = "dhcp" ] ; then # Unset root so we can check later unset root - # Load dhcp options - [ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts - # If we have a specific bootdev with no dhcpoptions or empty root-path, # we die. Otherwise we just warn if [ -z "$new_root_path" ] ; then @@ -92,9 +97,8 @@ done [ -e /tmp/net.$netif.hostname ] && . /tmp/net.$netif.hostname [ -e /tmp/net.$netif.resolv.conf ] && cp -f /tmp/net.$netif.resolv.conf /etc/resolv.conf -# Run the handler; don't store the root, it may change from device to device -# XXX other variables to export? -if $handler $netif $netroot $NEWROOT; then +# Run the handler to mount/login into the root device +if $handler "$netroot" "$server_id" "$new_root_path" $NEWROOT; then # Network rootfs mount successful for iface in $IFACES ; do [ -f /tmp/dhclient.$iface.lease ] && cp /tmp/dhclient.$iface.lease /tmp/net.$iface.lease diff --git a/modules.d/95iscsi/iscsiroot b/modules.d/95iscsi/iscsiroot index 2b041cc..923141c 100755 --- a/modules.d/95iscsi/iscsiroot +++ b/modules.d/95iscsi/iscsiroot @@ -11,14 +11,13 @@ PATH=$PATH:/sbin:/usr/sbin if getarg rdnetdebug; then - exec > /tmp/iscsiroot.$1.$$.out - exec 2>> /tmp/iscsiroot.$1.$$.out + exec > /tmp/iscsiroot.$$.out + exec 2>> /tmp/iscsiroot.$$.out set -x fi # root is in the form root=iscsi:[<servername>]:[<protocol>]:[<port>]:[<LUN>]:<targetname> -netif="$1" -root="$2" +root="$1" # read static conf settings for conf in conf/conf.d/*; do diff --git a/modules.d/95nbd/nbdroot b/modules.d/95nbd/nbdroot index c7f24e8..f76211c 100755 --- a/modules.d/95nbd/nbdroot +++ b/modules.d/95nbd/nbdroot @@ -5,15 +5,14 @@ PATH=$PATH:/sbin:/usr/sbin if getarg rdnetdebug; then - exec > /tmp/nbdroot.$1.$$.out - exec 2>> /tmp/nbdroot.$1.$$.out + exec > /tmp/nbdroot.$$.out + exec 2>> /tmp/nbdroot.$$.out set -x fi # root is in the form root=nbd:srv:port[:fstype[:rootflags[:nbdopts]]] -netif="$1" -root="$2" -NEWROOT="$3" +root="$1" +NEWROOT="$4" # If it's not nbd we don't continue [ "${root%%:*}" = "nbd" ] || return diff --git a/modules.d/95nfs/nfsroot b/modules.d/95nfs/nfsroot index f005378..847ec60 100755 --- a/modules.d/95nfs/nfsroot +++ b/modules.d/95nfs/nfsroot @@ -43,16 +43,17 @@ root_to_var() { PATH=$PATH:/sbin:/usr/sbin if getarg rdnetdebug ; then - exec > /tmp/nfsroot.$1.$$.out - exec 2>> /tmp/nfsroot.$1.$$.out + exec > /tmp/nfsroot.$$.out + exec 2>> /tmp/nfsroot.$$.out set -x fi # root is in the form root=nfs[4]:[server:]path[:options], either from # cmdline or dhcp root-path -netif="$1" -root="$2" -NEWROOT="$3" +root="$1" +server_id=$2 +root_path=$3 +NEWROOT="$4" # Continue if nfs prefix case "${root%%:*}" in @@ -62,20 +63,15 @@ esac root_to_var $root -#Load other data that might provide info -[ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override -[ -f /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts - #Empty path means try dhcp root-path, this is ok here since parse-nfsroot.sh #already takes care of nfs:... formatted root-path -[ -z "$path" ] && root_to_var $nfs:$new_root_path +[ -z "$path" ] && root_to_var $nfs:$root_path #Empty path defaults to "/tftpboot/%s" only in nfsroot.txt legacy mode [ -z "$path" ] && [ "$(getarg root=)" = "/dev/nfs" ] && path="/tftpboot/%s" if [ -z "$server" ] ; then - # XXX new_dhcp_next_server is unconfirmed this is an assumption - for var in $srv $new_dhcp_server_identifier $new_dhcp_next_server $new_root_path '' ; do + for var in $server_id $root_path '' ; do [ -n "$var" ] && server=$var && break; done -- 1.6.0.6 -- To unsubscribe from this list: send the line "unsubscribe initramfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html