1 |
#!/bin/sh |
2 |
|
3 |
# chkconfig: 345 14 86 |
4 |
# description: NFS support files common to client and server |
5 |
|
6 |
### BEGIN INIT INFO |
7 |
# Provides: nfs-common |
8 |
# Required-Start: $portmap |
9 |
# Required-Stop: $portmap |
10 |
# Default-Start: 3 4 5 S |
11 |
# Default-Stop: 0 1 6 |
12 |
# Short-Description: NFS support files common to client and server |
13 |
# Description: NFS is a popular protocol for file sharing across |
14 |
# TCP/IP networks. This service provides various |
15 |
# support functions for NFS mounts. |
16 |
### END INIT INFO |
17 |
|
18 |
# Source function library. |
19 |
. /etc/rc.d/init.d/functions |
20 |
|
21 |
# Source networking configuration. |
22 |
. /etc/sysconfig/network |
23 |
|
24 |
# Check that networking is up. |
25 |
[ "${NETWORKING}" = "no" ] && exit 0 |
26 |
|
27 |
# Read config |
28 |
NAME="NFS common utilities" |
29 |
LOCKFILE=/var/lock/subsys/nfs-common |
30 |
NEED_STATD=yes |
31 |
NEED_IDMAPD=yes |
32 |
NEED_GSSD= |
33 |
PIPEFS_MOUNTPOINT=/var/lib/nfs/rpc_pipefs |
34 |
[ -f /etc/sysconfig/nfs-common ] && . /etc/sysconfig/nfs-common |
35 |
|
36 |
# Parse the fstab file, and determine whether we need gssd. |
37 |
# (The /etc/sysconfig settings, if any, will override our autodetection) |
38 |
AUTO_NEED_GSSD=no |
39 |
|
40 |
while read DEV MTPT FSTYPE OPTS REST; do |
41 |
case "$OPTS" in |
42 |
sec=krb5|*,sec=krb5|sec=krb5,*|*,sec=krb5i,*|sec=krb5i|*,sec=krb5i|sec=krb5i,*|*,sec=krb5i,*|sec=krb5p|*,sec=krb5p|sec=krb5p,*|*,sec=krb5p,*) |
43 |
AUTO_NEED_GSSD=yes |
44 |
;; |
45 |
esac |
46 |
done < /etc/fstab |
47 |
|
48 |
case "$NEED_STATD" in |
49 |
yes|no) |
50 |
;; |
51 |
*) |
52 |
NEED_STATD=yes |
53 |
;; |
54 |
esac |
55 |
|
56 |
case "$NEED_IDMAPD" in |
57 |
yes|no) |
58 |
;; |
59 |
*) |
60 |
NEED_IDMAPD=yes |
61 |
;; |
62 |
esac |
63 |
|
64 |
case "$NEED_GSSD" in |
65 |
yes|no) |
66 |
;; |
67 |
*) |
68 |
NEED_GSSD=$AUTO_NEED_GSSD |
69 |
;; |
70 |
esac |
71 |
|
72 |
do_modprobe() { |
73 |
if [ -x /sbin/modprobe -a -f /proc/modules ]; then |
74 |
modprobe -q "$1" || true |
75 |
fi |
76 |
} |
77 |
|
78 |
do_mount() { |
79 |
if ! grep -E -qs "$1\$" /proc/filesystems; then |
80 |
return 1 |
81 |
fi |
82 |
if ! mountpoint -q "$2"; then |
83 |
mount -t "$1" "$1" "$2" |
84 |
return |
85 |
fi |
86 |
return 0 |
87 |
} |
88 |
|
89 |
do_umount() { |
90 |
if mountpoint -q "$1"; then |
91 |
umount "$1" |
92 |
fi |
93 |
return 0 |
94 |
} |
95 |
|
96 |
start() { |
97 |
if [ ! -f $LOCKFILE ]; then |
98 |
echo "Starting $NAME" |
99 |
|
100 |
# Set the ports lockd should listen on |
101 |
if [ -n "$LOCKD_TCPPORT" ]; then |
102 |
/sbin/sysctl -w fs.nfs.nlm_tcpport=$LOCKD_TCPPORT >/dev/null 2>&1 |
103 |
fi |
104 |
if [ -n "$LOCKD_UDPPORT" ]; then |
105 |
/sbin/sysctl -w fs.nfs.nlm_udpport=$LOCKD_UDPPORT >/dev/null 2>&1 |
106 |
fi |
107 |
|
108 |
if [ "$NEED_STATD" = yes ]; then |
109 |
echo -n "Starting rpc.statd" |
110 |
daemon rpc.statd $STATD_OPTIONS |
111 |
rc=$? |
112 |
echo |
113 |
if [ $rc != 0 ]; then |
114 |
return $rc |
115 |
fi |
116 |
fi |
117 |
|
118 |
if [ "$NEED_IDMAPD" = yes ] || [ "$NEED_GSSD" = yes ]; then |
119 |
do_modprobe nfs |
120 |
do_modprobe nfs4 |
121 |
if do_mount rpc_pipefs $PIPEFS_MOUNTPOINT; then |
122 |
if [ "$NEED_IDMAPD" = yes ]; then |
123 |
echo -n "Starting rpc.idmapd" |
124 |
daemon rpc.idmapd $RPCIDMAPD_OPTIONS |
125 |
rc=$? |
126 |
echo |
127 |
if [ $rc != 0 ]; then |
128 |
return $rc |
129 |
fi |
130 |
fi |
131 |
if [ "$NEED_GSSD" = yes ]; then |
132 |
do_modprobe rpcsec_gss_krb5 |
133 |
|
134 |
echo -n "Starting rpc.gssd" |
135 |
daemon rpc.gssd $RPCGSSD_OPTIONS |
136 |
rc=$? |
137 |
echo |
138 |
if [ $rc != 0 ]; then |
139 |
return $rc |
140 |
fi |
141 |
fi |
142 |
fi |
143 |
fi |
144 |
|
145 |
touch $LOCKFILE |
146 |
fi |
147 |
return 0 |
148 |
} |
149 |
|
150 |
stop() { |
151 |
echo "Stopping $NAME" |
152 |
|
153 |
if [ "$NEED_GSSD" = yes ]; then |
154 |
echo -n "Stopping rpc.gssd: " |
155 |
killproc rpc.gssd |
156 |
rc=$? |
157 |
echo |
158 |
if [ $rc != 0 ]; then |
159 |
return $rc |
160 |
fi |
161 |
fi |
162 |
if [ "$NEED_IDMAPD" = yes ]; then |
163 |
echo -n "Stopping rpc.idmapd: " |
164 |
killproc rpc.idmapd |
165 |
rc=$? |
166 |
echo |
167 |
if [ $rc != 0 ]; then |
168 |
return $rc |
169 |
fi |
170 |
fi |
171 |
if status lockd >/dev/null; then |
172 |
echo -n "Stopping kernel lockd: " |
173 |
killproc lockd -KILL |
174 |
echo |
175 |
fi |
176 |
if [ "$NEED_STATD" = yes ]; then |
177 |
echo -n "Stopping rpc.statd: " |
178 |
killproc rpc.statd |
179 |
rc=$? |
180 |
echo |
181 |
if [ $rc != 0 ]; then |
182 |
return $rc |
183 |
fi |
184 |
fi |
185 |
do_umount $PIPEFS_MOUNTPOINT 2>/dev/null || true |
186 |
|
187 |
# Reset the lockd ports if they were set |
188 |
if [ -n "$LOCKD_TCPPORT" ]; then |
189 |
/sbin/sysctl -w fs.nfs.nlm_tcpport=0 >/dev/null 2>&1 |
190 |
fi |
191 |
if [ -n "$LOCKD_UDPPORT" ]; then |
192 |
/sbin/sysctl -w fs.nfs.nlm_udpport=0 >/dev/null 2>&1 |
193 |
fi |
194 |
|
195 |
rm -f $LOCKFILE |
196 |
return 0 |
197 |
} |
198 |
|
199 |
# See how we were called. |
200 |
case "$1" in |
201 |
start) |
202 |
start |
203 |
;; |
204 |
stop) |
205 |
stop |
206 |
;; |
207 |
status) |
208 |
if [ "$NEED_STATD" = yes ]; then |
209 |
status rpc.statd |
210 |
fi |
211 |
|
212 |
if [ "$NEED_GSSD" = yes ]; then |
213 |
status rpc.gssd |
214 |
fi |
215 |
|
216 |
if [ "$NEED_IDMAPD" = yes ]; then |
217 |
status rpc.idmapd |
218 |
fi |
219 |
;; |
220 |
restart|reload) |
221 |
stop |
222 |
sleep 1 |
223 |
start |
224 |
;; |
225 |
*) |
226 |
echo "Usage: $0 {start|stop|restart|reload|status}" |
227 |
exit 1 |
228 |
;; |
229 |
esac |
230 |
|
231 |
exit 0 |