diff options
author | Daniel McGregor <daniel.mcgregor@vecima.com> | 2025-02-12 13:12:32 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-02-18 11:56:04 +0000 |
commit | 7d5f754f5e037bc2e748f0e3829656435923a143 (patch) | |
tree | 1049b1726af52c7ba5ae43897b0e0ab083477f89 /meta | |
parent | a7ec517298c3bd51241b29d40bcb2b0a96920aa6 (diff) | |
download | poky-7d5f754f5e037bc2e748f0e3829656435923a143.tar.gz |
nfs-utils: Start nfsv4 utilities with sysvinit
Rewrite the nfs sysvinit scripts to start the services required
by nfsv4: gssd, idmapd, and statd.
(From OE-Core rev: 2cca2dfb6acc25f1a6a25dc60423708a78cef85d)
Signed-off-by: Daniel McGregor <daniel.mcgregor@vecima.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/recipes-connectivity/nfs-utils/nfs-utils/nfscommon | 294 | ||||
-rw-r--r-- | meta/recipes-connectivity/nfs-utils/nfs-utils/nfsserver | 43 |
2 files changed, 289 insertions, 48 deletions
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfscommon b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfscommon index 4f07324a21..6c7b92bdb1 100644 --- a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfscommon +++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfscommon | |||
@@ -1,63 +1,279 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | |||
2 | ### BEGIN INIT INFO | 3 | ### BEGIN INIT INFO |
3 | # Provides: nfs-common | 4 | # Provides: nfs-common |
4 | # Required-Start: $portmap $time | 5 | # Required-Start: $portmap $time |
5 | # Required-Stop: $portmap $time | 6 | # Required-Stop: $portmap $time |
6 | # Default-Start: S | 7 | # Default-Start: S |
7 | # Default-Stop: 0 1 6 | 8 | # Default-Stop: 0 1 6 |
8 | # Short-Description: NFS support for both client and server | 9 | # Short-Description: NFS support files common to client and server |
9 | # Description: NFS is a popular protocol for file sharing across | 10 | # Description: NFS is a popular protocol for file sharing across |
10 | # TCP/IP networks. This service provides various | 11 | # TCP/IP networks. This service provides various |
11 | # support functions for NFS mounts. | 12 | # support functions for NFS mounts. |
12 | ### END INIT INFO | 13 | ### END INIT INFO |
13 | # | ||
14 | # Startup script for nfs-utils | ||
15 | # | ||
16 | # | ||
17 | # Location of executables: | ||
18 | 14 | ||
19 | # Source function library. | 15 | # What is this? |
16 | DESC="NFS common utilities" | ||
17 | |||
18 | # Read config | ||
19 | DEFAULTFILE=/etc/default/nfs-utils | ||
20 | NEED_STATD= | ||
21 | NEED_GSSD= | ||
22 | if nfsconf --isset general pipefs-directory; then | ||
23 | PIPEFS_MOUNTPOINT=$(nfsconf --get general pipefs-directory) | ||
24 | else | ||
25 | PIPEFS_MOUNTPOINT=/var/lib/nfs/rpc_pipefs | ||
26 | fi | ||
27 | if [ -f $DEFAULTFILE ]; then | ||
28 | . $DEFAULTFILE | ||
29 | fi | ||
30 | |||
20 | . /etc/init.d/functions | 31 | . /etc/init.d/functions |
21 | 32 | ||
22 | test -x "$NFS_STATD" || NFS_STATD=/usr/sbin/rpc.statd | 33 | # Exit if required binaries are missing. |
23 | test -z "$STATD_PID" && STATD_PID=/run/rpc.statd.pid | 34 | [ -x /usr/sbin/rpc.statd ] || exit 0 |
35 | |||
24 | # | 36 | # |
25 | # The default state directory is /var/lib/nfs | 37 | # Parse the fstab file, and determine whether we need gssd. (The |
26 | test -n "$NFS_STATEDIR" || NFS_STATEDIR=/var/lib/nfs | 38 | # /etc/defaults settings, if any, will override our autodetection.) This code |
39 | # is partially adapted from the mountnfs.sh script in the sysvinit package. | ||
27 | # | 40 | # |
28 | #---------------------------------------------------------------------- | 41 | AUTO_NEED_GSSD=no |
29 | # Startup and shutdown functions. | 42 | |
30 | # Actual startup/shutdown is at the end of this file. | 43 | if [ -f /etc/fstab ]; then |
31 | 44 | exec 9<&0 </etc/fstab | |
32 | start_statd(){ | 45 | |
33 | echo -n "starting statd: " | 46 | while read -r DEV _ _ OPTS _ |
34 | start-stop-daemon --start --exec "$NFS_STATD" --pidfile "$STATD_PID" | 47 | do |
35 | echo done | 48 | case $DEV in |
49 | ''|\#*) | ||
50 | continue | ||
51 | ;; | ||
52 | esac | ||
53 | OLDIFS="$IFS" | ||
54 | IFS="," | ||
55 | for OPT in $OPTS; do | ||
56 | case "$OPT" in | ||
57 | sec=krb5|sec=krb5i|sec=krb5p) | ||
58 | AUTO_NEED_GSSD=yes | ||
59 | ;; | ||
60 | esac | ||
61 | done | ||
62 | IFS="$OLDIFS" | ||
63 | done | ||
64 | |||
65 | exec 0<&9 9<&- | ||
66 | fi | ||
67 | |||
68 | case "$NEED_STATD" in | ||
69 | yes|no) | ||
70 | ;; | ||
71 | *) | ||
72 | NEED_STATD=yes | ||
73 | ;; | ||
74 | esac | ||
75 | |||
76 | case "$NEED_IDMAPD" in | ||
77 | yes|no) | ||
78 | ;; | ||
79 | *) | ||
80 | NEED_IDMAPD=yes | ||
81 | ;; | ||
82 | esac | ||
83 | |||
84 | case "$NEED_GSSD" in | ||
85 | yes|no) | ||
86 | ;; | ||
87 | *) | ||
88 | NEED_GSSD=$AUTO_NEED_GSSD | ||
89 | ;; | ||
90 | esac | ||
91 | |||
92 | do_modprobe() { | ||
93 | if [ -x /sbin/modprobe ] && [ -f /proc/modules ] | ||
94 | then | ||
95 | modprobe -q "$1" || true | ||
96 | fi | ||
97 | } | ||
98 | |||
99 | do_mount() { | ||
100 | if ! grep -E -qs "$1\$" /proc/filesystems | ||
101 | then | ||
102 | return 1 | ||
103 | fi | ||
104 | if ! mountpoint -q "$2" | ||
105 | then | ||
106 | mount -t "$1" "$1" "$2" | ||
107 | return | ||
108 | fi | ||
109 | return 0 | ||
36 | } | 110 | } |
37 | stop_statd(){ | 111 | |
38 | echo -n 'stopping statd: ' | 112 | do_umount() { |
39 | start-stop-daemon --stop --quiet --signal 1 --pidfile "$STATD_PID" | 113 | if mountpoint -q "$1" |
40 | echo done | 114 | then |
115 | umount "$1" | ||
116 | fi | ||
117 | return 0 | ||
41 | } | 118 | } |
42 | #---------------------------------------------------------------------- | 119 | |
43 | # | 120 | # See how we were called. |
44 | # supported options: | ||
45 | # start | ||
46 | # stop | ||
47 | # restart: stops and starts mountd | ||
48 | #FIXME: need to create the /var/lib/nfs/... directories | ||
49 | case "$1" in | 121 | case "$1" in |
50 | start) | 122 | start) |
51 | start_statd;; | 123 | echo -n "Starting $DESC ..." |
124 | |||
125 | if [ "$NEED_STATD" = yes ]; then | ||
126 | echo -n " statd" | ||
127 | |||
128 | # See if rpcbind is running | ||
129 | if [ -x /usr/sbin/rpcinfo ]; then | ||
130 | /usr/sbin/rpcinfo -p >/dev/null 2>&1 | ||
131 | RET=$? | ||
132 | if [ $RET != 0 ]; then | ||
133 | echo | ||
134 | echo "Not starting: portmapper is not running" | ||
135 | exit 0 | ||
136 | fi | ||
137 | fi | ||
138 | start-stop-daemon --start --oknodo --quiet \ | ||
139 | --pidfile /run/rpc.statd.pid \ | ||
140 | --exec /sbin/rpc.statd | ||
141 | RET=$? | ||
142 | if [ $RET != 0 ]; then | ||
143 | echo " failed" $RET | ||
144 | exit $RET | ||
145 | else | ||
146 | if [ -d /run/sendsigs.omit.d ]; then | ||
147 | rm -f /run/sendsigs.omit.d/statd | ||
148 | ln -s /run/rpc.statd.pid /run/sendsigs.omit.d/statd | ||
149 | fi | ||
150 | fi | ||
151 | fi | ||
152 | |||
153 | # Don't start idmapd and gssd if we don't have them (say, if /usr is not | ||
154 | # up yet). | ||
155 | [ -x /usr/sbin/rpc.idmapd ] || NEED_IDMAPD=no | ||
156 | [ -x /usr/sbin/rpc.gssd ] || NEED_GSSD=no | ||
157 | |||
158 | if [ "$NEED_IDMAPD" = yes ] || [ "$NEED_GSSD" = yes ] | ||
159 | then | ||
160 | do_modprobe sunrpc | ||
161 | do_modprobe nfs | ||
162 | do_modprobe nfsd | ||
163 | mkdir -p "$PIPEFS_MOUNTPOINT" | ||
164 | if do_mount rpc_pipefs $PIPEFS_MOUNTPOINT | ||
165 | then | ||
166 | if [ "$NEED_IDMAPD" = yes ] | ||
167 | then | ||
168 | ecno -n " idmapd" | ||
169 | start-stop-daemon --start --oknodo --quiet \ | ||
170 | --exec /usr/sbin/rpc.idmapd | ||
171 | RET=$? | ||
172 | if [ $RET != 0 ]; then | ||
173 | echo " failed" $RET | ||
174 | exit $RET | ||
175 | fi | ||
176 | fi | ||
177 | if [ "$NEED_GSSD" = yes ] | ||
178 | then | ||
179 | do_modprobe rpcsec_gss_krb5 | ||
180 | echo -n " gssd" | ||
181 | |||
182 | start-stop-daemon --start --oknodo --quiet \ | ||
183 | --exec /usr/sbin/rpc.gssd | ||
184 | RET=$? | ||
185 | if [ $RET != 0 ]; then | ||
186 | echo " failed" $RET | ||
187 | exit $RET | ||
188 | fi | ||
189 | fi | ||
190 | fi | ||
191 | fi | ||
192 | echo " done" | ||
193 | ;; | ||
194 | |||
52 | stop) | 195 | stop) |
53 | stop_statd;; | 196 | echo -n "Stopping $DESC ..." |
197 | |||
198 | if [ "$NEED_GSSD" = yes ] | ||
199 | then | ||
200 | echo -n " gssd" | ||
201 | start-stop-daemon --stop --oknodo --quiet \ | ||
202 | --name rpc.gssd | ||
203 | RET=$? | ||
204 | if [ $RET != 0 ]; then | ||
205 | echo " failed" $RET | ||
206 | exit $RET | ||
207 | fi | ||
208 | fi | ||
209 | if [ "$NEED_IDMAPD" = yes ] | ||
210 | then | ||
211 | echo -n " idmapd" | ||
212 | start-stop-daemon --stop --oknodo --quiet \ | ||
213 | --name rpc.idmapd | ||
214 | RET=$? | ||
215 | if [ $RET != 0 ]; then | ||
216 | echo " failed" $RET | ||
217 | exit $RET | ||
218 | fi | ||
219 | fi | ||
220 | if [ "$NEED_STATD" = yes ] | ||
221 | then | ||
222 | echo -n " statd" | ||
223 | start-stop-daemon --stop --oknodo --quiet \ | ||
224 | --name rpc.statd | ||
225 | RET=$? | ||
226 | if [ $RET != 0 ]; then | ||
227 | echo " failed" $RET | ||
228 | exit $RET | ||
229 | fi | ||
230 | fi | ||
231 | do_umount $PIPEFS_MOUNTPOINT 2>/dev/null || true | ||
232 | echo " done" | ||
233 | ;; | ||
234 | |||
54 | status) | 235 | status) |
55 | status $NFS_STATD | 236 | if [ "$NEED_STATD" = yes ] |
56 | exit $?;; | 237 | then |
57 | restart) | 238 | if ! pidof rpc.statd >/dev/null |
239 | then | ||
240 | echo "rpc.statd not running" | ||
241 | exit 3 | ||
242 | fi | ||
243 | fi | ||
244 | |||
245 | if [ "$NEED_GSSD" = yes ] | ||
246 | then | ||
247 | if ! pidof rpc.gssd >/dev/null | ||
248 | then | ||
249 | echo "rpc.gssd not running" | ||
250 | exit 3 | ||
251 | fi | ||
252 | fi | ||
253 | |||
254 | if [ "$NEED_IDMAPD" = yes ] | ||
255 | then | ||
256 | if ! pidof rpc.idmapd >/dev/null | ||
257 | then | ||
258 | echo "rpc.idmapd not running" | ||
259 | exit 3 | ||
260 | fi | ||
261 | fi | ||
262 | |||
263 | echo "all daemons running" | ||
264 | exit 0 | ||
265 | ;; | ||
266 | |||
267 | restart | force-reload) | ||
58 | $0 stop | 268 | $0 stop |
59 | $0 start;; | 269 | sleep 1 |
270 | $0 start | ||
271 | ;; | ||
272 | |||
60 | *) | 273 | *) |
61 | echo "Usage: $0 {start|stop|status|restart}" | 274 | echo "Usage: nfscommon {start|stop|status|restart}" |
62 | exit 1;; | 275 | exit 1 |
276 | ;; | ||
63 | esac | 277 | esac |
278 | |||
279 | exit 0 | ||
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfsserver b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfsserver index 0f5747cc6d..cb6c1b4d08 100644 --- a/meta/recipes-connectivity/nfs-utils/nfs-utils/nfsserver +++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/nfsserver | |||
@@ -1,8 +1,10 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | |||
2 | ### BEGIN INIT INFO | 3 | ### BEGIN INIT INFO |
3 | # Provides: nfs-kernel-server | 4 | # Provides: nfs-kernel-server |
4 | # Required-Start: $remote_fs nfs-common $portmap hwclock | 5 | # Required-Start: $remote_fs nfs-common $portmap $time |
5 | # Required-Stop: $remote_fs nfs-common $portmap hwclock | 6 | # Required-Stop: $remote_fs nfs-common $portmap $time |
7 | # Should-Start: $named | ||
6 | # Default-Start: 2 3 4 5 | 8 | # Default-Start: 2 3 4 5 |
7 | # Default-Stop: 0 1 6 | 9 | # Default-Stop: 0 1 6 |
8 | # Short-Description: Kernel NFS server support | 10 | # Short-Description: Kernel NFS server support |
@@ -19,20 +21,25 @@ | |||
19 | # | 21 | # |
20 | # The environment variable NFS_SERVERS may be set in /etc/default/nfsd | 22 | # The environment variable NFS_SERVERS may be set in /etc/default/nfsd |
21 | # Other control variables may be overridden here too | 23 | # Other control variables may be overridden here too |
22 | test -r /etc/default/nfsd && . /etc/default/nfsd | 24 | test -r /etc/default/nfs-utils && . /etc/default/nfs-utils |
23 | # | 25 | # |
24 | # Location of executables: | 26 | # Location of executables: |
25 | test -x "$NFS_MOUNTD" || NFS_MOUNTD=/usr/sbin/rpc.mountd | 27 | test -x "$NFS_MOUNTD" || NFS_MOUNTD=/usr/sbin/rpc.mountd |
26 | test -x "$NFS_NFSD" || NFS_NFSD=/usr/sbin/rpc.nfsd | 28 | test -x "$NFS_NFSD" || NFS_NFSD=/usr/sbin/rpc.nfsd |
29 | test -x "$NFS_SVCGSSD" || NFS_SVCGSSD=/usr/sbin/rpc.svcgssd | ||
27 | # | 30 | # |
28 | # The user mode program must also exist (it just starts the kernel | 31 | # The user mode program must also exist (it just starts the kernel |
29 | # threads using the kernel module code). | 32 | # threads using the kernel module code). |
30 | test -x "$NFS_MOUNTD" || exit 0 | 33 | test -x "$NFS_MOUNTD" || exit 0 |
31 | test -x "$NFS_NFSD" || exit 0 | 34 | test -x "$NFS_NFSD" || exit 0 |
32 | # | 35 | |
33 | # Default is 8 threads, value is settable between 1 and the truely | 36 | case "$NEED_SVCGSSD" in |
34 | # ridiculous 99 | 37 | yes|no) |
35 | test "$NFS_SERVERS" != "" && test "$NFS_SERVERS" -gt 0 && test "$NFS_SERVERS" -lt 100 || NFS_SERVERS=8 | 38 | ;; |
39 | *) | ||
40 | NEED_SVCGSSD=no | ||
41 | ;; | ||
42 | esac | ||
36 | # | 43 | # |
37 | #---------------------------------------------------------------------- | 44 | #---------------------------------------------------------------------- |
38 | # Startup and shutdown functions. | 45 | # Startup and shutdown functions. |
@@ -49,6 +56,22 @@ stop_mountd(){ | |||
49 | echo done | 56 | echo done |
50 | } | 57 | } |
51 | # | 58 | # |
59 | #svcgssd | ||
60 | start_svcgssd(){ | ||
61 | modprobe -q rpcsec_gss_krb5 | ||
62 | if [ "$NEED_SVCGSSD" = "yes" ]; then | ||
63 | echo -n "starting svcgssd: " | ||
64 | start-stop-daemon --start --exec "$NFS_SVCGSSD" -- "$@" | ||
65 | echo done | ||
66 | fi | ||
67 | } | ||
68 | stop_svcgssd(){ | ||
69 | if [ "$NEED_SVCGSSD" = "yes" ]; then | ||
70 | echo -n "stop svcgssd: " | ||
71 | start-stop-daemon --stop --exec "$NFS_SVCGSSD" | ||
72 | echo done | ||
73 | fi | ||
74 | } | ||
52 | #nfsd | 75 | #nfsd |
53 | start_nfsd(){ | 76 | start_nfsd(){ |
54 | modprobe -q nfsd | 77 | modprobe -q nfsd |
@@ -62,7 +85,7 @@ start_nfsd(){ | |||
62 | exit 1 | 85 | exit 1 |
63 | } | 86 | } |
64 | 87 | ||
65 | echo -n "starting $1 nfsd kernel threads: " | 88 | echo -n "starting nfsd: " |
66 | start-stop-daemon --start --exec "$NFS_NFSD" -- "$@" | 89 | start-stop-daemon --start --exec "$NFS_NFSD" -- "$@" |
67 | echo done | 90 | echo done |
68 | } | 91 | } |
@@ -108,11 +131,13 @@ stop_nfsd(){ | |||
108 | case "$1" in | 131 | case "$1" in |
109 | start) | 132 | start) |
110 | test -r /etc/exports && exportfs -r | 133 | test -r /etc/exports && exportfs -r |
111 | start_nfsd "$NFS_SERVERS" | 134 | start_nfsd |
135 | start_svcgssd | ||
112 | start_mountd | 136 | start_mountd |
113 | test -r /etc/exports && exportfs -a;; | 137 | test -r /etc/exports && exportfs -a;; |
114 | stop) exportfs -ua | 138 | stop) exportfs -ua |
115 | stop_mountd | 139 | stop_mountd |
140 | stop_svcgssd | ||
116 | stop_nfsd;; | 141 | stop_nfsd;; |
117 | status) | 142 | status) |
118 | status /usr/sbin/rpc.mountd | 143 | status /usr/sbin/rpc.mountd |