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