|
|
|
# Copyright 1999-2015 Gentoo Foundation
|
|
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
|
|
|
|
# @ECLASS: s6.eclass
|
|
|
|
# @MAINTAINER:
|
|
|
|
# William Hubbs <williamh@gentoo.org>
|
|
|
|
# @SUPPORTED_EAPIS: 5 6
|
|
|
|
# @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:-0} in
|
|
|
|
5|6) ;;
|
|
|
|
*) die "${ECLASS}.eclass: API in EAPI ${EAPI} not yet established" ;;
|
|
|
|
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"
|
|
|
|
|
|
|
|
[[ $name ]] ||
|
|
|
|
die "${ECLASS}.eclass: you must specify the s6 service name"
|
|
|
|
[[ $run ]] ||
|
|
|
|
die "${ECLASS}.eclass: you must specify the s6 service run script"
|
|
|
|
|
|
|
|
(
|
|
|
|
local servicepath="$(_s6_get_servicedir)/$name"
|
|
|
|
exeinto "$servicepath"
|
|
|
|
newexe "$run" run
|
|
|
|
[[ $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"
|
|
|
|
|
|
|
|
[[ $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"
|
|
|
|
|
|
|
|
[[ $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
|
|
|
|
)
|
|
|
|
}
|