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

После полугода разработки представлен релиз системного менеджера systemd 257. Ключевые изменения: новые утилиты systemd-sbsign и systemd-keyutil, поддержка MPTCP при активации по сокету, начальная поддержка сборки с Си-библиотекой Musl, утилита updatectl для управления установкой обновлений через systemd-sysupdate, возможность запуска сервисов в отдельных PID namespace, защита от случайного удаления файлов при использовании «systemd-tmpfiles —purge».

Среди изменений в новом выпуске:

  • Добавлена новая утилита systemd-sbsign для заверения цифровой подписью исполняемых файлов в формате PE (Portable Executable), предназначенных для использования при загрузке в режиме EFI Secure Boot. Для формирования подписи могут использоваться движки и провайдеры, предоставляемые библиотекой OpenSSL. Systemd-sbsign может применяться в качестве альтернативы приложениям sbsigntool и pesign в утилите ukify при формировании универсальных образов ядра UKI (Unified Kernel Image), объединяющих в одном файле загрузчик для UEFI (UEFI boot stub), образ ядра Linux и загружаемое в память системное окружение initrd.
  • Добавлена новая утилита systemd-keyutil, реализующая различные операции над закрытыми ключами и сертификатами X.509. Например, systemd-keyutil может использоваться для проверки возможности загрузки закрытых ключей и сертификатов, а так же извлечения из них открытых ключей в формате PEM.
  • В unit-ах «.socket«, используемых для обеспечения работы механизма активации по сокету (запуск процессов при попытке установки сетевого соединения), реализована поддержка MPTCP (Multipath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам.
  • В состав включены изменения, необходимые для сборки с использованием стандартной Си-библиотеки Musl.
  • В различные компоненты systemd, выводящие индикаторы прогресса выполнения операций (например, systemd-repart, systemd-sysupdate/updatectl и importctl), добавлена возможность использования ANSI-последовательностей для анимирования отображения прогресса. Подобные последовательности пока поддерживаются только в Windows Terminal (предполагается, что со временем подобная возможность будет перенесена и в эмуляторы терминалов для Linux).
  • Расширены возможности компонента systemd-sysupdate, применяемого для автоматического определения, загрузки и установки обновлений с использованием атомарного механизма замены разделов, файлов или каталогов (используются два независимых раздела/файла/каталога, на одном из которых находится текущий работающий ресурс, а на другом устанавливается очередное обновление, после чего разделы/файлы/каталоги меняются местами). На практике, systemd-sysupdate уже применяется в GNOME OS.

    В дополнение к процессу systemd-sysupdate добавлен одноимённый сервис, позволяющий использовать D-Bus для управления обновлением системы непривилегированным пользователем. Для управления сервисом в состав также включена новая утилита updatectl. В systemd-sysupdate добавлен флаг «—offline» для запрета загрузки метаданных по сети и использования только уже загруженных на локальную систему версий. Для всех команд добавлена поддержка вывода в формате JSON.

  • Для сервисов реализовано новое свойство «PrivatePIDs», при помощи которого можно организовать запуск процессов с PID 1 (init-процесс) в отдельном пространстве идентификаторов процессов (PID namespace). В создаваемом для запускаемого процесса окружении будут видны только процессы из созданного для него пространства имён.
  • В правила udev добавлена поддержка сопоставлений без учёта регистра символов
    (например, ‘ATTR{foo}==i»abcd»‘). Через udev реализовано предоставление непривилегированным локальным пользователям доступа («uaccess») к устройству /dev/udmabuf, которое необходимо для работы с IPMI-камерами через libcamera. В udev обеспечено распознание различных аппаратных криптокошельков с интерфейсом USB и выставление для них свойства ID_HARDWARE_WALLET, что позволяет применить к ним режим «uaccess» для доступа непривилегированных пользователей.

  • В файл /etc/os-release добавлены новые поля RELEASE_TYPE, EXPERIMENT и EXPERIMENT_URL. «RELEASE_TYPE» может принимать значения «experimental», «development», «stable» и «lts» для отделения стабильных версий от находящихся в разработке и экспериментальных сборок. Параметры EXPERIMENT и EXPERIMENT_URL предназначены для пояснения сути экспериментальной сборки.
  • В утилиту run0, развиваемую в качестве замены программы sudo, добавлена опция «—shell-prompt-prefix», определяющая строку-префикс приглашения командной оболочки. По умолчанию в качестве префикса выводится emoji «🦸» для визуального выделения сеанса с повышенными привилегиями.
  • В systemd-tmpfiles во избежание ошибочного удаления не тех файлов опция «—purge» теперь применяется только к настройкам в tmpfiles.d/, для которых явно выставлен флаг «$». Для выполнения операции «—purge» также теперь требуется указания как минимум одного файла из каталога tmpfiles.d/. Для строк с типом ‘L’ добавлен флаг ‘?’, при указании которого символическая ссылка будет создана только при наличии целевого файла.

  • В сервисном менеджере и сопутствующих утилитах продолжен перевод кода отслеживания процессов на использование PIDFD вместо PID. Идентификатор PIDFD связывается с конкретным процессом и не меняется, в том время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID.
  • Для сервисов реализована возможность указания в параметре «RestartMode» значения «debug», при котором перезапуск сбойного сервиса будет выполнен с включением отладочного режима (выставляется переменная окружения DEBUG_INVOCATION=1), а значение LogLevelMax будет временно повышено до отладочного уровня.
  • В обработчике PID 1 реализована возможность загрузки правил для LSM-модуля IPE (Integrity Policy Enforcement), определяющих политику обеспечения целостности для всей системы (какие операции допустимы и каким способом следует верифицировать подлинность компонентов).
  • В unit-файлы «.timer» добавлена опция «DeferReactivation», позволяющая пропустить очередную активацию по таймеру, если сервис ещё не завершил своё выполнение со времени прошлой активации.
  • В параметре unit-файлов PrivateUsers реализована возможность указания значения «identity» для включения маппинга идентификаторов пользователей при создании пространства имён (user namespace).
  • В параметр unit-файлов PrivateTmp добавлена поддержка значения «disconnected», при котором для каталогов /tmp/ и /var/tmp/ будут задействованы отдельные экземпляры tmpfs.
  • В параметр unit-файлов ProtectControlGroups добавлена поддержка новых режимов «private» и «strict», при выставлении которых для сервиса создаётся новое пространство имён cgroup (cgroup namespace) и монтируется cgroupfs. При выставлении опции «strict» монтирование cgroupfs производится в режиме только для чтения.
  • В параметрах StateDirectory, RuntimeDirectory, CacheDirectory,
    LogsDirectory и ConfigurationDirectory предоставлена возможность использования флага ‘:ro’ для ограничения доступа к соответствующим каталогам режимом только для чтения.

  • В параметр командной строки ядра «systemd.machine_id» добавлена поддержка значения «firmware», при котором идентификатор системы (machine ID) будет вычислен на основе UUID из SMBIOS/DeviceTree.
  • Добавлена поддержка системных вызовов mseal(), listmount() и statmount(), появившихся в недавних выпусках ядра Linux.

  • В утилиты resolvectl, timedatectl и systemd-inhibit добавлена поддержка интерактивной авторизации при помощи Polkit.
  • В утилиту systemctl добавлена возможность использования флага «—now» в команде «reenable».
  • В утилиту systemd-mount добавлена опция «—json» для вывода в формате JSON (например, при указании вместе с «—list-devices» в формате JSON будет выведен список устройств).
  • В утилиту «localectl» добавлены опции «-l» и «—full» для отключения обрезки длинных строк при выводе.
  • В sleep.conf добавлена опция HibernateOnACPower позволяющая отложить переключение в спящий режим до отключения устройства от стационарного источника питания.
  • В systemd-sysusers в строки «u» добавлена поддержка модификатора «!», при помощи которого можно создавать полностью заблокированные учётные записи пользователей (ранее для блокировки пользователя использовалась установка некорректного пароля, что, например, не приводило к блокировке при аутентификации по ключам в SSH).
  • В systemd-coredump добавлена опция «EnterNamespace», предоставляющая доступ к пространству точек монтирования любых аварийно завершённых процессов для получения их отладочных символов. На практике опция может быть полезной для организации обратной трассировки (backtrace) core-файлов от приложений, запускаемых в изолированных контейнерах.
  • В systemd-logind включена обработка комбинации Ctrl-Alt-Shift-Esc для отправки компонентам пользовательского окружения сигнала org.freedesktop.login1.SecureAttentionKey с запросом вывода диалога безопасного входа в систему. Реализована настройка «DesignatedMaintenanceTime» для автоматического планирования завершения работы в заданное время. По аналогии с поддержкой устройств DRM и evdev добавлена поддержка настройки доступа непривилегированных пользователей к устройствам hidraw (игровые контроллеры и джойстики).
  • В systemd-machined добавлена поддержка регистрации непривилегированными клиентами виртуальных машин и контейнеров. Предоставлен доступ к функциональности systemd-machined через API Varlink, помимо D-Bus.
  • В файл конфигурации networkd.conf добавлена новая секция «[IPv6AddressLabel]» для настройки меток и префиксов для адресов IPv6
  • В команду ‘networkctl edit’ добавлена опция «—stdin» для получения содержимого файла из стандартного потока. В команды ‘networkctl edit’ и ‘networkctl cat’ добавлена поддержка редактирования и отображения файлов .netdev через указание сетевого интерфейса. Добавлена опция «—no-ask-password» для отключения интерактивной авторизации.
  • В утилиты ukify, bootctl, systemd-keyutil, systemd-measure, systemd-repart, и systemd-sbsign добавлена опция «—certificate-source» для загрузки сертификата X.509 через провайдер OpenSSL вместо прямой загрузки из файла.
  • В systemd-boot добавлена возможность использования кнопок управления громкостью для перемещения вверх и вниз по загрузочному меню, что может быть полезным на таких устройствах, как смартфоны. В утилиту bootctl добавлена поддержка установки БД UEFI Secure Boot в формате ESL(db/dbx/…) для systemd-boot.
  • В journalctl добавлена опция «—list-invocation» для показа списка вызовов unit-ов и опция «—invocation» («-I») для показа логов, связанных только с определённым вызовом.
  • В systemd-nspawn добавлена поддержка непривилегированного использования FUSE (Filesystem in Userspace) в контейнерах. При использовании опции «—bind-user» обеспечен проброс в контейнер SSH-ключей пользователя, необходимых для доступа по SSH.
  • В libsystemd добавлен новый программный интерфейс «sd-json», использующий формат JSON, а также интерфейс «sd-varlink», использующий IPC Varlink.
  • Рекомендованная базовая версия ядра повышена до выпуска 5.4, сформированного в 2019 году. В следующем году планируют прекратить поддержку более старых ядер и отметить выпуск 5.4 в качестве минимально поддерживаемой базовой версии.
  • Поддержка cgroups v1 признана устаревшей и по умолчанию отключена (для включения в командной строке ядра необходимо указать SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1 в дополнение к активации в настройках systemd). В следующем выпуске systemd 258 планируется полностью удалить код, связанный с cgroups v1. В версии systemd 258 также
    намечено удаление поддержки скриптов сервисов System V.

Источник: http://www.opennet.ru/opennews/art.shtml?num=62380