Files & Layout¶
Originally Finit was configured using a single file, /etc/finit.conf
,
and although still possible to use a single configuration file, today
the following layout is recommended:
/
|- etc/
| |- finit.d/
| | |- available/
| | | `- my-service.conf
| : |- enabled/
| : | `- my-service.conf -> ../available/my-service.conf
| : :
| : |- static-service.conf
| : `- another-static.conf
| :
| `- finit.conf
|- lib
| `- finit/
| `- system/
| |- 10-hotplug.conf
| `- ...
`- run/
`- finit/
`- system/
|- dbus.conf
|- keventd.conf
|- runparts.conf
|- watchdogd.conf
`- ...
Configuration files in /etc
are provided by the user, or projects like
finit-skel and extended by
the user.
The files in /lib/finit/system/*.conf
are system critical services and
setup provided by Finit, e.g. udev/mdev that must run very early at system
bootstrap. This system directory was introduced in Finit v4.4 to replace
the hard-coded services provided by plugins before. All .conf files in this
directory be either replaced by a system administrator or overridden by a
file with the same name in /etc/finit.d/
.
The files in /run/finit/system/*.conf
are created by plugins and Finit
bundled services like runparts, watchdog, and
keventd
if they are enabled. Like
/lib/finit/system/*.conf
, these files can be overridden by file with
the same name in /etc/finit.d/
.
Services in the available/
and enabled/
sub-directories are called
dynamic services, in contrast to static services -- the only difference
being where they are installed and if the initctl
tool can manage them
with the enable
and disable
commands. An administrator can always
create files and symlinks manually.
At bootstrap, and initctl reload
, all .conf files are read, starting
with finit.conf
, then /lib/finit/system/*.conf
, finit.d/*.conf
,
and finally all finit.d/enabled/*.conf
files. Each directory is a
unique group, where files within each group are sorted alphabetically.
Example:
/lib/finit/system/10-hotplug.conf
/lib/finit/system/90-testserv.conf
/run/finit/system/dbus.conf
/run/finit/system/runparts.conf
/etc/finit.d/10-abc.conf
/etc/finit.d/20-abc.conf
/etc/finit.d/enabled/1-aaa.conf
/etc/finit.d/enabled/1-abc.conf
The resulting combined configuration is read line by line, each run
,
task
, and service
added to an ordered list that ensures they are
started in the same order. This is important because of the blocking
properties of the run
statement. For an example on the relation of
service
and run
statements, and dependency handling between them,
see Conditional Loading, below.
Note
The names finit.conf
and finit.d/
are only defaults. They can be
changed at compile-time with two configure
options:
--with-config=/etc/foo.conf
and --with-rcsd=/var/foo.d
.
They can also be overridden from the kernel command line
using: -- finit.config=/etc/bar.conf
and in that file use the
top-level configuration directive rcsd /path/to/finit.d
.
Filesystem Layout¶
Finit is most comfortable with a traditional style Linux filesystem layout, as specified in the FHS:
/.
|- bin/
|- dev/ # Mounted automatically if devtmpfs is available
| |- pts/ # Mounted automatically by Finit if it exists
| `- shm/ # Mounted automatically by Finit if it exists
|- etc/
| |- finit.d/
| | |- available/
| | `- enabled/
| `- finit.conf
|- home/
|- lib/
|- libexec/
|- mnt/
|- proc/ # Mounted automatically by Finit if it exists
|- root/
|- run/ # Mounted automatically by Finit if it exists
| `- lock/ # Created automatically if Finit mounts /run
|- sbin/
|- sys/ # Mounted automatically by Finit if it exists
|- tmp/ # Mounted automatically by Finit if it exists
|- usr/
`- var/
|- cache/
|- db/
|- lib/
| `- misc/
|- lock/
|- log/
|- run -> ../run
|- spool/
`- tmp/
Finit starts by mounting the critical file systems /dev
, /proc/
, and
/sys
, unless they are already mounted. When all plugins and other,
core Finit functions, have been set up, all relevant filesystems (where
PASS > 0
) are checked and mounted from the selected fstab
, either
the default /etc/fstab
, or any custom one selected from the command
line, or at build time.
To provide a smooth ride, file system not listed in the given fstab
,
e.g. /tmp
and /run
, are automatically mounted by Finit, as listed
above, provided their respective mount point exists.
With all filesystems mounted, Finit calls swapon
.
Tip
To see what happens when all filesystems are mounted, have a look at
the bootmisc.so
plugin.
At shutdown, and after having stopped all services and other lingering
processes have been killed, filesystems are unmounted in the reverse
order, and swapoff
is called.
Managing Services¶
Using initctl disable my-service
the symlink (above) is removed and
the service is queued for removal. Several changes can be made to the
system, but it is not until initctl reload
is called that the changes
are activated.
To add a new static service, drop a .conf
file in /etc/finit.d/
and
run initctl reload
. (It is also possible to SIGHUP
PID 1, or call
finit q
, but that has been deprecated with the initctl
tool). Finit
monitors all known active .conf
files, so if you want to force a
restart of any service you can touch its corresponding .conf
file in
/etc/finit.d
and call initctl reload
. Finit handles all conditions
and dependencies between services automatically, see the section on
Service Synchronization for more details.
On initctl reload
the following is checked for all services:
- If a service's
.conf
file has been removed, or its conditions are no longer satisfied, the service is stopped. - If the file is modified, or a service it depends on has been reloaded, the service is reloaded (stopped and started).
- If a new service is added it is automatically started — respecting runlevels and return values from any callbacks.
For more info on the different states of a service, see the separate document Finit Services.
Alternate finit.d/¶
Syntax: rcsd /path/to/finit.d
The Finit rcS.d directory is set at compile time with:
./configure --with-rcsd=/etc/finit.d
A system with multiple use-cases may be bootstrapped with different configurations, starting with the kernel command line option:
-- finit.config=/etc/factory.conf
This file in turn can use the rcsd
directive to tell Finit to use
another set of .conf files, e.g.:
rcsd /etc/factory.d
Note
This directive is only available from the top-level bootstrap .conf
file, usually /etc/finit.conf
.
Including Finit Configs¶
Syntax: include <CONF>
Include another configuration file. Absolute path required.