#!/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
