s6-rc: the s6-rc-set-install program
Keywords: s6-rc s6-rc-set-install repo set installation update s6-rc-update boot bootdb

s6-rc
Software
skarnet.org

# The s6-rc-set-install program

s6-rc-set-install installs a committed set of services, i.e. a compiled database, as the live database of the currently running system.

It is basically a wrapper around s6-rc-update.

## Interface

         s6-rc-set-install [ -v verbosity ] [ -r repo ] [ -c bootdb ] [ -l livedir ] [ -f convfile ] [ -b ] [ -K ] [ -e | -E ] set

- s6-rc-set-install checks that the set of services set has been committed and that no changes have occurred since.
- It takes the corresponding service database and copies it to the same directory as bootdb.
- It calls s6-rc-update on that copy of the compiled service database, which makes it the new live database. Some services may be stopped, and other started, in the process.
- It updates the bootdb link to point to the new database, so that next boot uses it.

## Options

-v verbosity, --verbosity=verbosity
  Be more or less verbose. The default is 1, which means that error messages and warnings will be written to stderr. 0 means that only error messages will be written, and 2 or more adds informational messages.
-r repo, --repository=repo
  Use the repository in repo, which must exist. Default is /var/lib/s6-rc/repository.
-c bootdb, --bootdb=bootdb
  Use bootdb as the path to the boot-time database. This must be the same path that is given to the `-c` option of s6-rc-init at boot time. The default is `/etc/s6-rc/compiled/current`. Note that bootdb must always be a symlink, pointing to the real compiled database at any time.
-l livedir, --livedir=livedir
  Assume the live directory of the machine, as created by s6-rc-init, is livedir. The default is `/run/s6-rc`, but may have been changed at s6-rc build time with the `--livedir` configure argument.
-f convfile, --conversion-file=convfile
  Specifies a conversion file to give to s6-rc-update. The default is not having a conversion file, which should be correct in most cases.
-b, --block
  Pass the `-b` option to s6-rc-update, which makes it block rather than fail when the live database is currently being used by another program - typically when an s6-rc change transition is under way.
-K, --keep-old
  If this option is given, the old live database, after it has been replaced, is kapt around, and s6-rc-set-install prints a line to stdout that is the path to that old database. It can e.g. be used by automation to keep the possibility of rollbacks. By default, s6-rc-set-install will delete the old live database after successfully updating to the new one.
-e, --force-essentials
  If essential services running in the live database need to be stopped before the new set is installed, stop them. This is the default, even though it is not the default in s6-rc-update.
-E, --no-force-essentials
  If essential services running in the live database need to be stopped before the new set is installed, treat them as really essential and do not stop them. This may put the machine in an inconsistent state.
--no-update
  Only copy the database from the repository and link it as boot database; do not run s6-rc-update. This should only be used for a first installation, never when services are already managed with s6-rc — else it bypasses the check that the default enabled service set is actually viable, and might give an unpleasant surprise at next boot.

## Exit codes

0
  Success.
3
  set was not found in the repository.
7
  set was not up-to-date.
100
  Incorrect usage.
102
  Inconsistent repository.
111
  System call failed.
Other codes
  s6-rc-set-install can also exit with exit codes from s6-rc-update.

## Notes

- s6-rc-set-install is a simple wrapper around s6-rc-update that ties the repo commands and the way they manage service sets with the basic operation of the s6-rc engine.