Выпуск системного менеджера 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;
- Во все настройки, которые воспринимают значения с процентами, вместо символа '%' теперь можно использовать также знак '&8240;';
- В обрабатываемый при помощи 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" продолжает работать после выхода пользователя (позволяет повысить производительность при быстром повторном входе);