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

После двух месяцев разработки представлен релиз системного менеджера systemd 242. Из новшеств можно отметить поддержку туннелей L2TP, возможность управления поведением systemd-logind при перезапуске через переменные окружения, поддержку расширенных загрузочных разделов XBOOTLDR для монтирования /boot, возможность загрузки с корневым разделом в overlayfs, а также большое число новых настроек для разных типов юнитов.

Основные изменения:

  • В systemd-networkd обеспечена поддержка туннелей L2TP;
  • В sd-boot и bootctl реализована поддержка разделов XBOOTLDR (Extended Boot Loader), предназначенных для монтирования в /boot, в дополнение к разделам ESP, монтируемым в /efi или /boot/efi. Ядра, настройки, образы initrd и EFI теперь могут загружаться как из разделов ESP, так и из разделов XBOOTLDR. Указанное изменение позволяет использовать загрузчик sd-boot в более консервативных сценариях, когда сам загрузчик размещён в ESP, а загружаемые ядра и связанные с ними метаданные вынесены в отдельный раздел;
  • Добавлена возможность загрузки с передачей ядру опции «systemd.volatile=overlay», что позволяет разместить корневой раздел в overlayfs и организовать работу поверх доступного только для чтения образа корневого каталога с записью изменений в отдельный каталог в tmpfs (изменения в такой конфигурации теряются после перезапуска). По аналогии в systemd-nspawn добавлена опция »--volatile=overlay» для использования подобной функциональности в контейнерах;
  • В systemd-nspawn добавлена опция »--oci-bundle», позволяющая использовать наборы runtime для обеспечения изолированного запуска контейнеров, соответствующих требованиям спецификации Open Container Initiative (OCI). Для использования в командной строке и .nspawn-юнитах предложена поддержка различных опций, описанных в спецификации OCI, например, для исключения частей файловой системы могут использоваться настройки »--inaccessible» и «Inaccessible», а для настройки стандартных потоков вывода добавлены опции »--console» и »--pipe»;
  • Добавлена возможность управления поведением systemd-logind через переменные окружения: $SYSTEMD_REBOOT_TO_FIRMWARE_SETUP, $SYSTEMD_REBOOT_TO_BOOT_LOADER_MENU и $SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY. При помощи данных переменных можно подключить свои обработчики указанных фаз (/run/systemd/reboot-to-firmware-setup, /run/systemd/reboot-to-boot-loader-menu и /run/systemd/reboot-to-boot-loader-entry) или вообще отключить их (при выставлении значения в false);
  • В команду «systemctl reboot» добавлены опции »--boot-load-menu=» и »--boot-loader-entry=», позволяющие после перезагрузки выбрать конкретный пункт загрузочного меню или загрузочный режим;
  • Добавлена новая команда sandbox-изоляции «RestrictSUIDSGID=», использующая seccomp для запрета создания файлов с флагами SUID/SGID;
  • Обеспечено применение по умолчанию ограничений «NoNewPrivileges» и «RestrictSUIDSGID» в сервисах с включенным режимом динамической генерации идентификатора пользователя («DynamicUser»);


  • Применяемая по умолчанию в .link-файлах настройка MACAddressPolicy=persistent изменена для охвата большего числа устройств. Интерфейсы сетевых мостов, туннелей (tun, tap) и агрегированных линков (bond) не идентифицируют себя кроме как по имени сетевого интерфейса, поэтому данное имя теперь используется в качестве основы для привязки MAC и IPv4-адресов. Кроме того, добавлена настройка «MACAddressPolicy=random», которую можно использовать для привязки MAC и IPv4-адресов к устройствам в случайном порядке;
  • Генерируемые через systemd-fstab-generator юнит-файлы ».device» теперь не включают соответствующие юниты ».mount» в качестве зависимостей в секции «Wants=». Простое подключение устройства теперь не приводит к автоматическому запуску юнита для монтирования, но подобные юниты по-прежнему могут запускаться по другим причинам, например, как часть local-fs.target или как зависимость от других юнитов, зависимых от local-fs.target;
  • В команды «networkctl list/status/lldp» добавлена поддержка масок (»*» и т.п.) для отсеивания определённых групп сетевых интерфейсов по части их имени;
  • Переменная окружения $PIDFILE теперь устанавливается с использованием абсолютного пути, настроенного в сервисах через параметр «PIDFile=;
  • В число резервных DNS-серверов, используемых если явно не определён основной DNS, добавлены публичные серверы Cloudflare (1.1.1.1). Для переопределения списка резервных DNS-серверов можно использовать опцию »-Ddns-servers=»;
  • При определении контроллера USB-устройства (USB Device Controller) обеспечен автоматический запуск нового обработчика usb-gadget.target (когда система работает на периферийном устройстве USB);
  • Для unit-файлов реализована настройка «CPUQuotaPeriodSec=», определяющая период времени, относительно которого измеряется квота на процессорное время, задаваемая через настройку «CPUQuota=»;
  • Для unit-файлов реализована настройка «ProtectHostname=», запрещающая сервисам изменять информацию об имени хоста, даже при наличии соответствующих полномочий;
  • Для unit-файлов реализована настройка «NetworkNamespacePath=», позволяющая привязать пространство имён к сервисам или socket-юнитам через указание пути к файлу пространства имён в псевдо-ФС /proc;
  • Добавлена возможность отключение подстановки переменных окружения процессам запускаемым при помощи настройки «ExecStart=» через добавление символа »:» перед командой запуска;
  • Для таймеров (юниты .timer) предложены новые флаги «OnClockChange=» и «OnTimezoneChange=», при помощи которых можно управлять вызовом юнита при изменении системного времени или часового пояса;
  • Добавлены новые настройки «ConditionMemory=» и «ConditionCPUs=», определяющие условия вызова юнита в зависимости от размера памяти и числа ядер CPU (например, ресурсоёмкий сервис можно запускать только если имеется необходимый объем ОЗУ);
  • Добавлен новый юнит time-set.target, принимающий локально установленное системное время, без использования сверки с внешними серверами точного времени при помощи юнита time-sync.target. Новый юнит может быть использован сервисами, которым достаточно точности не синхронизированных локальных часов;
  • В «systemctl start» и подобные команды добавлена опция »--show-transaction», при указании которой выводится сводка о всех работах, добавленных очередь из-за запрошенной операции;
  • В systemd-networkd реализовано определение нового состояния 'enslaved', используемое вместо 'degraded' или 'carrier' для сетевых интерфейсов, входящих в состав агрегированных линков или сетевых мостов. Для первичных интерфейсов в случае проблем с одним из составных линков добавлено состояние 'degraded-carrier';
  • В юниты .network добавлена опция «IgnoreCarrierLoss=» для сохранения сетевых настроек в случае обрыва связи;
  • Через настройку «RequiredForOnline=» в юнитах .network теперь можно задать минимально допустимое состояние линка, необходимое для перевода сетевого интерфейса в «online» и срабатывания обработчика systemd-networkd-wait-online;
  • В systemd-networkd-wait-online добавлена опция »--any» для ожидания готовности любого из указанных сетевых интерфейсов вместо всех, а также опция »--operational-state=» для определения состояния линка, свидетельствующего о готовности;
  • В .network юниты добавлены настройки «UseAutonomousPrefix=» и «UseOnLinkPrefix=», которые можно использовать для игнорирования префиксов при получении анонса от маршрутизатора IPv6 (RA, Router Advertisement);
  • В .network юниты добавлены настройки «MulticastFlood=», «NeighborSuppression=» и «Learning=» для изменения параметров работы сетевого моста, а также настройка «TripleSampling=» для изменения режима TRIPLE-SAMPLING виртуальных интерфейсов CAN;
  • В .netdev юниты добавлены настройки «PrivateKeyFile=» и «PresharedKeyFile=», при помощи которых можно указать закрытый и разделяемый (PSK) ключи для интерфейсов WireGuard VPN;
  • В /etc/crypttab добавлены опции same-cpu-crypt и submit-from-crypt-cpus, управляющие поведением планировщика при миграции между ядрами CPU работ, связанных с шифрованием;
  • В systemd-tmpfiles обеспечена обработка файла блокировки перед выполнением операций в каталогах со временными файлами, что позволяет на время выполнения определённых действий отключить работу по чистке устаревших файлов (например, при распаковке tar-архива в /tmp могут быть раскрыты очень старые файлы, которые нельзя удалять до окончания действия с ними);
  • В команде «systemd-analyze cat-config» обеспечена возможность анализа конфигурации, разнесённой на несколько файлов, например, пользовательские и системные преднастройки, содержимое tmpfiles.d и sysusers.d, правила udev и т.п.
  • В «journalctl» добавлена опция »--cursor-file=» для определения файла для загрузки и сохранения указателя позиции;
  • В systemd-detect-virt добавлено определение гипервизора ACRN и подсистемы WSL (Windows Subsystem for Linux) для последующего ветвления при помощи условного оператора «ConditionVirtualization»;
  • Во время установки (выполнении «ninja install») прекращено создание в /etc символических ссылок на systemd-networkd.service, systemd-networkd.socket, systemd-resolved.service, remote-cryptsetup.target, remote-fs.target, systemd-networkd-wait-online.service и systemd-timesyncd.service. Для создания данных файлов теперь необходимо выполнить команду «systemctl preset-all».

© OpenNet