Home
Timeline
Files
Branches
Tags
Tickets
Logout
...
Overview
Context
Changes
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 $${CM D} ${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?=
︙
︙
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} $${CM D} ${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
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 $@ $${CM D} ${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}