[PATCH 33/33] nfs: Add ip=... and root=nfs... parameters to internal dracut

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

 



 cmdline

If the rootfs is an nfs mount, also know as nfsroot, add the correct
parameter to the dracut cmdline.

Signed-off-by: Thomas Renninger <trenn@xxxxxxx>
---
 modules.d/95nfs/module-setup.sh | 46 ++++++++++++++++++++++++++++++++++++++---
 1 file changed, 43 insertions(+), 3 deletions(-)

diff --git a/modules.d/95nfs/module-setup.sh b/modules.d/95nfs/module-setup.sh
index e1340b3..41c6ef7 100755
--- a/modules.d/95nfs/module-setup.sh
+++ b/modules.d/95nfs/module-setup.sh
@@ -14,7 +14,6 @@ check() {
         done
         return 255
     }
-
     return 0
 }
 
@@ -29,14 +28,56 @@ installkernel() {
     instmods nfs sunrpc ipv6 nfsv2 nfsv3 nfsv4 nfs_acl nfs_layout_nfsv41_files
 }
 
+cmdline() {
+    local nfs_device
+    local nfs_options
+    local nfs_root
+    local nfs_address
+    local lookup
+    local ifname
+
+    ### nfsroot= ###
+    nfs_device=$(findmnt -t nfs4 -n -o SOURCE /)
+    if [ -n "$nfs_device" ];then
+        nfs_root="root=nfs4:$nfs_device"
+    else
+        nfs_device=$(findmnt -t nfs -n -o SOURCE /)
+        [ -z "$nfs_device" ] && return
+        nfs_root="root=nfs:$nfs_device"
+    fi
+    nfs_options=$(findmnt -t nfs4,nfs -n -o OPTIONS /)
+    [ -n "$nfs_options" ] && nfs_root="$nfs_root:$nfs_options"
+    echo "$nfs_root"
+
+    ### ip= ###
+    if [[ $nfs_device = [0-9]*\.[0-9]*\.[0-9]*.[0-9]* ]] || [[ $nfs_device = \[.*\] ]]; then
+        nfs_address="$nfs_device"
+    else
+        lookup=$(host $(echo ${nfs_device%%:*})| head -n1)
+        nfs_address=${lookup##* }
+    fi
+    ifname=$(ip -o route get to $nfs_address | sed -n 's/.*dev \([^ ]*\).*/\1/p')
+    if [ -e /sys/class/net/$ifname/address ] ; then
+        ifmac=$(cat /sys/class/net/$ifname/address)
+        printf 'ifname=%s:%s ' ${ifname} ${ifmac}
+    fi
+
+    printf 'ip=%s:static\n' ${ifname}
+}
+
 # called by dracut
 install() {
     local _i
     local _nsslibs
     inst_multiple -o portmap rpcbind rpc.statd mount.nfs \
-        mount.nfs4 umount rpc.idmapd sed /etc/netconfig
+        mount.nfs4 umount rpc.idmapd sed /etc/netconfig host sed
     inst_multiple /etc/services /etc/nsswitch.conf /etc/rpc /etc/protocols /etc/idmapd.conf
 
+    if [[ $hostonly_cmdline == "yes" ]]; then
+        local _netconf="$(cmdline)"
+        [[ $_netconf ]] && printf "%s\n" "$_netconf" >> "${initdir}/etc/cmdline.d/95nfs.conf"
+    fi
+
     if [ -f /lib/modprobe.d/nfs.conf ]; then
         inst_multiple /lib/modprobe.d/nfs.conf
     else
@@ -75,4 +116,3 @@ install() {
         && chown rpc.rpc "$initdir/var/lib/rpcbind"
     dracut_need_initqueue
 }
-
-- 
1.8.5.2

--
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