summaryrefslogtreecommitdiff
path: root/eclass/s6.eclass
blob: 464fb50b1103f24c58a46fd05e46b32ee7c0c238 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

# @ECLASS: s6.eclass
# @MAINTAINER:
# William Hubbs <williamh@gentoo.org>
# @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) ;;
	*) 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
	)
}