После трёх месяцев разработки представлен релиз системного менеджера systemd 249. В новом выпуске обеспечена возможность определения пользователей/групп в формате JSON, стабилизирован протокол Journal, упрощена организация загрузки сменяющих друг-друга дисковых разделов, добавлена возможность привязки BPF-программ к сервисам, реализована большая порция новых сетевых настроек и возможностей для запуска контейнеров.
Основные изменения:
- Документирован протокол Journal, который можно использовать в клиентах вместо протокола syslog для локальной доставки лог-записей. Протокол Journal реализован достаточно давно и уже используется в некоторых клиентских библиотеках, тем не менее его официальная поддержка заявлена только сейчас.
- В userdb и nss-systemd обеспечено чтение дополнительных определений пользователей, размещённых в каталогах /etc/userdb/, /run/userdb/, /run/host/userdb/ и /usr/lib/userdb/, заданных в формате JSON. Отмечается, что указанная возможность предоставит дополнительный механизм создания пользователей в системе, обеспечив для него полную интеграцию с NSS и /etc/shadow. Поддержка
формата JSON для записей пользователей/групп также позволит прикреплять к пользователям различные параметры управления ресурсами и другие настройки, которые распознают pam_systemd и systemd-logind. - В nss-systemd обеспечен синтез записей пользователя/группы в /etc/shadow с использованием хэшированных паролей из systemd-homed.
- Реализован механизм, упрощающий организацию обновления с использованием заменяющих друг-друга дисковых разделов (один раздел активный, а второй запасной – обновление копируется на запасной раздел, после чего он становится активным). Если в дисковом образе присутствует два корневых или /usr раздела, а udev не определил наличие параметра ‘root=’ или выполняется обработка дисковых образов, указанных через опцию “–image” в утилитах systemd-nspawn и systemd-dissect, раздел для загрузки может быть вычислен через сравнение меток GPT (подразумевается, что в метке GPT упоминается номер версии содержимого раздела и systemd выберет раздел с более свежими изменениями).
- В файлы сервисов добавлена настройка BPFProgram, при помощи которой можно организовать загрузку BPF-программ в ядро и управления ими c привязкой к определённым сервисам systemd.
- В systemd-fstab-generator и systemd-repart добавлена возможность загрузки с дисков, на которых имеется только раздел /usr и нет корневого раздела (подразумевается, что корневой раздел может быть добавлен утилитой systemd-repart во время первой загрузки).
- В systemd-nspawn опция “–private-user-chown” заменена на более универсальный вариант “–private-user-ownership”, который может принимать значения “chown” как эквивалент “–private-user-chown”, “off” для отключения старой настройки, “map” для маппинга идентификаторов пользователей в примонтированных файловых системах и “auto” для выбора “map” при наличии необходимой функциональности в ядре (5.12+) или отката на рекурсивный вызов “chown” в противном случае. При помощи маппинга можно сопоставить файлы одного пользователя на примонтированном чужом разделе с другим пользователем в текущей системе, что позволяет упростить совместное использование файлов разными пользователями. В механизме переносимых домашних каталогов systemd-homed маппинг позволит пользователям перемещать свои домашние каталоги на внешние носители и использовать их на разных компьютерах, раскладка идентификаторов пользователей на которых не совпадает.
- В systemd-nspawn в опции “–private-user” теперь можно использовать значение “identity” для прямого отражения идентификаторов пользователей при настройке пространства имён идентификаторов пользователей (user namespace), т.е. UID 0 и UID 1 в контейнере будут отражены в UID 0 и UID 1 на стороне хоста, для сокращения векторов для атаки (контейнер получит возможности процесса только в своём пространстве имён).
- В systemd-nspawn добавлена опция “–bind-user” для проброса в контейнер учётной записи пользователя, имеющегося в хост-окружении (в контейнер монтируется домашний каталог, добавляется запись пользователя/группы в /run/host/userdb/ и выполняется маппинг UID внутри контейнера с UID на стороне хост-окружения).
- В systemd-ask-password и systemd-sysusers добавлена поддержка запроса устанавливаемых паролей (passwd.hashed-password. и passwd.plaintext-password.) при помощи появившегося в выпуске systemd 247 механизма безопасной передачи конфиденциальных данных с использованием промежуточных файлов в отдельном каталоге. По умолчанию учётные данные принимаются от процесса с PID1, который получает их, например, от менеджера управления контейнерами, что позволяет организовать настройку пароля пользователя при первой загрузке.
- В systemd-firstboot добавлена поддержка использования механизма безопасной передачи конфиденциальных данных для запроса различных параметров системы, что может применяться для инициализации системных настроек при первой загрузке образа контейнера, в котором нет необходимых настроек в каталоге /etc.
- В процессе PID 1 в процессе загрузки обеспечен показ одновременно имени и описания юнита. Изменить вывод можно через параметр “StatusUnitFormat=combined” в system.conf или опцию командной строки ядра “systemd.status-unit-format=combined”
- В утилиты systemd-machine-id-setup и systemd-repart добавлена опция “–image” для передачи файла с идентификатором машины в дисковых образ или для увеличения размера дискового образа.
- В файл настройки разделов, используемый утилитой systemd-repart, добавлен параметр MakeDirectories, который можно использовать для создания произвольных каталогов в создаваемой файловой системе, на этапе до отражения в таблице разделов (например, для создания в корневом разделе каталогов для точек монтирования для того, чтобы иметь возможность сразу примонтировать раздел в режиме только для чтения). Для управления GPT-флагами на создаваемых разделах добавлены соответствующие параметры Flags, ReadOnly и NoAuto. В параметре CopyBlocks реализовано значение “auto” для автоматического выбора текущего загрузочного раздела в качестве источника при копировании блоков (например, когда необходимо перенести собственный корневой раздел на новый носитель).
- В GPT реализован флаг “grow-file-system”, аналогичный опции монтирования x-systemd.growfs и обеспечивающий автоматическое расширение размера ФС до границ блочного устройства, если размер ФС меньше раздела. Флаг применим к ФС Ext3, XFS и Btrfs, и может применяться к автоматически определяемым разделам. Флаг по умолчанию включается для доступных на запись разделов, автоматически создаваемых через systemd-repart. В для настройки флага в systemd-repart добавлена опция GrowFileSystem.
- В файле /etc/os-release реализована поддержка новых переменных IMAGE_VERSION и IMAGE_ID для определения версии и идентификатора атомарно обновляемых образов. Для подстановки указанных значений в различные команды предложены спецификаторы %M и %A.
- В утилиту portablectl добавлен параметр “–extension” для активации переносимых образов расширения системы (например, через них можно распространять образы с дополнительными сервисами, интегрируемыми в корневой раздел).
- В утилите systemd-coredump обеспечено извлечение ELF-информации build-id при формировании core-дампа процесса, что может оказаться полезным для определения к какому пакету относится сбойный процесс, если информация об имени и версии deb- или rpm-пакетов была встроена в ELF-файлы.
- В udev добавлена новая база оборудования для устройств FireWire (IEEE 1394).
- В udev в схему выбора имён сетевых интерфейсов “net_id” добавлены три изменения, нарушающие обратную совместимость: некорректные символы в именах интерфейсов теперь заменяются на “_”; имена слотов PCI hotplug для систем s390 обрабатываются в форме шестнадцатеричных чисел; разрешено использование до 65535 встроенных PCI-устройств (ранее номера выше 16383 блокировались).
- В systemd-resolved в список NTA (Negative Trust Anchors) добавлен домен “home.arpa”, рекомендованный для локальных домашних сетей, но не применяемый в DNSSEC.
- В параметре CPUAffinity обеспечен разбор спецификаторов “%”.
- В файлы “.network” добавлен параметр ManageForeignRoutingPolicyRules, который можно использовать для исключения обработки в systemd-networkd сторонних политик маршрутизации.
- В файлы “.network” добавлен параметр RequiredFamilyForOnline для определения наличия IPv4 или IPv6 адреса как признака нахождения сетевого интерфейса в состоянии “online”. В networkctl обеспечено отображение состояния
“online” для каждого линка. - В файлы “.network” добавлен параметр OutgoingInterface для определения исходящих интерфейсов при настройке сетевых мостов.
- В файлы “.network” добавлен параметр Group, позволяющий настроить группу Multipath для записей в секции “[NextHop]”.
- В systemd-network-wait-online добавлены опции “-4” и “-6” для ограничения ожидания соединения только для IPv4 или IPv6.
- В настройки DHCP-сервера добавлен параметр RelayTarget, переводящий сервер в режим DHCP Ralay. Для дополнительной настройки DHCP-релея предложены опции RelayAgentCircuitId и RelayAgentRemoteId.
- В DHCP-сервера добавлен параметр ServerAddress, позволяющий явно выставить IP-адрес сервера (иначе адрес выбирается автоматически).
- В DHCP-сервере реализована секция [DHCPServerStaticLease], позволяющая настроить статические привязки адресов (DHCP leases), указав привязки фиксированных IP к MAC-адресам и наоборот.
- В настройке RestrictAddressFamilies реализована поддержка значения
“none”, при указании которого сервису не будут доступны сокеты любого семейства адресов. - В файлах “.network” в секциях [Address], [DHCPv6PrefixDelegation] и [IPv6Prefix] реализована поддержка настройки RouteMetric, позволяющей указать метрику для префикса маршрута, созданного для указанного адреса.
- В nss-myhostname и systemd-resolved обеспечен синтез DNS-записей c адресами для хостов со специальным именем “_outbound”, для которых всегда выдаётся локальный IP, в соответствии с маршрутами по умолчанию, используемый для исходящих соединений.
- В файлы .network в секцию “[DHCPv4]” добавлена активная по умолчанию настройка RoutesToNTP, предписывающая добавление отдельного маршрута через текущий сетевой интерфейс для доступа к адресу NTP-сервера, полученному для этого интерфейса при помощи DHCP (по аналогии с DNS настройка позволяет гарантировать, что трафик к NTP-серверу будет направлен через интерфейс, через который этот адрес был получен).
- Добавлены настройки SocketBindAllow и SocketBindDeny для управления доступом к сокетам, привязанным к текущему сервису.
- Для unit-файлов реализована условная настройка ConditionFirmware, позволяющая создавать проверки, оценивающие функции прошивки, такие как работа на системах UEFI и device.tree, а также проверять совместимость с определёнными возможностями device-tree.
- Реализована опция ConditionOSRelease для проверки полей в файле /etc/os-release. При определении условий проверки значений полей допустимы операторы “=”, “!=”, “=”, “>”.
- В утилите hostnamectl команды вида “get-xyz” и “set-xyz” избавлены от префиксов “get” и “set”, например, вместо “hostnamectl get-hostname” и “hostnamectl “set-hostname” можно использовать команду “hostnamectl hostname”, присвоение значения в которой определяется указанием дополнительного аргумента (“hostnamectl hostname value”). Поддержка старых команд сохранена для обеспечения совместимости.
- В утилите systemd-detect-virt и настройке ConditionVirtualization обеспечена корректная идентификация окружений Amazon EC2.
- Настройка LogLevelMax в unit-файла теперь применяется не только к лог-сообщениям, созданным сервисом, но и сообщениям процесса PID 1, в которых упоминается сервис.
- Предоставлена возможность включения данных SBAT (UEFI Secure Boot Advanced Targeting) в файлы systemd-boot EFI PE.
- В /etc/crypttab реализована новы опции “headless” и “password-echo – первая позволяет пропустить все операции, связанные с интерактивным запросом паролей и PIN у пользователя, а вторая даёт возможность настроить метод отображения ввода пароля (ничего не показывать, показывать посимвольно и отображать звёздочки). В systemd-ask-password для аналогичных целей добавлена опция “–echo”.
- В systemd-cryptenroll, systemd-cryptsetup и systemd-homed расширена поддержка разблокирования шифрованных разделов LUKS2 при помощи токенов FIDO2.
Добавлены новые опции “–fido2-with-user-presence”, “–fido2-with-user-verification” и “–fido2-with-client-pin” для управления проверкой физического присутствия пользователя, верификацией и необходимости ввода PIN-кода. - В systemd-journal-gatewayd добавлены опции “–user”, “–system”, “–merge” и “–file”, аналогичные таким же опциям journalctl.
- В дополнение к прямым зависимостям между юнитами, задаваемых через параметры OnFailure и Slice, добавлена поддержка неявных обратных зависимостей OnFailureOf и SliceOf, которые могут быть полезны, например, для определения всех unit-ов, входящих в slice.
- Добавлены новые типы зависимостей между unit-ами: OnSuccess и OnSuccessOf (противоположность OnFailure, вызываемая при удачном завершении); PropagatesStopTo и StopPropagatedFrom (позволяют распространить событие остановки unit-а на другой unit); Upholds и UpheldBy (альтернатива Restart).
- В утилите systemd-ask-password появилась опция “–emoji”, позволяющая управлять появлением символа замка (🔐) в строке ввода пароля.
- Добавлена документация по структуре дерева исходных текстов systemd.
- Для unit-ов добавлено свойство MemoryAvailable, показывающее сколько памяти остаётся у unit-а в запасе до достижения лимита, выставленного через параметры MemoryMax, MemoryHigh или MemoryAvailable.
Release.
Ссылка here.