11 июня был представлен очередной релиз системного менеджера systemd, совмещающего в себе функции системы инициализации, обратно совместимой с SysV и LSB, ведения журнала и управления сессиями пользователей. systemd основан на модели зависимостей (в противовес событийной модели), производит отслеживание процессов запущенных сервисов при помощи механизма cgroups ядра Linux, поддерживает механизмы сокет- и dbus-активации и предоставляет удобный декларативный синтаксис unit-файлов для описания демонов и других сущностей, что позволяет производить агрессивную параллелизацию при запуске и остановке сервисов.
В рамках проекта также разрабатывается ряд легковесных приложений и демонов, выполняющих второстепенные, но распространённые задачи по управлению системой — от настройки подсистемы VT (systemd-vconsole-setup) до управления сетью (systemd-networkd) и профилирования загрузки (systemd-bootchart).
Основные изменения:
- Демоны systemd-networkd, systemd-resolved и systemd-bus-proxyd теперь запускаются не от имени root'а и сбрасывают максимум привилегий.
- Файл resolv.conf, генерируемый systemd-resolved, теперь находится в
/run/systemd/resolve
. - Убрана зависимость от библиотеки libattr, поскольку требуемый функционал уже значительное время предоставляется библиотекой glibc.
- Код совместимости с System V init и LSB был вынесен из PID 1 в отдельный генератор unit-файлов.
- Обнаружение виртуализации (systemd-detect-virt) теперь работает без CAP_SYS_PTRACE.
- systemd-networkd теперь поддерживает создание виртуальных Ethernet-интерфейсов (veth), а также GRE- и VTI-туннелей.
- systemd-networkd больше не пытается подгрузить модули, требуемые для некоторых типов туннелей, если ядро не делает этого автоматически.
Если в вашем случае это так (ядро недостаточно новое), предлагается использовать/etc/modules-load.d
для принудительной загрузки этих модулей. - В секции [Service] юнит-файлов добавлены опции
ProtectedHome=
иProtectedSystem=
, позволяющие запретить процессам сервиса запись в /home и / соответственно. - В секции [Socket] юнит-файлов добавлены опции
SocketUser=
,SocketGroup=
,RemoveOnStop=
иSymlinks=
, предназначение которых очевидно из названия. - Для опции
Restart=
в секции [Service] добавлено новое значениеon-abnormal
, инструктирующее systemd перезапускать сервис только в случаях падения, таймаута запуска или срабатывания сторожевого таймера, но не в случае завершения с ненулевым кодом возврата.
Рекомендуется использоватьRestart=on-abnormal
илиRestart=on-failure
для всех долгоживущих сервисов. - В systemd-tmpfiles было добавлено действие
C
(копирование файлов или директорий), а действиеm
(установка прав доступа и владения) теперь эквивалентно действиюz
(установка прав доступа, владения и контекста SELinux с поддержкой выбора файлов по маске). - Добавлена первичная поддержка перестроения
/var
при запуске системы, что в конечном итоге должно позволить запускать контейнеры, имея только немодифицируемый образ /usr и tmpfs в качестве корневой ФС (т. н. stateless system).
Сопутствующий функционал добавлен в systemd-nspawn (ключ--tmpfs=<путь>
) и systemd-tmpfiles (уже упомянутое действиеC
).
Изменения, касающиеся udev:
- Во время выполнения действий, касающихся файлов блочных устройств, udev теперь блокирует эти файлы при помощи
flock(LOCK_SH|LOCK_NB)
.
- Пока файл блочного устройства заблокирован, например, с помощью
flock(LOCK_EX)
, udev будет игнорировать все события для этого устройства — предполагается, что этот механизм будет задействован приложениями разметки дисков.
- Если файл блочного устройства был открыт для записи, его закрытие вызовет повторное сканирование таблицы разделов и (при необходимости) генерацию событий класса change для файлов устройства и всех его разделов.
- Файлы устройств
/dev/fd*
теперь принадлежат группе disk, а не floppy.