On Sat, May 21, 2022 at 12:04:03PM -0400, A Tammy wrote:
>
> On 5/21/2022 10:53 AM, Antoine Jacoutot wrote:
> > Hi.
> >
> > This diff allows to configure an directory from which we run rc.d commands.
> > This can be useful for daemons that must cd into a specific directory prio
> > launching.
> >
> > Here's an example for the automounter.
> > Some rc.d scripts in ports can benefit from this as well (so we can remove
> > handcrafted rc_start function and use the default).
> >
> > Comments / OK?
> >
> > Index: amd
> > ===================================================================
> > RCS file: /cvs/src/etc/rc.d/amd,v
> > retrieving revision 1.9
> > diff -u -p -r1.9 amd
> > --- amd 11 Jan 2018 21:09:26 -0000 1.9
> > +++ amd 21 May 2022 14:52:07 -0000
> > @@ -7,16 +7,13 @@ daemon="/usr/sbin/amd"
> > . /etc/rc.d/rc.subr
> > pexp="${daemon}.*"
> > +rc_execdir=/etc/amd
> > rc_reload=NO
> > rc_stop=NO
> > rc_pre() {
> > [[ -e ${amd_master} ]] || return 1
> > daemon_flags="${daemon_flags} $(print -rn -- $(< ${amd_master}))"
> > -}
> > -
> > -rc_start() {
> > - ${rcexec} "cd /etc/amd; ${daemon} ${daemon_flags}"
> > }
> > rc_cmd $1
> >
> >
> >
> > 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 21 May 2022 14:49:17 -0000
> > @@ -164,8 +164,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; } \
> > + ${rc_execdir:+cd ${rc_execdir} && } \
> > + $@ \
> > + ${daemon_logger:+ 2>&1 |
> > + logger -ip ${daemon_logger} -t ${_name}}"
> > }
> > rc_start() {
> > 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 21 May 2022 14:49:17 -0000
> > @@ -194,9 +194,10 @@ Execute process using
> > according to
> > .Va daemon_class ,
> > .Va daemon_user ,
> > -.Va daemon_rtable
> > -and
> > +.Va daemon_rtable ,
> > .Va daemon_logger
> > +and
> > +.Va rc_execdir
>
> Is there a reason why you've chosen it to be rc_execdir instead of
> daemon_execdir?
> Calling it `daemon_execdir` (and possibly allowing it to be modified from
> /etc/rc.conf.local)
> would be inline with other daemon_* variables.
> The first thing that comes to my mind would be people who want to start
> multiple copies of
> a daemon, e.g. navidrome or calibre-web, create libraries in the start
> directory.
> I personally don't have anything except calibre-web, so no strong opinions
> on this.
I wondered the same but came to the conclusion there where not that many use
cases and implementing rc_ is easier.
Going for daemon_ will mean changing rcctl as well.
I have no strong preference honestly.
If people think it will be handy to change this in rc.conf.local, I will
change the implementation.
> Also, if it is decided to keep it rc_execdir, does it need to be added to
> the man page?
> It is not something thats going to be exposed user side.
Yes it is needed.
It is exposed to people creating rc.d scripts; which is exactly what
rc.subr(8) is for.
Users will read rc.d(8).
Also that kind of contradicts your point for using daemon_
> > values.
> > .It Ic rc_reload
> > Send the
> > @@ -305,6 +306,9 @@ in an
> > .Nm rc.d
> > script to force starting the daemon in background when using the default
> > .Ic rc_start .
> > +.It Va rc_execdir
> > +Change to this directory before running
> > +.Ic rc_exec .
> > .It Va rc_reload
> > Can be set to
> > .Dq NO
> >
> >
--
Antoine