On Sun, May 22, 2022, at 8:50 AM, Aaron Bieber wrote:
> On Sun, May 22, 2022, at 8:32 AM, aisha wrote:
>> tested with calibre-web, vaultwarden and redmine, everything is working 
>> fine :)
>>
>> thanks a lot!
>>
>
> Navidrome working as well!

Forgot to add: OK abieber@ :D

>
>> On 5/22/2022 4:12 AM, Antoine Jacoutot wrote:
>>> Here's new diff that implements daemon_execdir.
>>>
>>> Index: etc/rc.d/rc.subr
>>> ===================================================================
>>> RCS file: /cvs/src/etc/rc.d/rc.subr,v
>>> retrieving revision 1.153
>>> diff -u -p -r1.153 rc.subr
>>> --- etc/rc.d/rc.subr        21 May 2022 10:50:09 -0000      1.153
>>> +++ etc/rc.d/rc.subr        22 May 2022 08:10:04 -0000
>>> @@ -49,7 +49,7 @@ _rc_parse_conf() {
>>>             while IFS='     ' read -r _l; do
>>>                     [[ $_l == [!#=]*=* ]] || continue
>>>                     _key=${_l%%*([[:blank:]])=*}
>>> -                   [[ $_key == *_@(flags|logger|rtable|timeout|user) ]] ||
>>> +                   [[ $_key == 
>>> *_@(execdir|flags|logger|rtable|timeout|user) ]] ||
>>>                             [[ " ${_allowed_keys[*]} " == *" $_key "* ]] ||
>>>                             continue
>>>                     [[ $_key == "" ]] && continue
>>> @@ -114,14 +114,17 @@ _rc_write_runfile() {
>>>     [ -d ${_RC_RUNDIR} ] || mkdir -p ${_RC_RUNDIR} &&
>>>             cat >${_RC_RUNFILE} <<EOF
>>>   daemon_class=${daemon_class}
>>> +daemon_execdir=${daemon_execdir}
>>>   daemon_flags=${daemon_flags}
>>>   daemon_logger=${daemon_logger}
>>>   daemon_rtable=${daemon_rtable}
>>>   daemon_timeout=${daemon_timeout}
>>>   daemon_user=${daemon_user}
>>>   pexp=${pexp}
>>> +rc_reload=${rc_reload}
>>>   rc_reload_signal=${rc_reload_signal}
>>>   rc_stop_signal=${rc_stop_signal}
>>> +rc_usercheck=${rc_usercheck}
>>>   EOF
>>>   }
>>>   
>>> @@ -164,8 +167,11 @@ rc_exec() {
>>>     [ "${daemon_rtable}" -eq "$(id -R)" ] ||
>>>             _rcexec="route -T ${daemon_rtable} exec ${_rcexec}"
>>>   
>>> -   ${_rcexec} "${daemon_logger:+set -o pipefail; }$@${daemon_logger:+ 2>&1 
>>> |
>>> -           logger -ip ${daemon_logger} -t ${_name}}"
>>> +   ${_rcexec} "${daemon_logger:+set -o pipefail; } \
>>> +           ${daemon_execdir:+cd ${daemon_execdir} && } \
>>> +           $@ \
>>> +           ${daemon_logger:+ 2>&1 |
>>> +                   logger -ip ${daemon_logger} -t ${_name}}"
>>>   }
>>>   
>>>   rc_start() {
>>> @@ -317,6 +323,7 @@ _rc_do _rc_parse_conf
>>>   rc_reload_signal=${rc_reload_signal:=HUP}
>>>   rc_stop_signal=${rc_stop_signal:=TERM}
>>>   
>>> +eval _rcexecdir=\${${_name}_execdir}
>>>   eval _rcflags=\${${_name}_flags}
>>>   eval _rclogger=\${${_name}_logger}
>>>   eval _rcrtable=\${${_name}_rtable}
>>> @@ -334,6 +341,7 @@ getcap -f /etc/login.conf.d/${_name}:/et
>>>   [ -n "${_RC_FORCE}" -o "$1" != "start" ] && [ X"${_rcflags}" = X"NO" ] &&
>>>     unset _rcflags
>>>   
>>> +[ -n "${_rcexecdir}" ] && daemon_execdir=${_rcexecdir}
>>>   [ -n "${_rcflags}" ] && daemon_flags=${_rcflags}
>>>   [ -n "${_rclogger}" ] && daemon_logger=${_rclogger}
>>>   [ -n "${_rcrtable}" ] && daemon_rtable=${_rcrtable}
>>> @@ -347,7 +355,7 @@ if [ -n "${_RC_DEBUG}" ]; then
>>>   fi
>>>   
>>>   readonly daemon_class
>>> -unset _rcflags _rclogger _rcrtable _rctimeout _rcuser
>>> +unset _rcexecdir _rcflags _rclogger _rcrtable _rctimeout _rcuser
>>>   # the shell will strip the quotes from daemon_flags when starting a 
>>> daemon;
>>>   # make sure pexp matches the process (i.e. doesn't include the quotes)
>>>   pexp="$(eval echo ${daemon}${daemon_flags:+ ${daemon_flags}})"
>>> Index: usr.sbin/rcctl/rcctl.8
>>> ===================================================================
>>> RCS file: /cvs/src/usr.sbin/rcctl/rcctl.8,v
>>> retrieving revision 1.39
>>> diff -u -p -r1.39 rcctl.8
>>> --- usr.sbin/rcctl/rcctl.8  1 Apr 2022 10:13:35 -0000       1.39
>>> +++ usr.sbin/rcctl/rcctl.8  22 May 2022 08:10:04 -0000
>>> @@ -62,6 +62,7 @@ The following commands are available
>>>   .Ar variable
>>>   can be one of
>>>   .Cm class ,
>>> +.Cm execdir ,
>>>   .Cm flags ,
>>>   .Cm logger ,
>>>   .Cm rtable ,
>>> @@ -206,7 +207,8 @@ flags:
>>>   # rcctl set apmd flags -A
>>>   # rcctl get apmd
>>>   apmd_class=daemon
>>> -apmd_flags=-A
>>> +apmd_execdir=
>>> +apmd_flags=NO
>>>   apmd_logger=
>>>   apmd_rtable=0
>>>   apmd_timeout=30
>>> Index: usr.sbin/rcctl/rcctl.sh
>>> ===================================================================
>>> RCS file: /cvs/src/usr.sbin/rcctl/rcctl.sh,v
>>> retrieving revision 1.112
>>> diff -u -p -r1.112 rcctl.sh
>>> --- usr.sbin/rcctl/rcctl.sh 10 Feb 2022 16:57:33 -0000      1.112
>>> +++ usr.sbin/rcctl/rcctl.sh 22 May 2022 08:10:04 -0000
>>> @@ -258,8 +258,8 @@ svc_get()
>>>     [ -n "${_svc}" ] || return
>>>   
>>>     local _status=0 _val _var=$2
>>> -   local daemon_class daemon_flags daemon_logger daemon_rtable
>>> -   local daemon_timeout daemon_user
>>> +   local daemon_class daemon_execdir daemon_flags daemon_logger
>>> +   local daemon_rtable daemon_timeout daemon_user
>>>   
>>>     if svc_is_special ${_svc}; then
>>>             daemon_flags="$(eval echo \${${_svc}})"
>>> @@ -279,6 +279,12 @@ svc_get()
>>>                             [ -z "${daemon_class}" ] && \
>>>                                     daemon_class="$(svc_getdef ${_svc} 
>>> class)"
>>>                     fi
>>> +                   if [ -z "${_var}" -o "${_var}" = "execdir" ]; then
>>> +                           [ -z "${daemon_execdir}" ] && \
>>> +                                   daemon_execdir="$(eval echo 
>>> \"\${${_svc}_execdir}\")"
>>> +                           [ -z "${daemon_execdir}" ] && \
>>> +                                   daemon_execdir="$(svc_getdef ${_svc} 
>>> execdir)"
>>> +                   fi
>>>                     if [[ -z ${_var} || ${_var} == @(flags|status) ]]; then
>>>                             [ -z "${daemon_flags}" ] && \
>>>                                     daemon_flags="$(eval echo 
>>> \"\${${_svc}_flags}\")"
>>> @@ -324,6 +330,7 @@ svc_get()
>>>                     echo "${_svc}=${daemon_flags}"
>>>             else
>>>                     echo "${_svc}_class=${daemon_class}"
>>> +                   echo "${_svc}_execdir=${daemon_execdir}"
>>>                     echo "${_svc}_flags=${daemon_flags}"
>>>                     echo "${_svc}_logger=${daemon_logger}"
>>>                     echo "${_svc}_rtable=${daemon_rtable}"
>>> @@ -341,8 +348,8 @@ svc_getdef()
>>>     [ -n "${_svc}" ] || return
>>>   
>>>     local _status=0 _val _var=$2
>>> -   local daemon_class daemon_flags daemon_logger daemon_rtable
>>> -   local daemon_timeout daemon_user
>>> +   local daemon_class daemon_execdir daemon_flags daemon_logger
>>> +   local daemon_rtable daemon_timeout daemon_user
>>>   
>>>     if svc_is_special ${_svc}; then
>>>             # unconditionally parse: we always output flags and/or status
>>> @@ -382,6 +389,7 @@ svc_getdef()
>>>                     echo "${_svc}=${daemon_flags}"
>>>             else
>>>                     echo "${_svc}_class=${daemon_class}"
>>> +                   echo "${_svc}_execdir=${daemon_execdir}"
>>>                     echo "${_svc}_flags=${daemon_flags}"
>>>                     echo "${_svc}_logger=${daemon_logger}"
>>>                     echo "${_svc}_rtable=${daemon_rtable}"
>>> @@ -403,7 +411,7 @@ svc_rm()
>>>             ( svc_getdef ${_svc} status ) && \
>>>                     echo "${_svc}=NO" >>${_TMP_RCCONF}
>>>     else
>>> -           grep -Ev "^${_svc}_(flags|logger|rtable|timeout|user).*=" \
>>> +           grep -Ev 
>>> "^${_svc}_(execdir|flags|logger|rtable|timeout|user).*=" \
>>>                     /etc/rc.conf.local >${_TMP_RCCONF}
>>>             ( svc_getdef ${_svc} status ) && \
>>>                     echo "${_svc}_flags=NO" >>${_TMP_RCCONF}
>>> @@ -456,6 +464,10 @@ svc_set()
>>>     fi
>>>   
>>>     if [ -n "${_args}" ]; then
>>> +           if [ "${_var}" = "execdir" ]; then
>>> +                   [[ ${_args%${_args#?}} == / ]] ||
>>> +                           rcctl_err "\"${_args}\" must be an absolute 
>>> path"
>>> +           fi
>>>             if [ "${_var}" = "logger" ]; then
>>>                     logger -p "${_args}" </dev/null >/dev/null 2>&1 ||
>>>                             rcctl_err "unknown priority name: \"${_args}\""
>>> @@ -539,13 +551,13 @@ case ${action} in
>>>                     rcctl_err "service ${svc} does not exist" 2
>>>             if [ -n "${var}" ]; then
>>>                     [ "${svc}" = "all" ] && usage
>>> -                   [[ ${var} != 
>>> @(class|flags|logger|rtable|status|timeout|user) ]] && usage
>>> +                   [[ ${var} != 
>>> @(class|execdir|flags|logger|rtable|status|timeout|user) ]] && usage
>>>                     if svc_is_meta ${svc}; then
>>>                             [ "${var}" != "status" ] && \
>>>                                     rcctl_err "/etc/rc.d/${svc} is a meta 
>>> script, cannot \"${action} ${var}\""
>>>                     fi
>>>                     if svc_is_special ${svc}; then
>>> -                           [[ ${var} == 
>>> @(class|logger|rtable|timeout|user) ]] && \
>>> +                           [[ ${var} == 
>>> @(class|execdir|logger|rtable|timeout|user) ]] && \
>>>                                     rcctl_err "\"${svc}\" is a special 
>>> variable, cannot \"${action} ${var}\""
>>>                     fi
>>>             fi
>>> @@ -561,7 +573,7 @@ case ${action} in
>>>                     svc_is_avail ${svc} || \
>>>                             rcctl_err "service ${svc} does not exist" 2
>>>             fi
>>> -           [[ ${var} != @(class|flags|logger|rtable|status|timeout|user) 
>>> ]] && usage
>>> +           [[ ${var} != 
>>> @(class|execdir|flags|logger|rtable|status|timeout|user) ]] && usage
>>>             svc_is_meta ${svc} && [ "${var}" != "status" ] && \
>>>                     rcctl_err "/etc/rc.d/${svc} is a meta script, cannot 
>>> \"${action} ${var}\""
>>>             [[ ${var} = flags && ${args} = NO ]] && \
>>> Index: share/man/man8/rc.d.8
>>> ===================================================================
>>> RCS file: /cvs/src/share/man/man8/rc.d.8,v
>>> retrieving revision 1.37
>>> diff -u -p -r1.37 rc.d.8
>>> --- share/man/man8/rc.d.8   9 Nov 2021 11:43:47 -0000       1.37
>>> +++ share/man/man8/rc.d.8   22 May 2022 08:10:04 -0000
>>> @@ -102,6 +102,8 @@ variables when starting a daemon.
>>>   The following can be overridden by site-specific values provided in
>>>   .Xr rc.conf.local 8 :
>>>   .Bl -tag -width daemon_timeout -offset indent
>>> +.It Ar daemon Ns _execdir
>>> +Run daemon from the specified directory.
>>>   .It Ar daemon Ns _flags
>>>   Additional arguments to call the daemon with.
>>>   These will be appended to any mandatory arguments already contained in the
>>> Index: share/man/man8/rc.subr.8
>>> ===================================================================
>>> RCS file: /cvs/src/share/man/man8/rc.subr.8,v
>>> retrieving revision 1.43
>>> diff -u -p -r1.43 rc.subr.8
>>> --- share/man/man8/rc.subr.8        21 May 2022 14:11:39 -0000      1.43
>>> +++ share/man/man8/rc.subr.8        22 May 2022 08:10:04 -0000
>>> @@ -189,10 +189,11 @@ call
>>>   .Ic rc_reload .
>>>   .El
>>>   .It Ic rc_exec
>>> -Execute process using
>>> +Execute argument using
>>>   .Xr su 1
>>>   according to
>>>   .Va daemon_class ,
>>> +.Va daemon_execdir ,
>>>   .Va daemon_user ,
>>>   .Va daemon_rtable
>>>   and
>>> @@ -256,6 +257,9 @@ script itself and uses that.
>>>   If no such login class exists then
>>>   .Dq daemon
>>>   will be used.
>>> +.It Va daemon_execdir
>>> +Change to this directory before running
>>> +.Ic rc_exec .
>>>   .It Va daemon_flags
>>>   Arguments to call the daemon with.
>>>   .It Ar daemon Ns _logger
>>> @@ -337,6 +341,7 @@ in an
>>>   script, if the
>>>   .Cm check
>>>   action needs root privileges.
>>> +.El
>>>   .Pp
>>>   All
>>>   .Va daemon_*
>>> @@ -347,6 +352,7 @@ Global defaults are provided by
>>>   .Nm :
>>>   .Bd -literal -offset indent
>>>   daemon_class=daemon
>>> +daemon_execdir=
>>>   daemon_flags=
>>>   daemon_logger=
>>>   daemon_rtable=0
>>> @@ -367,6 +373,7 @@ As noted in
>>>   site-specific values provided in
>>>   .Xr rc.conf.local 8
>>>   for
>>> +.Va daemon_execdir ,
>>>   .Va daemon_flags ,
>>>   .Va daemon_logger ,
>>>   .Va daemon_rtable ,
>>> @@ -374,7 +381,6 @@ for
>>>   and
>>>   .Va daemon_user
>>>   will override those defaults.
>>> -.El
>>>   .El
>>>   .Sh FILES
>>>   .Bl -tag -width Ds
>>>

Reply via email to