]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - debian/nfs-kernel-server.init
Imported Debian patch 1.0.9-3
[nfs-utils.git] / debian / nfs-kernel-server.init
old mode 100755 (executable)
new mode 100644 (file)
index 0894f20..52913ae
@@ -1,50 +1,92 @@
 #!/bin/sh
-#
-# nfs-kernel-server
-#              This shell script takes care of starting and stopping
-#               the kernel-mode NFS server.
-#
-# chkconfig: 345 60 20
-# description: NFS is a popular protocol for file sharing across TCP/IP \
-#              networks. This service provides NFS server functionality, \
-#              which is configured via the /etc/exports file.
-#
-
-set -e
+
+### BEGIN INIT INFO
+# Provides:          nfs-kernel-server
+# Required-Start:    $portmap $time
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Kernel NFS server support
+# Description:       NFS is a popular protocol for file sharing across
+#                   TCP/IP networks. This service provides NFS server
+#                    functionality, which is configured via the
+#                    /etc/exports file.
+### END INIT INFO
 
 # What is this?
 DESC="NFS kernel daemon"
 PREFIX=/usr
 
 # Exit if required binaries are missing.
-[ -x $PREFIX/sbin/rpc.nfsd ] || exit 0
-[ -x $PREFIX/sbin/rpc.mountd ] || exit 0
-[ -x $PREFIX/sbin/exportfs ] || exit 0
+[ -x $PREFIX/sbin/rpc.nfsd    ] || exit 0
+[ -x $PREFIX/sbin/rpc.mountd  ] || exit 0
+[ -x $PREFIX/sbin/exportfs    ] || exit 0
 
 # Read config
 DEFAULTFILE=/etc/default/nfs-kernel-server
 RPCNFSDCOUNT=8
+RPCNFSDPRIORITY=0
 RPCMOUNTDOPTS=
+NEED_SVCGSSD=yes
+RPCGSSDOPTS=
+RPCSVCGSSDOPTS=
+PROCNFSD_MOUNTPOINT=/proc/fs/nfsd
 if [ -f $DEFAULTFILE ]; then
     . $DEFAULTFILE
 fi
 
+. /lib/lsb/init-functions
+
+do_modprobe() {
+    if [ -x /sbin/modprobe -a -f /proc/modules ]
+    then
+        modprobe -q "$1" || true
+    fi
+}
+
+do_mount() {
+    if ! grep -E -qs "$1\$" /proc/filesystems
+    then
+       return 1
+    fi
+    if ! mountpoint -q "$2"
+    then
+       mount -t "$1" "$1" "$2"
+       return
+    fi
+    return 0
+}
+
 # See how we were called.
 case "$1" in
   start)
-       cd /    # daemons should have root dir as cwd
-       if grep -q '^/' /etc/exports
+       if [ -f /etc/exports ]
        then
-               printf "Exporting directories for $DESC..."
+               do_modprobe nfsd
+
+               # See if our running kernel supports the NFS kernel server
+               if [ -f /proc/kallsyms ] && ! grep -qE 'init_nf(sd|     )' /proc/kallsyms; then
+                       log_warning_msg "Not starting $DESC: no support in current kernel."
+                       exit 0
+               fi
+               
+               do_mount nfsd $PROCNFSD_MOUNTPOINT || NEED_SVCGSSD=no
+               log_begin_msg "Exporting directories for $DESC..."
                $PREFIX/sbin/exportfs -r
-               echo "done."
+               if [ $? != 0 ]; then
+                       log_end_msg $?
+                       exit $?
+               fi
+               log_end_msg 0
 
-               printf "Starting $DESC:"
-               printf " nfsd"
-               start-stop-daemon --start --quiet \
+               log_daemon_msg "Starting $DESC"
+               log_progress_msg "nfsd"
+               start-stop-daemon --start --oknodo --quiet \
+                   --nicelevel $RPCNFSDPRIORITY \
                    --exec $PREFIX/sbin/rpc.nfsd -- $RPCNFSDCOUNT
-
-               printf " mountd"
+               if [ $? != 0 ]; then
+                       log_end_msg $?
+                       exit $?
+               fi
 
                # make sure 127.0.0.1 is a valid source for requests
                ClearAddr=
@@ -61,32 +103,71 @@ case "$1" in
 
                [ -z "$ClearAddr" ] || echo "nfsd 127.0.0.1 1" >/proc/net/rpc/auth.unix.ip/channel
 
-               start-stop-daemon --start --quiet \
+               log_progress_msg "mountd"
+               start-stop-daemon --start --oknodo --quiet \
                    --exec $PREFIX/sbin/rpc.mountd -- $RPCMOUNTDOPTS
-               echo "."
+               if [ $? != 0 ]; then
+                       log_end_msg $?
+                       exit $?
+               fi
+
+               log_end_msg 0
        else
-               echo "Not starting $DESC: No exports."
+               log_warning_msg "Not starting $DESC: no exports."
        fi
        ;;
 
   stop)
-       printf "Stopping $DESC: mountd"
+       log_daemon_msg "Stopping $DESC"
+       
+       log_progress_msg "mountd"
        start-stop-daemon --stop --oknodo --quiet \
            --name rpc.mountd --user 0
-       printf " nfsd"
+       if [ $? != 0 ]; then
+               log_end_msg $?
+               exit $?
+       fi
+
+       log_progress_msg "nfsd"
        start-stop-daemon --stop --oknodo --quiet \
            --name nfsd --user 0 --signal 2
-       echo "."
+       if [ $? != 0 ]; then
+               log_end_msg $?
+               exit $?
+       fi
+
+       log_end_msg 0
 
-       printf "Unexporting directories for $DESC..."
+       log_begin_msg "Unexporting directories for $DESC..."
        $PREFIX/sbin/exportfs -au
-       echo "done."
+       if [ $? != 0 ]; then
+               log_end_msg $?
+               exit $?
+       fi
+       log_end_msg 0
+
+       if mountpoint -q /proc/nfs/nfsd
+       then
+           $PREFIX/sbin/exportfs -f
+       fi
+       ;;
+
+  status)
+       if pidof nfsd >/dev/null
+       then
+           echo "nfsd running"
+           exit 0
+       else
+           echo "nfsd not running"
+           exit 3
+       fi
        ;;
 
   reload | force-reload)
-       printf "Re-exporting directories for $DESC..."
+       log_begin_msg "Re-exporting directories for $DESC..."
        $PREFIX/sbin/exportfs -r
-       echo "done."
+       log_end_msg $?
+       exit $?
        ;;
 
   restart)
@@ -96,7 +177,7 @@ case "$1" in
        ;;
 
   *)
-       echo "Usage: nfs-kernel-server {start|stop|reload|force-reload|restart}"
+       log_success_msg "Usage: nfs-kernel-server {start|stop|status|reload|force-reload|restart}"
        exit 1
        ;;
 esac