Среди изменений в новом выпуске:
- Добавлен новый компонент systemd-sysinstall с реализацией простого инсталлятора операционной системы, которым можно управлять из командной строки или через интерактивный текстовый интерфейс. Функциональность systemd-sysinstall сформирована из уже существующих возможностей systemd: для настройки дисковых разделов задействован systemd-repart, для установки ядра и генерации загрузочного меню — команда «bootctl link«, для установки загрузчика systemd-boot — команда «bootctl install», для начального конфигурирования устанавливаемой системы (например, выбор локали и раскладки клавиатуры) — systemd-creds.
- В рамках подготовки к реализации требований законов об интеграции в ОС API для проверки возраста в БД userdb добавлено поле birthDate с датой рождения пользователя. Добавленное поле сможет использоваться в развиваемом для дистрибутивов портале xdg-desktop-portal и сервисе AccountsService для выдачи приложениям сведений о возрастной категории пользователя через D-Bus интерфейс «org.freedesktop.AgeVerification1» или «org.freedesktop.ParentalControls». Для установки возраста в утилиту homectl добавлена опция «—birth-date’.
- В обработчик PID1 добавлена поддержка подсистем Linux-ядра LUO (Live Update Orchestration) и KHO (Kexec Handover), позволяющих полноценно перезагрузить и обновить ядро без остановки работы и не теряя состояние системы, устройств и процессов. KHO предоставляет возможности для запуска нового ядра из старого без потери состояния системы, а LUO реализует сохранение состояния устройств и оперативной памяти, а также обеспечивает непрерывность операций, связанных с DMA и обработкой прерываний.
В systemd для системных и пользовательских unit-ов реализована возможность сохранения файловых дескрипторов перед вызовом kexec и их восстановления после перезагрузки ядра через kexec. В unit-ах также можно создавать собственные сеансы LUO, сохраняемые и восстанавливаемые при выполнении kexec. Для включения сохранения состояния хранилища файловых дескрипторов следует использовать настройку ‘FileDescriptorStorePreserve=yes’.
- Реализована подсистема systemd-imdsd, предоставляющая API на базе Varlink IPC для доступа локальных программ к сервисам IMDS (Instance Metadata Service), предоставляемым разными провайдерами облачных систем. IMDS даёт возможность виртуальным машинам получать информацию об облачном окружении, например, можно получить сведения о сетевой конфигурации, географическом расположении узла, типе CPU и размере хранилища. В systemd-imdsd предоставляется как низкоуровневый API для доступа к отдельным полям, так и высокоуровневый интерфейс для запроса по типовым ключам, сопоставленными с ключами, специфичными для отдельных облачных платформ. Для взаимодействия с systemd-imdsd добавлена утилита systemd-imds, позволяющая импортировать поля из IMDS в локальную систему учётных записей.
Для распознавания облачных платформ по информации из SMBIOS и определения доступной на текущем узле функциональности IMDS добавлена новая БД hwdb.d/40-imds.hwdb. Реализовано распознавание облачных платформ Amazon EC2, Microsoft Azure, Google Compute Engine, Hetzner, Oracle Cloud, Scaleway, Tencent Cloud, Alibaba ECS и Vultr. Доступен обработчик systemd-imds-generator для автоматической подстановки сервиса для получения данных через IMDS в случае выявления работы под управлением поддерживаемой облачной платформы. Возможно создавать универсальные образы, поддерживающие использование IMDS при запуске в облачных окружениях, но способные работать и без IMDS.
- В systemd-stub реализована функциональность «boot secret», позволяющая сформировать ключ на основе EFI-переменной, хранимой в недоступной для операционной системы области и инициализированной случайным значением. В initrd ключ передаётся через файл /.extra/boot-secret. Представленная возможность может потребоваться для получения специфичного для системы случайного ключа для верификации процесса загрузки или шифрования на системах без аппаратного TPM (Trusted Platform Module).
- Добавлен сервис systemd-tpm2-swtpm.service для запуска эмулятора TPM-чипов swtpm (Software TPM Emulator), который можно использовать для автоматического отката на программную реализацию TPM для защищённой загрузки на системах без аппаратного TPM. Программный TPM работает в пользовательском пространстве и не позволяет добиться уровня защиты как у аппаратного TPM, но в некоторых ситуациях его применение оправдано, по сравнению с работой без TPM. Например, программный TPM может получить ключ шифрования разделов при помощи новой функциональности «boot secret» и использовать для хранения своего состояния раздел ESP (EFI System Partition) на диске. Для автоматического включения программного TPM предложен параметр командой строки ядра systemd.tpm2_software_fallback.
- Объявлен стабильным и помещён в /usr/bin/ компонент systemd-sysupdate, предназначенный для автоматического определения, загрузки и установки обновлений с использованием атомарного механизма замены разделов, файлов или каталогов (используются два независимых раздела/файла/каталога, на одном из которых находится текущий работающий ресурс, а на другом устанавливается очередное обновление, после чего разделы/файлы/каталоги меняются местами).
- В systemd-resolved реализована возможность переопределения или указания новых DNS-записей через размещение файлов в формате JSON в каталогах systemd/resolve/static.d/. В отличие от /etc/hosts в новых файлах можно не только привязывать IP-адреса к именам хостов, но и определять ресурсные DNS RR-записи, отличные от «A» и «AAAA». Кроме того, в systemd-resolved добавлены настройки размера DNS-кэша: ‘DNSCacheSize’, ‘MulticastDNSCacheSize’ и ‘LLMNRCacheSize’.
- Добавлена утилита ‘storagectl‘ для инспектирования устройств хранения и управления подключением блочных устройств и файловых систем.
- В рамках инициативы по сокращению зависимостей у libsystemd реализована динамическая загрузка библиотек libgnutls, libmicrohttpd, libcurl, libcrypto, libssl, libfdisk и libcryptsetup
при помощи вызова dlopen() в ситуациях, когда их функции действительно необходимы. - В systemd-tmpfiles добавлен флаг «—inline», позволяющий выставлять директивы в командной строке без создания файлов конфигурации в tmpfiles.d/ и без отправки настроек через STDIN. Добавлен новый тип директив ‘k/K’ для выставления capabilities. Добавлен файл конфигурации tmpfiles.d/root.conf, выставляющий права доступа 0555 (-r-xr-xr-x) к корневой директории (/) для защиты от указания неверных прав при динамическом формировании корневой ФС.
- В утилите bootctl обеспечено сохранение резервной копии загрузчика systemd-boot и прописывании старой версии в UEFI в качестве запасного варианта загрузки.
- В systemd-vmspawn добавлена поддержка прямой загрузки ядра без использования прошивки UEFI. Реализована опция «—firmware-features» для выборочного включения или выключения отдельных возможностей прошивок. Добавлен режим «—console=headless» для запуска виртуальной машины без консоли и экрана. Добавлена опция «—image-disk-type» для выбора применяемого в VM типа блочного хранилища (virtio-blk, virtio-scsi, nvme, scsi-cd). Добавлена опция «—coco» (Confidential Computing) для включения режима шифрования памяти виртуальных машин с использованием технологии AMD SEV-SNP.
- В systemd-hostnamed и /etc/machine-info добавлена поддержка прикрепления к текущей системе произвольных тегов, используя параметр «Tags». Выставленные теги затем могут применяться для выборочного применения настроек с проверкой через выражение ConditionMachineTag.
- Добавлены настройки EventLoopRateLimitIntervalSec и EventLoopRateLimitBurst, ограничивающие интенсивность цикла обработки событий в PID1 для высвобождения ресурсов CPU в случае зацикливания.
- В сервисном менеджере реализована настройка MinimumUptimeSec для задания минимального времени работы системы (по умолчанию 15 секунд). Если до истечения этого времени инициировано завершение работы или перезагрузка, то на завершающей стадии добавляется соответствующая задержка.
- Для unit-ов реализованы новые настройки CPUSetPartition для выставление типа раздела cpuset в cgroup («root», «isolated», «member»), RestrictFileSystemAccess для разрешения запуска только исполняемых файлов, верифицированных по цифровой подписи при помощи dm-verity, и CPUPressureWatch/CPUPressureThresholdSec/IOPressureWatch/IOPressureThresholdSec для получения уведомлений о высокой нагрузке на CPU и ввод/вывод.
- Расширен список метрик, выдаваемых утилитой systemd-report. Например, добавлены сведения о размере физической памяти и активных ядрах CPU, данные о содержимом полей SMBIOS и /etc/machine-info, информация о поддержке режима Confidential Computing и сведения о производителе чипов TPM2.
- В systemd-oomd реализована возможность определения правил для отсеивания процессов при возникновения нехватки памяти в системе. Правила можно задавать в каталоге /etc/systemd/oomd/rules.d/ или в сервисных unit-ах через директиву OOMRule.
- В systemd-socket-proxy добавлена поддержка протокола «PROXY», соответствующего первой версии протокола «haproxy».
- В systemd-networkd реализован новый бэкенд sd-dhcp-relay для релеев DHCP. Объявлены устаревшими настройки в секции «[DHCPServer]» — BindToInterface, RelayTarget, RelayAgentCircuitId и RelayAgentRemoteId, вместо которых следует использовать параметр DHCPRelay в секции «[Network]» и серию новых настроек в секции [DHCPRelay] и в файле networkd.conf. Добавлена команда ‘networkctl dhcp-lease INTERFACE’ для сохранения дампа c информацией о привязке IP-адресов (DHCP lease).
- В утилиту systemd-nspawn добавлена опция «—restrict-address-families», а в файлы .nspawn настройка RestrictAddressFamilies для ограничения используемых в контейнере семейств адресов сокетов. В будущих выпусках по умолчанию будут разрешены только семейства AF_INET, AF_INET6 и AF_UNIX.
- Прекращена поддержка старого формата БД udev (версии 0.x). Обновление на лету с версий systemd до выпуска 247 больше не поддерживается.
- При сборке с Си-библиотекой musl теперь требуется как минимум выпуск musl 1.2.6.
Дополнительно можно отметить релиз проекта liberated-systemd 261, развивающего форк systemd, избавленный от кода, который может использоваться для слежки за пользователями. В предложенном выпуске изменения сводятся к удалению кода, добавляющего в userdb поле birthDate с датой рождения пользователя, а в утилиту homectl опцию «—birth-date’ для установки возраста.
Источник: http://www.opennet.ru/opennews/art.shtml?num=65732
