08.12.2021

Доступна система инициализации Finit 4.0

После около трёх лет разработки опубликован релиз системы инициализации 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 была пропущена из-за наличие изменений, нарушающих обратную совместимость):

  • Отдельная утилита 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.

Источник.