Выпуск системного менеджера systemd 251

После пяти месяцев разработки представлен релиз системного менеджера systemd 251.

Основные изменения:

  • Повышены системные требования. Минимальная поддерживаемая версия ядра Linux увеличена с 3.13 до 4.15. Для работы требуется наличие таймера CLOCK_BOOTTIME. Для сборки необходим компилятор с поддержкой стандарта C11 и расширений GNU (для заголовочных файлов продолжает использоваться стандарт C89).
  • Представлена новая внутренняя разделяемая библиотека libsystemd-core-.so, которая устанавливается в каталог /usr/lib/systemd/system и соответствует существующей библиотеке libsystemd-shared-.so. Использование разделяемой библиотеки libsystemd-core-.so позволяет сократить общий установочный размер за счёт повторного использования бинарного кода.
    Номер версии может задаваться через параметр ‘shared-lib-tag’ в сборочной системе meson и даёт возможность дистрибутивам одновременно поставлять несколько версий данных библиотек.
  • Реализована передача в обработчики OnFailure/OnSuccess переменных окружения $MONITOR_SERVICE_RESULT, $MONITOR_EXIT_CODE, $MONITOR_EXIT_STATUS, $MONITOR_INVOCATION_ID и $MONITOR_UNIT с информации об отслеживаемом юните.
  • Для unit-ов реализована настройка ExtensionDirectories, которую можно использовать для организации загрузки компонентов расширения системы (System Extension) из обычных каталогов, а не дисковых образов. Содержимое каталога расширения системы накладывается при помощи OverlayFS и применяется для расширения иерархии каталогов /usr/ и /opt/, и добавления дополнительных файлов во время работы, даже если указанные каталоги примонтированы в режиме только для чтения. В команду ‘portablectl attach –extension=’ также добавлена поддержка указания каталога.
  • Для unit-ов, принудительно завершённых обработчиком systemd-oomd из-за нехватки памяти в системе, обеспечена передача признака ‘oom-kill’ и отражение в атрибуте ‘user.oomd_ooms’ числа принудительных завершений.
  • Для unit-ов добавлены новые спецификаторы путей %y/%Y, отражающие нормализованный путь к юниту (с раскрытием символических ссылок). Также добавлены спецификаторы %q для подстановки значения PRETTY_HOSTNAME и %d для подстановки CREDENTIALS_DIRECTORY.
  • В непривилегированных сервисах, запускаемых обычным пользователем с использованием флага “–user”, разрешено изменение настроек RootDirectory, MountAPIVFS, ExtensionDirectories, *Capabilities*, ProtectHome, *Directory, TemporaryFileSystem, PrivateTmp, PrivateDevices, PrivateNetwork, NetworkNamespacePath, PrivateIPC, IPCNamespacePath, PrivateUsers, ProtectClock, ProtectKernelTunables, ProtectKernelModules, ProtectKernelLogs и MountFlags. Возможность доступна только при включении в системе пространства имён идентификаторов пользователя (user namespaces).
  • В настройке LoadCredential разрешено указание имени каталога в качестве аргумента, в этом случае предпринимается попытка загрузки учётных данных из всех файлов в указанном каталоге.
  • В systemctl в параметре “–timestamp” появилась возможность указания флага “unix” для показа времени в эпохальном формате (число секунд с 1 января 1970 года).
  • В “systemctl status” реализован флаг “old-kernel”, показываемый если загруженное в сеансе ядро имеет более старый номер версии, чем доступное в системе базовое ядро.
    Также добавлен флаг “unmerged-usr” для определения, что содержимое каталогов /bin/ и /sbin/ сформировано не через символические ссылки на /usr.
  • Для запускаемых процессом PID 1 генераторов предоставлены новые переменные окружения $SYSTEMD_SCOPE (запуск из системного или пользовательского сервиса), $SYSTEMD_IN_INITRD (запуск из initrd или хост-окружения), $SYSTEMD_FIRST_BOOT (индикатор первой загрузки), $SYSTEMD_VIRTUALIZATION (наличие виртуализации или запуска в контейнере) и $SYSTEMD_ARCHITECTURE (архитектура, для которой собрано ядро).
  • В обработчике PID 1 реализована возможность загрузки параметров системных учётных данных из QEMU-интерфейса fw_cfg или через указание в командной строке ядра systemd.set_credential. В директиве LoadCredential обеспечен автоматический поиск учётных данных в каталогах /etc/credstore/, /run/credstore/ и /usr/lib/credstore/, если в качестве аргумента указан относительный путь. Аналогичное поведение применено для директивы LoadCredentialEncrypted, в которой дополнительно проверяются каталоги /etc/credstore.encrypted/, /run/credstore.encrypted/ и /usr/lib/credstore.encrypted/.
  • В systemd-journald стабилизирована возможность экспорта в формате JSON. В командах “journalctl –list-boots” и “bootctl list” добавлена поддержка вывода в формате JSON (флаг “–json”).
  • В udev добавлены новые файлы с базами данных hwdb, содержащих сведения о портативных устройствах (КПК, калькуляторы и т.п.) и устройствах, применяемых при создании звука и видео (DJ-пульты, кейпады).
  • В udevadm добавлены новые опции “–prioritized-subsystem” для задания приоритета следования систем (используется в systemd-udev-trigger.service для обработки блочных устройств и TPM в первую очередь), “–type=all”, “–initialized-match” и “–initialized-nomatch” для выбора инициализированных или неинициализированных устройств, “udevadm info –tree” для показа дерева объектов в иерархии /sys/. В udevadm также добавлены новые команды “wait” и “lock” для ожидания появления в БД записи об устройстве и блокировки блочного устройства во время форматирования или записи таблицы разделов.
  • Добавлен новый набор символических ссылок на устройства /dev/disk/by-diskseq/ для идентификации блочных устройств по порядковому номеру (“diskseq”).
  • В файлы .link в секции [Match] добавлен поддержка параметра “Firmware” для сопоставления устройства по строке с описанием прошивки.
  • В systemd-networkd для unicast-маршрутов, настраиваемых через секцию [Route], значение scope изменено по умолчанию на “link” для соответствия поведению команды “ip route”. В секцию [Bridge] добавлен параметр Isolated=true|false для настройки одноимённого атрибута сетевых мостов в ядре. В секции [Tunnel] добавлен параметр External для установки туннелю типа external (режим сбора метаданных). В секции [DHCPServer] добавлены параметры BootServerName, BootServerAddress и BootFilename настройки адреса сервера, имени сервера и имени загрузочного файла, отправляемых сервером DHCP для загрузки в режиме PXE. В секции [Network] удалён параметр L2TP, вместо которого в .netdev файлах можно использовать новую настройку Local в привязке к интерфейсу L2TP.
  • Добавлен новый юнит [email protected], который можно использовать для ожидания поднятия определённого сетевого интерфейса.
  • Реализована возможность использования файлов .netdev для создания виртуальных устройств WLAN для настройки которых предложена секция [WLAN].
  • В файлах .link/.network в секции [Match] реализован параметр Kind для сопоставления по типу устройства (“bond”, “bridge”, “gre”, “tun”, “veth”).
  • Обеспечен запуск systemd-resolved на более раннем этапе загрузки, в том числе запуска в initrd при наличии в образе initrd.
  • В systemd-cryptenroll добавлена опция –fido2-credential-algorithm для выбора алгоритма шифрования учётных данных и опция –tpm2-with-pin для управления вводом PIN-кода при разблокировке раздела с использованием TPM. В /etc/crypttab добавлена аналогичная опция tpm2-pin. При разблокировке устройств через TPM обеспечено шифрование параметров для защиты от перехвата ключей шифрования.
  • В systemd-timesyncd добавлен D-Bus API для динамического получения информации с NTP-сервера через IPC.
  • Для определения необходимости цветного вывода во всех командах реализована проверка переменной окружения COLORTERM в дополнение к ранее проверяемым NO_COLOR, SYSTEMD_COLORS и TERM.
  • В сборочной системе Meson реализована опция install_tag для выборочной сборки и установки необходимых компонентов: pam, nss, devel (pkg-config), systemd-boot, libsystemd, libudev. Добавлена сборочная опция default-compression для выбора алгоритма сжатия для systemd-journald и systemd-coredump.
  • В sd-boot в loader.conf добавлена экспериментальная настройка “reboot-for-bitlocker” для загрузки Microsoft Windows с BitLocker TPM.
  • Добавлена экспериментальная утилита systemd-sysupdate для автоматического определения, загрузки и установки обновлений с использованием атомарного механизма замены разделов (используются два независимых раздела/образа, на одном из которых находится текущая работающая система, а на другое устанавливается очередное обновление, после чего разделы меняются местами).
Release. Ссылка here.