#!/sbin/runscript # Copyright 1999-2003 Gentoo Technologies, Inc. # Distributed under the terms of the GNU General Public License, v2 or later # $Header: /var/cvsroot/gentoo-x86/net-fs/nfs-utils/files/nfs,v 1.6 2003/02/14 23:00:05 vapier Exp $ #--------------------------------------------------------------------------- # This script starts/stops the following # rpc.statd if necessary (also checked by init.d/nfsmount) # rpd.rquotad # rpd.nfsd # rpc.mountd #--------------------------------------------------------------------------- # NB: Config is in /etc/conf.d/nfs opts="start stop restart reload" # This variable is used for controlling whether or not to run exportfs -ua; # see stop() for more information RESTARTING=no depend() { need net portmap } start_statd() { # Don't start rpc.statd if already started by init.d/nfsmount killall -0 rpc.statd &>/dev/null && return 0 ebegin "Starting NFS statd" start-stop-daemon --start --quiet --exec /sbin/rpc.statd \ --$RPCSTATDOPTS 1>&2 eend $? "Error starting NFS statd" } stop_statd() { # Don't stop rpc.statd if it's in use by init.d/nfsmount. mount -t nfs | grep -q . && return 0 # Make sure it's actually running killall -0 rpc.statd &>/dev/null || return 0 # Okay, all tests passed, stop rpc.statd ebegin "Stopping NFS statd" start-stop-daemon --stop --quiet --exec /sbin/rpc.statd 1>&2 eend $? "Error stopping NFS statd" } start() { start_statd # Exportfs likes to hang if networking isn't working. # If that's the case, then try to kill it so the # bootup process can continue. if grep -q '^/' /etc/exports &>/dev/null; then ebegin "Exporting NFS directories" /sbin/exportfs -r 1>&2 & ( sleep 5; kill -9 $! &>/dev/null & ) wait eend $? "Error exporting NFS directories" fi ebegin "Starting NFS rquotad" start-stop-daemon --start --quiet --exec /sbin/rpc.rquotad \ --$RPCRQUOTADOPTS 1>&2 eend $? "Error starting NFS rquotad" ebegin "Starting NFS daemon" start-stop-daemon --start --quiet --exec \ /sbin/rpc.nfsd -- $RPCNFSDCOUNT 1>&2 eend $? "Error starting NFS daemon" # Check if we support NFSv3 ebegin "Starting NFS mountd" rpcinfo -u localhost nfs 3 &>/dev/null || \ RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 3" start-stop-daemon --start --quiet --exec \ /sbin/rpc.mountd -- $RPCMOUNTDOPTS 1>&2 eend $? "Error starting NFS mountd" } stop() { # Don't check NFSSERVER variable since it might have changed, # instead use --oknodo to smooth things over ebegin "Stopping NFS mountd" start-stop-daemon --stop --quiet --oknodo \ --exec /sbin/rpc.mountd 1>&2 eend $? "Error stopping NFS mountd" ebegin "Stopping NFS daemon" start-stop-daemon --stop --quiet --oknodo \ --name nfsd --user root --signal 2 1>&2 eend $? "Error stopping NFS daemon" ebegin "Stopping NFS rquotad" start-stop-daemon --stop --quiet --oknodo \ --exec /sbin/rpc.rquotad 1>&2 eend $? "Error stopping NFS rquotad" # When restarting the NFS server, running "exportfs -ua" probably # isn't what the user wants. Running it causes all entries listed # in xtab to be removed from the kernel export tables, and the # xtab file is cleared. This effectively shuts down all NFS # activity, leaving all clients holding stale NFS filehandles, # *even* when the NFS server has restarted. # # That's what you would want if you were shutting down the NFS # server for good, or for a long period of time, but not when the # NFS server will be running again in short order. In this case, # then "exportfs -r" will reread the xtab, and all the current # clients will be able to resume NFS activity, *without* needing # to umount/(re)mount the filesystem. if [ "$RESTARTING" = no ]; then ebegin "Unexporting NFS directories" # Exportfs likes to hang if networking isn't working. # If that's the case, then try to kill it so the # bootup process can continue. /sbin/exportfs -ua 1>&2 & ( sleep 5; kill -9 $! &>/dev/null & ) wait eend $? "Error unexporting NFS directories" fi stop_statd } reload() { # Exportfs likes to hang if networking isn't working. # If that's the case, then try to kill it so the # bootup process can continue. ebegin "Reloading /etc/exports" /sbin/exportfs -r 1>&2 & ( sleep 5; kill -9 $! &>/dev/null & ) wait eend $? "Error exporting NFS directories" } restart() { # See long comment in stop() regarding RESTARTING and exportfs -ua RESTARTING=yes svc_stop svc_start }