- Prepare emergency shell, if enabled
- Set up initial signal handlers
- Set up default $PATH early
- Mount
/procand/sys - Check kernel command line for
debugto figure out log level - Load all
.soplugins - Call
fsckon file systems listed in/etc/fstab - Populate
/devusing either udev or mdev, depending on system type - Parse
/etc/finit.confand all/etc/finit.d/*.conffiles - Start built-in watchdog, if enabled
- Set hostname
- Pivot root, or remount
/read-write, depending on system type - Call 1st level hooks,
HOOK_ROOTFS_UP - Mount all file systems listed in
/etc/fstaband swap, if available - Enable SysV init signals
- Call 2nd level hooks,
HOOK_BASEFS_UP - Cleanup stale files from
/tmp/*et al, handled bybootmiscplugin - Load kernel params from
/etc/sysctl.d/*.conf,/etc/sysctl.confet al. (Supports all locations that SysV init does.), handled byprocpsplugin - Start all 'S' runlevel tasks and services
- Bring up loopback interface and all
/etc/network/interfaces, if the.confsettingnetwork <SCRIPT>is set, it is called instead - Call 3rd level hooks,
HOOK_NETWORK_UP - If
runparts <DIR>is set, run-parts(8) is called on<DIR> - Switch to the configured runlevel from
/etc/finit.conf, default 2. At every runlevel change all*.conffiles in/etc/finit.d/are (re)loaded and new services, tasks, and blocking run commands are started. Provided they are allowed in the new runlevel and all of their conditions, if any, are set. - Call 4th level hooks,
HOOK_SVC_UP - Call
/etc/rc.local, if it exists and is an executable shell script - Call 5th level (last) hooks,
HOOK_SYSTEM_UP - Start all configured TTYs, or a fallback shell on
/dev/console
In (19) and (22) tasks and services defined in /etc/finit.conf and
/etc/sysctl.d/*.conf are started. Remember, all service and task
stanzas are started in parallel and run in sequence, and in the order
listed. Hence, to emulate a SysV /etc/init.d/rcS one could write a
long finit.conf with only run statements.
Notice the five hook points that are called at various point in the
bootstrap process. This is where plugins can extend the boot in any way
they please. There are other hook points, e.g. HOOK_MOUNT_ERROR, for
more on this see plugins.md.
For instance, at HOOK_BASEFS_UP a plugin could read an XML file from a
USB stick, convert/copy its contents to the system's /etc/ directory,
well before all 'S' runlevel tasks are started. This could be used with
system images that are created read-only and all configuration is stored
on external media.