После пяти месяцев разработки представлен релиз системного менеджера systemd 254. Наиболее заметным изменением в новой версии стала поддержка режима мягкой перезагрузки (команда “systemctl soft-reboot”), который приводит к перезапуску только компонентов пространства пользователя, не трогая ядро Linux. В новом режиме при перезагрузке не применяются стадии инициализации оборудования, вызова загрузчика, запуска и загрузки ядра, инициализации драйверов, загрузки прошивок и обработки initrd, что позволяет заметно ускорить перезапуск и уменьшить время простоя во время обновления окружений, использующих готовые системные образы.
Новый режим позволяет завершить работу всех процессов в пространстве пользователя, после чего заменить образ корневой ФС на новую версию (монтируется в /run/nextroot/) и запустить процесс инициализации системы, не перезагружая ядро. Сохранение состояния работающего ядра при замене пользовательского окружения даёт возможность реализовать обновление некоторых сервисов в live-режиме (без остановки), организовав передачу файловых дескрипторов и слушающих сетевых сокетов для этих сервисов из старого окружения в новое. Для обновления ядра в сочетании с мягкой перезагрузкой предлагается использовать механизм livepatch для внесения исправлений в работающее ядро Linux без перезагрузки и без остановки работы приложений.
Среди других изменений в новом выпуске:
- Добавлена утилита “systemd-battery-check”, проверяющая уровень заряда аккумулятора. Утилита может запускаться на ранней стадии загрузки (из initrd) для предотвращения загрузки системы при очень низком уровне заряда (в консоли или загрузочную заставке выводится предупреждение и через 10 секунд система отключается).
- Для сервисных юнитов предложены настройки MemoryPressureWatch и MemoryPressureThresholdSec, позволяющие управлять логикой использования подсистемы PSI (Pressure Stall Information) в привязке к отдельным сервисам. PSI, предоставляет информацию о времени ожидания получения различных ресурсов (CPU, память, ввод/вывод) для точной оценки уровня загруженности системы, что даёт возможность выявить начало возникновения задержек из-за нехватки ресурсов и выборочно завершить работу ресурсоёмких процессов на стадии, когда система ещё не находится в критическом состоянии и не начинает интенсивно урезать кэш и вытеснять данные в раздел подкачки.
- В утилиту systemctl в команды reboot, kexec, poweroff и halt добавлена опция “–when”, позволяющая выбрать время для выполнения перезапуска или остановки работы.
- Добавлена настройка RootEphemeral, позволяющая использовать в сервисах, в которых выставлены параметры RootImage и RootDirectory, временные копии дискового образа или дерева каталогов, которые при запуске сервиса создаются через снапшоты btrfs и reflink-и btrfs/xfs, и удаляются после остановки сервиса.
- В утилиту systemd-analyze добавлена команда “fdstore” для показа содержимого хранилища файловых дескрипторов, связанного с юнитом (используется для перезапуска сервисов без потери состояния – перед выходом файловые дескрипторы сохраняются в fdstore, а при запуске восстанавливаются). Для сохранения содержимого хранилища файловых дескрипторов после полной остановки сервиса реализована настройка FileDescriptorStorePreserve. Для очистки fdstore может использоваться команда “systemctl clean”. При включении подобного хранилища для процессов обеспечено выставление переменной окружения $FDSTORE.
- В утилиту systemd-notify добавлены опции “–fd” и “–fdname” для отправки произвольных файловых дескрипторов сервисному менеджеру. Также добавлена опция “–exec” для запуска указанной команды после отправки сообщения.
- Для systemd-resolved в resolved.conf добавлен параметр StateRetentionSec, позволяющий сохранять DNS-записи в кэше, дольше, чем указано через TTL, и использовать их, если вышестоящий DNS-сервер перестал отвечать. Для просмотра содержимого DNS-кэша в утилиту
resolvectl добавлена команда “show-cache”. - Добавлена команда “systemctl list-paths” для показа всех активных path-юнитов, реализованная по аналогии с командами “systemctl list-timers” и “systemctl list-sockets”.
- Добавлены новые параметры командной строки ядра для настройки терминала с заданным именем: systemd.tty.term., systemd.tty.rows., и systemd.tty.columns., а также параметр systemd.default_device_timeout_sec для изменения таймаута для device-юнитов.
- Для юнитов добавлена возможность задания стартовых настроек памяти (Startup*, например, StartupMemoryMax), применяемых по аналогии со стартовыми настройками ввода/вывода и CPU (StartupCPUWeight и т.п.).
- В процессе PID обеспечена автоматическая загрузка модулей virtio_console и virtio-vsock для виртуальных машин.
- Для сервисных юнитов добавлена настройка DelegateSubgroup, позволяющая помещать сервисы в существующие подгруппы вместо создания для сервиса отдельной верхней группы cgroup.
- Добавлена настройка MemoryKSM для выборочного включения в сервисах функции ядра, обеспечивающей слияние идентичных страниц памяти (KSM,
Kernel Samepage Merging). - Добавлена настройка ImportCredentials для импорта учётных данных из системы.
- В утилиту systemctl в опцию “–job-mode” добавлен новый режим “restart-dependencies”, включающий перезапуск юнитов, от которых зависит запускаемый сервис.
- В утилиту systemctl добавлена команда “whoami” для вывода имени юнита, с которым связан указанный PID.
- Реализовано определение запуска systemd в конфиденциальных виртуальных машинах (CVM, Confidential Virtual Machine), содержимое памяти которых зашифровано. В юнитах для подобных VM обеспечено срабатывание флага ‘cvm’, заданного в параметре ConditionSecurity. В systemd-detect-virt добавлена опция ‘–list-cvm’ для вывода списка конфиденциальных виртуальных машин.
- В утилиту journalctl добавлена опция “–truncate-newline” для обрезания многострочных записей в логах (сохраняется только первая строка).
- В утилиту systemd-repart добавлен параметр ExcludeFiles для исключения при копировании определённых файлов, подпадающих под действие параметра CopyFiles. В systemd-repart также добавлены опции “–offline” и “–architecture” для определения сборки образов в offline или online-режиме и выбора типа разделов GPT в привязке к архитектуре.
- Скрипт kernel-install переписан на языке Си.
- В утилиту udevadm добавлена команда “verify” для проверки корректности файлов с правилами udev.
- В udev добавлена утилита “iocost” для настройки данных QoS IO для блочного устройства, используя информацию из БД hwdb.
- В утилитах systemd-cryptenroll и systemd-cryptsetup реализована установка TPM2 SRK (“Storage Root Key”) в TPM2. В systemd-cryptenroll обеспечен разбор текстовых идентификаторов регистров TPM2 PCR (Trusted Platform Module Platform Configuration Register), используемых для контроля целостности и формирования цифровой подписи. В systemd-analyze добавлена команда “pcrs” для показа известных регистров TPM PCR и их текущих значений.
- В systemd-veritysetup и /etc/veritytab добавлены новые опции hash-offset, superblock, format, data-block-size, hash-block-size, data-blocks, salt, uuid, hash, fec-device, fec-offset и fec-roots для настройки параметров раздела Verity.
- В systemd-cryptsetup и /etc/crypttab добавлена поддержка параметра veracrypt-pim для настройки PIM (Personal Iteration Multiplier) в разделах veracrypt.
- В утилиты machinectl и networkctl добавлены команды “edit” и “cat” для редактирования файлов “.nspawn”, “.network”, “.netdev” и “.link”.
- Добавлена новая группа фильтров системных вызовов “@sandbox”, включающая системные вызовы, используемые в изолированных окружениях на базе seccomp и Locklocked.
- Изменено поведение настроек изоляции для unit-ов, запускаемых в привязке к пользователям. По умолчанию теперь применяется настройка PrivateUsers=yes, включающая запуск сервисов в собственных пространствах имён идентификаторов пользователей, что приведёт к недоступности системных пользователей в пользовательских unit-ах.
- В pam_systemd по умолчанию включена передача полномочий CAP_WAKE_ALARM процессам, запускаемым в пользовательском сеансе, что может применяться для установки таймера для выхода системы из спящего режима.
- В файле /etc/os-release реализована поддержка опциональных полей VENDOR_NAME и VENDOR_URL для указания информации о поставщике ОС.
- Для сборки systemd теперь необходим инструментарий Meson как минимум версии 0.60.0.
В следующем выпуске systemd 255 планируется прекратить поддержку раздельных иерархий каталогов (когда /usr монтируется отдельно от корня или разделены каталоги /bin и /usr/bin, /lib и /usr/lib). В будущем также решено прекратить поддержку cgroups v1, скриптов сервисов System V и EFI-переменных SystemdOptions.