4 июля был представлен очередной релиз системного менеджера systemd, совмещающего в себе функции системы инициализации, ведения журнала и управления сессиями пользователей. systemd основан на модели зависимостей (в противовес событийной модели), производит отслеживание процессов запущенных сервисов при помощи механизма cgroups ядра Linux, поддерживает механизмы сокет- и dbus-активации сервисов и предоставляет удобный декларативный синтаксис для описания демонов и других сущностей. Это позволяет производить агрессивную параллелизацию при запуске и остановке сервисов.
В рамках проекта также разрабатывается ряд легковесных приложений и демонов, выполняющих второстепенные, но распространённые задачи по управлению системой — от настройки подсистемы VT (systemd-vconsole-setup) до управления сетью (systemd-networkd) и профилирования загрузки (systemd-bootchart).
Большая часть изменений, вошедших в этот релиз, была направлена на поддержку т. н. stateless-систем, в которых все данные находятся на разделе /usr (монтируемом в режиме только для чтения), а корень (включая /etc) размещается на tmpfs и автоматически пересоздаётся при каждой загрузке системы. Этот функционал предполагается использовать в легковесных контейнерах, а также как средство «полного сброса» без переустановки ОС.
Изменения по поддержке stateless-систем:
- Добавлен компонентsystemd-sysusers, способный автоматически добавлять и исправлять записи о служебных пользователях в
/etc/passwd
и/etc/group
, основываясь на декларативных определениях из/usr/lib/sysusers.d
. Наиболее важные определения уже поставляются в этом релизе.
Этот функционал является частью работы по поддержке stateless-систем. - В секции
[Unit]
юнит-файлов добавлена директиваConditionNeedsUpdate=
, инструктирующая systemd запускать юнит-файл только в том случае, если требуется обновление или перестроение директорий /etc или /var. Юнит-файлы, использующие эту директиву, вероятно, должны содержать также директивуBefore=systemd-update-done.service
.В поставку включён ряд unit-файлов, использующих этот функционал и реализующих перестроение:
- базы данных аппаратного обеспечения udev (
/etc/udev/hwdb.bin
); - каталога сообщений journald (
/var/lib/systemd/catalog/database
); - кэша динамического компоновщика (
/etc/ld.so.cache
, т. е. ldconfig).
- базы данных аппаратного обеспечения udev (
- systemd-tmpfiles теперь поддерживает действия
L+
,b+
,c+
иp+
. Это варианты соответствующих действий без знака «+», принудительно удаляющие файл назначения. - В systemd-tmpfiles действия
L
,L+
,C
,C+
теперь допускают отсутствие поля «argument». В этом случае исходный файл берётся из директории/usr/share/factory/<полный путь к файлу назначения>
. Разработчики ОС могут размещать в указанной директории стандартные файлы конфигурации, которые должны копироваться в системные директории при запуске системы с пустым корнем.В поставку включён конфигурационный файл для systemd-tmpfiles, пересоздающий наиболее важные файлы в /etc.
- Добавлена команда
systemctl preset-all
, применяющая стандартные настройки включения/отключения ко всем установленным юнит-файлам.
(«presets» — функционал systemd, предназначенный для автоматического включения или отключения служб в стиле «как должно быть по умолчанию».)
В случае запуска системы с пустым /etc, эквивалент этой команды выполняется автоматически, чтобы включить и активировать все «стандартные» службы.В поставку включён preset-файл, предназначенный для автоматического включения самых важных юнитов.
- Файл /etc/os-release перемещён в /usr/lib/os-release, поскольку он является статическим и его изменение не предполагается. В директории /etc автоматически создаётся симлинк на новое местонахождение.
Прочие изменения:
- systemd-networkd теперь включает в себя клиент DHCPv6, поддержку IPv6 Router Solicitation, а также сервер DHCPv4.
Клиент DHCPv4 теперь поддерживает получение от сервера статических маршрутов.
СекцияDHCPv4
network-файлов была переименована вDHCP
; совместимость со старым синтаксисом сохранена. - systemd-networkd теперь поддерживает управление виртуальными сетями VXLAN, TUN/TAP и dummy-интерфейсами.
- systemd-networkd теперь поддерживает автоматическое назначение интерфейсам статических адресов из предварительно указанного диапазона. Этот функционал предназначен для управления большим числом однотипных соединений, таких, как veth-интерфейсы между хостом и контейнерами.
- systemd-coredump теперь генерирует стектрейс всех потоков упавшей программы и пишет его в лог. Этот функционал реализован на библиотеке libdw из состава elf-utils.
- systemd-coredump теперь может сохранять core-дампы на диск (
/var/lib/systemd/coredump
), а не в лог. По умолчанию включен режим сохранения на диск.
Также был добавлен конфигурационный файл/etc/systemd/coredump.conf
, позволяющий настраивать это поведение и некоторые другие параметры. - Утилита systemd-coredumpctl была переименована в coredumpctl, что означает её готовность к широкому использованию.
Также была добавлена командаcoredumpctl info
, отображающая подробную информацию о зарегистрированных core-дампах. - journald теперь по умолчанию работает в режиме
SplitMode=uid
, т. е. файлы логов разделяются по UID источников сообщений. - Добавлена команда
systemd is-system-running
, позволяющая узнать общий статус запуска системы (starting, stopping, running, maintenance, degraded). - machined теперь экспортирует (позволяет узнать через D-Bus) версию ОС в запущенных контейнерах.
- Команда
systemctl -H
(подключение к другой машине по сети) теперь позволяет заходить в контейнеры, запущенные на такой машине. Синтаксис для этого выглядит какroot@host:container
. Следует обратить внимание, что пользователь должен быть root, т. к. обращение к контейнеру — привилегированная операция. - В секции
[Mount]
unit-файлов добавлена директиваSloppyOptions=
, эквивалентная ключу -s программы mount(8). Эта директива включает режим нестрогой обработки несуществующих опций монтирования. - В секции
[Install]
юнит-файлов добавлена директиваDefaultInstance=
, указывающая, какую строку использовать как instance по умолчанию, если запрошено включение шаблонного юнита без явного указания instance. - В секции
[Service]
юнит-файлов добавлена директиваRestartForceExitStatus=
, позволяющая указать набор кодов возврата из главного процесса, при которых служба будет принудительно перезапущена (вне зависимости от значения директивыRestart=
). - Добавлена обработка параметров ядра
systemd.wants=
,systemd.mask=
иsystemd.debug-shell
. Их обработка реализована в новом генераторе systemd-debug-generator. - Добавлена пассивная цель
cryptsetup-pre.target
. Она предназначена для служб, которые должны запуститься до начала инициализации LUKS-устройств. - Добавлена страница документации file-hierarchy(7), содержащая рекомендации по организации иерархии файловой системы в дистрибутивах, использующих systemd. По сути, это является обновлённой версией FHS или hier(7). (Уже обсудили на ЛОРе.)
Также была добавлена утилитаsystemd-path
, позволяющая узнать точные (действующие) пути для некоторых пунктов из указанной документации. - Из поставки исключён unit-файл, периодически (по таймеру) пересоздающий кэш man-db. Он теперь будет поставляться в составе самого man-db (начиная со следующего релиза).
- systemd.pc теперь экспортирует больше путей (в т. ч. libdir и некоторые директории файлов конфигурации второстепенных компонентов systemd).
- В поставку включены макросы RPM для обработки файлов конфигурации systemd-sysusers, systemd-sysctl и systemd-binfmt (т. е. для их считывания и применения «на лету»).
Изменения, касающиеся udev:
- Файлы устройств
/dev/loop-control
и/dev/btrfs-control
теперь принадлежат служебной группеdisk
. - Функционал предсказуемых имён сетевых интерфейсов в udev теперь использует свойство dev_port (добавленное в Linux 3.15) вместо dev_id, чтобы различать несколько PCI-портов на одной PCI-функции.
- Добавлена новая служебная группа
input
, которая теперь назначается всем файлам устройств ввода. Её предназначение во многом аналогично таковому для группaudio
иvideo
.