blob: b6fb962e8692b4125c475afe510cc11938e936b6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
#!/bin/sh
#
# nfs-common This shell script takes care of starting and stopping
# common daemons required for NFS clients and servers.
#
# chkconfig: 345 20 80
# description: NFS is a popular protocol for file sharing across \
# TCP/IP networks. This service provides NFS file \
# locking functionality.
#
set -e
# What is this?
DESC="NFS common utilities"
# Read config
DEFAULTFILE=/etc/default/nfs-common
PREFIX=
NEED_LOCKD=
NEED_IDMAPD=yes
IDMAPD_PIDFILE=/var/run/rpc.idmapd.pid
NEED_GSSD=yes
GSSD_PIDFILE=/var/run/rpc.gssd.pid
PIPEFS_MOUNTPOINT=/var/lib/nfs/rpc_pipefs
RPCGSSDOPTS=
if [ -f $DEFAULTFILE ]; then
. $DEFAULTFILE
fi
# Determine whether lockd daemon is required.
case "$NEED_LOCKD" in
yes|no) ;;
*) case `uname -r` in
'' | [01].* | 2.[0123].* )
# Older kernels may or may not need a lockd daemon.
# We must assume they do, unless we can prove otherwise.
# (A false positive here results only in a harmless message.)
NEED_LOCKD=yes
if test -f /proc/ksyms
then
grep -q lockdctl /proc/ksyms || NEED_LOCKD=no
fi
;;
*) # Modern kernels (>= 2.4) start a lockd thread automatically.
NEED_LOCKD=no
;;
esac
;;
esac
# Exit if required binaries are missing.
[ -x $PREFIX/sbin/rpc.statd ] || exit 0
[ -x $PREFIX/sbin/rpc.lockd ] || [ "$NEED_LOCKD" = no ] || exit 0
[ -x /usr/sbin/rpc.idmapd ] || [ "$NEED_IDMAPD" = no ] || exit 0
[ -x /usr/sbin/rpc.gssd ] || [ "$NEED_GSSD" = no ] || exit 0
do_modprobe() {
modprobe -q "$1" || true
}
do_mount() {
if ! grep -E -qs "$1\$" /proc/filesystems
then
return 1
fi
if ! mountpoint -q "$2"
then
mount -t "$1" "$1" "$2"
return
fi
return 0
}
# See how we were called.
case "$1" in
start)
cd / # daemons should have root dir as cwd
printf "Starting $DESC:"
printf " statd"
start-stop-daemon --start --quiet \
--exec $PREFIX/sbin/rpc.statd -- $STATDOPTS
if [ "$NEED_LOCKD" = yes ]
then
printf " lockd"
start-stop-daemon --start --quiet \
--exec $PREFIX/sbin/rpc.lockd || true
fi
if [ "$NEED_IDMAPD" = yes ] || [ "$NEED_GSSD" = yes ]
then
do_modprobe nfs
if do_mount rpc_pipefs $PIPEFS_MOUNTPOINT
then
if [ "$NEED_IDMAPD" = yes ]
then
printf " idmapd"
start-stop-daemon --start --quiet \
--make-pidfile --pidfile $IDMAPD_PIDFILE \
--exec /usr/sbin/rpc.idmapd
fi
if [ "$NEED_GSSD" = yes ]
then
printf " gssd"
start-stop-daemon --start --quiet \
--make-pidfile --pidfile $GSSD_PIDFILE \
--exec /usr/sbin/rpc.gssd -- $RPCGSSDOPTS
fi
fi
fi
echo "."
;;
stop)
printf "Stopping $DESC:"
if [ "$NEED_GSSD" = yes ]
then
printf " gssd"
start-stop-daemon --stop --oknodo --quiet \
--name rpc.gssd --user 0
rm -f $GSSD_PIDFILE
fi
if [ "$NEED_IDMAPD" = yes ]
then
printf " idmapd"
start-stop-daemon --stop --oknodo --quiet \
--name rpc.idmapd --user 0
rm -f $IDMAPD_PIDFILE
fi
if [ "$NEED_LOCKD" = yes ]
then
printf " lockd"
start-stop-daemon --stop --oknodo --quiet \
--name rpc.lockd --user 0 || true
fi
printf " statd"
start-stop-daemon --stop --oknodo --quiet \
--name rpc.statd --user 0
echo "."
;;
restart | force-reload)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: nfs-common {start|stop|restart}"
exit 1
;;
esac
exit 0
|