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

Reply via email to