]> git.decadent.org.uk Git - nfs-utils.git/blob - debian/nfs-kernel-server.init
Imported Debian patch 1.1.0-4
[nfs-utils.git] / debian / nfs-kernel-server.init
1 #!/bin/sh
2
3 ### BEGIN INIT INFO
4 # Provides:          nfs-kernel-server
5 # Required-Start:    $portmap $time
6 # Required-Stop:     $portmap $time
7 # Default-Start:     2 3 4 5
8 # Default-Stop:      0 1 6
9 # Short-Description: Kernel NFS server support
10 # Description:       NFS is a popular protocol for file sharing across
11 #                    TCP/IP networks. This service provides NFS server
12 #                    functionality, which is configured via the
13 #                    /etc/exports file.
14 ### END INIT INFO
15
16 # What is this?
17 DESC="NFS kernel daemon"
18 PREFIX=/usr
19
20 # Exit if required binaries are missing.
21 [ -x $PREFIX/sbin/rpc.nfsd    ] || exit 0
22 [ -x $PREFIX/sbin/rpc.mountd  ] || exit 0
23 [ -x $PREFIX/sbin/exportfs    ] || exit 0
24
25 # Read config
26 DEFAULTFILE=/etc/default/nfs-kernel-server
27 RPCNFSDCOUNT=8
28 RPCNFSDPRIORITY=0
29 RPCMOUNTDOPTS=
30 NEED_SVCGSSD=no
31 RPCSVCGSSDOPTS=
32 PROCNFSD_MOUNTPOINT=/proc/fs/nfsd
33 if [ -f $DEFAULTFILE ]; then
34     . $DEFAULTFILE
35 fi
36
37 . /lib/lsb/init-functions
38
39 do_modprobe() {
40     if [ -x /sbin/modprobe -a -f /proc/modules ]
41     then
42         modprobe -q "$1" || true
43     fi
44 }
45
46 do_mount() {
47     if ! grep -E -qs "$1\$" /proc/filesystems
48     then
49         return 1
50     fi
51     if ! mountpoint -q "$2"
52     then
53         mount -t "$1" "$1" "$2"
54         return
55     fi
56     return 0
57 }
58
59 # See how we were called.
60 case "$1" in
61   start)
62         if [ -f /etc/exports ]
63         then
64                 do_modprobe nfsd
65
66                 # See if our running kernel supports the NFS kernel server
67                 if [ -f /proc/kallsyms ] && ! grep -qE 'init_nf(sd|     )' /proc/kallsyms; then
68                         log_warning_msg "Not starting $DESC: no support in current kernel."
69                         exit 0
70                 fi
71                 
72                 do_mount nfsd $PROCNFSD_MOUNTPOINT || NEED_SVCGSSD=no
73                 log_begin_msg "Exporting directories for $DESC..."
74                 $PREFIX/sbin/exportfs -r
75                 if [ $? != 0 ]; then
76                         log_end_msg $?
77                         exit $?
78                 fi
79                 log_end_msg 0
80
81                 log_daemon_msg "Starting $DESC"
82                 log_progress_msg "nfsd"
83                 start-stop-daemon --start --oknodo --quiet \
84                     --nicelevel $RPCNFSDPRIORITY \
85                     --exec $PREFIX/sbin/rpc.nfsd -- $RPCNFSDCOUNT
86                 if [ $? != 0 ]; then
87                         log_end_msg $?
88                         exit $?
89                 fi
90
91                 # make sure 127.0.0.1 is a valid source for requests
92                 ClearAddr=
93                 if [ -f /proc/net/rpc/auth.unix.ip/channel ]
94                 then
95                     fgrep -qs 127.0.0.1 /proc/net/rpc/auth.unix.ip/content || {
96                         echo "nfsd 127.0.0.1 2147483647 localhost" >/proc/net/rpc/auth.unix.ip/channel
97                         ClearAddr=yes
98                     }
99                 fi
100
101                 $PREFIX/bin/rpcinfo -u localhost nfs 3 >/dev/null 2>&1 ||
102                     RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 3"
103
104                 [ -z "$ClearAddr" ] || echo "nfsd 127.0.0.1 1" >/proc/net/rpc/auth.unix.ip/channel
105         
106                 if [ "$NEED_SVCGSSD" = "yes" ]; then
107                         do_modprobe rpcsec_gss_krb5
108                         log_progress_msg "svcgssd"
109                         start-stop-daemon --start --oknodo --quiet \
110                             --exec $PREFIX/sbin/rpc.svcgssd -- $RPCSVCGSSDOPTS
111                         if [ $? != 0 ]; then
112                                 log_end_msg $?
113                                 exit $?
114                         fi
115                 fi
116
117                 log_progress_msg "mountd"
118                 start-stop-daemon --start --oknodo --quiet \
119                     --exec $PREFIX/sbin/rpc.mountd -- $RPCMOUNTDOPTS
120                 if [ $? != 0 ]; then
121                         log_end_msg $?
122                         exit $?
123                 fi
124
125                 log_end_msg 0
126         else
127                 log_warning_msg "Not starting $DESC: no exports."
128         fi
129         ;;
130
131   stop)
132         log_daemon_msg "Stopping $DESC"
133         
134         log_progress_msg "mountd"
135         start-stop-daemon --stop --oknodo --quiet \
136             --name rpc.mountd --user 0
137         if [ $? != 0 ]; then
138                 log_end_msg $?
139                 exit $?
140         fi
141                 
142         if [ "$NEED_SVCGSSD" = "yes" ]; then
143                 log_progress_msg "svcgssd"
144                 start-stop-daemon --stop --oknodo --quiet \
145                     --name rpc.svcgssd --user 0
146                 if [ $? != 0 ]; then
147                         log_end_msg $?
148                         exit $?
149                 fi
150         fi
151
152         log_progress_msg "nfsd"
153         start-stop-daemon --stop --oknodo --quiet \
154             --name nfsd --user 0 --signal 2
155         if [ $? != 0 ]; then
156                 log_end_msg $?
157                 exit $?
158         fi
159
160         log_end_msg 0
161
162         log_begin_msg "Unexporting directories for $DESC..."
163         $PREFIX/sbin/exportfs -au
164         if [ $? != 0 ]; then
165                 log_end_msg $?
166                 exit $?
167         fi
168         log_end_msg 0
169
170         if mountpoint -q $PROCNFSD_MOUNTPOINT
171         then
172             $PREFIX/sbin/exportfs -f
173         fi
174         ;;
175
176   status)
177         if pidof nfsd >/dev/null
178         then
179             echo "nfsd running"
180             exit 0
181         else
182             echo "nfsd not running"
183             exit 3
184         fi
185         ;;
186
187   reload | force-reload)
188         log_begin_msg "Re-exporting directories for $DESC..."
189         $PREFIX/sbin/exportfs -r
190         log_end_msg $?
191         exit $?
192         ;;
193
194   restart)
195         $0 stop
196         sleep 1
197         $0 start
198         ;;
199
200   *)
201         log_success_msg "Usage: nfs-kernel-server {start|stop|status|reload|force-reload|restart}"
202         exit 1
203         ;;
204 esac
205
206 exit 0