X-Git-Url: https://git.pld-linux.org/?a=blobdiff_plain;f=nfsfs.init;h=d765d5b909ae38ec6d50e8d5cf9152625476662e;hb=dc4877f3076ae83af079dbf83d0d6990168051b9;hp=b1bf23e01663c7082a0235042cd1f58b2401b872;hpb=9034116f9e083b839247252a982ff9fcfbe9fc99;p=packages%2Fnfs-utils.git diff --git a/nfsfs.init b/nfsfs.init index b1bf23e..d765d5b 100644 --- a/nfsfs.init +++ b/nfsfs.init @@ -1,74 +1,127 @@ #!/bin/sh # -# nfsfs Mount NFS filesystems. +# nfsfs Mount NFS filesystems. # -# Version: @(#) /etc/init.d/skeleton 1.01 26-Oct-1993 -# -# Author: Miquel van Smoorenburg, -# -# chkconfig: 345 15 88 -# description: Mounts and unmounts all Network File System (NFS) \ -# mount points. -# -# $Id$ +# chkconfig: 345 16 80 +# description: Mounts and unmounts all Network File System (NFS) \ +# mount points. # Source networking configuration. if [ ! -f /etc/sysconfig/network ]; then - exit 0 + exit 0 fi # Source function library. . /etc/rc.d/init.d/functions +# Get network config . /etc/sysconfig/network +# Get service config +[ -f /etc/sysconfig/nfsfs ] && . /etc/sysconfig/nfsfs +[ -f /etc/sysconfig/nfslock ] && . /etc/sysconfig/nfslock + # Check that networking is up. -if is_no "${NETWORKING}"; then - msg_Network_Down nfsfs - exit 1 +if is_yes "${NETWORKING}"; then + if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then + msg_network_down nfsfs + exit 1 + fi +else + exit 0 fi -# See how we were called. -case "$1" in - start) - show "Mounting NFS filesystems" - busy - mount -a -t nfs - deltext - ok +if [ "$1" != "stop" ]; then + check_portmapper || { nls "Error: portmap isn't running" && exit 0; } +fi + +if [ -z "$NFSUMOUNT_IGNORE" ]; then + NFSUMOUNT_IGNORE="/ /usr" +fi + +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) +} + +stop() { + if [ -f /proc/mounts ]; then + fsfile="/proc/mounts" + else + fsfile="/etc/mtab" + fi + show "Unmounting NFS filesystems" busy - umount -a -t nfs - deltext + retry=3 + 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 -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \ + $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile` + sleep 2 + 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 rm -f /var/lock/subsys/nfsfs +} + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + reload|force-reload) + mount -a -t nfs,nfs4 ;; status) - if [ -f /proc/mounts ] ; then + if [ -f /proc/mounts ]; then echo "Configured NFS mountpoints:" grep -v '^#' /etc/fstab | \ - awk '{ if ($3 ~ /^nfs$/ && $4 !~ /noauto/) print $2}' + awk '{ if ($3 ~ /^nfs(4$|$)/ && $4 !~ /noauto/) print $2}' echo "Active NFS mountpoints:" grep -v '^#' /proc/mounts | \ - awk '{ if ($3 ~ /^nfs$/ && $4 !~ /noauto/) print $2}' + awk '{ if ($3 ~ /^nfs(4$|$)/ && $4 !~ /noauto/) print $2}' else echo "/proc filesystem unavailable" fi ;; - restart) - $0 stop - $0 start - ;; - reload) - mount -a -t nfs - ;; *) - msg_Usage "$0 {start|stop|restart|reload|status}" - exit 1 + msg_usage "$0 {start|stop|restart|reload|force-reload|status}" + exit 3 esac exit 0 -