S6-RC-SET-CHANGE(8)

πŸ“¦ version 0.7.0.0, in nixpkgs unstable

πŸ’… s6-rc-set-change β€” the man page, bestie

okay so real talk: this is s6-rc-set-change, straight out of the System Manager's Manual, and it's genuinely one of the most useful little gremlins in the whole s6-rc toolbox. stick with me and we'll get through it together 🫢


✨ NAME ✨

s6-rc-set-change β€” modify a set by changing the rx of some services

(yes that's the whole name section, don't come for me, it's short 😭)


πŸŽ€ SYNOPSIS πŸŽ€

s6-rc-set-change [-v verbosity] [-r repo] [-E | -e]
                 [-f | -I fail|pull|warn] [-n] set newrx services...

like, that's it. that's the whole vibe. copy it exactly, no cap πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

So s6-rc-set-change operates on set set in repository repo (cf. s6-rc-repo(7)). Very demure. Very mindful.

What it does: it attempts to move all the services listed in services... into rx newrx (again, cf. s6-rc-repo(7) β€” that page is your bestie for the rx lore).

And then β€” iconic behaviour β€” it exits 0. that's it. slay.

🌸 Notes 🌸

  • s6-rc-set-change is the bread and butter of s6-rc-repo(7) operations. literally the whole reason it exists. it's how users can tailor the set of services they want to be enabled at boot time. main character energy fr fr πŸ‘‘
  • Once a change has been effected, and the command says that the set is consistent, it can be committed with s6-rc-set-commit(8). so like, do the change, then commit the change. two-step process, don't skip step two πŸ™ˆ
  • okay this one's important, so listen up: if you are masking or unmasking services, and you see it pulling services that are not dependencies of the service you're unmasking, or that are not depending on the service you're masking β€” it is because these services are part of the same pipeline. if you mask a part of a pipeline, the whole pipeline needs to be masked. the whole. entire. pipeline. it's giving package deal 🎁

πŸ’– OPTIONS πŸ’–

  • -v verbosity, --verbosity=verbosity β€” be more or less verbose, bestie. the default is 1, which means error messages and warnings get written to stderr. 0 means only error messages get written. 2 or more adds informational messages. pick your yap level πŸ’¬
  • -r repo, --repository=repo β€” use the repository in repo, which must exist (no ghost repos, sorry). default is /var/lib/s6-rc/repository ✨
  • -E, --no-force-essential β€” if a service needs to be moved to/from the always rx, fail and report an error. this is the default. services marked as always are normally defined in the stores with flag-essential, and inconsistencies between essential services should be resolved in the stores. so like, fix it at the source, not here 🫢
  • -e, --force-essential β€” move services to/from the always rx if they need to be. ⚠️ this option should only be used temporarily, until the store inconsistency is fixed. and be aware: moving a service from always to usable or masked may result in an unbootable set. like, your machine won't boot. that kind of unbootable. do not do this casually πŸ’€
  • -f, --ignore-dependencies β€” change services... to newrx, but do not change any other services, even if the dependency graph would normally mandate it. this may result in an inconsistent set that you cannot commit. bold move, honestly πŸ”₯
  • -I action, --if-dependencies-found=action β€” determines what to do if a dependency would make the set inconsistent. okay so picture this: service A depends on service B, they're both in the latent rx, and you're trying to change A to active without mentioning B. that would not work β€” in order to be brought up at boot time, A would first need B to also be brought up at boot time, so A can only be active if B also is. in that situation, what s6-rc-set-change does depends on the value of action:
    • fail β€” print an error message and exit 1.
    • warn β€” print a warning message and proceed. this is the default.
    • pull β€” print a warning message and pull the dependencies of services... into newrx. (or the reverse dependencies, if you're trying to disable or mask services.)

also! the warning messages are not printed if verbosity is 0. sneaky but consistent 🌈

  • -n, --dry-run β€” check whether the command would succeed, print warning or error messages if appropriate, but do not perform the actual modifications. the "look but don't touch" option, we love a responsible queen πŸŽ€

πŸ”₯ EXIT STATUS πŸ”₯

  • 0 β€” Success. slay. ate. πŸ’…
  • 1 β€” -I fail was given and dependencies prevented services... from being changed to newrx. the dependency graph said no 😭
  • 3 β€” a service in services... was not found in the reference database. it's not there, bestie, it never was πŸ•΅οΈ
  • 4 β€” invalid or corrupted reference database. something's cooked πŸ’€
  • 100 β€” incorrect usage. we been knew (you typed it wrong) πŸ™ˆ
  • 102 β€” inconsistent repository.
  • 111 β€” system call failed.

🌈 SEE ALSO 🌈

s6-rc-repo(7), s6-rc-set-commit(8)

Also! this man page is ported from the authoritative documentation at: https://skarnet.org/software/s6-rc/s6-rc-set-change.html

go read the source, it's free knowledge πŸ¦‹


πŸ‘‘ AUTHORS πŸ‘‘

  • Laurent Bercot
  • Carlos Eduardo <carana2099@gmail.com> (man page port)

and that's the whole page, bestie. this one shipped out of Debian on January 24, 2026 β€” so if you're reading it, you're reading the good stuff. now go set some changes, and remember: pipeline masking is a package deal πŸŽ€βœ¨πŸ’œ

πŸ“¦ where this page comes from