Check-in [cbff0b494f]
Logged in as anonymous
Overview
Comment:change service handling to accept multiple command names
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: cbff0b494f4c8ccf763f00450b1d2c52d38abcf0a6d73b78dced7996131a91cc
User & Date: arcade on 2023-08-18 14:44:32.520
Other Links: manifest | tags
Context
2023-11-04
08:43
adjkerntz was grabbing open file sockets from parent check-in: 6de7ae29c1 user: arcade tags: trunk
2023-08-18
14:44
change service handling to accept multiple command names check-in: cbff0b494f user: arcade tags: trunk
13:39
bump license check-in: 2d88e848f0 user: arcade tags: trunk
Changes
Modified Makefile from [2681177168] to [5d348d4b86].
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
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












-
-






-
-













-
-
-
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+







.include "defaults.mk"
.include "order.mk"
.include "/etc/mrc.mk"
.export

.MAKE.JOBS?=	${NCPU}
.if !empty(.MAKE.MODE:Mcompat)
.error "ERROR: MRC doesn't support "compat" mode."
.endif

OTHER_TARGETS:=

.include "starter.mk"

.SILENT:

install:
	install rc /etc/rc
	install rc.shutdown /etc/rc.shutdown

SCRIPTS:=${:!find /etc/mrc -name '*.service.mk'!:S/^\/etc\/mrc\///:S/.service.mk$//}

.if defined(AUTOBOOT)
.include "init.mk"

.ERROR:
	: ERROR: ABORTING BOOT (sending SIGTERM to parent)!
	: target ${.ERROR_TARGET} failed to execute:
	: ${.ERROR_CMD}
	kill 1
.endif

test:
	echo Empty target.

# Create service targets
.for service in ${SCRIPTS}
.	include "${service}.service.mk"
.include "service.mk"

# Set DAEMON defaults
DAEMON_${service}_CWD?=	/
DAEMON_${service}_ENABLE?=	no
DAEMON_${service}_USER?=	root
DAEMON_${service}_GROUP?=	wheel

.	if !defined(DAEMON_${service}_COMMAND)
.		warning MRC> Service [${service}] defunct: no COMMAND specified
.	else

# Service creation targets
.		if !target(${service})
${service}: ${SERVICE_EXIT} ${_SERVICE}
.		endif

# Service status targets
.		if !target(${service}_status)
${service}_status: ${_SERVICE_STATUS}
.		endif

# Service exit targets
.		if !target(${service}_exit)
${service}_exit: ${_SERVICE_EXIT} ${DAEMON_${service}_DEPS:S/$/_exit/}
.		endif

DAEMON_EXIT: ${service}_exit
.	endif
.endfor

.MAIN: ${SCRIPTS} ${TARGETS}

.PHONY: ${SCRIPTS} ${OTHER_TARGETS} ${TARGETS}
.undef OTHER_TARGETS SCRIPTS TARGETS
.undef OTHER_TARGETS TARGETS

ENABLED:=${:!env!:C/=.*//:M*_ENABLE}

.for var in ${ENABLED}
.	if !empty(${var}:tl:Mno)
#.info ${var}
.		undef ${var}
1
2
3


4
5
6
7
8
9
1


2
3
4
5
6
7
8
9

-
-
+
+






_service_daemon: .USE
	cd ${DAEMON_$@_CWD}
	daemon -u ${DAEMON_$@_USER} -r -P /var/run/daemon.$@.pid ${DAEMON_$@_COMMAND} ${DAEMON_$@_FLAGS} ${DAEMON$@_FOREGROUND}
	cd ${DAEMON_$@_CWD} ;\
	daemon -u ${DAEMON_$@_USER} -r -P /var/run/daemon.$@.pid $${CMD} ${DAEMON_$@_FLAGS} ${DAEMON$@_FOREGROUND}

_service_daemon_status: .USE
	echo "Not supported yet."

_service_daemon_exit: .USEBEFORE
	kill -TERM /var/run/daemon.${@:S/_exit//}.pid
1
2
3
4
5
6
7
8
9
10


11
12
13
14
15
16
17
1
2
3
4
5
6
7
8


9
10
11
12
13
14
15
16
17








-
-
+
+







# vim:ft=make:

# flags to force daemonizing
DAEMON_example_BACKGROUND?=

# default working directory
DAEMON_example_CWD?=/some/path

# command to start service
DAEMON_example_COMMAND?=/path/service
# command to start service, first present executable is used
DAEMON_example_COMMAND?=/path/service /path/other/service

# enabled by default?
DAEMON_example_ENABLE?=no

# general service flags
DAEMON_example_FLAGS?=

Modified init.mk from [9ab476e53e] to [453dce1e07].
213
214
215
216
217
218
219
220

221
222
223


224
225
226
227
228
229
230
213
214
215
216
217
218
219

220
221


222
223
224
225
226
227
228
229
230







-
+

-
-
+
+







.endif

NETWORK_EXIT: nfsclient_exit

netif: adjkerntz wlans cloned kld mounttmpfs utmpx
	echo "MRC:$@> Starting interfaces: ${IFCONFIG_IFACES}"
.for iface in ${IFCONFIG_IFACES}
.for item in ${IFCONFIG_${iface}:tW:ts;}
.	for item in ${IFCONFIG_${iface}:tW:ts;}
	ifconfig ${iface} ${item}
.endfor
.undef _IFCONFIG_ARGS
.	endfor
.	undef _IFCONFIG_ARGS
.endfor

pf: pflogd
.if empty(PF_ENABLE:tl:Mno)
	echo "MRC:$@> Enabling and loading rules."
	kldload -n pf || exit 1
	if [ -r ${PF_RULES} ]; then \
1
2

3
4
5
6
7
8
1

2
3
4
5
6
7
8

-
+






_service_plain: .USE
	chroot -u ${DAEMON_$@_USER} -g ${DAEMON_$@_GROUP} ${DAEMON_$@_CWD} ${DAEMON_$@_COMMAND} ${DAEMON_$@_FLAGS} ${DAEMON_$@_BACKGROUND}
	chroot -u ${DAEMON_$@_USER} -g ${DAEMON_$@_GROUP} ${DAEMON_$@_CWD} $${CMD} ${DAEMON_$@_FLAGS} ${DAEMON_$@_BACKGROUND}

_service_status: .USE
	echo "Plain service status doesn't work right now."

_service_exit: .USEBEFORE
	echo "Plain service exit doesn't work right now."
Added service.mk version [abfb422fab].
1
2
3
4
5
6
7
8
9








10
11
12
13
14

15
16
17
18
19
20
21
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








-
+
+
+
+
+
+
+
+


-
-

+







OTHER_TARGETS+=_service_pre

STARTER?=svc

_service_check: .USEBEFORE
	# check whether service is enabled
	if [ -z "$${DAEMON_$@_ENABLE}" -a -z "${FORCE}" ]; then \
		exit 0 ;\
	fi
	fi ;\
	for CMD in ${DAEMON_$@_COMMAND}; do \
		if [ -x $${CMD} ]; then \
			export CMD ;\
			break ;\
		fi ;\
	done ;\
	echo $${CMD}

_service_pre: .USEBEFORE
	echo "MRC:$@> Starting service."

	# kldload modules if any
	echo "MRC:$@> Starting service." ;\
	if [ -n "${DAEMON_$@_MODULES}" ]; then \
		kldload -n ${DAEMON_$@_MODULES}; \
	fi

_service_post_exit: .USE
	echo "MRC:${@:S/_exit//}> stopped."

1
2
3
4

5
6
7
8
9
10
11
1
2
3

4
5
6
7
8
9
10
11



-
+







_service_svc: .USE
	cd ${DAEMON_$@_CWD} ;\
	svc list $@ | grep -q $@ || \
		svc -u ${DAEMON_$@_USER} -g ${DAEMON_$@_GROUP} ${DAEMON_$@_RESTART:D-r} ${DAEMON_$@_RESTART} init $@ ${DAEMON_$@_COMMAND} ${DAEMON_$@_FLAGS} ${DAEMON_$@_FOREGROUND}
		svc -u ${DAEMON_$@_USER} -g ${DAEMON_$@_GROUP} ${DAEMON_$@_RESTART:D-r} ${DAEMON_$@_RESTART} init $@ $${CMD} ${DAEMON_$@_FLAGS} ${DAEMON_$@_FOREGROUND}

_service_svc_status: .USE
	svc status ${@:S/_status//}

_service_svc_exit: .USEBEFORE
	svc list ${@:S/_exit//} | grep -q ${@:S/_exit//} || true && \
		svc -s exit ${@:S/_exit//}
1
2

3
4
5
6
7
8
9
10


1



2
3
4
5
6
-
-
+
-
-
-





.if exists(/usr/local/sbin/wpa_supplicant)
DAEMON_wpa_supplicant_COMMAND?=/usr/local/sbin/wpa_supplicant
DAEMON_wpa_supplicant_COMMAND?=/usr/local/sbin/wpa_supplicant /usr/sbin/wpa_supplicant
.elif exists(/usr/sbin/wpa_supplicant)
DAEMON_wpa_supplicant_COMMAND?=/usr/sbin/wpa_supplicant
.endif
DAEMON_wpa_supplicant_BACKGROUND?=-B
DAEMON_wpa_supplicant_ENABLE?=no
DAEMON_wpa_supplicant_FLAGS?=-M -iwlan* -Dbsd -c/etc/wpa_supplicant.conf

wpa_supplicant: ${_SERVICE}