#!/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