A skeleton is not config data, and should thus be in /usr/
Possibly /usr/.../examples/...
I agree, the reason i put it there ist that /etc/s6-linux-init/skel/ exists (at least on Gentoo Linux), thus for consistency.

- The package manager puts service source directories and an initial
set of bundles for system services to
/etc/s6-rc/system/src/{services,bundles}.

- The package manager puts service source directories and an initial
set of bundles for both user and system services to
/usr/share/s6-rc/{user,system} as a reference of the defaults.
If you put defaults in /usr, then prefer symlinking them into /etc,
rather than creating a copy. That'll automatically handle changing
defaults, and make it obvious what is locally customized.

I am not sure if I understand correctly, the files under /usr/share/s6-rc/{user,system}
are to be there only as a reference, not to be edited.
Are you trying to say that the non-edited files should be symlinked rather than copied?

Void has a nice idiom in their run scripts:

| #!/bin/sh
| exec 2>&1
| [ -r conf ] && . ./conf
| exec acpid -f ${OPTS:=-l}

That achieves 3 things:
1) It works out of the box (without a conf file).
2) The user can create a conf file containing
         OPTS='-l -d -S'
    to customize the daemon options.
3) The user can create a conf file containing
         if [ $((`date +%s` % 100)) -eq 0 ] ; then poweroff ; fi
         exec /usr/local/bin/notreallyacpid --foo
    to completely¹ override the run file.

Note how the KEY=value pair in 2) is actually shell, hopefully
eliminating any worries about config file format.

HTH,
     Jan

¹)
The "exec 2>&1" is an artifact of how runit does logging, and should
always be done. Hence it comes before the conf entry point. If there was
a valid use for stderr, lines 2 and 3 could be switched, of course.
Glorious.
Although it has to be done a bit differently when using execline (which I intend to use):

Take my current version of the seatd-srv:

| #!/bin/execlineb -P
|
| fdmove -c 2 1
|
| multisubstitute
| {
|     define SRV seatd
|     importas -SD /etc/s6-rc S6CONFIGDIR
| }
|
| envfile -I ${S6CONFIGDIR}/system/config/${SRV}.conf
|
| multisubstitute
| {
|     importas -SD "root" SEATD_USER
|     importas -SD "seat" SEATD_GROUP
|     importas -SD "seatd" SRV_EXEC
|     importas -sSD "" SRV_OPTS
| }
|
|
| ${SRV_EXEC}    -n3
|             -u ${SEATD_USER}
|             -g ${SEATD_GROUP}
|             ${SRV_OPTS}

Would turn into:

| #!/bin/execlineb -P
|
| fdmove -c 2 1
|
| importas -SD /etc/s6-rc S6CONFIGDIR
|
| tryexec ${S6CONFIGDIR}/system/config/seatd
|
| seatd -n3 -u root -g seatd

Allowing the sysadmin to completely override the service.
Unfortunately this also forces the sysadmin to override the service for every so little change,
so your

2) The user can create a conf file containing
         OPTS='-l -d -S'
    to customize the daemon options.
wont work anymore but I do not see how one could work around this in execline.

What do you think?


Regards,

Paul

Attachment: OpenPGP_0x71C7C85A2EA30F62.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to