diff --git a/etc/rc.d/Makefile b/etc/rc.d/Makefile index d78a45845165..c1e4d7413741 100755 --- a/etc/rc.d/Makefile +++ b/etc/rc.d/Makefile @@ -19,7 +19,7 @@ FILES= DAEMON LOGIN NETWORKING SERVERS \ ipnat ipsec ipxrouted isdnd \ jail \ kadmind kerberos keyserv kldxref kpasswdd \ - ldconfig local localdaemons lomac lpd \ + ldconfig local localdaemons localpkg lomac lpd \ motd mountcritlocal mountcritremote \ mountd moused mroute6d mrouted msgs \ named netif netoptions \ diff --git a/etc/rc.d/localdaemons b/etc/rc.d/localdaemons index 99449756a8e2..dfd93f47df72 100644 --- a/etc/rc.d/localdaemons +++ b/etc/rc.d/localdaemons @@ -6,7 +6,7 @@ # PROVIDE: localdaemons # REQUIRE: abi # BEFORE: securelevel -# KEYWORD: FreeBSD shutdown +# KEYWORD: FreeBSD nostart . /etc/rc.subr diff --git a/etc/rc.d/localpkg b/etc/rc.d/localpkg new file mode 100644 index 000000000000..add28fe00860 --- /dev/null +++ b/etc/rc.d/localpkg @@ -0,0 +1,90 @@ +#!/bin/sh +# +# $FreeBSD$ +# + +# PROVIDE: localpkg +# REQUIRE: abi +# BEFORE: securelevel +# KEYWORD: FreeBSD shutdown + +. /etc/rc.subr + +name="localpkg" +start_cmd="pkg_start" +stop_cmd="pkg_stop" + +pkg_start() +{ + # For each dir in $local_startup, search for init scripts matching *.sh + # + case ${local_startup} in + [Nn][Oo] | '') + ;; + *) + echo -n 'Local package initialization:' + slist="" + if [ -z "${script_name_sep}" ]; then + script_name_sep=" " + fi + for dir in ${local_startup}; do + if [ -d "${dir}" ]; then + for script in ${dir}/*.sh; do + slist="${slist}${script_name_sep}${script}" + done + fi + done + script_save_sep="$IFS" + IFS="${script_name_sep}" + for script in ${slist}; do + if [ -x "${script}" ]; then + (set -T + trap 'exit 1' 2 + ${script} start) + elif [ -f "${script}" -o -L "${script}" ]; then + echo -n " (skipping ${script##*/}, not executable)" + fi + done + IFS="${script_save_sep}" + echo '.' + ;; + esac +} + +pkg_stop() +{ + echo -n 'Shutting down daemon processes:' + + # For each dir in $local_startup, search for init scripts matching *.sh + case ${local_startup} in + [Nn][Oo] | '') + ;; + *) + slist="" + if [ -z "${script_name_sep}" ]; then + script_name_sep=" " + fi + for dir in ${local_startup}; do + if [ -d "${dir}" ]; then + for script in ${dir}/*.sh; do + slist="${slist}${script_name_sep}${script}" + done + fi + done + script_save_sep="$IFS" + IFS="${script_name_sep}" + for script in `reverse_list ${slist}`; do + if [ -x "${script}" ]; then + (set -T + trap 'exit 1' 2 + ${script} stop) + fi + done + IFS="${script_save_sep}" + echo '.' + ;; + esac +} + +load_rc_config $name +run_rc_command "$1" diff --git a/etc/rc.d/netoptions b/etc/rc.d/netoptions index da773c99231c..8a6df5ea1f81 100644 --- a/etc/rc.d/netoptions +++ b/etc/rc.d/netoptions @@ -4,7 +4,7 @@ # # PROVIDE: netoptions -# REQUIRE: localdaemons +# REQUIRE: localpkg # BEFORE: securelevel # KEYWORD: FreeBSD