После полугода разработки представлен релиз системного менеджера systemd 257. Ключевые изменения: новые утилиты systemd-sbsign и systemd-keyutil, поддержка MPTCP при активации по сокету, начальная поддержка сборки с Си-библиотекой Musl, утилита updatectl для управления установкой обновлений через systemd-sysupdate, возможность запуска сервисов в отдельных PID namespace, защита от случайного удаления файлов при использовании “systemd-tmpfiles –purge”.
Среди изменений в новом выпуске:
- Добавлена новая утилита systemd-sbsign для заверения цифровой подписью исполняемых файлов в формате PE (Portable Executable), предназначенных для использования при загрузке в режиме EFI Secure Boot. Для формирования подписи могут использоваться движки и провайдеры, предоставляемые библиотекой OpenSSL. Systemd-sbsign может применяться в качестве альтернативы приложениям sbsigntool и pesign в утилите ukify при формировании универсальных образов ядра UKI (Unified Kernel Image), объединяющих в одном файле загрузчик для UEFI (UEFI boot stub), образ ядра Linux и загружаемое в память системное окружение initrd.
- Добавлена новая утилита systemd-keyutil, реализующая различные операции над закрытыми ключами и сертификатами X.509. Например, systemd-keyutil может использоваться для проверки возможности загрузки закрытых ключей и сертификатов, а также извлечения из них открытых ключей в формате PEM.
- В unit-ах “.socket”, используемых для обеспечения работы механизма активации по сокету (запуск процессов при попытке установки сетевого соединения), реализована поддержка MPTCP (Multipath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам.
- В состав включены изменения, необходимые для сборки с использованием стандартной Си-библиотеки Musl.
- В различные компоненты systemd, выводящие индикаторы прогресса выполнения операций (например, systemd-repart, systemd-sysupdate/updatectl и importctl), добавлена возможность использования ANSI-последовательностей для анимирования отображения прогресса. Подобные последовательности пока поддерживаются только в Windows Terminal (предполагается, что со временем подобная возможность будет перенесена и в эмуляторы терминалов для Linux).
- Расширены возможности компонента systemd-sysupdate, применяемого для автоматического определения, загрузки и установки обновлений с использованием атомарного механизма замены разделов, файлов или каталогов (используются два независимых раздела/файла/каталога, на одном из которых находится текущий работающий ресурс, а на другом устанавливается очередное обновление, после чего разделы/файлы/каталоги меняются местами). На практике, systemd-sysupdate уже применяется в GNOME OS.
В дополнение к процессу systemd-sysupdate добавлен одноимённый сервис, позволяющий использовать D-Bus для управления обновлением системы непривилегированным пользователем. Для управления сервисом в состав также включена новая утилита updatectl. В systemd-sysupdate добавлен флаг “–offline” для запрета загрузки метаданных по сети и использования только уже загруженных на локальную систему версий. Для всех команд добавлена поддержка вывода в формате JSON.
- Для сервисов реализовано новое свойство “PrivatePIDs”, при помощи которого можно организовать запуск процессов с PID 1 (init-процесс) в отдельном пространстве идентификаторов процессов (PID namespace). В создаваемом для запускаемого процесса окружении будут видны только процессы из созданного для него пространства имён.
- В правила udev добавлена поддержка сопоставлений без учёта регистра символов
(например, ‘ATTR{foo}==i”abcd”‘). Через udev реализовано предоставление непривилегированным локальным пользователям доступа (“uaccess”) к устройству /dev/udmabuf, которое необходимо для работы с IPMI-камерами через libcamera. В udev обеспечено распознание различных аппаратных криптокошельков с интерфейсом USB и выставление для них свойства ID_HARDWARE_WALLET, что позволяет применить к ним режим “uaccess” для доступа непривилегированных пользователей. - В файл /etc/os-release добавлены новые поля RELEASE_TYPE, EXPERIMENT и EXPERIMENT_URL. “RELEASE_TYPE” может принимать значения “experimental”, “development”, “stable” и “lts” для отделения стабильных версий от находящихся в разработке и экспериментальных сборок. Параметры EXPERIMENT и EXPERIMENT_URL предназначены для пояснения сути экспериментальной сборки.
- В утилиту run0, развиваемую в качестве замены программы sudo, добавлена опция “–shell-prompt-prefix”, определяющая строку-префикс приглашения командной оболочки. По умолчанию в качестве префикса выводится emoji “🦸” для визуального выделения сеанса с повышенными привилегиями.
- В systemd-tmpfiles во избежание ошибочного удаления не тех файлов опция “–purge” теперь применяется только к настройкам в tmpfiles.d/, для которых явно выставлен флаг “$”. Для выполнения операции “–purge” также теперь требуется указания как минимум одного файла из каталога tmpfiles.d/. Для строк с типом ‘L’ добавлен флаг ‘?’, при указании которого символическая ссылка будет создана только при наличии целевого файла.
- В сервисном менеджере и сопутствующих утилитах продолжен перевод кода отслеживания процессов на использование PIDFD вместо PID. Идентификатор PIDFD связывается с конкретным процессом и не меняется, в то время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID.
- Для сервисов реализована возможность указания в параметре “RestartMode” значения “debug”, при котором перезапуск сбойного сервиса будет выполнен с включением отладочного режима (выставляется переменная окружения DEBUG_INVOCATION=1), а значение LogLevelMax будет временно повышено до отладочного уровня.
- В обработчике PID 1 реализована возможность загрузки правил для LSM-модуля IPE (Integrity Policy Enforcement), определяющих политику обеспечения целостности для всей системы (какие операции допустимы и каким способом следует верифицировать подлинность компонентов).
- В unit-файлы “.timer” добавлена опция “DeferReactivation”, позволяющая пропустить очередную активацию по таймеру, если сервис ещё не завершил своё выполнение со времени прошлой активации.
- В параметре unit-файлов PrivateUsers реализована возможность указания значения “identity” для включения маппинга идентификаторов пользователей при создании пространства имён (user namespace).
- В параметр unit-файлов PrivateTmp добавлена поддержка значения “disconnected”, при котором для каталогов /tmp/ и /var/tmp/ будут задействованы отдельные экземпляры tmpfs.
- В параметр unit-файлов ProtectControlGroups добавлена поддержка новых режимов “private” и “strict”, при выставлении которых для сервиса создаётся новое пространство имён cgroup (cgroup namespace) и монтируется cgroupfs. При выставлении опции “strict” монтирование cgroupfs производится в режиме только для чтения.
- В параметрах StateDirectory, RuntimeDirectory, CacheDirectory,
LogsDirectory и ConfigurationDirectory предоставлена возможность использования флага ‘:ro’ для ограничения доступа к соответствующим каталогам режимом только для чтения. - В параметр командной строки ядра “systemd.machine_id” добавлена поддержка значения “firmware”, при котором идентификатор системы (machine ID) будет вычислен на основе UUID из SMBIOS/DeviceTree.
- Добавлена поддержка системных вызовов mseal(), listmount() и statmount(), появившихся в недавних выпусках ядра Linux.
- В утилиты resolvectl, timedatectl и systemd-inhibit добавлена поддержка интерактивной авторизации при помощи Polkit.
- В утилиту systemctl добавлена возможность использования флага “–now” в команде “reenable”.
- В утилиту systemd-mount добавлена опция “–json” для вывода в формате JSON (например, при указании вместе с “–list-devices” в формате JSON будет выведен список устройств).
- В утилиту “localectl” добавлены опции “-l” и “–full” для отключения обрезки длинных строк при выводе.
- В sleep.conf добавлена опция HibernateOnACPower позволяющая отложить переключение в спящий режим до отключения устройства от стационарного источника питания.
- В systemd-sysusers в строки “u” добавлена поддержка модификатора “!”, при помощи которого можно создавать полностью заблокированные учётные записи пользователей (ранее для блокировки пользователя использовалась установка некорректного пароля, что, например, не приводило к блокировке при аутентификации по ключам в SSH).
- В systemd-coredump добавлена опция “EnterNamespace”, предоставляющая доступ к пространству точек монтирования любых аварийно завершённых процессов для получения их отладочных символов. На практике опция может быть полезной для организации обратной трассировки (backtrace) core-файлов от приложений, запускаемых в изолированных контейнерах.
- В systemd-logind включена обработка комбинации Ctrl-Alt-Shift-Esc для отправки компонентам пользовательского окружения сигнала org.freedesktop.login1.SecureAttentionKey с запросом вывода диалога безопасного входа в систему. Реализована настройка “DesignatedMaintenanceTime” для автоматического планирования завершения работы в заданное время. По аналогии с поддержкой устройств DRM и evdev добавлена поддержка настройки доступа непривилегированных пользователей к устройствам hidraw (игровые контроллеры и джойстики).
- В systemd-machined добавлена поддержка регистрации непривилегированными клиентами виртуальных машин и контейнеров. Предоставлен доступ к функциональности systemd-machined через API Varlink, помимо D-Bus.
- В файл конфигурации networkd.conf добавлена новая секция “[IPv6AddressLabel]” для настройки меток и префиксов для адресов IPv6
- В команду ‘networkctl edit’ добавлена опция “–stdin” для получения содержимого файла из стандартного потока. В команды ‘networkctl edit’ и ‘networkctl cat’ добавлена поддержка редактирования и отображения файлов .netdev через указание сетевого интерфейса. Добавлена опция “–no-ask-password” для отключения интерактивной авторизации.
- В утилиты ukify, bootctl, systemd-keyutil, systemd-measure, systemd-repart, и systemd-sbsign добавлена опция “–certificate-source” для загрузки сертификата X.509 через провайдер OpenSSL вместо прямой загрузки из файла.
- В systemd-boot добавлена возможность использования кнопок управления громкостью для перемещения вверх и вниз по загрузочному меню, что может быть полезным на таких устройствах, как смартфоны. В утилиту bootctl добавлена поддержка установки БД UEFI Secure Boot в формате ESL(db/dbx/…) для systemd-boot.
- В journalctl добавлена опция “–list-invocation” для показа списка вызовов unit-ов и опция “–invocation” (“-I”) для показа логов, связанных только с определённым вызовом.
- В systemd-nspawn добавлена поддержка непривилегированного использования FUSE (Filesystem in Userspace) в контейнерах. При использовании опции “–bind-user” обеспечен проброс в контейнер SSH-ключей пользователя, необходимых для доступа по SSH.
- В libsystemd добавлен новый программный интерфейс “sd-json”, использующий формат JSON, а также интерфейс “sd-varlink”, использующий IPC Varlink.
- Рекомендованная базовая версия ядра повышена до выпуска 5.4, сформированного в 2019 году. В следующем году планируют прекратить поддержку более старых ядер и отметить выпуск 5.4 в качестве минимально поддерживаемой базовой версии.
- Поддержка cgroups v1 признана устаревшей и по умолчанию отключена (для включения в командной строке ядра необходимо указать SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1 в дополнение к активации в настройках systemd). В следующем выпуске systemd 258 планируется полностью удалить код, связанный с cgroups v1. В версии systemd 258 также
намечено удаление поддержки скриптов сервисов System V.