ADDED LICENSE.0BSD Index: LICENSE.0BSD ================================================================== --- /dev/null +++ LICENSE.0BSD @@ -0,0 +1,12 @@ +Copyright (C) 2019-2022 by Volodymyr Kostyrko + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. Index: Makefile ================================================================== --- Makefile +++ Makefile @@ -1,79 +1,69 @@ .include "defaults.mk" +.include "order.mk" .include "/etc/mrc.mk" .export -OTHER_TARGETS:=_service _earlyservice -STARTER?=svc - -.for starter in ${:!find /etc/mrc -name '*.starter.mk'!:S/\/etc\/mrc\///} -.include "${starter}" -.endfor - -.if !target(_service) || !target(_earlyservice) -.error No service handler defined. -.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\///} -TARGETS:=${SCRIPTS:S/.service.mk//} +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 -.else -DAEMON: NETWORK SERVERS -LOGIN: DAEMON -NETWORK: -SERVERS: -SERVICE: - -mount: -root: -netif: -newsyslog: .endif test: echo Empty target. -.for file in ${SCRIPTS} -#.info ${file} -.include "${file}" -.if !target(${file:S/.service.mk//}) -${file:S/.service.mk//}: _service -.endif -.if !target(${file:S/.service.mk/_status/}) -${file:S/.service.mk/_status/}: _status -.endif -.if !target(${file:S/.service.mk/_restart/}) -${file:S/.service.mk/_restart/}: _restart -.endif +# Create service targets +.for service in ${SCRIPTS} +. include "${service}.service.mk" + +# Service creation targets +. if !target(${service}) +${service}: ${_SERVICE} +. endif + +# Service creation targets +. if !target(${service}_status) +${service}_status: ${_SERVICE_STATUS} +. endif + +# Service exit targets +. if !target(${service}_exit) +${service}_exit: ${_SERVICE_EXIT} +. endif + +DAEMON_EXIT: ${service}_exit .endfor -.MAIN: ${TARGETS} +.MAIN: ${SCRIPTS} ${TARGETS} -.PHONY: ${TARGETS} ${OTHER_TARGETS} +.PHONY: ${SCRIPTS} ${OTHER_TARGETS} ${TARGETS} +.undef OTHER_TARGETS SCRIPTS TARGETS -.undef TARGETS OTHER_TARGETS SCRIPTS - -ENABLED=${:!env!:C/=.*//:M*_ENABLE} +ENABLED:=${:!env!:C/=.*//:M*_ENABLE} .for var in ${ENABLED} -.if !empty(${var}:tl:Mno) +. if !empty(${var}:tl:Mno) #.info ${var} -.undef ${var} -.endif +. undef ${var} +. endif .endfor .undef ENABLED .unexport-env .export Index: automountd.service.mk ================================================================== --- automountd.service.mk +++ automountd.service.mk @@ -1,6 +1,8 @@ DAEMON_automountd_COMMAND?=/usr/sbin/automountd DAEMON_automountd_ENABLE?=no DAEMON_automountd_MODULES=autofs -automountd: _service # nfsclient -> DAEMON - test -z "$${DAEMON_$@_ENABLE}" || /usr/sbin/automount +automountd: ${_SERVICE} # nfsclient -> DAEMON + /usr/sbin/automount + +NETWORK_EXIT: automountd_exit Index: bsdstat.service.mk ================================================================== --- bsdstat.service.mk +++ bsdstat.service.mk @@ -1,5 +1,6 @@ DAEMON_bsdstats_COMMAND?=/usr/local/etc/periodic/monthly/300.statistics DAEMON_bsdstats_ENABLE?=no DAEMON_bsdstats_FLAGS?=-nodelay -bsdstats: _plain_service +bsdstats: _service_plain +bsdstats_exit: Index: cron.service.mk ================================================================== --- cron.service.mk +++ cron.service.mk @@ -1,4 +1,4 @@ DAEMON_cron_COMMAND?=/usr/sbin/cron DAEMON_cron_FLAGS?=-s -cron: _service LOGIN +cron: ${_SERVICE} LOGIN Index: daemon.starter.mk ================================================================== --- daemon.starter.mk +++ daemon.starter.mk @@ -1,16 +1,8 @@ -LOCAL_TARGETS:=_service_daemon _earlyservice_daemon -OTHER_TARGETS+=${LOCAL_TARGETS} -.if ${STARTER} == "daemon" -LOCAL_TARGETS+=_service _earlyservice -.endif - -.for target in ${LOCAL_TARGETS} -${target}: ${target:C/_service.*/DAEMON/:C/_earlyservice.*/SERVICE/} .USE - test -z "$${DAEMON_$@_ENABLE}" || { \ - echo "MRC:$@> Starting service."; \ - test -n "${DAEMON_$@_MODULES}" && kldload -n ${DAEMON_$@_MODULES} || true; \ - daemon -c -u ${DAEMON_$@_USER:Uroot} -r -P /var/run/daemon.$@.pid ${DAEMON_$@_COMMAND} ${DAEMON_$@_FLAGS} ${DAEMON$@_FOREGROUND}; \ - } -.endfor - -.undef LOCAL_TARGETS +_service_daemon: .USE + daemon -c -u ${DAEMON_$@_USER:Uroot} -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.$@.pid Index: dbus.service.mk ================================================================== --- dbus.service.mk +++ dbus.service.mk @@ -2,10 +2,10 @@ DAEMON_dbus_ENABLE?=no DAEMON_dbus_FLAGS?=--system DAEMON_dbus_BACKGROUND?=--fork DAEMON_dbus_FOREGROUND?=--nofork -dbus: _service - test -z "$${DAEMON_$@_ENABLE}" || { \ - /usr/local/bin/dbus-uuidgen --ensure; \ - mkdir -p /var/run/dbus; \ - } +dbus: ${_SERVICE} + /usr/local/bin/dbus-uuidgen --ensure + mkdir -p /var/run/dbus + +dbus_exit: ${_SERVICE_EXIT} slim_exit Index: devd.service.mk ================================================================== --- devd.service.mk +++ devd.service.mk @@ -1,6 +1,6 @@ DAEMON_devd_COMMAND?=/sbin/devd DAEMON_devd_ENABLE?=yes DAEMON_devd_FOREGROUND?=-dq -devd: _earlyservice - test -n "$${DAEMON_$@_ENABLE}" || sysctl hw.bus.devctl_disable=1 +devd: ${_EARLYSERVICE} + sysctl hw.bus.devctl_disable=1 Index: dhcpcd.service.mk ================================================================== --- dhcpcd.service.mk +++ dhcpcd.service.mk @@ -2,6 +2,9 @@ DAEMON_dhcpcd_ENABLE?=no DAEMON_dhcpcd_FLAGS?="-h${HOSTNAME}" DAEMON_dhcpcd_BACKGROUND?=-b DAEMON_dhcpcd_FOREGROUND?=-B -dhcpcd: _service NETWORK SERVICE # mount -> SERVICE, cleanvar -> SERVICE +dhcpcd: ${_SERVICE} NETWORK SERVICE # mount -> SERVICE, cleanvar -> SERVICE + +NETWORK_EXIT: dhcpcd_exit +SERVICE_EXIT: dhcpcd_exit Index: dntpd.service.mk ================================================================== --- dntpd.service.mk +++ dntpd.service.mk @@ -1,4 +1,6 @@ DAEMON_dntpd_COMMAND?=/usr/sbin/dntpd DAEMON_dntpd_FOREGROUND?=-F -dntpd: _service NETWORK +dntpd: ${_SERVICE} NETWORK + +NETWORK_EXIT: dntpd_exit Index: inetd.service.mk ================================================================== --- inetd.service.mk +++ inetd.service.mk @@ -1,5 +1,7 @@ DAEMON_inetd_COMMAND?=/usr/sbin/inetd DAEMON_inetd_enable?=no DAEMON_inetd_FLAGS?=-C 60 -inetd: _service LOGIN +inetd: ${_SERVICE} LOGIN + +LOGIN_EXIT: inetd_exit Index: init.mk ================================================================== --- init.mk +++ init.mk @@ -1,11 +1,13 @@ # Meta targets -TARGETS+=adjkerntz bootfs cleanvar cleartmp cloned devfs dmesg dumpon fsck \ +TARGETS:=adjkerntz bootfs cleanvar cleartmp cloned devfs dmesg dumpon fsck \ hostname kld ldconfig microcode mixer mount mountlate msgs netif \ - newsyslog nextboot nfsclient pf pwcheck random root rpc_umntall runshm \ - savecore swap sysctl sysdb wlans zfs + newsyslog nextboot nfsclient pf pwcheck random root runshm savecore swap \ + sysctl sysdb wlans zfs + +OTHER_TARGETS+=mixer_exit nfsclient_exit random_exit DAEMON: pwcheck sysctl sysdb NETWORK SERVERS ldconfig nfsclient cleartmp pflogd LOGIN: DAEMON dntpd msgs powerd pflogd @@ -33,31 +35,31 @@ install -m644 /dev/null /var/run/utmpx cleartmp: mountlate echo "MRC:$@> Clearing tmp."; \ find -x /tmp -mindepth 1 ! -name lost+found \ - ! -name snapshots ! -path "./snapshots/*" \ - ! -name quota.user ! -name quota.group \ - -delete -type d -prune ;\ - rm -f /tmp/.X*-lock ;\ - rm -fr /tmp/.X11-unix ;\ - mkdir -m 1777 /tmp/.X11-unix + ! -name snapshots ! -path "./snapshots/*" \ + ! -name quota.user ! -name quota.group \ + -delete -type d -prune ;\ + rm -f /tmp/.X*-lock ;\ + rm -fr /tmp/.X11-unix ;\ + mkdir -m 1777 /tmp/.X11-unix cloned: kld .if !empty(CLONED_INTERFACES) echo "MRC:$@> Cloning interfaces: ${CLONED_INTERFACES}" -.for iface in ${CLONED_INTERFACES} +. for iface in ${CLONED_INTERFACES} ifconfig ${iface} create -.endfor +. endfor .endif devfs: echo "MRC:$@> Applying rules: ${DEVFS_CONFIG_FILES}" .for file in ${DEVFS_CONFIG_FILES} -.if exists(${file}) +. if exists(${file}) devfsctl -a -f ${file} -.endif +. endif .endfor dmesg: mountlate .if !empty(DMESG_FILE) echo "MRC:$@> Writing dmesg." @@ -64,59 +66,60 @@ umask 022 ; dmesg -a >> ${DMESG_FILE} .endif dumpon: random .if !empty(DUMPDEV) - test -e ${DUMPDEV} && { \ - echo "MRC:$@> Setting dumpon device to ${DUMPDEV}"; \ - dumpon -v ${DUMPDEV}; \ - } || true + if [ -e ${DUMPDEV} ]; then \ + echo "MRC:$@> Setting dumpon device to ${DUMPDEV}"; \ + dumpon -v ${DUMPDEV}; \ + fi .endif fsck: echo "MRC:$@> Checking disks." ;\ fsck -p ;\ case $$? in \ 0) ;; \ 2) exit 1 \ - ;; \ + ;; \ 4) echo "Rebooting..." ;\ - reboot ;\ - echo "Reboot failed; help!" ;\ - exit 1 \ - ;; \ + reboot ;\ + echo "Reboot failed; help!" ;\ + exit 1 \ + ;; \ 8) if [ -n "$${FSCK_Y_ENABLE}" ]; then \ - echo "File system preen failed, trying fsck -y." ;\ - fsck -y || {\ - echo "Automatic file system check failed; help!" ;\ - exit 1 ;\ - }\ - else \ - echo "Automatic file system check failed; help!" ;\ - exit 1 ;\ - fi ;\ - ;; \ + echo "File system preen failed, trying fsck -y." ;\ + fsck -y || {\ + echo "Automatic file system check failed; help!" ;\ + exit 1 ;\ + } ;\ + else \ + echo "Automatic file system check failed; help!" ;\ + exit 1 ;\ + fi \ + ;; \ 12) echo "Boot interrupted." ;\ - exit 1 \ - ;; \ + exit 1 \ + ;; \ 130) exit 1 \ - ;; \ + ;; \ *) echo "Unknown error, help!" ;\ - exit 1 \ - ;; \ + exit 1 \ + ;; \ esac hostname: echo "MRC:$@> Setting to ${HOSTNAME}." hostname ${HOSTNAME} kld: bootfs .if defined(KLD_LIST) - echo "MRC:$@> Loading kernel modules: ${KLD_LIST}" + echo "MRC:$@> Loading kernel modules: ${KLD_LIST}" ;\ kldload -n ${KLD_LIST} .endif +# ldconfig .for path in ${LDCONFIG_PATHS} /etc/ld-elf.so.conf .if exists(${path}) ldc+=${path} .endif .endfor @@ -134,24 +137,35 @@ microcode: mountlate test -d /usr/local/share/cpucontrol || exit 0 ;\ echo "MRC:$@> Updating microcode." ;\ kldload -n cpuctl || exit 1 ;\ for cpu in $$(jot ${NCPU} 0); do \ - ( cpucontrol -u -d /usr/local/share/cpucontrol /dev/cpuctl$${cpu} \ - || exit 1 \ - ) | grep -v '^TEST' ;\ - cpucontrol -e /dev/cpuctl$${cpu} || exit 1 ;\ + { cpucontrol -u -d /usr/local/share/cpucontrol /dev/cpuctl$${cpu} \ + || exit 1 ;\ + } | grep -v '^TEST' ;\ + cpucontrol -e /dev/cpuctl$${cpu} || exit 1 ;\ done mixers=${:!find /dev -name 'mixer*'!:S/\/dev\///} mixer: mount cleanvar echo "MRC:$@> Restoring levels." .for mixer in ${mixers} - test -f /var/db/${mixer}-state || true && mixer -f /dev/${mixer} \ - `cat /var/db/${mixer}-state` + if [ -r /var/db/${mixer}-state ]; then \ + mixer -f /dev/${mixer} `cat /var/db/${mixer}-state` ;\ + fi +.endfor + +mixer_exit: + echo "MRC:$@> Saving mixer levels." +.for mixer in ${mixers} + if [ -r /dev/${mixer} ]; then \ + mixer -f /dev/${mixer} -s > /var/db/${mixer}-state ;\ + fi .endfor + +DAEMON_EXIT: mixer_exit excludes=${NETFS_TYPES:C/:.*//} mount: root zfs echo "MRC:$@> Mount local FS." ;\ @@ -163,17 +177,18 @@ echo "MRC:$@> Mount late FS." ;\ mount -a msgs: mount echo "MRC:$@> Making bounds." ;\ - test ! -d /var/msgs -o -f /var/msgs/bound -o -L /var/msgs/bounds || \ - echo 0 > /var/msgs/bounds + test ! -d /var/msgs -o -f /var/msgs/bound -o -L /var/msgs/bounds || \ + echo 0 > /var/msgs/bounds newsyslog: mountlate sysdb - test -z "$${NEWSYSLOG_ENABLE}" || \ - echo "MRC:$@> Trimming log files." ;\ - /usr/sbin/newsyslog ${NEWSYSLOG_FLAGS} + if [ -n "$${NEWSYSLOG_ENABLE}" ]; then \ + echo "MRC:$@> Trimming log files." ;\ + /usr/sbin/newsyslog ${NEWSYSLOG_FLAGS} ;\ + fi nextboot: mount .if exists(/boot/nextkernel) echo "MRC:$@> Removing nextboot setting." rm -f /boot/nextkernel @@ -181,12 +196,23 @@ .if empty(NFSCLIENT_ENABLE:tl:Mno) DAEMON_rpcbind_ENABLE=yes .endif -nfsclient: NETWORK rpcbind rpc_umntall - test -z "$${NFSCLIENT_ENABLE}" || kldload -n nfs +nfsclient: NETWORK rpcbind + if [ -n "$${NFSCLIENT_ENABLE}" ]; then \ + kldload -n nfs ;\ + fi + +nfsclient_exit: DAEMON_EXIT +.if empty(RPC_UMNTALL_ENABLE:tl:Mno) + echo "MRC:$@> Sending RPC unmount notifications."; \ + test -f /var/db/mounttab || true && \ + rpc.umntall -k +.endif + +NETWORK_EXIT: nfsclient_exit netif: adjkerntz wlans cloned kld echo "MRC:$@> Starting interfaces: ${IFCONFIG_IFACES}" .for iface in ${IFCONFIG_IFACES} .for item in ${IFCONFIG_${iface}:tW:ts;} @@ -197,51 +223,55 @@ pf: pflogd .if empty(PF_ENABLE:tl:Mno) echo "MRC:$@> Enabling and loading rules." ;\ kldload -n pf || exit 1 ;\ - test -r ${PF_RULES} || {\ - echo "MRC:$@> Can't find file with rules at ${PF_RULES}." ;\ - exit 1 ;\ - } ;\ - pfctl -Fa || exit 1 ;\ - pfctl -f ${PF_RULES} ${PF_FLAGS} || exit 1 ;\ - pfctl -Si | grep -q Enabled && pfctl -e + if [ -r ${PF_RULES} ]; then \ + pfctl -Fa || exit 1 ;\ + pfctl -f ${PF_RULES} ${PF_FLAGS} || exit 1 ;\ + pfctl -Si | grep -q Enabled && pfctl -e; \ + else \ + echo "MRC:$@> Can't find file with rules at ${PF_RULES}." ;\ + exit 1 ;\ + fi .endif pwcheck: mountlate syslogd echo "MRC:$@> Checking password lock file." .if exists(/etc/ptmp) - logger -s -p auth.err "password file may be incorrect -- /etc/ptmp \ - exists" + logger -s -p auth.err \ + "password file may be incorrect -- /etc/ptmp exists" .endif random: mount devfs echo "MRC:$@> Seeding." ;\ sysctl kern.seedenable=1 > /dev/null ;\ - ( ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww; ) 2>&1 | \ - dd status=none of=/dev/random bs=8k ;\ + { ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww; } 2>&1 | \ + dd status=none of=/dev/random bs=8k ;\ dd if=/bin/ps status=none of=/dev/random bs=8k ;\ - test -d $${ENTROPY_DIR} && {\ - find $${ENTROPY_DIR} -type f |\ - xargs -n1 -Ifoo dd status=none if=foo of=/dev/random bs=8k ;\ - } || {\ - dd status=none if=${ENTROPY_FILE} of=/dev/random bs=8k ;\ - } ;\ + if [ -d $${ENTROPY_DIR} ]; then \ + find $${ENTROPY_DIR} -type f |\ + xargs -n1 -Ifoo dd status=none if=foo of=/dev/random bs=8k ;\ + else \ + if [ -r ${ENTROPY_FILE} ]; then \ + dd status=none if=${ENTROPY_FILE} of=/dev/random bs=8k ;\ + fi ;\ + fi ;\ sysctl kern.seedenable=0 > /dev/null +random_exit: + rm -f ${ENTROPY_FILE}; \ + umask 077 && \ + dd if=/dev/random of=${ENTROPY_FILE} bs=8k count=1 || \ + echo "MRC:$@> entropy file write failed." + +DAEMON_EXIT: random_exit + root: fsck bootfs echo "MRC:$@> Mount root R/W." ;\ mount -uo rw -rpc_umntall: mountlate NETWORK rpcbind -.if empty(RPC_UMNTALL_ENABLE:tl:Mno) - echo "MRC:$@> Sending RPC unmount notifications."; \ - test -f /var/db/mounttab || true && \ - rpc.umntall -k & -.endif - runshm: cleanvar echo "MRC:$@> Mount and populate /var/run/shm."; \ mkdir -p /var/run/shm; \ mount_tmpfs -m 01777 dummy /var/run/shm; \ mkdir -p -m 01777 /var/run/shm/tmp; \ @@ -263,29 +293,29 @@ sysctl: kld root .if exists(/etc/sysctl.conf) echo "MRC:$@> Setting sysctl defaults."; \ awk '$$0~/^[ ]*(#.*)?$$/{next}{print}' < /etc/sysctl.conf | \ - xargs -n1 sysctl + xargs -n1 sysctl .endif sysdb: mountlate echo "MRC:$@> Building databases."; \ install -c -m 644 -g wheel /dev/null /var/run/utmpx wlans: kld echo "MRC:$@> Configuring wlans."; \ for dev in $$(sysctl -n net.wlan.devices); do \ - eval all_wlans=\$${WLANS_$${dev}}; \ - for wlan in $${all_wlans}; do \ - eval wlan_args=\$${WLANS_$${wlan}_ARGS}; \ - ifconfig $${wlan} create wlandev $${dev} $${wlan_args}; \ - ifconfig $${wlan} up; \ - done; \ + eval all_wlans=\$${WLANS_$${dev}}; \ + for wlan in $${all_wlans}; do \ + eval wlan_args=\$${WLANS_$${wlan}_ARGS}; \ + ifconfig $${wlan} create wlandev $${dev} $${wlan_args}; \ + ifconfig $${wlan} up; \ + done; \ done zfs: .if empty(ZFS_ENABLE:tl:Mno) zfs mount -va || exit $$? ;\ zfs share -a || exit $$? ;\ test -r /etc/zfs/exports || touch /etc/zfs/exports .endif Index: mountd.service.mk ================================================================== --- mountd.service.mk +++ mountd.service.mk @@ -4,10 +4,13 @@ .if empty(DAEMON_mountd_ENABLE:tl:Mno) DAEMON_rpcbind_ENABLE=yes .endif -mountd: rpcbind NETWORK SERVERS _service # mountlate -> SERVERS - test -z "$${DAEMON_$@_ENABLE}" || { \ - rm -f /var/db/mountdtab; \ - ( umask 022 ; touch /var/db/mountdtab ); \ - } +mountd: rpcbind NETWORK SERVERS ${_SERVICE} # mountlate -> SERVERS + rm -f /var/db/mountdtab ;\ + ( umask 022; touch /var/db/mountdtab; ) ;\ + : + +mountd_exit: ${_SERVICE_EXIT} nfsd_exit + +NETWORK_EXIT: mountd_exit Index: nfsd.service.mk ================================================================== --- nfsd.service.mk +++ nfsd.service.mk @@ -5,9 +5,11 @@ .if empty(DAEMON_nfsd_ENABLE:tl:Mno) DAEMON_rpcbind_ENABLE=yes DAEMON_mountd_ENABLE=yes .endif -nfsd: mountd _service rpcbind +nfsd: mountd ${_SERVICE} rpcbind .if empty(NFS_RESERVED_PORT_ONLY:tl:Mno) sysctl vfs.nfs.nfs_privport=1 .endif + +nfsd_exit: Index: node_exporter.service.mk ================================================================== --- node_exporter.service.mk +++ node_exporter.service.mk @@ -3,8 +3,7 @@ DAEMON_node_exporter_LISTEN_ADDRESS?=:9100 DAEMON_node_exporter_TEXTFILE_DIR?=/var/tmp/node_exporter DAEMON_node_exporter_USER?=nobody DAEMON_node_exporter_GROUP?=nobody -node_exporter: _service - test -z "$${DAEMON_$@_ENABLE}" || \ +node_exporter: ${_SERVICE} install -d -o ${DAEMON_node_exporter_USER} -g ${DAEMON_node_exporter_GROUP} -m1755 ${DAEMON_node_exporter_TEXTFILE_DIR} ADDED order.mk Index: order.mk ================================================================== --- /dev/null +++ order.mk @@ -0,0 +1,27 @@ +# This file defines generic targets that should exist anyway and they default +# dependencies + +# System portion + +DAEMON: NETWORK SERVERS +LOGIN: DAEMON +NETWORK: +SERVERS: +SERVICE: + +mount: +root: +netif: +newsyslog: + +# Shutdown order + +EXIT: DAEMON_EXIT NETWORK_EXIT SERVICE_EXIT + +DAEMON_EXIT: LOGIN_EXIT + +LOGIN_EXIT: + +NETWORK_EXIT: DAEMON_EXIT + +SERVICE_EXIT: DAEMON_EXIT Index: pflogd.service.mk ================================================================== --- pflogd.service.mk +++ pflogd.service.mk @@ -5,9 +5,9 @@ pflogd: root mount netif .if !empty(DAEMON_pflog_ENABLE:tl:Mno) echo "MRC:$@> Configuring device." ;\ kldload -n pf || exit 1 ;\ ifconfig pflog0 up || { \ - echo "MRC:$@> Failed to set up pflog0 device." ;\ - exit 1 ;\ + echo "MRC:$@> Failed to set up pflog0 device." ;\ + exit 1 ;\ } .endif Index: plain.starter.mk ================================================================== --- plain.starter.mk +++ plain.starter.mk @@ -1,16 +1,8 @@ -LOCAL_TARGETS:=_service_plain _earlyservice_plain -OTHER_TARGETS+=${LOCAL_TARGETS} -.if ${STARTER} == "plain" -LOCAL_TARGETS+=_service _earlyservice -.endif - -.for target in ${LOCAL_TARGETS} -${target}: ${target:C/_service.*/DAEMON/:C/_earlyservice.*/SERVICE/} .USE - test -z "$${DAEMON_$@_ENABLE}" || { \ - echo "MRC:$@> Starting service."; \ - test -n "${DAEMON_$@_MODULES}" && kldload -n ${DAEMON_$@_MODULES} || true; \ - chroot -u ${DAEMON_$@_USER:Uroot} -g ${DAEMON_$@_GROUP:Uwheel} / ${DAEMON_$@_COMMAND} ${DAEMON_$@_FLAGS} ${DAEMON_$@_BACKGROUND}; \ - } -.endfor - -.undef LOCAL_TARGETS +_service_plain: .USE + chroot -u ${DAEMON_$@_USER:Uroot} -g ${DAEMON_$@_GROUP:Uwheel} / ${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." ADDED rc.shutdown Index: rc.shutdown ================================================================== --- /dev/null +++ rc.shutdown @@ -0,0 +1,19 @@ +#!/sbin/sh -Tue - + +stty status '^T' + +trap : 2 + +HOME=/ +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +export PATH HOME + +MAKEINIT="make -D AUTOBOOT -C /etc/mrc" +NCPU=$((`/sbin/sysctl -n hw.ncpu` + 1 )) +#MAKEDEBUG="-d -nelLx" + +mount -t tmpfs tmpfs /etc/mrc/tmp && ${MAKEINIT} -j ${NCPU} ${MAKEDEBUG} -X TMPDIR=/etc/mrc/tmp EXIT && umount /etc/mrc/tmp || ${MAKEINIT} EXIT + +echo '.' +exit 0 Index: rpcbind.service.mk ================================================================== --- rpcbind.service.mk +++ rpcbind.service.mk @@ -1,5 +1,9 @@ DAEMON_rpcbind_COMMAND?=/usr/sbin/rpcbind DAEMON_rpcbind_ENABLE?=no DAEMON_rpcbind_FLAGS?=-d -rpcbind: _earlyservice NETWORK syslogd +rpcbind: ${_EARLYSERVICE} NETWORK syslogd + +rpcbind_exit: ${_SERVICE_EXIT} mountd_exit nfsd_exit + +NETWORK_EXIT: rpcbind_exit Index: slim.service.mk ================================================================== --- slim.service.mk +++ slim.service.mk @@ -1,6 +1,8 @@ DAEMON_slim_COMMAND?=/usr/local/bin/slim DAEMON_slim_ENABLE?=no DAEMON_slim_BACKGROUND?=-d -slim: _service dbus +slim: ${_SERVICE} dbus rm -f /var/run/slim.auth + +DAEMON_EXIT: slim_exit Index: smartd.service.mk ================================================================== --- smartd.service.mk +++ smartd.service.mk @@ -1,11 +1,10 @@ DAEMON_smartd_COMMAND?=/usr/local/sbin/smartd DAEMON_smartd_ENABLE?=no DAEMON_smartd_FLAGS?=-c /usr/local/etc/smartd.conf DAEMON_smartd_FOREGROUND?=-n -smartd: _service - test -z "$${DAEMON_$@_ENABLE}" || \ - test -f /usr/local/etc/smartd.conf || { \ - echo "MRC:$@> smartd requires config file to start." ; \ - exit 1; \ - } +smartd: ${_SERVICE} + if [ ! -f /usr/local/etc/smartd.conf ]; then \ + echo "MRC:$@> smartd requires config file to start."; \ + exit 1; \ + fi ADDED starter.mk Index: starter.mk ================================================================== --- /dev/null +++ starter.mk @@ -0,0 +1,35 @@ +OTHER_TARGETS+=_service_pre + +STARTER?=svc + +_service_pre: .USEBEFORE + # check whether service is enabled + if [ -z "$${DAEMON_$@_ENABLE}" ]; then \ + exit 0; \ + fi; \ + echo "MRC:$@> Starting service." + + # kldload modules if any + if [ -n "${DAEMON_$@_MODULES}" ]; then \ + kldload -n ${DAEMON_$@_MODULES}; \ + fi; \ + +.for starter_source in ${:!find /etc/mrc -name '*.starter.mk'!:S/\/etc\/mrc\///} +starter:=${starter_source:S/.starter.mk$//} +Starter:=${starter:tu} + +OTHER_TARGETS:=${OTHER_TARGETS} _service_${starter} _service_${starter}_exit _service_${starter}_status + +_SERVICE_${Starter}:=_service_pre DAEMON _service_${starter} +_EARLYSERVICE_${Starter}:=_service_pre SERVICE _service_${starter} +_SERVICE_${Starter}_EXIT:=_service_${starter}_exit + +.if "${STARTER}" == "${starter}" +_SERVICE:=_service_pre DAEMON _service_${starter} +_EARLYSERVICE:=_service_pre SERVICE _service_${starter} +_SERVICE_EXIT:=_service_${starter}_exit +.endif + +.export +.include "${starter_source}" +.endfor Index: svc.starter.mk ================================================================== --- svc.starter.mk +++ svc.starter.mk @@ -1,32 +1,9 @@ -LOCAL_TARGETS:=_service_svc _earlyservice_svc -STATUS_TARGETS:=_status_svc -RESTART_TARGETS:=_restart_svc -OTHER_TARGETS+=${LOCAL_TARGETS} ${STATUS_TARGETS} ${RESTART_TARGETS} -.if ${STARTER} == "svc" -LOCAL_TARGETS+=_service _earlyservice -STATUS_TARGETS+=_status -RESTART_TARGETS+=_restart -.endif - -.for target in ${LOCAL_TARGETS} -${target}: ${target:C/_service.*/DAEMON/:C/_earlyservice/SERVICE/} .USE - test -z "$${DAEMON_$@_ENABLE}" || { \ - echo "MRC:$@> Starting service."; \ - test -n "${DAEMON_$@_MODULES}" && kldload -n ${DAEMON_$@_MODULES} || true; \ - svc -u ${DAEMON_$@_USER:Uroot} -g ${DAEMON_$@_GROUP:Uwheel} ${DAEMON_$@_RESTART:D-r} ${DAEMON_$@_RESTART} init $@ ${DAEMON_$@_COMMAND} ${DAEMON_$@_FLAGS} ${DAEMON_$@_FOREGROUND}; \ - } -.endfor - -.for target in ${RESTART_TARGETS} -${target}: .USE - svc restart $@ -.endfor - -.for target in ${STATUS_TARGETS} -${target}: .USE - svc status $@ -.endfor - -.undef LOCAL_TARGETS -.undef RESTART_TARGETS -.undef STATUS_TARGETS +_service_svc: .USE + svc list $@ | grep -q $@ || \ + svc -u ${DAEMON_$@_USER:Uroot} -g ${DAEMON_$@_GROUP:Uwheel} ${DAEMON_$@_RESTART:D-r} ${DAEMON_$@_RESTART} init $@ ${DAEMON_$@_COMMAND} ${DAEMON_$@_FLAGS} ${DAEMON_$@_FOREGROUND} + +_service_svc_status: .USE + svc status $@ + +_service_svc_exit: .USEBEFORE + svc exit $@ Index: syslogd.service.mk ================================================================== --- syslogd.service.mk +++ syslogd.service.mk @@ -1,5 +1,5 @@ DAEMON_syslogd_COMMAND?=/usr/sbin/syslogd DAEMON_syslogd_ENABLE?=yes DAEMON_syslogd_FLAGS?=-ss8cc -syslogd: _earlyservice newsyslog +syslogd: ${_EARLYSERVICE} newsyslog ADDED udevd.service.mk Index: udevd.service.mk ================================================================== --- /dev/null +++ udevd.service.mk @@ -0,0 +1,5 @@ +DAEMON_udevd_COMMAND?=/sbin/udevd +DAEMON_udevd_ENABLE?=yes +DAEMON_udevd_FOREGROUND?=-d + +udevd: ${_EARLYSERVICE} Index: watchdogd.service.mk ================================================================== --- watchdogd.service.mk +++ watchdogd.service.mk @@ -4,6 +4,6 @@ .if empty(:!sysctl -qn debug.watchdog || exit 0!) DAEMON_watchdogd_ENABLE=no .endif -watchdogd: _earlyservice +watchdogd: ${_EARLYSERVICE}