This is the core services suite for dinit as used by Chimera.
It provides an expansive collection of service files, scripts and helpers to aid early boot, more suitable for a practical deployment than the example collection that comes with upstream. Patches for third party distro adaptations are welcome, provided they are not disruptive.
Currently the documentation for the suite is lacking, which is also to be done.
sd-tmpfiles
)awk
(POSIX will do)mount
, umount
-a
sulogin
(any implementation)The distribution should provide the following helpers:
/usr/libexec/dinit-console
/usr/libexec/dinit-devd
The dinit-console
may look like this when using console-setup
:
#!/bin/sh
if [ "$1" = "keyboard" ]; then
set -- "-k"
else
set --
fi
exec setupcon "$@"
The dinit-devd
may look like this when using udev
:
#!/bin/sh
case "$1" in
start) exec /usr/libexec/udevd --daemon ;;
stop) udevadm control -e || : ;;
settle) exec udevadm settle ;;
trigger) exec udevadm trigger --action=add ;;
esac
exit 1
Note that currently the behaviors are subject to change. Adopters should watch out for such changes and adjust their scripts accordingly.
Not having these dependencies will allow the boot to proceed, but specific functionality will not work. Generally the affected oneshots will simply exit with success if the tools aren't located.
fsck
util-linux
, others may workThe collection provides special "target" services, suffixed with .target
,
which can be used as dependencies for third party service files as well as
for ordering.
Until better documentation is in place, here is the list, roughly in bootup
order. The actual order may vary somewhat because of parallel startup. In
general your services should specify dependency links and ordering links
for every target that is relevant to your functionality (i.e. you should
not rely on transitive dependencies excessively). This does not apply
to very early oneshots that are guaranteed to have run, i.e. in most cases
services should not have to depend on early-prepare.target
and so on.
early-prepare.target
- early pseudo-filesystems have been mountedearly-modules.target
- kernel modules from /etc/modules
have been loadedearly-devices.target
- device events have been processed
/dev
is fully populated with quirks applied and so on.early-keyboard.target
- console keymap has been set
setupcon
from console-setup
is not available.early-fs-pre.target
- filesystems are ready to be checked and mounted
early-root-rw.target
- root filesystem has been re-mounted read/write.
fstab
explicitly specifies it should be read-only.early-fs-fstab.target
- non-network filesystems in fstab
have been mountedearly-fs-local.target
- non-network filesystems have finished mounting
fstab
filesystems such as ZFS.early-console.target
- follow-up to early-keyboard.target
(console font, etc.)
setupcon
from console-setup
is not available.pre-local.target
- most important early oneshots have run.
tmpfiles.d
are not guaranteed yet.local.target
as their sentinel.rc.local
is run.local.target
- /etc/rc.local
has run and temp/volatile files/dirs are created
pre-local.target
.pre-local.target
).pre-network.target
- networking daemons may start.
network.target
- networking daemons have started.
before
.login.target
- the system is ready to run gettys, launch display manager, etc.
before
sentinel for things that must be up before login.time-sync.target
- system date/time should be set by now.
before
.