Reference sections kept pointing at the line-based format they no longer
document. `sysv` and `task` sent the reader to Services for "<COND>",
the cgroups chapter opened by listing three legacy directives and then
explained further down that only two of them exist here, and the logging
chapter still gave "log:prio:facility.level,tag:ident" as the full
syntax.
Some claims were wrong independent of the format:
- a sysv is a supervised daemon, grouped with service in
SVC_TYPE_DAEMON, not a variation on task
- restart-max has no upper bound of 255, or any other
- the built-in rescue fallback runs in 12345789, not 12345
- conditional loading quotes system/10-hotplug.conf, not
system/hotplug.conf
- the key spells conflicts, not conflict
- the built-in getty no longer wants TERM last, it is a key
`if` takes either a service name or, in angle brackets, a condition,
decided in svc_ifthen(). Only the examples showed this, so it is now
said.
Terminology follows the split index.md already draws: a block is the new
format, a stanza the line-based one.
src/rescue.conf was still line-based, missed because it sits in src/
rather than system/ or contrib/.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
3.8 KiB
SysV Init Compatibility
It is not possible to run unmodified SysV init systems with Finit. This was never the intention and is not the strength of Finit. However, it comes with a few SysV Init compatibility features to ease the transition from a serialized boot process.
SysV Init Scripts
Syntax: sysv NAME { command = "/path/to/init-script" }
Note
Conditions, runlevels, and the other settings a
sysvblock takes are described in Service Options.
A sysv block is a supervised daemon, like service, but started and
stopped through a SysV style init script instead of a command line. The
intention is to reuse existing setup and init scripts from Linux
distributions.
When entering an allowed runlevel, Finit calls init-script start, when
entering a disallowed runlevel, Finit calls init-script stop, and if
the Finit .conf, where the sysv block is declared, is modified, Finit
calls init-script restart on initctl reload. Similar to how
service blocks work.
Forking services started with sysv scripts can be monitored by Finit
by declaring the PID file to look for: pidfile = "/path/to/file.pid".
Finit does not create that file, it watches it for the resulting
forked-off PID. That is the default; pidfile-create = true asks Finit
to write it instead. The same applies to forking daemons with no way to
run in the foreground, see Services.
Tip
See also SysV Init Compatibility.
Run-parts
For a directory with traditional start/stop scripts that should run, in
order, at bootstrap, Finit provides the runparts setting. It runs
in runlevel S, at the very end of it (before calling /etc/rc.local)
making it perfect for most scenarios.
For syntax details, see the Run-parts Scripts section. Here is an example take from a Debian installation:
runparts = "/etc/rc2.d"
Files in these directories are usually named SNNfoo and KNNfoo,
which Finit knows about and automatically appends the correct argument:
/bin/sh -c /etc/rc2.d/S01openbsd-inetd start
or
/bin/sh -c /etc/rc0.d/K01openbsd-inetd stop
Files that do not match this pattern are started similarly but without the extra command line argument.
Start/Stop Scripts
For syntax details, see SysV Init Scripts, above. Here follows an example taken from a Debian installation:
sysv inetd {
description = "OpenBSD inet daemon"
runlevel = "2345"
conditions = { "pid/syslogd" }
command = "/etc/init.d/openbsd-inetd"
}
The init script header could be parsed to extract Default-Start: and
other parameters for the sysv command to Finit. There is currently no
way to detail a generic syslogd dependency in Finit, so Should-Start:
in the header must be mapped to the condition system in Finit using an
absolute reference, here we depend on the sysklogd project's syslogd.
/etc/rc.local
One often requested feature, early on, was a way to run a site specific
script to set up, e.g., static routes or firewall rules. A user can add
a task or run command in the Finit configuration for this, but for
compatibility reasons the more widely know /etc/rc.local is used if
it exists, and is executable. It is called very late in the boot process
when the system has left runlevel S, stopped all old and started all new
services in the target runlevel (default 2).
Note
In Finit releases before v4.5 this script blocked Finit execution and made it as good as impossible to call
initctlduring that time.
init q
When /sbin/finit is installed as /sbin/init, it is possible to use
init q to reload the configuration. This is the same as calling
initctl reload.