]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - etc/redhat/nfs.init
fix fd bug
[nfs-utils.git] / etc / redhat / nfs.init
index 5a40f4f8f454b5f9717f0e80a41a705a142febee..1ac42136092028f43a6fe3adc9e8ca70ff639452 100755 (executable)
@@ -8,6 +8,7 @@
 #              networks. This service provides NFS server functionality, \
 #              which is configured via the /etc/exports file.
 # probe: true
+# config: /etc/sysconfig/nfs
 
 # Source function library.
 . /etc/rc.d/init.d/functions
@@ -27,33 +28,109 @@ fi
 [ -x /usr/sbin/exportfs ] || exit 0
 [ -s /etc/exports ] || exit 0
 
-# Number of servers to be started up by default
-RPCNFSDCOUNT=8
-# Default to NFS version 3.
-RPCMOUNTDOPTS=""
+# Check for and source configuration file otherwise set defaults
+# TUNE_QUEUE: controls whether to up the size of input queues
+[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
+
+[ -z "$MOUNTD_NFS_V2" ] && MOUNTD_NFS_V2=auto
+[ -z "$MOUNTD_NFS_V3" ] && MOUNTD_NFS_V3=auto
+
+# Number of servers to be started by default
+[ -z "$NFSDCOUNT" ] && NFSDCOUNT=8
+
+# Remote quota server
+[ -z "$RQUOTAD" ] && RQUOTAD=`type -path rpc.rquotad`
+
+# Get the initial values for the input sock queues
+# at the time of running the script.
+if [ "$TUNE_QUEUE" = "yes" ]; then
+    RMEM_DEFAULT=`/sbin/sysctl -n net.core.rmem_default`
+    RMEM_MAX=`/sbin/sysctl -n net.core.rmem_max`
+    # 256kb recommended minimum size based on SPECsfs NFS benchmarks
+    [ -z "$NFS_QS" ] && NFS_QS=262144
+fi
+
 
 # See how we were called.
 case "$1" in
   start)
+       if [ -d /proc/fs/nfsd -a "$MOUNT_NFSD" = "yes" ] ; then
+           /bin/mount -t nfsd nfsd /proc/fs/nfsd
+       fi
        # Start daemons.
+       # Apply input queue increase for nfs server
+       if [ "$TUNE_QUEUE" = "yes" ]; then
+           /sbin/sysctl -w net.core.rmem_default=$NFSD_QS >/dev/null 2>&1
+           /sbin/sysctl -w net.core.rmem_max=$NFSD_QS >/dev/null 2>&1
+       fi
        action "Starting NFS services: " /usr/sbin/exportfs -r
-       echo -n "Starting NFS quotas: "
-       daemon rpc.rquotad
-       echo
+       if [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; then
+           echo -n "Starting NFS quotas: "
+           daemon rpc.rquotad
+           echo
+       fi
        echo -n "Starting NFS daemon: "
-       daemon rpc.nfsd $RPCNFSDCOUNT
+       daemon rpc.nfsd $NFSDCOUNT
        echo
 
-       # Let's see if we support NFS version 3.
-       /usr/sbin/rpcinfo -u localhost nfs 3 &>/dev/null
-       if [ $? -ne 0 ]; then
-               RPCMOUNTDOPTS="--no-nfs-version 3"
-       fi
+       [ -n "$MOUNTD_PORT" ] \
+       && MOUNTD_OPTIONS="$MOUNTD_OPTIONS -p $MOUNTD_PORT"
+       [ "$MOUNTD_TCP" = "no" -o "$MOUNTD_TCP" = "NO" ] \
+       && MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-tcp"
+
+       case $MOUNTD_NFS_V2 in
+       auto|AUTO)
+           # Let's see if we support NFS version 2.
+           ClearAddr=
+           if [ -f /proc/net/rpc/auth.unix.ip/channel ] ; then
+              if   grep -s 127.0.0.1 /proc/net/rpc/auth.unix.ip/content > /dev/null ; then
+                   : address already known
+              else
+                    echo nfsd 127.0.0.1 2147483647 localhost > /proc/net/rpc/auth.unix.ip/channel
+                   ClearAddr=yes
+             fi
+           fi
+           /usr/sbin/rpcinfo -u localhost nfs 2 &>/dev/null
+           if [ $? -ne 0 ]; then
+               MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-nfs-version 2"
+           fi
+           if [ -n "$ClearAddr" ]; then
+                  echo nfsd 127.0.0.1 1  > /proc/net/rpc/auth.unix.ip/channel
+           fi
+           ;;
+       no|NO)
+           MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-nfs-version 2"
+           ;;
+       yes|YES)
+           MOUNTD_OPTIONS="$MOUNTD_OPTIONS --nfs-version 2"
+           ;;
+       esac
+
+       case $MOUNTD_NFS_V3 in
+       auto|AUTO)
+           # Let's see if we support NFS version 3.
+           /usr/sbin/rpcinfo -u localhost nfs 3 &>/dev/null
+           if [ $? -ne 0 ]; then
+               MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-nfs-version 3"
+           fi
+           ;;
+       no|NO)
+           MOUNTD_OPTIONS="$MOUNTD_OPTIONS --no-nfs-version 3"
+           ;;
+       yes|YES)
+           MOUNTD_OPTIONS="$MOUNTD_OPTIONS --nfs-version 3"
+           ;;
+       esac
 
        echo -n "Starting NFS mountd: "
-       daemon rpc.mountd $RPCMOUNTDOPTS
+       daemon rpc.mountd $MOUNTD_OPTIONS
        echo
        touch /var/lock/subsys/nfs
+       # reset input queue for rest of network services
+       if [ "$TUNE_QUEUE" = "yes" ]; then
+           /sbin/sysctl -w net.core.rmem_default=$RMEM_DEFAULT >/dev/null 2>&1
+           /sbin/sysctl -w net.core.rmem_max=$RMEM_MAX >/dev/null 2>&1
+       fi
        ;;
   stop)
        # Stop daemons.
@@ -63,18 +140,25 @@ case "$1" in
        echo -n "Shutting down NFS daemon: "
        killproc nfsd
        echo
-       echo -n "Shutting down NFS quotas: "
-       killproc rpc.rquotad
-       echo
+       if [ -n "$RQUOTAD" ]; then
+               echo -n "Shutting down NFS quotas: "
+               killproc rpc.rquotad
+               echo
+       fi
        # Do it the last so that clients can still access the server
        # when the server is running.
        action "Shutting down NFS services: " /usr/sbin/exportfs -au
+       if [ -d /proc/fs/nfsd -a "$MOUNT_NFSD" = "yes" ] ; then
+               /bin/umount /proc/fs/nfsd
+       fi
        rm -f /var/lock/subsys/nfs
        ;;
   status)
        status rpc.mountd
        status nfsd
-       status rpc.rquotad
+       if [ -n "$RQUOTAD" ]; then
+               status rpc.rquotad
+       fi
        ;;
   restart)
        $0 stop