The s6-rc-format-upgrade program
s6-rc-format-upgrade is a program that is normally used
very rarely: when the s6-rc package is upgraded, some
services are currently managed with s6-rc, and the database
format has changed. This program transitions a live directory
using a database with the old s6-rc format (the one being
replaced) so that it uses a database with the new s6-rc format.
The point is to ensure a smooth transition between different
versions of s6-rc without needing a reboot.
s6-rc-format-upgrade is very different from
s6-rc-update and does not
duplicate its functionality:
- s6-rc-update updates a
live directory to use a different compiled database,
compiled from a different source, where services may have
changed, be renamed, etc. But it can only handle databases
with the format that it knows - the format created by the
s6-rc-compile binary that
comes in the same package as s6-rc-update.
- s6-rc-format-upgrade is the opposite: it cannot handle
service changes, it can only update a live directory to use
a compiled database corresponding to the same source
as the compiled database the live directory is currently
using. But it will replace an obsolete compiled database with
a compiled database that uses the new format (provided both
compiled databases come from the same source, and have just been
produced by invocation of different versions of
s6-rc-compile), ensuring the
s6-rc installation can live through database format changes.
s6-rc-format-upgrade [ -v verbosity ] [ -l live ] [ -t timeout ] [ -b ] newcompiled
- newcompiled must be an absolute path.
- s6-rc-format-upgrade expects to find a compiled service database
with the new format in compiled
- newcompiled must be compiled from
the same source database as the current compiled database currently
being used by live.
- s6-rc-format-upgrade then updates the live directory in live
so it uses newcompiled as its compiled database.
- On success, it exits 0.
- -v verbosity : be more or less
verbose. Default is 1.
- -t timeout : if all
operations have not completed after timeout
milliseconds, complain and exit 1.
- -l live : Work with the live state in
the live directory. Default is
/run/s6-rc. The default can be changed at compile time by
giving the --livedir=live option to
- -b : blocking lock. If live is currently
being used by another program, s6-rc-format-upgrade will wait until that
other program has released its lock on the directory, then proceed.
By default, s6-rc-format-upgrade fails with an error message if the live
directory is currently in use.
s6-rc-format-upgrade is only necessary when the database format
changes, which only happens when s6-rc's major version number
(the third number from the right) changes. The correct order of
operations is then the following:
- Make sure your current compiled database is up-to-date
with your source database. If it's not, update it, by invoking
the s6-rc-compile and
s6-rc-update binaries from your
old s6-rc installation, the ones that
understand the old format.
- From the same source, compile a new database with the new format,
using the s6-rc-compile binary
from the new s6-rc package.
- Update your live directories with this new database, using
- You can now remove the old databases, and delete the old