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

После полугода разработки Леннарт Поттеринг представил релиз системного менеджера systemd 240. Из новшеств можно отметить добавление нового типа сервисов «exec», возможность использования в systemd-resolved OpenSSL помимо GnuTLS, для генерации не требующих надёжности случайных чисел задействована инструкция RDRAND вместо /dev/urandom, добавлена поддержка сетевых туннелей Foo-Over-UDP, ERSPAN и ISATAP, реализованы утилиты systemd-id128 и systemd-run-generator, обеспечена официальная поддержка утилиты portablectl, добавлена команда «systemd-analyze security».

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

  • Добавлен новый тип сервисов «Type=exec», похожих на сервисы с типом «simple», но обеспечивающих ожидание завершения выполнения fork () и execve () при вызове основного исполняемого файла перед продолжением обработки следующих юнитов. Новый тип может оказаться полезным когда требуется обработка ошибок при запуске, например, если в сервисе директива ExecStart указывает на несуществующий исполняемый файл, при использовании типа simple запуск юнита будет посчитан успешным (ошибка не видна на этапе форка и управление будет передано далее, не дожидаясь результата execve). При типе «exec» будет выявлен сбой запуска подобного юнита и возвращён соответствующий код ошибки. В следующем выпуске планируется использовать тип «exec» по умолчанию в утилите systemd-run при запуске временных («transient») сервисов;
  • В systemd-resolved добавлена возможность использования OpenSSL вместо GnuTLS для обеспечения работы DNS-over-TLS;
  • На системах x86–64 в ситуациях, когда не требуется криптостойкие и непредсказуемые случайные числа, вместо /dev/urandom обеспечен вызов процессорной инструкции RDRAND. Данное изменение позволяет снизить число запросов энтропии от ядра в процессе инициализации (для генерации UUID по-прежнему используется полноценный генератор псевдослучайных чисел ядра); добавлена поддержка сетевых туннелей Foo-Over-UDP, ERSPAN и ISATAP,
  • В systemd-networkd добавлена поддержка сетевых туннелей Foo-Over-UDP, ERSPAN и ISATAP, а также добавлена опция ForceDHCPv6PDOtherInformation для принудительной установки бита «Other Information» в сообщениях IPv6 RA. Для совмещённых сетевых интерфейсов добавлены опции AdActorSystemPriority, AdUserPortKey и AdActorSystem для настройки различных параметров 802.3ad, а также опция DynamicTransmitLoadBalancing для динамической балансировки потоков. Для сетевых туннелей добавлена опция IPv6RapidDeploymentPrefix для настройки функциональности IPv6 RD (Rapid Deployment). В наборы правил добавлены опции IPProtocol, SourcePort, DestinationPort и InvertRule. Для сетевых мостов предложена новая опция MulticastToUnicast. Добавлена поддержка определения статических привязок для IPv4 ARP и доступных соседних хостов для IPv6;
  • Добавлена утилита systemd-id128 для определения и генерации различных 128-битных идентификаторов;
  • Обеспечена официальная поддержка команды portablectl, которая перемещена в каталог /usr/bin/. Команда предоставляет средства для управления переносимыми сервисами («Portable Services»), позволяющими создавать системные сервисы в виде самодостаточных контейнеров (переносимый сервис поставляется в виде системного образа, но обрабатывается как обычный сервис);
  • Добавлена базовая поддержка счётчиков загрузки, которая потенциально позволяет реализовать схемы загрузки, в которых в случае сбоя новой загрузочной записи автоматически выбирается старая загрузочная запись. На стороне загрузка указанная функциональность пока добавлена только в sd-boot;
  • Добавлен новый генератор «systemd-run-generator», позволяющий синтезировать юниты на основе параметров, переданных в командной строке при загрузке ядра. Генератор удобно использовать при запуске контейнеров, например, «systemd-nspawn -i someimage.raw -b systemd.run='some command line'»;
  • Добавлена команда «systemd-analyze security» для анализа связанных с безопасностью и изоляцией настроек в системных юнитах;
  • Ключи для доступа к зашифрованным дисков теперь могут размещаться на внешних носителях и подключаться по UUID из /etc/crypttab. В /etc/crypttab также добавлена опция «sector-size» для настройки размера сектора для зашифрованных разделов;


  • Для всех длительно работающих сервисов выставлен запрет на получение новых привилегий (NoNewPrivileges=yes, для работы требуется обновление правил SELinux);
  • Сервисы systemd-networkd.service, systemd-resolved.service и systemd-timesyncd.service по умолчанию возвращены на работу под заранее определёнными системными пользователями (в прошлой версии была включена настройка DynamicUser=yes для работы с использованием динамически генерируемого идентификатора пользователя);
  • Для загрузки юнитов, на которые указывают символические ссылки из каталога .wants/ или .requires/, теперь необходимо, чтобы файл юнита также находился в одном из штатных мест размещения, перечисленных в списке путей для поиска юнитов;
  • Изменён выставляемый по умолчанию ядром Linux лимит на максимальное число файловых дескрипторов для пользовательских процессов (RLIMIT_NOFILE). Начиная с данного выпуска жёсткий лимит на число файловых дескрипторов поднят с 4096 до 512K, Мягкий лимит, который может быть увеличен из самого приложения, оставлен неизменным (1024 дескриптора). Жёсткий лимит повышен так как недавние оптимизации в ядре Linux существенно увеличили производительность манипуляций с большим числом файловых дескрипторов и снизили потребление памяти. Изменение также отражено в sysctl fs.nr_open и fs.file-max, которые теперь автоматически выставляются в максимально возможное значение (RLIMIT_NOFILE soft и RLIMIT_NOFILE hard);
  • В случае отсутствия файла /etc/locale.conf systemd теперь по умолчанию использует локаль «C.UTF-8» и устанавливает переменную окружения LANG в значение «C.UTF-8»;
  • Значение sysctl «net.ipv4.conf.all.rp_filter» теперь по умолчанию выставляется в значение 2 (устанавливается режим Loose вместо Strict), что более приемлемо для хостов с несколькими сетевыми линками, маршрутизируемыми через одну сеть (например, когда клиент одновременно подключен через Wi-Fi и Ethernet);
  • Добавлена директива DisableControllers для отключения отдельных контроллеров cgroup;
  • Для юнитов реализованы новые свойства MemoryMin и IODeviceLatencyTargetSec, которые активируют для запускаемых процессов средства контроля потребления памяти и ожидания ввода/вывода, обеспечиваемые атрибутами cgroups v2 memory.min и io.latency;
  • В journald при обработке логов от классического BSD syslog реализовано сохранение оригинальной строки с временем события, что позволяет корректно реконструировать оригинальные сообщения;
  • В директивы StandardOutput и StandardError добавлен параметр «append:», позволяющий прикрепить STDOUT/STDERR вывод от сервиса к определённому файлу в режиме дополнения уже имеющегося в нём содержимого;
  • Добавлена настройка KillSignal, позволяющая переопределить сигнал, отправляемый процессам при завершении работы unit-файлов (ранее всегда отправлялся SIGKILL).
  • Значение переменной окружения XDG_SESSION_DESKTOP теперь может выставляться при помощи опции «desktop=» в строке аргументов pam_systemd;
  • Во все настройки, которые воспринимают значения с процентами, вместо символа '%' теперь можно использовать также знак '‰';
  • В обрабатываемый при помощи systemd-resolved файл конфигурации resolved.conf добавлена опция «ReadEtcHosts», которую можно использовать для отключения обработки содержимого /etc/hosts;
  • В команду «systemctl is-system-running» добавлена опция »--wait», позволяющая дождаться завершения процесса запуска системы;
  • Прекращена поддержка udev-компонента «collect», который остался без сопровождения и не получил практического применения;
  • При формировании пути с использованием настроек RuntimeDirectory, StateDirectory, CacheDirectory, LogsDirectory и ConfigurationDirectory для процессов теперь выставляются соответствующие переменные окружения RUNTIME_DIRECTORY, STATE_DIRECTORY, CACHE_DIRECTORY, LOGS_DIRECTORY и CONFIGURATION_DIRECTORY;
  • Режим предсказуемого наименования сетевых интерфейсов теперь применяется и для адаптеров InfiniBand (используется префикс «ib»);
  • Для игнорирования ошибок при обработке строк в tmpfiles.d/ теперь может применяться префикс '-';
  • Обеспечена возможность использования файлов .link для добавления настроек, эквивалентных командам «ethtool advertise»;
  • В файл /etc/os-release добавлены новые поля DOCUMENTATION_URL и LOGO;
  • В файл конфигурации systemd-sleep.conf добавлены новые опции AllowSuspend, AllowHibernation, AllowSuspendThenHibernate и AllowHybridSleep для управления включением соответствующих опций спящего режима;
  • В bootctl добавлены новые команды «set-default» и «set-oneshot» для установки элемента загрузки по умолчанию или только для следующей загрузки;
  • В busctl добавлены опции »-j» и »--json» для вывода в формате JSON;
  • В режиме JSON-вывода в утилите journalctl добавлена поддержка цветной подсветки вывода, а также режим «json-seq» (RFC7464);
  • В systemd-logind добавлена новая директива UserStopDelaySec (по умолчанию выставлена в 10 секунд), которая может указываться в logind.conf. Директива определяет задержку, в течение которой «systemd --user» продолжает работать после выхода пользователя (позволяет повысить производительность при быстром повторном входе);

© OpenNet