|
@@ -1,74 +1,69 @@
|
|
|
#!/bin/sh
|
|
|
|
|
|
-my_name="$0"
|
|
|
+DAEMON="tpm2-abrmd"
|
|
|
+PIDFILE="/var/run/$DAEMON.pid"
|
|
|
|
|
|
-check_required_files() {
|
|
|
- [ -f "$1" ] || {
|
|
|
- echo "$my_name: $1 is missing"
|
|
|
- exit 1
|
|
|
- }
|
|
|
-}
|
|
|
+TABRMD_ARGS="--tcti=device --logger=syslog --max-connections=20"
|
|
|
+
|
|
|
+# shellcheck source=/dev/null
|
|
|
+[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"
|
|
|
|
|
|
check_device() {
|
|
|
- ls -1 /dev/tpm[0-9]* > /dev/null 2>&1 || {
|
|
|
- echo "device driver not loaded, skipping."
|
|
|
+ if ! ls /dev/tpm[0-9]* > /dev/null 2>&1; then
|
|
|
+ echo "no TPM device found, skipping."
|
|
|
exit 0
|
|
|
- }
|
|
|
- chown tss:tss /dev/tpm[0-9]* && chmod 600 /dev/tpm*
|
|
|
-}
|
|
|
-
|
|
|
-rm_stale_pidfile() {
|
|
|
- if [ -e "$1" ]; then
|
|
|
- exe="/proc/$(cat "$1")/exe"
|
|
|
- { [ -s "$exe" ] && [ "$(readlink -f "$exe")" = "$2" ]; } || rm -f "$1"
|
|
|
+ fi
|
|
|
+ if [ ! -x /sbin/udevd ]; then
|
|
|
+ chown tss:tss /dev/tpm[0-9]* && chmod 660 /dev/tpm*
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
start() {
|
|
|
- printf "Starting tpm2-abrmd: "
|
|
|
+ printf 'Starting %s: ' "$DAEMON"
|
|
|
check_device
|
|
|
- rm_stale_pidfile /var/run/tpm2-abrmd.pid /usr/sbin/tpm2-abrmd
|
|
|
- start-stop-daemon -S -q -o -b -m -p /var/run/tpm2-abrmd.pid -c tss:tss -x /usr/sbin/tpm2-abrmd -- ${DAEMON_OPTS} || {
|
|
|
+ # shellcheck disable=SC2086 # we need the word splitting
|
|
|
+ start-stop-daemon --start --background --chuid tss:tss --make-pidfile \
|
|
|
+ --pidfile "$PIDFILE" --exec "/usr/sbin/$DAEMON" \
|
|
|
+ -- ${TABRMD_ARGS}
|
|
|
+ status=$?
|
|
|
+ if [ "$status" -eq 0 ]; then
|
|
|
+ echo "OK"
|
|
|
+ else
|
|
|
echo "FAIL"
|
|
|
- exit 1
|
|
|
- }
|
|
|
- pidof /usr/sbin/tpm2-abrmd > /var/run/tpm2-abrmd.pid
|
|
|
- echo "OK"
|
|
|
+ fi
|
|
|
+ return "$status"
|
|
|
}
|
|
|
|
|
|
stop() {
|
|
|
- printf "Stopping tpm2-abrmd: "
|
|
|
- start-stop-daemon -K -q -o -p /var/run/tpm2-abrmd.pid -u tss -x /usr/sbin/tpm2-abrmd || {
|
|
|
+ printf 'Stopping %s: ' "$DAEMON"
|
|
|
+ start-stop-daemon --stop --pidfile "$PIDFILE" --exec "/usr/sbin/$DAEMON"
|
|
|
+ status=$?
|
|
|
+ if [ "$status" -eq 0 ]; then
|
|
|
+ echo "OK"
|
|
|
+ else
|
|
|
echo "FAIL"
|
|
|
- exit 1
|
|
|
- }
|
|
|
- rm_stale_pidfile /var/run/tpm2-abrmd.pid /usr/sbin/tpm2-abrmd
|
|
|
- echo "OK"
|
|
|
+ return "$status"
|
|
|
+ fi
|
|
|
+ while start-stop-daemon --stop --test --quiet --pidfile "$PIDFILE" \
|
|
|
+ --exec "/usr/sbin/$DAEMON"; do
|
|
|
+ sleep 0.1
|
|
|
+ done
|
|
|
+ rm -f "$PIDFILE"
|
|
|
+ return "$status"
|
|
|
}
|
|
|
|
|
|
-check_required_files /etc/dbus-1/system.d/tpm2-abrmd.conf
|
|
|
-
|
|
|
-# defaults
|
|
|
-DAEMON_OPTS="--tcti=device --logger=syslog --max-connections=20"
|
|
|
-
|
|
|
-# Read configuration variable file if it is present
|
|
|
-[ -r /etc/default/tpm2-abrmd ] && . /etc/default/tpm2-abrmd
|
|
|
+restart() {
|
|
|
+ stop
|
|
|
+ start
|
|
|
+}
|
|
|
|
|
|
case "$1" in
|
|
|
- start)
|
|
|
- start
|
|
|
- ;;
|
|
|
- stop)
|
|
|
- stop
|
|
|
- ;;
|
|
|
- restart|reload)
|
|
|
- stop
|
|
|
- sleep 1
|
|
|
- start
|
|
|
- ;;
|
|
|
+ start|stop|restart)
|
|
|
+ "$1";;
|
|
|
+ reload)
|
|
|
+ # Restart, since there is no true "reload" feature.
|
|
|
+ restart;;
|
|
|
*)
|
|
|
echo "Usage: tpm2-abrmd {start|stop|restart|reload}" >&2
|
|
|
exit 1
|
|
|
esac
|
|
|
-
|
|
|
-exit 0
|