You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/eclass/s6.eclass

118 lines
2.7 KiB

# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: s6.eclass
# @MAINTAINER:
# William Hubbs <williamh@gentoo.org>
# @SUPPORTED_EAPIS: 8
# @BLURB: helper functions to install s6 services
# @DESCRIPTION:
# This eclass provides helpers to install s6 services.
# @EXAMPLE:
#
# @CODE
# inherit s6
#
# src_install() {
# ...
# s6_install_service myservice "${FILESDIR}"/run-s6 "${FILESDIR}"/finish-s6
# ...
# If you want a service to be logged, install the log service as
# shown here.
# s6_install_service myservice/log "${FILESDIR}"/log-run-s6 \
# "${FILESDIR}"/log-finish-s6
# ...
# }
# @CODE
case ${EAPI} in
8) ;;
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
esac
# @FUNCTION: _s6_get_servicedir
# @INTERNAL
# @DESCRIPTION:
# Get unprefixed servicedir.
_s6_get_servicedir() {
echo /var/svc.d
}
# @FUNCTION: s6_get_servicedir
# @DESCRIPTION:
# Output the path for the s6 service directory (not including ${D}).
s6_get_servicedir() {
debug-print-function ${FUNCNAME} "$@"
echo "${EPREFIX}$(_s6_get_servicedir)"
}
# @FUNCTION: s6_install_service
# @USAGE: <servicename> <run> [finish]
# @DESCRIPTION:
# Install an s6 service.
# servicename is the name of the service.
# run is the run script for the service.
# finish is the optional finish script for the service.
s6_install_service() {
debug-print-function ${FUNCNAME} "$@"
local name="$1"
local run="$2"
local finish="$3"
[[ -z ${name} ]] &&
die "${ECLASS}.eclass: you must specify the s6 service name"
[[ -z ${run} ]] &&
die "${ECLASS}.eclass: you must specify the s6 service run script"
(
local servicepath="$(_s6_get_servicedir)/${name}"
exeinto "${servicepath}"
newexe "${run}" run
[[ -n ${finish} ]] && newexe "${finish}" finish
)
}
# @FUNCTION: s6_service_down
# @USAGE: <servicename>
# @DESCRIPTION:
# Install the "down" flag so this service will not be started by
# default.
# servicename is the name of the service.
s6_service_down() {
debug-print-function ${FUNCNAME} "$@"
local name="$1"
[[ -z ${name} ]] &&
die "${ECLASS}.eclass: you must specify the s6 service name"
(
touch "${T}"/down || die
local servicepath="$(_s6_get_servicedir)/${name}"
insinto "${servicepath}"
doins "${T}"/down
)
}
# @FUNCTION: s6_service_nosetsid
# @USAGE: <servicename>
# @DESCRIPTION:
# Install the "nosetsid" flag so this service will not be made a session
# leader.
# servicename is the name of the service.
s6_service_nosetsid() {
debug-print-function ${FUNCNAME} "$@"
local name="$1"
[[ -z ${name} ]] &&
die "${ECLASS}.eclass: you must specify the s6 service name"
(
touch "${T}"/nosetsid || die
local servicepath="$(_s6_get_servicedir)/${name}"
insinto "${servicepath}"
doins "${T}"/nosetsid
)
}