s6-rc
Software
skarnet.org
 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. 
 Interface 
     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. 
 Options 
 -  -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
./configure. 
-  -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. 
 Typical usage 
 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
s6-rc-format-upgrade. 
-  You can now remove the old databases, and delete the old
s6-rc package.