7 декабря 2023 года состоялся релиз стабильной версии подсистемы инициализации и управления службами в Linux systemd 255, где добавлен компонент systemd-bsod, который обеспечивает поддержку ВSOD («синего экрана смерти») в Linux.
Новая утилита systemd-bsod позволяет выводить предупреждения (зарегистрированные сообщения об ошибках из журнала LOG_EMERG) в виде белых букв на синем фоне в полноэкранном режиме и QR-код с ошибкой, если загрузка компонентов Linux завершилась отказом.
Это добавление показа bsod в systemd было разработано в рамках обсуждения и внедрения улучшений взаимодействия с пользователем при ранних сбоях загрузки системы под названием Outreachy 2023.
Среди других улучшений и дополнений в systemd 255: поддержка экспорта накопителей через NVMe-TCP, компонент systemd-bsod для полноэкранного вывода сообщений об ошибках, утилита systemd-vmspawn для запуска виртуальных машин, утилита varlinkctl для управления сервисами Varlink, утилита systemd-pcrlock для анализа регистров TPM2 PCR и генерации правил доступа, модуль аутентификации pam_systemd_loadkey.so.
Согласно информации OpenNET, ключевые изменения дополнения в выпуске systemd 255:
добавлен компонент "systemd-storagetm", дающий возможность автоматически экспортировать все локальные блочные устройства при помощи драйвера NVMe-TCP (NVMe over TCP), позволяющего обращаться к NVMe-накопителям по сети (NVM Express over Fabrics), используя протокол TCP. За предоставление доступа в режиме NVMe over TCP отвечает новый юнит "storage-target-mode.target", который можно включить на стадии загрузки, указав в командной строке ядра "rd.systemd.unit=storage-target-mode.target", например, при необходимости удалённого обращения к накопителю в диагностических целях;
добавлена утилита "systemd-vmspawn", представляющая аналог утилиты systemd-nspawn для запуска образа операционной системы в виртуальной машине (утилита systemd-nspawn предназначена для запуска контейнеров, а systemd-vmspawn предоставляет похожий интерфейс для виртуальных машин). В настоящее время для запуска виртуальных машин доступен только бэкенд на базе QEMU;
добавлена утилита "varlinkctl" для вызова и интроспекции сервисов, использующих протокол Varlink;
добавлена утилита "systemd-pcrlock" для анализа и предсказания состояний регистров TPM2 PCR (Platform Configuration Register) и формирования сохраняемых в индексе TPM2 NV правил доступа, разрешающих обращение к объектам TPM2, таким как ключи шифрования диска, только из заверенных цифровой подписью компонентов, запускаемых на стадии верифицированной загрузки. В качестве входных данных для анализа может использоваться результат запроса состояния PCR в TPM2, выдаваемый прошивкой UEFI лог событий текущей загрузки (/sys/kernel/security/tpm0/binary_bios_measurements) или локально сохранённый лог TPM2 (/run/log/systemd/tpm2-measure.log). Поддержка сохраняемых правил доступа добавлена в systemd-cryptsetup, systemd-cryptenroll и systemd-repart;
добавлен PAM-модуль pam_systemd_loadkey.so, предназначенный для автоматического извлечения из хранилища ключей в ядре (keyring) парольной фразы, используемой в cryptsetup для разблокировки зашифрованной корневой ФС, и выставления этой парольной фразы в качестве токена аутентификации (PAM authtok). Модуль может применяться, например, для настройки авторазблокировки доступа к GNOME Keyring и KDE Wallet при включении автоматического входа в систему;
добавлена поддержка перехода в спящий режим (hibernation) с сохранением содержимого памяти в файлы подкачки, хранимые в ФС Btrfs;
в юниты добавлены свойства MemoryPeak, MemorySwapPeak, MemorySwapCurrent и MemoryZSwapCurrent, соответствующие доступным через cgroup v2 свойствам memory.peak, memory.swap.peak, memory.swap.current и memory.zswap.current. Информация о данных свойствах включена в вывод "systemctl status";
переработан способ запуска сервисов, который переведён на использование вызова posix_spawn с опциями CLONE_VM и CLONE_VFORK для запуска процесса и применения отдельного исполняемого файла systemd-executor для настройки запускаемого процесса. Ранее процессы ответвлялись функцией fork с копированием памяти управляющего процесса в режиме copy-on-write и выполнением необходимых настроек (монтирование пространств имён и выставление CGroup) до запуска целевого исполняемого файла через вызов exec, что приводило к проблемам из-за невозможности обращения к некоторым API Glibc на стадии между выполнением функций fork и exec;
код для отслеживания внутренних процессов переведён на использование PIDFD вместо PID в окружениях с ядром, поддерживающим PIDFD (PIDFD связывается с конкретным процессом и не меняется, в том время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID). Реализована возможность создания scope-юнитов, при использовании PIDFD вместо PID для выбора процессов;
прекращена поддержка раздельных иерархий каталогов (когда /usr монтируется отдельно от корня или разделены каталоги /bin и /usr/bin, /lib и /usr/lib). В будущем также решено прекратить поддержку cgroups v1, скриптов сервисов System V и EFI-переменных SystemdOptions;
команда "systemctl switch-root" ограничена для применения только в initrd. Для замены корневой ФС в обычном окружении следует использовать "systemctl soft-reboot";
объявлены устаревшими параметры SuspendMode, HybridSleepMode, HibernateStat и HybridSleepState в секции "[Sleep]" файла systemd-sleep.conf. Данные параметры теперь игнорируются и могут принимать только значения по умолчанию;
в юниты добавлена опция SurviveFinalKillSignal, позволяющая игнорировать финальный сигнал SIGTERM/SIGKILL, выдаваемый во время завершения работы, что может оказаться полезным для оставления запущенным юнита во время мягкой перезагрузки системы в режиме soft-reboot;
добавлена настройка NFTSet, позволяющая использовать идентификаторы cgroup для переключения логики в правилах межсетевого экрана;
добавлена опция ConditionSecurity=measured-uki, гарантирующая, что юнит может быть запущен только в системе, загруженной с верифицированного образа ядра в формате UKI;
в systemd-boot добавлены новые горячие клавиши "B" и "O" для перезагрузки и выключения системы из загрузочного меню. Добавлена настройка "menu-disabled" для отключения показа загрузочного меню;
в утилиту systemd-repart добавлены новые опции "--copy-from" для получения описаний раздела из указанного образа ФС, "--copy-source" для указания базового каталога для параметра CopyFiles, "--make-ddi=confext", "--make-ddi=sysext" и "--make-ddi=portable" для генерации разных типов DDI, и "--tpm2-device-key" для привязки диска к определённому открытому ключу TPM2;
в утилиту journalctl в параметр "--lines" добавлено значение "+N" для вывода N старейших записей;
в udevadm добавлен флаг "--json" для вывода в формате JSON;
в утилиты systemd-analyze, systemd-tmpfiles, systemd-sysusers, systemd-sysctl и systemd-binfmt добавлена опция "--tldr" для вывода только фактических параметров конфигурации без пробелов и комментариев;
в подсистему seccomp добавлена поддержка архитектуры LoongArch64. Разрешено использование seccomp для фильтрации системных вызовов в сервисах, выполняемых не под пользователем root без включения настройки NoNewPrivileges=yes;
в утилиту systemd-mount добавлена опция "--tmpfs" для монтирования нового экземпляра 'tmpfs'.
Источник новости: habr.com