rc: add ${name}_setup script support

Run a service-based setup script before running the start command.
Useful for automatic configuration file generation.

Reviewed by:	https://reviews.freebsd.org/D36006
This commit is contained in:
Franco Fichtner 2022-08-15 16:41:31 +02:00 committed by Mariusz Zaborski
parent 530d5f8338
commit c9be47b34d

View File

@ -804,6 +804,8 @@ startmsg()
# #
# ${name}_prepend n Command added before ${command}. # ${name}_prepend n Command added before ${command}.
# #
# ${name}_setup n Command executed before ${command}.
#
# ${name}_login_class n Login class to use, else "daemon". # ${name}_login_class n Login class to use, else "daemon".
# #
# ${name}_limits n limits(1) to apply to ${command}. # ${name}_limits n limits(1) to apply to ${command}.
@ -993,8 +995,8 @@ run_rc_command()
_group=\$${name}_group _groups=\$${name}_groups \ _group=\$${name}_group _groups=\$${name}_groups \
_fib=\$${name}_fib _env=\$${name}_env \ _fib=\$${name}_fib _env=\$${name}_env \
_prepend=\$${name}_prepend _login_class=\${${name}_login_class:-daemon} \ _prepend=\$${name}_prepend _login_class=\${${name}_login_class:-daemon} \
_limits=\$${name}_limits _oomprotect=\$${name}_oomprotect \ _limits=\$${name}_limits _oomprotect=\$${name}_oomprotect \
_env_file=\$${name}_env_file _setup=\$${name}_setup _env_file=\$${name}_env_file
if [ -n "$_env_file" ] && [ -r "${_env_file}" ]; then # load env from file if [ -n "$_env_file" ] && [ -r "${_env_file}" ]; then # load env from file
set -a set -a
@ -1149,6 +1151,12 @@ $command $rc_flags $command_args"
fi fi
fi fi
if [ -n "$_setup" ]; then
if ! _run_rc_doit "$_setup"; then
warn "failed to setup ${name}"
fi
fi
# Prepend default limits # Prepend default limits
_doit="$_cd limits -C $_login_class $_limits $_doit" _doit="$_cd limits -C $_login_class $_limits $_doit"
@ -2187,7 +2195,7 @@ check_kern_features()
# check_namevarlist var # check_namevarlist var
# Return "0" if ${name}_var is reserved in rc.subr. # Return "0" if ${name}_var is reserved in rc.subr.
_rc_namevarlist="program chroot chdir env flags fib nice user group groups prepend" _rc_namevarlist="program chroot chdir env flags fib nice user group groups prepend setup"
check_namevarlist() check_namevarlist()
{ {
local _v local _v