19 июня был представлен очередной релиз systemd — набора служебных компонентов для Linux-based операционных систем, совмещающего в себе функции системы инициализации, ведения журнала, управления сессиями пользователей и работы с контейнерами. Система инициализации systemd основана на модели зависимостей (в противовес событийной модели), производит отслеживание процессов запущенных сервисов при помощи механизма cgroups ядра Linux, поддерживает механизмы сокет- и dbus-активации сервисов и предоставляет удобный декларативный синтаксис для описания демонов и других сущностей. Это позволяет производить агрессивную параллелизацию при запуске и остановке сервисов.
В рамках проекта также разрабатывается ряд легковесных приложений и демонов, выполняющих второстепенные, но распространённые вспомогательные задачи (т. н. plumbing layer) — от настройки подсистемы VT (systemd-vconsole-setup) и первичного конфигурирования ОС (systemd-firstboot) до управления сетью (systemd-networkd) и UEFI-загрузчика (бывший gummiboot).
Данный релиз можно назвать в основном корректирующим — за исключением двух организационных изменений:
- стабилизация API sd-bus и sd-event;
- полный переезд разработки с freedesktop.org на GitHub (вместе с issues и pull-request).
Про GitHub на ЛОРе уже писали, но расскажем ещё раз, подробнее. В начале июня было объявлено, что отныне разработка systemd будет вестись исключительно средствами GitHub. В частности: туда переносится основная копия репозитория, в качестве багтрекера будет использоваться система GitHub Issues, а патчи (особенно большие) теперь настоятельно рекомендуется оформлять в виде pull-реквестов, а не отправлять в список рассылки.
В качестве основной причины перехода на новую инфраструктуру были названы сложности с обработкой всё возрастающего потока писем в списке рассылки: в нём до этого момента одновременно велись идейные обсуждения, рассматривалась обратная связь от пользователей и там же проводилось предварительное рецензирование присылаемых патчей (в то время как ключевые разработчики коммитили в репозиторий напрямую). В результате качество релизов стало падать, а многие вопросы от сообщества попросту терялись и на протяжении длительного времени оставались без ответа.
По словам разработчиков проекта, средствами GitHub станет возможным упростить рецензирование патчей и отслеживание багрепортов, одновременно разгрузив список рассылки и оставив его для идейных обсуждений. Вместе с тем предполагается уделять больше внимания pre-commit review, проводя его для всех нетривиальных изменений.
Впрочем, в исходном обсуждении уже выявились некоторые проблемы, связанные непосредственно с GitHub. Так, при обновлении pull-реквеста посредством перезаписи в ветку (как и делает большинство пользователей гитхаба) теряются построчные комментарии к предыдущей ревизии pull-реквеста. В связи с этим для каждого изменения требуется создавать отдельный issue report (хотя бы уровня RFE), описывающий общую идею, а для каждой ревизии патчсета — отдельный (новый) pull-реквест, ссылающийся на соответствующий issue report.
Изменения в ядре systemd
- Интерфейсы sd-bus и sd-event объявлены стабильными.sd-bus представляет собой компактную клиентскую библиотеку D-Bus для языка C, стремящуюся предоставить гибкий, низкоуровневый, но при этом удобный API. Для интересующихся имеется запись в блоге от Леннарта, содержащий введение в концепцию D-Bus в целом, описание существующих клиентских библиотек для работы с этим протоколом и пример использования sd-bus.sd-event – это, опять же, библиотека для языка C, реализующая событийный цикл на основе
epoll()
, но с некоторыми достаточно важными дополнениями (кратко перечислены в объявлении о релизе). - Поддержка kdbus больше не может быть отключена при сборке. Существует возможность принудительного отключения её в рантайме (c помощью опции ядра
kdbus=0
).(Впрочем, это является скорее отладочной мерой, поскольку на системах без kdbus возврат к юзерспейсной реализации выполняется автоматически. — прим. пер.)
- Поддержка вызова LSB-стандартизированной утилиты
chkconfig
в legacy-конфигурациях была удалена.Теперь для внесения изменений в конфигурацию инитскриптов вызывается абстрактная утилита
/lib/systemd/systemd-sysv-install
. Дистрибутивы, работающие в режиме совместимости с sysvinit, должны предоставить её реализацию, описанную в README. - Действия
systemctl enable
/systemctl disable
при работе в legacy-конфигурациях теперь приводят к одновременному включению/выключению и нативного юнита, и legacy-инитскрипта.
Изменения в остальных компонентах
- Утилита
systemd-cgtop
теперь имеет параметр--raw
, который отключает вывод заголовков таблицы и использование человекочитаемых суффиксов при выводе количественных данных. - В шинное API systemd-logind добавлено свойство
Docked
(интерфейсorg.freedesktop.login1
) с очевидным из названия значением. - Директива
IPForwarding=
network-файлов systemd-networkd теперь поддерживает значениеIPForwarding=kernel
, которое инструктирует networkd не изменять значения соответствующих sysctl-переменных.
Прочие изменения
- Минимально поддерживаемая версия util-linux теперь равна 2.26 (январь 2015).
- Код gudev был выделен в отдельный проект и окончательно исключён из дерева исходников systemd.
- Документация к API libudev была преобразована из gtkdoc в man-страницы.