Re: s6-rc user services on Gentoo

From: Hoël Bézier <hoelbezier_at_riseup.net>
Date: Tue, 2 Apr 2024 12:44:10 +0200

Hi,

(resending this to the list as I only replied to Alexis, sorry Alexis for the
double send.)

Am Tue, Apr 02, 2024 at 03:42:06PM +1100 schrieb Alexis:
>
>Hi all,
>
>Laurent has suggested i ask on IRC about this, but since (a) i'm
>in UTC+10, (b) i'm constantly moving between a few different
>networks, and (c) my bouncer is currently out of action (it's a
>Story), i thought i'd ask on these lists instead, to facilitate
>asynchronous replies. :-)

I feel you. IRC without bouncer is not always great for getting help on some
topics. ^^’

> [snip]
>
>i've had a lot on my plate for a while, but in more recent times
>i've had a bit more space to faff around with lower-priority
>stuff, and so i'm exploring setting up s6-rc to manage the user
>services i need. Once i've done so, i can:
>
>* write a guide on the Gentoo wiki[a]; and
>
>* provide service definitions for others to use via my personal
> overlay[b].
>
>which might help more people to become familiar with the s6
>ecosystem in general, and with s6-rc in particular (rather than
>trying to use s6 for service management as well as supervision).

Are you planning on having your user services supervisor itself supervised? And
if so, by OpenRC or another instance of s6-svscan? Just asking out of
curiosity.

>However, i've reached an impasse, and i'm hoping some can tell me
>what i'm missing / what i'm doing wrong / what i'm
>misunderstanding.
>
> [snip]
>
>* SCANDIR="${XDG_DATA_HOME}/s6-rc/services"
>
>* The above directory contains symlinks to
>
> ${S6RC_SERVICE_REPO}/{dbus-session-bus,dbus-session-bus-log}
>
>* S6RC_COMPILED="${XDG_STATE_HOME}/s6-rc/compiled"
>
>* Running:
>
> s6-rc-compile "${S6RC_COMPILED}" "${SCANDIR}"
>
> completes successfully.
>
>* Running
>
> s6-svscan -- "${SCANDIR}"
>
> succeeds, with two s6-supervise processes created.
>
>* HOWEVER, running
>
> s6-rc-init -c "${S6RC_COMPILED}" -l "${XDG_RUNTIME_DIR}/s6-rc"
> "${SCANDIR}"
>
> fails, with the error message:
>
> unable to supervise service directories in
> /run/user/1000/s6-rc/servicedirs: File exists

Your scandir and your service definitions are the same directory, which they
should not be.

You currently have:
* service_definitions="${xdg_data_home}/s6-rc/services"
* compiled_services="${xdg_state_home}/s6-rc/compiled"
* scandir="${xdg_data_home}/s6-rc/services"
* livedir="${xdg_runtime_dir}/s6-rc"

However service definitions can not be used as a scandir: if your services are
to be managed by s6-rc they should not be present at start in your scandir but
should be added there by s6-rc-init.

That’s why s6-rc-init complains about files already existing: it tries to
create a symlink in the scandir pointing to the services it’s managing but it
can’t because the service are already present in the scandir.

Moreover, had you had any oneshots in your service definition directory, I
think s6-svscan would have simply failed to start, or complained about
directories containing no service (oneshots are not supervised by s6-svscan,
because there’s nothing to supervise in them, so it doesn’t know about them).

What you should have is:
* service_definitions="${xdg_data_home}/s6-rc/services"
* compiled_services="${xdg_state_home}/s6-rc/compiled"
* scandir="${xdg_runtime_dir}/services"
* livedir="${xdg_runtime_dir}/s6-rc"

Your scandir should be in your runtime dir because it does not contain data but
the current running configuration of your system. It can be an empty directory
when you start s6-svscan, there is nothing wrong with that. s6-rc will populate
it according to the compiled services you feed him.

>i've taken a look at s6rc_livedir_create.c:
>
> https://git.skarnet.org/cgi-bin/cgit.cgi/s6-rc/tree/src/libs6rc/s6rc_livedir_create.c
>
>but nothing is leaping out to me as explaining what's happening.
>
>Thoughts?
>
>
>Alexis.
>
>[a] The current s6 and s6-rc pages on the wiki have lot of detail,
>without any "quickstart" tutorials that might make it easy for
>people to get on board. A while ago i did a big restructure of the
>s6 article:
>
> https://wiki.gentoo.org/wiki/User:Flexibeast/drafts/S6
>
>which i feel improves the current page:
>
> https://wiki.gentoo.org/wiki/S6
>
>but which has been awaiting review by a more senior wiki editor
>than me.
>
>The s6-rc page is similarly detailed and similarly lacking a
>"quickstart":
>
> https://wiki.gentoo.org/wiki/S6-rc

Yeah, these definitely don’t help as much as they should, it’s a good thing
someone decides on improving them, thanks for that. :)

>[b] Various people are providing s6 service definitions,
>e.g. https://codeberg.org/alecStewart1/gentoo-s6-scripts, but i'm
>not
>currently aware of any providing s6-rc service definitions -
>pointers welcome. :-)

You can see my own outdated s6-rc system service definitions at:
* https://forge.dotslashplay.it/s6-rc/system-services
and my (also outdated) s6-rc user tree service definitions at:
* https://forge.dotslashplay.it/s6-rc/personal-services

Hoël

Received on Tue Apr 02 2024 - 12:44:10 CEST

This archive was generated by hypermail 2.4.0 : Tue Apr 02 2024 - 12:44:50 CEST