X-Git-Url: https://git.pld-linux.org/?a=blobdiff_plain;f=nfsfs.init;h=d765d5b909ae38ec6d50e8d5cf9152625476662e;hb=dc4877f3076ae83af079dbf83d0d6990168051b9;hp=8eaf7a9005edbc2e173a477e9bbe14021386f766;hpb=1fbf8b8724d6703b644429a968e19f2be11c48d8;p=packages%2Fnfs-utils.git diff --git a/nfsfs.init b/nfsfs.init index 8eaf7a9..d765d5b 100644 --- a/nfsfs.init +++ b/nfsfs.init @@ -2,15 +2,9 @@ # # nfsfs Mount NFS filesystems. # -# Version: @(#) /etc/init.d/skeleton 1.01 26-Oct-1993 -# -# Author: Miquel van Smoorenburg, -# -# chkconfig: 345 15 83 +# chkconfig: 345 16 80 # description: Mounts and unmounts all Network File System (NFS) \ # mount points. -# -# $Id$ # Source networking configuration. if [ ! -f /etc/sysconfig/network ]; then @@ -37,41 +31,30 @@ else exit 0 fi -if [ -x /sbin/pidof ] && [ "$1" != "stop" ]; then - [ -z "`/sbin/pidof portmap`" ] && nls "Error: portmap isn't running" && exit 0 +if [ "$1" != "stop" ]; then + check_portmapper || { nls "Error: portmap isn't running" && exit 0; } fi -start() { - if [ ! -f /var/lock/subsys/nfsfs ]; then - if ! grep -q rpc_pipefs /proc/mounts ; then - modprobe -s sunrpc > /dev/null 2>&1 - run_cmd "Mounting /var/lib/nfs/rpc_pipefs filesystem" \ - mount -t rpc_pipefs rpc_pipefs /var/lib/nfs/rpc_pipefs - fi - - # Set the ports lockd should listen on - if [ -n "$LOCKD_TCPPORT" ]; then - /sbin/sysctl -w fs.nfs.nlm_tcpport=$LOCKD_TCPPORT >/dev/null 2>&1 - fi - if [ -n "$LOCKD_UDPPORT" ]; then - /sbin/sysctl -w fs.nfs.nlm_udpport=$LOCKD_UDPPORT >/dev/null 2>&1 - fi - - # Special case /usr first - if ! awk '{ if ($2 == "/usr" && $3 ~ /^nfs(4$|$)/ && $4 !~ /noauto/) exit 1}' /etc/fstab ; then - run_cmd "Mounting /usr filesystem" mount /usr - # In case of /usr over NFS idmapd, gssd and lockd may not start - # check if they're running and try to start them if not - /sbin/service idmapd status >/dev/null || /sbin/service idmapd start - /sbin/service gssd status >/dev/null || /sbin/service gssd start - /sbin/service nfslock status >/dev/null || /sbin/service nfslock start - fi - run_cmd "Mounting NFS filesystems" mount -a -t nfs,nfs4 - touch /var/lock/subsys/nfsfs +if [ -z "$NFSUMOUNT_IGNORE" ]; then + NFSUMOUNT_IGNORE="/ /usr" +fi - else +start() { + if [ -f /var/lock/subsys/nfsfs ]; then msg_already_running "NFSFS" + return + fi + + # Set the ports lockd should listen on + if [ -n "$LOCKD_TCPPORT" ]; then + /sbin/sysctl -w fs.nfs.nlm_tcpport=$LOCKD_TCPPORT >/dev/null 2>&1 fi + if [ -n "$LOCKD_UDPPORT" ]; then + /sbin/sysctl -w fs.nfs.nlm_udpport=$LOCKD_UDPPORT >/dev/null 2>&1 + fi + + run_cmd "Mounting NFS filesystems" mount -a -t nfs,nfs4 + touch /var/lock/subsys/nfsfs } stop() { @@ -84,13 +67,25 @@ stop() { show "Unmounting NFS filesystems" busy retry=3 - remaining=$(awk '$3 ~ /^nfs(4$|$)/ {print $2}' $fsfile) + remaining=$(awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \ + $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile) while [ -n "$remaining" -a $retry -gt 0 ]; do - fuser -msk -TERM `awk '$3 ~ /^nfs(4$|$)/ {print $2}' < $fsfile` + fuser -msk -TERM `awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \ + $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile` sleep 2 - fuser -msk -KILL `awk '$3 ~ /^nfs(4$|$)/ {print $2}' < $fsfile` - umount -a -f -t nfs,nfs4 - remaining=$(awk '$3 ~ /^nfs(4$|$)/ {print $2}' $fsfile) + fuser -msk -KILL `awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \ + $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile` + # Sort filesystems to unmount in reverse order + rem="" + for r in $(awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \ + $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile) ; do + rem="$r $rem" + done + for fs in $rem ; do + umount $fs + done + remaining=$(awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \ + $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile) retry=$(($retry-1)) done ok @@ -105,6 +100,13 @@ case "$1" in stop) stop ;; + restart) + stop + start + ;; + reload|force-reload) + mount -a -t nfs,nfs4 + ;; status) if [ -f /proc/mounts ]; then echo "Configured NFS mountpoints:" @@ -117,13 +119,6 @@ case "$1" in echo "/proc filesystem unavailable" fi ;; - restart) - stop - start - ;; - reload|force-reload) - mount -a -t nfs,nfs4 - ;; *) msg_usage "$0 {start|stop|restart|reload|force-reload|status}" exit 3