Re: 13 NFS syntax variations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Warren Togami wrote:
I ask the contributors again, please consider that we should reduce redundant ways of configuring dracut as much as possible. Please consider that this code will ship in various products for the next decade. Is it really a good idea to confuse people by having documentation and examples floating around be in several different formats? Sure we developers can understand 13 different syntax variations, but this is a lot more complicated to users trying to understand examples they find.

Here seems to be every possible dracut NFS syntax variation.

Group A
root=[<server-ip>:]<root-dir>[:<nfs-options>]
root=nfs:[<server-ip>:]<root-dir>[:<nfs-options>]
root=nfs4:[<server-ip>:]<root-dir>[:<nfs-options>]

Group B
netroot=[<server-ip>:]<root-dir>[:<nfs-options>]
netroot=nfs:[<server-ip>:]<root-dir>[:<nfs-options>]
netroot=nfs4:[<server-ip>:]<root-dir>[:<nfs-options>]

Group C
root=dhcp
    DHCP root-path=[<server-ip>:]<root-dir>[:<nfs-options>]
    DHCP root-path=nfs:[<server-ip>:]<root-dir>[:<nfs-options>]
    DHCP root-path=nfs4:[<server-ip>:]<root-dir>[:<nfs-options>]

Legacy nfsroot.txt
root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]

Legacy Variations
root=/dev/nfs4 nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
root=nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
root=nfs4 nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]

DHCP Fallbacks
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/filesystems/nfsroot.txt Seewer's code seems to implement various DHCP-derived fallbacks as documented from this ancient method. I suppose this is OK, except:

* The fallbacks should kick-in only if server-ip is blank from root= or DHCP root-path.

Yes. But (sorry if I seem to be slow) I don't see the difference between
my code and your statement. It does exactly that. If server-ip is missing
from root, nfsroot or dhcp root-path it does the fallback.
54   If the `nfsroot' parameter is NOT given on the command line,
55   the default "/tftpboot/%s" will be used.

* We should do this only in the case where root=/dev/nfs, or not do it at all. A hard-coded "/tftpboot" root-dir override in the modern syntaxes makes no sense.

Good point, agreed.


* We should however support the %s substitution in exactly the same way as the kernel. Looking at our current code though, it seems we don't. The docs don't do hostname.

Removing hostname isn't a problem, patch below

What should we cut?

1) The most obvious to cut are the Legacy Variations.  Why should
dracut invent three new syntaxes and immediately declare them Legacy? Removing these would be the simplest.

If I understand David Dillow correctly they were meant as shortcuts.
Removing them doesn't break anything, so I agree.


2) Harald and I think we should cut Group B. The netroot= syntax is necessary only for remote block device protocols like iscsci and nbd when you want to use LVM or crypto on those block devices. For NFS it is only redundant.

Reduntant: Yes. But it keeps the argument scheme consistent. And dracut
is allowed to introduce new syntaxes if they make sense.

Removing these would be a bit complex surgery because netroot= is tightly ingrained into the current code.

Not true, see patch below.

3) I personally think we should cut the "nfs:" prefixed syntaxes from Group A, B and C because they have no precedent and we're better off with fewer variations. Others have disagreed though.

See above, I like consistency. But that's just my opinion.

Regards,
Philippe

diff --git a/modules.d/95nfs/nfsroot b/modules.d/95nfs/nfsroot
index 46c2b42..5f52457 100755
--- a/modules.d/95nfs/nfsroot
+++ b/modules.d/95nfs/nfsroot
@@ -109,9 +109,7 @@ if [ "${path#*%s}" != "$path" ]; then
    ip=$(ip -o -f inet addr show $netif)
    ip=${ip%%/*}
    ip=${ip##* }
-    read node < /proc/sys/kernel/hostname
-    [ "$node" = "(none)" ] && node=$ip
-    path=${path%%%s*}$node${path#*%s}
+    path=${path%%%s*}$ip${path#*%s}
fi

# Look through the options and remove rw/locking options
diff --git a/modules.d/95nfs/parse-nfsroot.sh b/modules.d/95nfs/parse-nfsroot.sh
index 5413ad5..55fbc50 100755
--- a/modules.d/95nfs/parse-nfsroot.sh
+++ b/modules.d/95nfs/parse-nfsroot.sh
@@ -71,23 +71,23 @@ netroot_to_var() {
[ -z "$netroot" ] && netroot=$(getarg netroot=)
[ -z "$nfsroot" ] && nfsroot=$(getarg nfsroot=)

+# 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
+	warn "Ignoring netroot argument for NFS"
+	netroot=$root
+    fi
+else
+    netroot=$root;
+fi
+
# Handle old style <server-ip>:/<path
case "$netroot" in
    [0-9]*:/*|[0-9]*\.[0-9]*\.[0-9]*[!:]|/*)
       netroot=nfs:$netroot;;
esac

-# Root takes precedence over netroot
-case "${root%%:*}" in
-    nfs|nfs4|/dev/nfs|/dev/nfs4)
-    if [ -n "$netroot" ] ; then
-	warn "root takes precedence over netroot. Ignoring netroot"
-
-    fi
-    netroot=$root
-    ;;
-esac
-
# If it's not empty or nfs we don't continue
case "${netroot%%:*}" in
    ''|nfs|nfs4|/dev/nfs|/dev/nfs4);;
--
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

[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux