146 lines
3.8 KiB
Bash
Executable file
146 lines
3.8 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# systemd trigger to enable/disable services, create/remove files via
|
|
# systemd-tmpfiles(5) and load/unload modules via modules-load.d(5).
|
|
#
|
|
# The following env vars are recognized:
|
|
# - systemd_services (expects at least two arguments: service name
|
|
# and a boolean to restart automatically the service on upgrade).
|
|
# - systemd_tmpfiles (expects a black separated list of fileanmes).
|
|
# - systemd_modules (expects a blank separated list of filenames).
|
|
#
|
|
# Examples:
|
|
|
|
# systemd_services="foo.service off blah.service on"
|
|
# systemd_tmpfiles="foo.conf blah.conf"
|
|
# systemd_modules="foo.conf blah.conf"
|
|
#
|
|
# Arguments: $ACTION = [run/targets]
|
|
# $TARGET = [post-install/pre-remove]
|
|
# $PKGNAME
|
|
# $VERSION
|
|
# $UPDATE = [yes/no]
|
|
#
|
|
ACTION="$1"
|
|
TARGET="$2"
|
|
PKGNAME="$3"
|
|
VERSION="$4"
|
|
UPDATE="$5"
|
|
|
|
export PATH="$PATH:/usr/local/bin"
|
|
|
|
case "$ACTION" in
|
|
targets)
|
|
echo "post-install pre-remove"
|
|
;;
|
|
run)
|
|
[ ! -x bin/systemctl ] && exit 0
|
|
[ -z "$systemd_services" -a -z "$systemd_tmpfiles" -a -z "$systemd_modules" ] && exit 1
|
|
|
|
systemd-notify --booted
|
|
if [ $? -eq 0 ]; then
|
|
systemd_booted=yes
|
|
fi
|
|
|
|
set -- ${systemd_services}
|
|
while [ $# -gt 0 ]; do
|
|
_srv="$1"
|
|
case "$2" in
|
|
[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
|
|
restart=1
|
|
;;
|
|
*)
|
|
unset restart
|
|
;;
|
|
esac
|
|
if [ "$TARGET" = "pre-remove" ]; then
|
|
if [ "$UPDATE" = "no" ]; then
|
|
# package is being removed.
|
|
# stop and disable the unit.
|
|
echo "Stopping systemd service ${_srv}..."
|
|
systemctl stop ${_srv} >/dev/null 2>&1 || :
|
|
echo "Disabling systemd service ${_srv}..."
|
|
systemctl --no-reload disable ${_srv} >/dev/null 2>&1 || :
|
|
else
|
|
# Package update, just disable the unit.
|
|
echo "Disabling systemd service ${_srv}..."
|
|
systemctl --no-reload disable ${_srv} >/dev/null 2>&1 || :
|
|
|
|
fi
|
|
else
|
|
if [ "$UPDATE" = "no" ]; then
|
|
# package is being installed.
|
|
# enable (but don't start) the unit by default.
|
|
echo "Enabling systemd service ${_srv}..."
|
|
systemctl enable ${_srv} >/dev/null 2>&1 || :
|
|
if [ -n "$systemd_booted" ]; then
|
|
# reload systemd if running.
|
|
systemctl daemon-reload >/dev/null 2>&1 || :
|
|
fi
|
|
cat <<_EOF
|
|
==========================================================================
|
|
|
|
The service "${_srv}" has been enabled by default,
|
|
that means that it will be started in next boot. To start it immediately,
|
|
execute the following command (as root):
|
|
|
|
$ systemctl start ${_srv}
|
|
|
|
And to stop it:
|
|
|
|
$ systemctl stop ${_srv}
|
|
|
|
Refer to the systemd documentation if more information is required.
|
|
|
|
==========================================================================
|
|
_EOF
|
|
else
|
|
# Enable the unit in case it wasn't added.
|
|
systemctl enable ${_srv} >/dev/null 2>&1 || :
|
|
|
|
# package is being updated.
|
|
if [ -n "$system_booted" ]; then
|
|
# reload systemd if running.
|
|
systemctl daemon-reload >/dev/null 2>&1 || :
|
|
fi
|
|
if [ -n "$restart" ]; then
|
|
# try restarting package service.
|
|
systemctl try-restart ${_srv} >/dev/null 2>&1 || :
|
|
else
|
|
echo "systemd ${_srv} service must be restarted manually!"
|
|
fi
|
|
fi
|
|
fi
|
|
shift; shift
|
|
done
|
|
if [ "$TARGET" = "pre-remove" ]; then
|
|
# Unload the modules specified in systemd_modules files.
|
|
for f in ${systemd_modules}; do
|
|
for j in $(cat usr/lib/modules-load.d/${f}); do
|
|
modprobe -rq ${j} || :
|
|
done
|
|
done
|
|
else
|
|
# Create stuff specified in systemd_tmpfiles files.
|
|
for f in ${systemd_tmpfiles}; do
|
|
if [ "$PKGNAME" = "systemd" -a "$f" = "systemd.conf" ]; then
|
|
# This file is only meant to be run at boot-time.
|
|
continue
|
|
fi
|
|
systemd-tmpfiles --create ${f} || :
|
|
done
|
|
# Load modules specified in systemd_modules files.
|
|
for f in ${systemd_modules}; do
|
|
[ ! -f "usr/lib/modules-load.d/${f}" ] && continue
|
|
for j in "$(cat usr/lib/modules-load.d/${f})"; do
|
|
modprobe -q ${j} || :
|
|
done
|
|
done
|
|
fi
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|