4 # Provides: nfs-kernel-server
5 # Required-Start: $remote_fs nfs-common $portmap $time
6 # Required-Stop: $remote_fs nfs-common $portmap $time
8 # Default-Start: 2 3 4 5
10 # Short-Description: Kernel NFS server support
11 # Description: NFS is a popular protocol for file sharing across
12 # TCP/IP networks. This service provides NFS server
13 # functionality, which is configured via the
18 DESC="NFS kernel daemon"
21 # Exit if required binaries are missing.
22 [ -x $PREFIX/sbin/rpc.nfsd ] || exit 0
23 [ -x $PREFIX/sbin/rpc.mountd ] || exit 0
24 [ -x $PREFIX/sbin/exportfs ] || exit 0
27 DEFAULTFILE=/etc/default/nfs-kernel-server
33 PROCNFSD_MOUNTPOINT=/proc/fs/nfsd
34 if [ -f $DEFAULTFILE ]; then
38 . /lib/lsb/init-functions
41 if [ -x /sbin/modprobe -a -f /proc/modules ]
43 modprobe -q "$1" || true
48 if ! grep -E -qs "$1\$" /proc/filesystems
52 if ! mountpoint -q "$2"
54 mount -t "$1" "$1" "$2"
60 # See how we were called.
63 if [ -f /etc/exports ]
67 # See if our running kernel supports the NFS kernel server
68 if ! grep -E -qs "[[:space:]]nfsd\$" /proc/filesystems; then
69 log_warning_msg "Not starting $DESC: no support in current kernel."
73 do_mount nfsd $PROCNFSD_MOUNTPOINT || NEED_SVCGSSD=no
74 log_begin_msg "Exporting directories for $DESC..."
75 $PREFIX/sbin/exportfs -r
77 if [ $RET != 0 ]; then
83 log_daemon_msg "Starting $DESC"
84 log_progress_msg "nfsd"
86 # See if portmap or rpcbind are running
87 lsof -i :111 >/dev/null
89 if [ $RET != 0 ]; then
91 log_warning_msg "Not starting: portmap daemon is not running"
95 start-stop-daemon --start --oknodo --quiet \
96 --nicelevel $RPCNFSDPRIORITY \
97 --exec $PREFIX/sbin/rpc.nfsd -- $RPCNFSDCOUNT
99 if [ $RET != 0 ]; then
104 # make sure 127.0.0.1 is a valid source for requests
106 if [ -f /proc/net/rpc/auth.unix.ip/channel ]
108 fgrep -qs 127.0.0.1 /proc/net/rpc/auth.unix.ip/content || {
109 echo "nfsd 127.0.0.1 2147483647 localhost" >/proc/net/rpc/auth.unix.ip/channel
114 $PREFIX/bin/rpcinfo -u localhost nfs 3 >/dev/null 2>&1 ||
115 RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 3"
117 [ -z "$ClearAddr" ] || echo "nfsd 127.0.0.1 1" >/proc/net/rpc/auth.unix.ip/channel
119 if [ "$NEED_SVCGSSD" = "yes" ]; then
120 do_modprobe rpcsec_gss_krb5
121 log_progress_msg "svcgssd"
122 start-stop-daemon --start --oknodo --quiet \
123 --exec $PREFIX/sbin/rpc.svcgssd -- $RPCSVCGSSDOPTS
125 if [ $RET != 0 ]; then
131 log_progress_msg "mountd"
132 start-stop-daemon --start --oknodo --quiet \
133 --exec $PREFIX/sbin/rpc.mountd -- $RPCMOUNTDOPTS
135 if [ $RET != 0 ]; then
142 log_warning_msg "Not starting $DESC: no exports."
147 log_daemon_msg "Stopping $DESC"
149 log_progress_msg "mountd"
150 start-stop-daemon --stop --oknodo --quiet \
151 --name rpc.mountd --user 0
153 if [ $RET != 0 ]; then
158 if [ "$NEED_SVCGSSD" = "yes" ]; then
159 log_progress_msg "svcgssd"
160 start-stop-daemon --stop --oknodo --quiet \
161 --name rpc.svcgssd --user 0
163 if [ $RET != 0 ]; then
169 log_progress_msg "nfsd"
170 start-stop-daemon --stop --oknodo --quiet \
171 --name nfsd --user 0 --signal 2
173 if [ $RET != 0 ]; then
180 log_begin_msg "Unexporting directories for $DESC..."
181 $PREFIX/sbin/exportfs -au
183 if [ $RET != 0 ]; then
189 if mountpoint -q $PROCNFSD_MOUNTPOINT
191 $PREFIX/sbin/exportfs -f
196 if pidof nfsd >/dev/null
201 echo "nfsd not running"
206 reload | force-reload)
207 log_begin_msg "Re-exporting directories for $DESC..."
208 $PREFIX/sbin/exportfs -r
221 log_success_msg "Usage: nfs-kernel-server {start|stop|status|reload|force-reload|restart}"