mirror of
https://github.com/troglobit/finit.git
synced 2026-10-01 05:22:48 +07:00
in an initramfs, then transition to the real root filesystem. Useful for systems requiring early boot tasks like LUKS unlock, LVM activation, or network boot before mounting the real root. Adds INIT_CMD_SWITCH_ROOT API command, `initctl switch-root` subcommand, and HOOK_SWITCH_ROOT plugin hook point. The implementation gracefully stops services, moves virtual filesystems (/dev, /proc, /sys, /run) to the new root, deletes initramfs contents to free memory, then execs the new init as PID 1. See GitHub Discussion #292 for background.
83 lines
4.1 KiB
Markdown
83 lines
4.1 KiB
Markdown
Introduction
|
|
============
|
|
|
|
{ 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
|
|
* [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/
|