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
|
#!/bin/bash
#
# systemd helper script for openafs-client.service. This is only intended to be
# called from the openafs-client.service unit file.
set -e
UMOUNT_TIMEOUT=30
case $1 in
ExecStart)
if fs sysname >/dev/null 2>&1 ; then
# If we previously tried to stop the client and failed (because
# e.g. /afs was in use), our unit will be deactivated but the
# client will keep running. So if we're starting up, but the client
# is currently running, do not perform the startup sequence but
# just return success, to let the unit activate, so stopping the
# unit can go through the shutdown sequence again.
echo AFS client appears to be running -- skipping startup
exit 0
fi
# If the kernel module is already initialized from a previous client
# run, it must be unloaded and loaded again. So if the module is
# currently loaded, unload it in case it was (partly) initialized.
if lsmod | grep -wq ^libafs ; then
/sbin/rmmod --verbose libafs
fi
CACHEDIR=$(cut -d ':' -f 2 /etc/openafs/cacheinfo)
if ! mkdir -p "${CACHEDIR}"; then
echo "Unable to create cache dir ${CACHEDIR}"
exit 1
fi
/sbin/modprobe --verbose libafs
exec /usr/sbin/afsd $AFSD_ARGS $AFSD_CACHE_ARGS
;;
ExecStop)
if /bin/umount --verbose /afs ; then
exit 0
else
echo "Failed to unmount /afs: $?"
fi
state=$(systemctl is-system-running || true)
if [ "$state" = stopping ] && [ x"$UMOUNT_TIMEOUT" != x ] && /bin/mountpoint --quiet /afs ; then
# If we are shutting down the system, failing to umount /afs
# can lead to longer delays later as systemd tries to forcibly
# kill our afsd processes. So retry the umount a few times,
# just in case other /afs-using processes just need a few
# seconds to go away.
echo "For system shutdown, retrying umount /afs for $UMOUNT_TIMEOUT secs"
interval=3
for (( i = 0; i < $UMOUNT_TIMEOUT; i += $interval )) ; do
sleep $interval
if /bin/umount --verbose /afs ; then
exit 0
fi
if ! /bin/mountpoint --quiet /afs ; then
echo "mountpoint /afs disappeared; bailing out"
exit 0
fi
done
echo "Still cannot umount /afs, bailing out"
fi
exit 1
;;
ExecStopPost)
/usr/sbin/afsd -shutdown || true
/sbin/rmmod --verbose libafs || true
if lsmod | grep -wq ^libafs ; then
echo "Cannot unload the OpenAFS client kernel module."
echo "systemd will consider the openafs-client.service unit inactive, but the AFS client may still be running."
echo "To stop the client, stop all access to /afs, and then either:"
echo "stop the client manually:"
echo " umount /afs"
echo " rmmod libafs"
echo "or start and stop the openafs-client.service unit:"
echo " systemctl start openafs-client.service"
echo " systemctl stop openafs-client.service"
echo 'See "journalctl -u openafs-client.service" for details.'
exit 1
fi
exit 0
;;
esac
echo "Usage: $0 {ExecStart|ExecStop|ExecStopPost}" >&2
exit 1
|