| #!/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" -- "$@" |
| 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) |
| test -r /etc/exports && 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 |