You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.8 KiB
86 lines
2.8 KiB
#!/bin/bash |
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- |
|
# ex: ts=8 sw=4 sts=4 et filetype=sh |
|
|
|
check() { |
|
# If our prerequisites are not met, fail anyways. |
|
type -P rpcbind >/dev/null || type -P portmap >/dev/null || return 1 |
|
type -P rpc.statd mount.nfs mount.nfs4 umount >/dev/null || return 1 |
|
|
|
[[ $hostonly ]] || [[ $mount_needs ]] && { |
|
for fs in ${host_fs_types[@]}; do |
|
strstr "$fs" "\|nfs" && return 0 |
|
strstr "$fs" "\|nfs3" && return 0 |
|
strstr "$fs" "\|nfs4" && return 0 |
|
done |
|
return 255 |
|
} |
|
|
|
return 0 |
|
} |
|
|
|
depends() { |
|
# We depend on network modules being loaded |
|
echo network |
|
} |
|
|
|
installkernel() { |
|
instmods nfs sunrpc ipv6 |
|
} |
|
|
|
install() { |
|
local _i |
|
local _nsslibs |
|
type -P portmap >/dev/null && dracut_install portmap |
|
type -P rpcbind >/dev/null && dracut_install rpcbind |
|
|
|
dracut_install rpc.statd mount.nfs mount.nfs4 umount |
|
[ -f /etc/netconfig ] && inst_simple /etc/netconfig |
|
inst_simple /etc/services |
|
for i in /etc/nsswitch.conf /etc/rpc /etc/protocols /etc/idmapd.conf; do |
|
inst_simple $i |
|
done |
|
dracut_install rpc.idmapd |
|
dracut_install sed |
|
|
|
for _i in {"$libdir","$usrlibdir"}/libnfsidmap_nsswitch.so* \ |
|
{"$libdir","$usrlibdir"}/libnfsidmap/*.so \ |
|
{"$libdir","$usrlibdir"}/libnfsidmap*.so*; do |
|
[ -e "$_i" ] && dracut_install "$_i" |
|
done |
|
|
|
_nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' /etc/nsswitch.conf \ |
|
| tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|') |
|
_nsslibs=${_nsslibs#|} |
|
_nsslibs=${_nsslibs%|} |
|
|
|
for _i in {/usr,}$libdir/libnss*.so; do |
|
[[ -e $_i ]] || continue |
|
[[ "$_i" =~ $_nsslibs ]] || continue |
|
dracut_install "$_i" |
|
done |
|
|
|
inst_hook cmdline 90 "$moddir/parse-nfsroot.sh" |
|
inst_hook pre-udev 99 "$moddir/nfs-start-rpc.sh" |
|
inst_hook pre-pivot 99 "$moddir/nfsroot-cleanup.sh" |
|
inst "$moddir/nfsroot.sh" "/sbin/nfsroot" |
|
inst "$moddir/nfs-lib.sh" "/lib/nfs-lib.sh" |
|
mkdir -m 0755 -p "$initdir/var/lib/nfs/rpc_pipefs" |
|
mkdir -m 0755 -p "$initdir/var/lib/rpcbind" |
|
mkdir -m 0755 -p "$initdir/var/lib/nfs/statd/sm" |
|
|
|
# Rather than copy the passwd file in, just set a user for rpcbind |
|
# We'll save the state and restart the daemon from the root anyway |
|
egrep '^nfsnobody:' /etc/passwd >> "$initdir/etc/passwd" |
|
egrep '^rpc:' /etc/passwd >> "$initdir/etc/passwd" |
|
egrep '^rpcuser:' /etc/passwd >> "$initdir/etc/passwd" |
|
#type -P nologin >/dev/null && dracut_install nologin |
|
egrep '^nobody:' /etc/group >> "$initdir/etc/group" |
|
egrep '^rpc:' /etc/group >> "$initdir/etc/group" |
|
|
|
# rpc user needs to be able to write to this directory to save the warmstart |
|
# file |
|
chmod 770 "$initdir/var/lib/rpcbind" |
|
chown rpc.rpc "$initdir/var/lib/rpcbind" |
|
} |
|
|
|
|