summaryrefslogtreecommitdiffstats
path: root/modules.d/95nfs/nfsroot.sh
diff options
context:
space:
mode:
Diffstat (limited to 'modules.d/95nfs/nfsroot.sh')
-rwxr-xr-xmodules.d/95nfs/nfsroot.sh30
1 files changed, 30 insertions, 0 deletions
diff --git a/modules.d/95nfs/nfsroot.sh b/modules.d/95nfs/nfsroot.sh
new file mode 100755
index 0000000..794e0d8
--- /dev/null
+++ b/modules.d/95nfs/nfsroot.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh
+. /lib/nfs-lib.sh
+
+[ "$#" = 3 ] || exit 1
+
+# root is in the form root=nfs[4]:[server:]path[:options], either from
+# cmdline or dhcp root-path
+netif="$1"
+root="$2"
+NEWROOT="$3"
+
+nfs_to_var "$root" "$netif"
+[ -z "$server" ] && die "Required parameter 'server' is missing"
+
+mount_nfs "$root" "$NEWROOT" "$netif" && {
+ [ -e /dev/root ] || ln -s null /dev/root
+ [ -e /dev/nfs ] || ln -s null /dev/nfs
+}
+
+[ -f "$NEWROOT"/etc/fstab ] && cat "$NEWROOT"/etc/fstab > /dev/null
+
+# inject new exit_if_exists
+# shellcheck disable=SC2016
+echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm -- "$job"' > "$hookdir"/initqueue/nfs.sh
+# force udevsettle to break
+: > "$hookdir"/initqueue/work
+
+need_shutdown