9 декабря 2024 года состоялся релиз системного менеджера GNU Shepherd 1.0.0 (ранее dmd), сочетающего возможности системы инициализации и инструментария для управления системными сервисами. Это событие произошло после 21 года разработки проекта и после признание командой готовности проекта и его соответствия требованиям к функциональности современных систем инициализации и сервисных менеджеров.
Проект GNU Shepherd развивается разработчиками дистрибутива GNU Guix System в качестве альтернативы системе инициализации SysV-init, поддерживающей зависимости. Управляющий демон и утилиты Shepherd написаны на языке Guile (одна из реализаций языка Scheme), который также используется для определения настроек и параметров запуска сервисов. Решение Shepherd уже применяется в дистрибутиве GNU Guix System и нацелено также на использование в GNU/Hurd, но может работать в любой POSIX-совместимой ОС, для которой доступен язык Guile.
Проект Shepherd выполняет работу по запуску и остановке сервисов, учитывая взаимосвязь между сервисами, динамически определяя и запуская сервисы, от которых зависит выбранный сервис. Решение Shepherd также поддерживает определение конфликтов между сервисами и предотвращает их одновременное выполнение. Проект может использоваться как в роли основной системы инициализации (init c PID 1), так и в обособленном виде для управления фоновыми процессами отдельных пользователей (например, для запуска tor, privoxy, mcron и т.п.) с выполнением с правами данных пользователей.
По информации OpenNET, основные изменения и дополнения в GNU Shepherd 1.0.0:
добавлена поддержка сервисов, периодически запускающих команды или код на языке Scheme по указанному расписанию;
в команде «herd status SERVICE» реализован показ высокоуровневой информации о сервисах, такой как PID, команда и адреса, на которых принимаются сетевые запросы, а также сводки недавно добавленных в лог сообщений. Кроме того, данная команда теперь показывает применимые к сервису пользовательские действия и информирует о наличии заменяющего сервиса, который будет применён после перезапуска текущего сервиса;
команда herd status root теперь не является синонимом herd status и отображает сведения о корневом процессе shepherd;
для платформы Linux предоставлена возможность перезапуска с использованием механизма kexec («reboot —kexec») для замены ядра Linux без физической перезагрузки;
добавлен сервис log-rotation, отвечающий за периодическую ротацию логов и удаление устаревших логов;
добавлен сервис system-log, который можно использовать в качестве замены традиционной системы syslogd;
добавлен сервис timer для запуска команд в указанное время, по аналогии с утилитой «at». Например, «herd schedule timer at 07:00 — mpg123 alarm.mp3»;
добавлен сервис transient для запуска команд в фоне, по аналогии с утилитой systemd-run. Например, «herd spawn transient -d $PWD — make -j4».
В проекте Shepherd разработчиками планируется сделать ряд простых улучшений, например, добавить поддержку динамически реконфигурируемых служб (возможность перезапуска службы, но с другими параметрами), интеграцию с контрольными группами («cgroups») в Linux, правильную интеграцию для приостановки программного обеспечения.
В долгосрочной перспективе команда проекта предвидит захватывающее путешествие к распределённому и функционально-ориентированному Shepherd. Например, с использованием фреймворка Spritely Goblins для этого. По замыслу разработчиков, этот шаг выглядит как естественное продолжение работы над дизайном Shepherd.
Источник: habr.com