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
.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"

# 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

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
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:=



.SILENT:

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



.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.



.include "service.mk"

































.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
_service_daemon: .USE
	cd ${DAEMON_$@_CWD}
	daemon -u ${DAEMON_$@_USER} -r -P /var/run/daemon.$@.pid ${DAEMON_$@_COMMAND} ${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
_service_daemon: .USE
	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
# 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

# enabled by default?
DAEMON_example_ENABLE?=no

# general service flags
DAEMON_example_FLAGS?=









|
|







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, 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
.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;}
	ifconfig ${iface} ${item}
.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 \







|

|
|







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;}
	ifconfig ${iface} ${item}
.	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
_service_plain: .USE
	chroot -u ${DAEMON_$@_USER} -g ${DAEMON_$@_GROUP} ${DAEMON_$@_CWD} ${DAEMON_$@_COMMAND} ${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."

|






1
2
3
4
5
6
7
8
_service_plain: .USE
	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
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








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

	# kldload modules if any

	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
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 ;\
	for CMD in ${DAEMON_$@_COMMAND}; do \
		if [ -x $${CMD} ]; then \
			export CMD ;\
			break ;\
		fi ;\
	done ;\
	echo $${CMD}

_service_pre: .USEBEFORE


	# 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
_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}

_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
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 $@ $${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
.if exists(/usr/local/sbin/wpa_supplicant)
DAEMON_wpa_supplicant_COMMAND?=/usr/local/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}
<
|
<
<
<






1



2
3
4
5
6

DAEMON_wpa_supplicant_COMMAND?=/usr/local/sbin/wpa_supplicant /usr/sbin/wpa_supplicant



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}