updated on Fri Jan 20 04:00:45 UTC 2012
[aur-mirror.git] / nfs-utils-ipv6 / nfs-server
blob9574cbc1273115c76e8982a56c2943832d722893
1 #!/bin/bash
3 daemon_name=nfs-server
5 # daemon dependencies
6 DAEMON_DEPENDS=('nfs-common')
8 NFSD_COUNT=
9 NFSD_OPTS=
10 NEED_SVCGSSD=
11 SVCGSSD_OPTS=
12 MOUNTD_OPTS=
13 PROCNFSD_MOUNTPOINT=
14 PROCNFSD_MOUNTOPTS=
16 # rpc.nfsd daemon & binary location
17 NFSD_PROCESS_NAME=nfsd
18 NFSD_DAEMON_NAME=rpc.nfsd
19 NFSD="/usr/sbin/rpc.nfsd"
21 # rpc.svcgssd daemon & binary location
22 SVCGSSD_DAEMON_NAME=rpc.svcgssd
23 SVCGSSD="/usr/sbin/rpc.svcgssd"
25 # rpc.idmapd daemon & binary location
26 IDMAPD_DAEMON_NAME=rpc.idmapd
27 IDMAPD="/usr/sbin/rpc.idmapd"
29 # rpc.mountd daemon & binary location
30 MOUNTD_DAEMON_NAME=rpc.mountd
31 MOUNTD="/usr/sbin/rpc.mountd"
33 # exortfs binary location
34 EXPORTFS="/usr/sbin/exportfs"
36 . /etc/rc.conf
37 . /etc/rc.d/functions
38 . /etc/conf.d/$daemon_name.conf
40 # Default number of nfsd servers
41 [ -z "$NFSD_COUNT" ] && NFSD_COUNT=8
43 # Default mountpoint and options for nfsd filesystem
44 [ -z "$PROCNFSD_MOUNTPOINT" ] && PROCNFSD_MOUNTPOINT="/proc/fs/nfsd"
45 [ -z "$PROCNFSD_MOUNTOPTS" ] && PROCNFSD_MOUNTOPTS="rw,nodev,noexec,nosuid"
47 case "$NEED_SVCGSSD" in
48 yes|no)
51 NEED_SVCGSSD=no
53 esac
55 do_modprobe() {
56 if [ -x /sbin/modprobe -a -f /proc/modules ]; then
57 modprobe -q "$1" || true
61 do_mount() {
62 if ! grep -E "$1\$" /proc/filesystems &> /dev/null ; then
63 return 1
66 if grep -vw "$1" /proc/mounts &> /dev/null ; then
67 if ! mountpoint -q "$2" ; then
68 mount -t "$1" "$1" "$2" -o "$3"
69 return
72 return 0
75 do_umount() {
76 if mountpoint -q "$1" ; then
77 umount "$1"
79 return 0
82 get_pid() {
83 pidof -o %PPID "$1"
86 case "$1" in
87 start)
88 ck_depends ${DAEMON_DEPENDS[@]}
90 rc=0
91 stat_busy "Mounting nfsd filesystem"
92 do_modprobe nfsd
93 do_mount nfsd "$PROCNFSD_MOUNTPOINT" "$PROCNFSD_MOUNTOPTS"
94 rc=$(($rc+$?))
95 if [ $rc -gt 0 ]; then
96 stat_fail
97 exit $rc
98 else
99 stat_done
102 stat_busy "Exporting all directories"
103 $EXPORTFS -r
104 rc=$(($rc+$?))
105 if [ $rc -gt 0 ]; then
106 stat_fail
107 exit $rc
108 else
109 stat_done
112 stat_busy "Starting $NFSD_DAEMON_NAME daemon"
113 PID=$(get_pid $NFSD_PROCESS_NAME)
114 if [ -z "$PID" ]; then
115 [ -f /var/run/$NFSD_DAEMON_NAME.pid ] && rm -f /var/run/$NFSD_DAEMON_NAME.pid
116 # RUN
117 $NFSD $NFSD_OPTS $NFSD_COUNT
119 rc=$(($rc+$?))
120 if [ $rc -gt 0 ]; then
121 stat_fail
122 exit $rc
123 else
124 echo $(get_pid $NFSD_PROCESS_NAME) > /var/run/$NFSD_DAEMON_NAME.pid
125 stat_done
127 else
128 stat_fail
129 exit 1
132 if [ "$NEED_SVCGSSD" = yes ]; then
133 do_modprobe rpcsec_gss_krb5
134 stat_busy "Starting $SVCGSSD_DAEMON_NAME daemon"
135 PID=$(get_pid $SVCGSSD)
136 if [ -z "$PID" ]; then
137 [ -f /var/run/$SVCGSSD_DAEMON_NAME.pid ] && rm -f /var/run/$SVCGSSD_DAEMON_NAME.pid
138 # RUN
139 $SVCGSSD $SVCGSSD_OPTS
141 rc=$(($rc+$?))
142 if [ $rc -gt 0 ]; then
143 stat_fail
144 exit $rc
145 else
146 echo $(get_pid $SVCGSSD) > /var/run/$SVCGSSD_DAEMON_NAME.pid
147 stat_done
149 else
150 stat_fail
151 exit 1
155 PID=$(get_pid $IDMAPD)
156 [ ! -z "$PID" ] && kill -SIGHUP $IDMAPD_DAEMON_NAME &> /dev/null
158 stat_busy "Starting $MOUNTD_DAEMON_NAME daemon"
159 PID=$(get_pid $MOUNTD)
160 if [ -z "$PID" ]; then
161 [ -f /var/run/$MOUNTD_DAEMON_NAME.pid ] && rm -f /var/run/$MOUNTD_DAEMON_NAME.pid
162 # RUN
163 $MOUNTD $MOUNTD_OPTS
165 rc=$(($rc+$?))
166 if [ $rc -gt 0 ]; then
167 stat_fail
168 exit $rc
169 else
170 echo $(get_pid $MOUNTD) > /var/run/$MOUNTD_DAEMON_NAME.pid
171 stat_done
173 else
174 stat_fail
175 exit 1
178 add_daemon $daemon_name
181 stop)
182 rc=0
183 stat_busy "Stopping $MOUNTD_DAEMON_NAME daemon"
184 PID=$(get_pid $MOUNTD)
185 # KILL
186 [ ! -z "$PID" ] && kill $PID &> /dev/null
188 rc=$(($rc+$?))
189 if [ $rc -gt 0 ]; then
190 stat_fail
191 exit $rc
192 else
193 rm -f /var/run/$MOUNTD_DAEMON_NAME.pid &> /dev/null
194 stat_done
197 if [ "$NEED_SVCGSSD" = yes ]; then
198 stat_busy "Stopping $SVCGSSD_DAEMON_NAME daemon"
199 PID=$(get_pid $SVCGSSD)
200 # KILL
201 [ ! -z "$PID" ] && kill $PID &> /dev/null
203 rc=$(($rc+$?))
204 if [ $rc -gt 0 ]; then
205 stat_fail
206 exit $rc
207 else
208 rm -f /var/run/$SVCGSSD_DAEMON_NAME.pid &> /dev/null
209 stat_done
213 stat_busy "Stopping $NFSD_DAEMON_NAME daemon"
214 PID=$(get_pid $NFSD_PROCESS_NAME)
215 # KILL (SIGINT)
216 [ ! -z "$PID" ] && kill -2 $PID &> /dev/null
218 rc=$(($rc+$?))
219 if [ $rc -gt 0 ]; then
220 stat_fail
221 exit $rc
222 else
223 sleep 1
224 PID=$(get_pid $NFSD_PROCESS_NAME)
225 # KILL (KILL) - just to be sure
226 [ ! -z "$PID" ] && kill -9 $PID &> /dev/null
228 rm -f /var/run/$NFSD_DAEMON_NAME.pid &> /dev/null
229 stat_done
232 stat_busy "Unexporting all directories"
233 $EXPORTFS -au
234 rc=$(($rc+$?))
235 if [ $rc -gt 0 ]; then
236 stat_fail
237 exit $rc
238 else
239 stat_done
242 # flush everything out of the kernels export table
243 if mountpoint -q "$PROCNFSD_MOUNTPOINT" ; then
244 $EXPORTFS -f
246 do_umount "$PROCNFSD_MOUNTPOINT" 2>/dev/null || true
247 rm_daemon $daemon_name
250 status)
251 stat_busy "Checking $daemon_name status";
252 ck_status $daemon_name
254 stat_busy "Daemon $NFSD_DAEMON_NAME running"
255 PID=$(get_pid $NFSD_PROCESS_NAME)
256 if [ -z "$PID" ]; then
257 stat_fail
258 else
259 stat_done
262 stat_busy "Daemon $MOUNTD_DAEMON_NAME running"
263 PID=$(get_pid $MOUNTD)
264 if [ -z "$PID" ]; then
265 stat_fail
266 else
267 stat_done
270 if [ "$NEED_SVCGSSD" = yes ]; then
271 stat_busy "Daemon $SVCGSSD_DAEMON_NAME running"
272 PID=$(get_pid $SVCGSSD)
273 if [ -z "$PID" ]; then
274 stat_fail
275 else
276 stat_done
279 echo
282 reload)
283 rc=0
284 stat_busy "Re-exporting all directories"
285 $EXPORTFS -r
286 rc=$(($rc+$?))
287 if [ $rc -gt 0 ]; then
288 stat_fail
289 exit $rc
290 else
291 stat_done
295 restart)
296 $0 stop
297 sleep 3
298 $0 start
301 echo "usage: $0 {start|stop|status|reload|restart}"
302 esac
303 exit 0