Спустя четыре месяца после выхода предыдущего релиза systemd 255 представлена очередная версия. Среди основных нововведений и заметных изменений стоит выделить утилиту systemd-vmspawn для запуска виртуальных машин, поддержку экспорта накопителей через NVMe-TCP, модуль аутентификации pam_systemd_loadkey.so и, конечно, systemd-bsod для полноэкранного вывода сообщений об ошибках. Последнему компоненту уделим особое внимание. Ну а все подробности о релизе — под катом.
Что там нового?
Что касается systemd, альтернативы классической подсистемы инициализации init, то работу над ней изначально вели Леннарт Поттеринг (Lennart Poettering) и Кай Зиверс (Kay Sievers). Проект стартовал в 2010 году, а systemd стал дефолтным компонентом CentOS, Debian, Fedora, openSUSE, Red Hat Enterprise Linux, SUSE Linux Enterprise Server.
Обо всех нововведениях рассказать не позволит объём материала, но самые главные затронем — среди них есть весьма интересные:
Так, например, добавлен компонент "systemd-storagetm", который позволяет в автоматическом режиме экспортировать все локальные блочные устройства при помощи драйвера NVMe-TCP (NVMe over TCP). Так, он открывает возможность обращаться к NVMe-накопителям по сети (NVM Express over Fabrics), используя протокол TCP. За доступ отвечает компонент "storage-target-mode.target", который можно включить ещё на стадии загрузки. Для этого нужно в командной строке ядра указать "rd.systemd.unit=storage-target-mode.target".
Появилась новая утилита для анализа и прогнозирования состояний регистров TPM2 PCR (Platform Configuration Register) и формирования сохраняемых в индексе TPM2 NV правил доступа. Утилита получила название "systemd-pcrlock". Что касается доступа, то речь идёт о разрешении обращения к объектам TPM2, таким как ключи шифрования диска, только из заверенных цифровой подписью компонентов, запускаемых на стадии верифицированной загрузки.
В юнитах появились новые свойства, включая MemoryPeak, MemorySwapPeak, MemorySwapCurrent и MemoryZSwapCurrent. Они соответствуют доступным через cgroup v2 свойствам memory.peak, memory.swap.peak, memory.swap.current и memory.zswap.current. Информация о данных свойствах включена в вывод systemctl status.
Кроме того, добавлена и новая утилита "systemd-vmspawn". Это фактически аналог systemd-nspawn для запуска образа операционной системы в виртуальной машине (утилита "systemd-nspawn" предназначена для запуска контейнеров, а "systemd-vmspawn" предоставляет похожий интерфейс для виртуальных машин).
Ещё стоит упомянуть и изменение способа запуска сервисов, переведённых на использование posix_spawn с опциями CLONE_VM и CLONE_VFORK для запуска процесса, и применение отдельного исполняемого файла "systemd-executor" для настройки запускаемого процесса. Ранее процессы ответвлялись функцией fork с копированием памяти управляющего процесса в режиме copy-on-write и выполнением необходимых настроек (монтирование пространств имён и выставление CGroup).
Важное изменение в прекращении поддержки раздельных иерархий каталогов (когда /usr монтируется отдельно от корня или разделены каталоги /bin и /usr/bin, /lib и /usr/lib). В будущем также решено прекратить поддержку cgroups v1, скриптов сервисов System V и EFI-переменных SystemdOptions.
Объявили устаревшими и параметры SuspendMode, HybridSleepMode, HibernateStat и HybridSleepState в секции "[Sleep]" файла "systemd-sleep.conf". Данные параметры теперь игнорируются и могут принимать только значения по умолчанию.
Зато в юнитах появилась опция SurviveFinalKillSignal, позволяющая игнорировать финальный сигнал SIGTERM/SIGKILL, выдаваемый во время завершения работы.
В утилите "systemd-repart" появились новые опции: "--copy-from" для получения описаний раздела из указанного образа ФС, "--copy-source" для указания базового каталога для параметра CopyFiles, "--make-ddi=confext", "--make-ddi=sysext" и "--make-ddi=portable" для генерации разных типов DDI, "--tpm2-device-key" для привязки диска к определённому открытому ключу TPM2.
Что касается утилит systemd-analyze, systemd-tmpfiles, systemd-sysusers, systemd-sysctl и systemd-binfmt, то в них появилась новая опция "--tldr" для вывода только фактических параметров конфигурации без пробелов и комментариев.
В подсистеме seccomp добавлена поддержка архитектуры LoongArch64. Разрешено использование seccomp для фильтрации системных вызовов в сервисах, выполняемых не под юзером root без включения настройки NoNewPrivileges=yes.
Ну а теперь — о systemd-bsod и «синем экране смерти»
Обычно, когда мы говорим о BSOD, сразу перед глазами появляется тот самый экран из Windows. Конечно, он не всегда был синим, впервые в более-менее современном виде он был ещё в Windows NT 3.1.
В каждой новой версии операционной системы от Microsoft внешний вид этого экрана менялся. Так, в версиях 9x сообщение об ошибке было очень коротким. Всё изменилось с Windows XP, где разработчики чуть добавили данных о найденной проблеме.
Начиная с «восьмёрки» на BSOD появляется грустный смайлик, никуда не пропала и техническая информация. Интересный момент: в Windows 11 «синий экран смерти» сделали чёрным, но после того как большинство пользователей выразили недовольство, синий цвет вернули. Возможно, причиной были и не пользователи, но возмущённых сменой цвета было действительно много.
Ну а теперь некий аналог BSOD смогут лицезреть и пользователи Linux. Это удовольствие обеспечивает компонент systemd-bsod. От выводит на дисплей в полноэкранном режиме сообщения об ошибках из журнала LOG_EMERG.
Текст белого цвета, так что его легко прочитать на светло-синем фоне. По примеру BSOD из поздних версий Windows, systemd-bsod выводит на экран и QR-код, который расположен в правом нижнем углу. Код можно считать при помощи смартфона, получив более-менее развёрнутую информацию об ошибке.
Разработчики уверены, что это нововведение будет полезно в выявлении и решении проблем, которые связаны с ядром Linux и аппаратным обеспечением. Он представляет собой гораздо более наглядный инструмент мониторинга и устранения сложностей, которые могут возникнуть в процессе загрузки ОС.