#!/bin/sh ### BEGIN INIT INFO # Provides: nfs-kernel-server # Required-Start: $remote_fs nfs-common $portmap hwclock # Required-Stop: $remote_fs nfs-common $portmap hwclock # 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 # # Startup script for nfs-utils # # Source function library. . /etc/init.d/functions # # The environment variable NFS_SERVERS may be set in /etc/default/nfsd # Other control variables may be overridden here too test -r /etc/default/nfsd && . /etc/default/nfsd # # Location of executables: test -x "$NFS_MOUNTD" || NFS_MOUNTD=/usr/sbin/rpc.mountd test -x "$NFS_NFSD" || NFS_NFSD=/usr/sbin/rpc.nfsd # # The user mode program must also exist (it just starts the kernel # threads using the kernel module code). test -x "$NFS_MOUNTD" || exit 0 test -x "$NFS_NFSD" || exit 0 # # Default is 8 threads, value is settable between 1 and the truely # ridiculous 99 test "$NFS_SERVERS" != "" && test "$NFS_SERVERS" -gt 0 && test "$NFS_SERVERS" -lt 100 || NFS_SERVERS=8 # #---------------------------------------------------------------------- # Startup and shutdown functions. # Actual startup/shutdown is at the end of this file. #mountd start_mountd(){ echo -n 'starting mountd: ' start-stop-daemon --start --exec "$NFS_MOUNTD" -- "-f /etc/exports $@" echo done } stop_mountd(){ echo -n 'stopping mountd: ' start-stop-daemon --stop --quiet --exec "$NFS_MOUNTD" echo done } # #nfsd start_nfsd(){ modprobe -q nfsd grep -q nfsd /proc/filesystems || { echo NFS daemon support not enabled in kernel exit 1 } grep -q nfsd /proc/mounts || mount -t nfsd nfsd /proc/fs/nfsd grep -q nfsd /proc/mounts || { echo nfsd filesystem could not be mounted at /proc/fs/nfsd exit 1 } echo -n "starting $1 nfsd kernel threads: " start-stop-daemon --start --exec "$NFS_NFSD" -- "$@" echo done } delay_nfsd(){ for delay in 0 1 2 3 4 5 6 7 8 9 do if pidof nfsd >/dev/null then echo -n . sleep 1 else return 0 fi done return 1 } stop_nfsd(){ # WARNING: this kills any process with the executable # name 'nfsd'. echo -n 'stopping nfsd: ' start-stop-daemon --stop --quiet --signal 1 --name nfsd if delay_nfsd || { echo failed echo ' using signal 9: ' start-stop-daemon --stop --quiet --signal 9 --name nfsd delay_nfsd } then echo done else echo failed fi } #---------------------------------------------------------------------- # # supported options: # start # stop # reload: reloads the exports file # restart: stops and starts mountd #FIXME: need to create the /var/lib/nfs/... directories case "$1" in start) exportfs -r start_nfsd "$NFS_SERVERS" start_mountd test -r /etc/exports && exportfs -a;; stop) exportfs -ua stop_mountd stop_nfsd;; status) status /usr/sbin/rpc.mountd RETVAL=$? status nfsd rval=$? [ $RETVAL -eq 0 ] && exit $rval exit $RETVAL;; reload) test -r /etc/exports && exportfs -r;; restart) $0 stop $0 start;; *) echo "Usage: $0 {start|stop|status|reload|restart}" exit 1;; esac