После около трёх лет разработки опубликован релиз системы инициализации Finit 4.0 (Fast init), развиваемой в качестве простой альтернативы SysV init и systemd. Проект основан на наработках, созданных при обратном инжиниринге системы инициализации fastinit, используемой в Linux-прошивке нетбуков EeePC и примечательной очень быстрым процессом загрузки. Система в первую очередь нацелена на обеспечение загрузки компактных и встраиваемых систем, но также может применяться для обычных настольных и серверных окружений. Примеры сценариев для внедрения подготовлены для Void Linux, Alpine Linux и Debian GNU/Linux. Код проекта написан на языке Си и распространяется под лицензией MIT.
Finit поддерживает уровни выполнения (runlevel) в стиле SysV init, отслеживание работоспособности фоновых процессов (автоматический перезапуск сервиса в случае сбоя), выполнение одноразовых обработчиков, запуск сервисов с учётом зависимостей и произвольных условий, прикрепление дополнительных обработчиков для запуска до или после выполнения сервиса. Например, можно настроить запуск сервиса только после появления доступа к сети или после того, как будет запущен какой-то другой сервис, такой как syslogd. Для задания ограничений применяется Cgroups v2.
Для расширения функциональности и адаптации под свои нужды могут использоваться плагины, для которых предоставлена система hook-ов, позволяющих прикрепить обработчик к различным стадиям загрузки и выполнения сервисов, а также обеспечить привязку к внешним событиям. Например, подготовлены плагины для поддержки D-Bus, ALSA, netlink, resolvconf, горячего подключения устройств, проверки доступности и загрузки модулей ядра, обработки PID-файлов и настройки окружения для X-сервера.
Поддерживается использование типовых скриптов для запуска сервисов, созданных для SysV init (/etc/rc.d и /etc/init.d не используются, но поддержка /etc/inittab может быть реализована через плагин), а также сценариев rc.local, файлов с переменными окружения и сетевых настроек /etc/network/interfaces, как в Debian и BusyBox. Настройки могут как определяться в одном файле конфигурации /etc/finit.conf, так и распределяться по нескольким файлам в каталоге /etc/finit.d.
Управление осуществляется через типовой инструментарий initctl и run-parts, позволяющий активировать и деактивировать сервисы в привязке к уровням запуска, а также выборочно запускать часть сервисов. В состав Finit также входит встроенная реализация getty (управление терминалом и входом пользователей), watchdog для отслеживания работоспособности и режим восстановления после сбоя со встроенным sulogin для запуска изолированной командной оболочки.
Среди изменений, добавленных в выпуске Finit 4.0 (версия 3.2 была пропущена из-за наличие изменений, нарушающих обратную совместимость):
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=55033
Finit поддерживает уровни выполнения (runlevel) в стиле SysV init, отслеживание работоспособности фоновых процессов (автоматический перезапуск сервиса в случае сбоя), выполнение одноразовых обработчиков, запуск сервисов с учётом зависимостей и произвольных условий, прикрепление дополнительных обработчиков для запуска до или после выполнения сервиса. Например, можно настроить запуск сервиса только после появления доступа к сети или после того, как будет запущен какой-то другой сервис, такой как syslogd. Для задания ограничений применяется Cgroups v2.
Для расширения функциональности и адаптации под свои нужды могут использоваться плагины, для которых предоставлена система hook-ов, позволяющих прикрепить обработчик к различным стадиям загрузки и выполнения сервисов, а также обеспечить привязку к внешним событиям. Например, подготовлены плагины для поддержки D-Bus, ALSA, netlink, resolvconf, горячего подключения устройств, проверки доступности и загрузки модулей ядра, обработки PID-файлов и настройки окружения для X-сервера.
Поддерживается использование типовых скриптов для запуска сервисов, созданных для SysV init (/etc/rc.d и /etc/init.d не используются, но поддержка /etc/inittab может быть реализована через плагин), а также сценариев rc.local, файлов с переменными окружения и сетевых настроек /etc/network/interfaces, как в Debian и BusyBox. Настройки могут как определяться в одном файле конфигурации /etc/finit.conf, так и распределяться по нескольким файлам в каталоге /etc/finit.d.
Управление осуществляется через типовой инструментарий initctl и run-parts, позволяющий активировать и деактивировать сервисы в привязке к уровням запуска, а также выборочно запускать часть сервисов. В состав Finit также входит встроенная реализация getty (управление терминалом и входом пользователей), watchdog для отслеживания работоспособности и режим восстановления после сбоя со встроенным sulogin для запуска изолированной командной оболочки.
Среди изменений, добавленных в выпуске Finit 4.0 (версия 3.2 была пропущена из-за наличие изменений, нарушающих обратную совместимость):
- Отдельная утилита reboot заменена на символическую ссылку на initctl по аналогии с утилитами halt, shutdown, poweroff и suspend.
- Реализована индикация прогресса выполнения операций.
- Изменена работа команд "inictl cond set|clear COND" для привязки действий к различным событиям. Для идентификации сервисов задействован синтаксис <pid/foo:id> вместо привязки к путям <svc/path/to/foo>.
- Удалена встроенная реализация сервера inetd, при необходимости в котором можно установить xinetd.
- Добавлена поддержка cgroups v2 для запуска сервисов в отдельных cgroup.
- Добавлен режим восстановления после сбоя со своим suslogin.
- Добавлена поддержка start/stop скриптов от SysV init.
- Добавлены обработчики pre:script и post:script, позволяющие указать свои действия, выполняемые перед или после запуска сервиса.
- Добавлена поддержка env:file с переменными окружения.
- Добавлена возможность отслеживания произвольных PID-файлов.
- Добавлена возможность запуска задач и сервисов с использованием относительных путей.
- В initctl добавлена опция "-b" для выполнения действий в неинтерактивном режиме (batch mode).
- Встроенный watchdog заменён на отдельный вариант watchdogd.
- Добавлен плагин для автоматической загрузки модулей ядра для устройств, подключаемых во время работы.
- Добавлен плагин для обработки /etc/modules-load.d/.
- Добавлена поддержка автоматического перезапуска сервисов после изменения настроек, позволяющая обойтись без ручного выполнения команды "initctl reload". По умолчанию отключено и требует пересборки с "./configure --enable-auto-reload".
- Добавлена возможность ведения лога операций, влияющих на безопасность, таких как изменение runlevel, запуск и остановка сервисов, сбои сервисов.
- Улучшена поддержка /etc/network/interfaces.
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=55033