I am not sure if I am misunderstanding what s6-rc-update is intended to do.
I have gone through this process a couple times now, and I always must manually stop or start the service. Below is a transcript of removing cupsd from the default bundle, and having to manually stop the service.
I am especially confused by the documentation saying that s6-rc will inspect the difference between the two compiled databases and stop services that are not present in the new compiled database. (Docs excerpted below)
I get similar (lack of) behavior when adding cupsd back to the default bundle. Am I doing something wrong? Or am I just misunderstanding the expectations of s6-rc-update?
From: https://skarnet.org/software/s6-rc/s6-rc-update.html (under restarts)
The transcript below indicates "stopping services in the old database" and "bringing selected services down"
# s6-rc-db contents default | grep cupsd
cupsd
# pgrep cupsd 11756
# rm /etc/s6/adminsv/default/contents.d/cupsd
# s6-rc-compile /etc/s6/rc/compiled-new /etc/s6/adminsv /etc/s6/sv
# s6-rc-update -v3 /etc/s6/rc/compiled-new
s6-rc-update: info: computing state adjustments
s6-rc-update: info: stopping services in the old database
s6-rc: info: bringing selected services down
s6-rc-update: info: updating state and service directories
s6-rc-update: info: successfully switched to new database
s6-rc-update: info: updating s6rc-fdholder pipe storage
s6-rc-update: info: cleaning up scan directory
s6-rc-update: info: starting services in the new database
s6-rc: info: bringing selected services up
# s6-rc-db contents default | grep cupsd
# pgrep cupsd
11756
# s6-rc stop cupsd
It would probably be best to ask upstream for clarification on this. In my experience, s6-rc-update will restart services if it thinks it needs to (e.g. adding a dependency or something to a running service), but I can't recall it ever stopping a service simply because it was no longer in a bundle.
Went to OFTC #s6 and got some clarification. I intend to make a patch for s6 docs roughly outlining the following. I'm happy to add to the Artix wiki, too, so will look at making edits there (it's outdated with regard to bundle maintenance).
s6-rc-update will stop services whose definitions no longer exist, but does not make changes based on bundle updates. Thus, within the Artix setup, for a service to be automatically stopped, you'd remove it from the bundle (necessary to keep the resultant db consistent) *and also* remove the service directory from /etc/s6/sv. This second bit is not reasonable, because Artix expects to own sv/.
Thus, the restart and auto-stop logic in s6-rc-update is not enough to automatically stop a service removed from a bundle. Instead, we must invoke the s6-rc state machine to make the changes. This is very simple, assuming a fairly standard Artix setup: the default bundle is used by init and is the root of the dependency graph. Assuming users either make bundles that are included in default or directly edit default, then the following is sufficient to make the final state reflect the newly updated rc db:
# <changes reflected in default...>
# s6-rc-compile /etc/s6/rc/<new-db> /etc/s6/adminsv /etc/s6/sv
# s6-rc-update /etc/s6/rc/<new-db>
# s6-rc -p change default
Is there anything dated besides the whole bit about s6-rc-bundle-update? That's very old legacy stuff that was removed ages ago. I can just delete that paragraph on the wiki.
Edit: and removed it.
That was the primary section I was thinking of.