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 export_files="/etc/exports"
64 for file in /etc/exports.d/*.exports ; do
65 if [ -f "$file" ]; then
66 export_files="$export_files $file"
69 if [ -f /etc/exports ] && grep -q '^[[:space:]]*[^#]*/' $export_files
73 # See if our running kernel supports the NFS kernel server
74 if ! grep -E -qs "[[:space:]]nfsd\$" /proc/filesystems; then
75 log_warning_msg "Not starting $DESC: no support in current kernel."
79 do_mount nfsd $PROCNFSD_MOUNTPOINT || NEED_SVCGSSD=no
80 log_begin_msg "Exporting directories for $DESC..."
81 $PREFIX/sbin/exportfs -r
83 if [ $RET != 0 ]; then
89 log_daemon_msg "Starting $DESC"
90 log_progress_msg "nfsd"
92 # See if rpcbind is running
93 $PREFIX/sbin/rpcinfo -p >/dev/null 2>&1
95 if [ $RET != 0 ]; then
97 log_warning_msg "Not starting: portmapper is not running"
101 start-stop-daemon --start --oknodo --quiet \
102 --nicelevel $RPCNFSDPRIORITY \
103 --exec $PREFIX/sbin/rpc.nfsd -- $RPCNFSDCOUNT
105 if [ $RET != 0 ]; then
110 # make sure 127.0.0.1 is a valid source for requests
112 if [ -f /proc/net/rpc/auth.unix.ip/channel ]
114 fgrep -qs 127.0.0.1 /proc/net/rpc/auth.unix.ip/content || {
115 echo "nfsd 127.0.0.1 2147483647 localhost" >/proc/net/rpc/auth.unix.ip/channel
120 [ -z "$ClearAddr" ] || echo "nfsd 127.0.0.1 1" >/proc/net/rpc/auth.unix.ip/channel
122 if [ "$NEED_SVCGSSD" = "yes" ]; then
123 do_modprobe rpcsec_gss_krb5
124 log_progress_msg "svcgssd"
125 start-stop-daemon --start --oknodo --quiet \
126 --exec $PREFIX/sbin/rpc.svcgssd -- $RPCSVCGSSDOPTS
128 if [ $RET != 0 ]; then
134 log_progress_msg "mountd"
135 start-stop-daemon --start --oknodo --quiet \
136 --exec $PREFIX/sbin/rpc.mountd -- $RPCMOUNTDOPTS
138 if [ $RET != 0 ]; then
145 log_warning_msg "Not starting $DESC: no exports."
150 log_daemon_msg "Stopping $DESC"
152 log_progress_msg "mountd"
153 start-stop-daemon --stop --oknodo --quiet \
154 --name rpc.mountd --user 0
156 if [ $RET != 0 ]; then
161 if [ "$NEED_SVCGSSD" = "yes" ]; then
162 log_progress_msg "svcgssd"
163 start-stop-daemon --stop --oknodo --quiet \
164 --name rpc.svcgssd --user 0
166 if [ $RET != 0 ]; then
172 log_progress_msg "nfsd"
173 start-stop-daemon --stop --oknodo --quiet \
174 --name nfsd --user 0 --signal 2
176 if [ $RET != 0 ]; then
183 log_begin_msg "Unexporting directories for $DESC..."
184 $PREFIX/sbin/exportfs -au
186 if [ $RET != 0 ]; then
192 if mountpoint -q $PROCNFSD_MOUNTPOINT
194 $PREFIX/sbin/exportfs -f
199 if pidof nfsd >/dev/null
204 echo "nfsd not running"
209 reload | force-reload)
210 log_begin_msg "Re-exporting directories for $DESC..."
211 $PREFIX/sbin/exportfs -r
224 log_success_msg "Usage: nfs-kernel-server {start|stop|status|reload|force-reload|restart}"