Introduction ============ ![Alpine screenshot](img/alpine-screenshot2.png){ align=right width=40% } > Reverse engineered from the [EeePC fastinit][] > "gaps filled with frog DNA …" > — [Claudio Matsuoka][] Finit is a process starter and [supervisor][1] designed to run as PID 1 on Linux systems. It consists of a set of [plugins](plugins.md) and can be set up using [configuration files](config/files.md). Plugins start at [hook points](plugins.md#hooks) and can run various set up tasks and/or install event handlers that later provide runtime services, e.g., PID file monitoring, or [conditions](conditions.md). Features -------- * [Runlevels](config/runlevels.md), defined per service * [One-shot tasks](config/task-and-run.md), [services](config/services.md) (daemons), or [SysV init][4] start/stop scripts * [Runparts](config/runparts.md) and `/etc/rc.local` support * Process supervision similar to [systemd][] * Fine-grained privilege control: - [Linux capabilities](config/capabilities.md) for minimal required privileges - [Supplementary groups](config/services.md#non-privileged-services) for multi-group resource access * [Sourcing environment files](config/service-env.md) * [Conditions](conditions.md) for network/process/custom dependencies * [Readiness notification](config/service-sync.md); PID files (native) for synchronizing system startup, support for systemd [sd_notify()][], or [s6 style][] too * Limited support for [tmpfiles.d(5)][] (no aging, attributes, or subvolumes) * [Pre/Post script actions](config/service-wrappers.md) * Rudimentary [templating support](config/templating.md) * [Tooling](initctl.md) to enable/disable services * [D-Bus API](dbus.md), `org.finit` control and signals for bus clients * [Automatic reload](features.md#automatic-reload) of modified configuration files (optional) * [Built-in getty](config/tty.md) * Built-in watchdog, with support for hand-over to [watchdogd][] * Built-in support for Debian/BusyBox [`/etc/network/interfaces`][3] * [Cgroups v2](config/cgroups.md), both configuration and monitoring in [`initctl top`](initctl.md) * [Plugin support](plugins.md) for customization * Proper [rescue mode](config/rescue.md) with bundled `sulogin` for protected maintenance shell * [Switch root](switchroot.md) support for initramfs-to-real-root transitions * Integration with [watchdogd][] for full system supervision * [Logging](config/logging.md) to kernel ring buffer before `syslogd` has started, see the recommended [sysklogd][] project for complete logging integration and how to log to the kernel ring buffer from scripts using `logger` For a more thorough overview, see the [Features](features.md) section. > [!TIP] > See [SysV Init Compatibility](config/sysv.md) for help to > quickly get going with an existing SysV or BusyBox init setup. Origin ------ This project is based on the [original finit][] by [Claudio Matsuoka][] which was reverse engineered from syscalls of the [EeePC fastinit][]. Finit is developed and maintained by [Joachim Wiberg][] at [GitHub][6]. Please file bug reports, clone it, or send pull requests for bug fixes and proposed extensions. [1]: https://en.wikipedia.org/wiki/Process_supervision [3]: https://manpages.debian.org/unstable/ifupdown2/interfaces.5.en.html [4]: https://en.wikipedia.org/wiki/Init [5]: https://en.wikipedia.org/wiki/Runlevel [6]: https://github.com/finit-project/finit [dinit]: https://davmac.org/projects/dinit/ [systemd]: https://www.freedesktop.org/wiki/Software/systemd/ [sd_notify()]: https://www.freedesktop.org/software/systemd/man/sd_notify.html [s6 style]: https://skarnet.org/software/s6/notifywhenup.html [tmpfiles.d(5)]: https://www.freedesktop.org/software/systemd/man/tmpfiles.d.html [EeePC fastinit]: https://web.archive.org/web/20071208212450/http://wiki.eeeuser.com/boot_process:the_boot_process [original finit]: http://helllabs.org/finit/ [Claudio Matsuoka]: https://github.com/cmatsuoka [Joachim Wiberg]: https://troglobit.com [watchdogd]: https://troglobit.com/watchdogd.html [sysklogd]: https://github.com/troglobit/sysklogd/