Релиз systemd 233


После четырёх месяцев разработки сформирован выпуск системного менеджера systemd 233. Из новшеств можно отметить перенос правил DBus из /etc в /usr, добавление генератора переменных окружения, задействование гибридного режима настройки cgroup, поддержка MulticastDNS, новые опции монтирования в fstab, поддержка автоматической настройки для монтирования разделов LUKS и Verity, возможность сохранения backtrace при записи core-дампов.

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

-Правила DBus теперь устанавливаются в иерархию /usr, а не в /etc. Для переопределения каталога следует использовать опцию "--with-dbuspolicydir=";
-Все поставляемые в составе systemd скрипты на языке Python (в основном это тестовые сценарии) теперь требуют для своей работы наличия Python 3;
-В .network-файлы systemd-networkd добавлены новые параметры: В секцию "[DHCP]" добавлен параметр "ListenPort=", позволяющий явно указать UDP-порт для приёма запросов DHCP-клиентом. Добавлен параметр "Unmanaged=" для вывода интерфейсов из управления systemd-networkd. Добавлен параметр "IPv6ProxyNDPAddress=" для настройки адреса NDP Proxy для IPv6. Добавлены опции "ActiveSlave=" и "PrimarySlave=" для определения приоритетов при агрегировании сетевых интерфейсов. В блоге "[Match]" обеспечена возможность задания исключений (логическое "нет");
-В /etc/fstab добавлены новые опции монтирования, специфичные для systemd: x-systemd.mount-timeout для ограничения максимального времени выполнения команды монтирования;
-x-systemd.device-bound для создания директории для монтирования при появлении устройства (при отключении устройства, точка монтирования будет удалена);
- x-systemd.after и x-systemd.before для явного задания порядка монтирования (можно определить за или перед каким unit-ом или точкой монтирования следует выполнить монтирование текущего раздела);
-В таймерах (.timer unit) добавлена возможность указания времени относительно конца месяца через использование разделителя "~" вместо "-" между днём и месяцем. Например, "*-02~03" приведёт к срабатыванию таймера за три дня до конца февраля. Также добавлен альтернативный синтаксис определения повторяющихся событий, например, "9..17/2:00" - запускать каждые два часа с 9 до 17 часов;
-Режим настройки cgroup теперь может выбираться на этапе загрузки через передачу ядру параметров "systemd.unified_cgroup_hierarchy=" и "systemd.legacy_systemd_cgroup_controller=", а также при компиляции через опцию "--with-default-hierarchy=". По умолчанию выставляется гибридный режим (устанавливается значение "hybrid"), но в будущем ожидается переход на унифицированную иерархию cgroups-v2 (groups-v2, значение "unified"). Для включения классического режима (cgroups-v1) следует использовать значение "legacy". Дистрибутивам рекомендовано начиная с systemd 233 выставлять режим "hybrid" для релизов, "unified" для экспериментальных сборок (например, для Fedora rawhide) и "legacy" для достижения наилучшей совместимости и стабильности;
-Гибридный режим настройки cgroup (смесь cgroups-v2 и cgroups-v1) модифицирован для улучшения совместимости с классическими конфигурациями cgroups-v1. Состав /sys/fs/cgroup приближен к классической иерархии cgroups-v1, включая наличие /sys/fs/cgroup/systemd. Из ограничений гибридного режима по сравнению с унифицированной иерархией отмечается невозможность миграции процессов между двумя отделёнными поддеревьями cgroup для непривилегированных экземпляров systemd, запущенных в режиме "--user", даже если оба поддерева принадлежат одному пользователю (например, "systemd-run --user --scope" не будет работать при вызове вне текущего контекста "systemd --user");
-В systemd-nspawn добавлена возможность автоматической настройки шифрованных разделов LUKS и верифицированных разделов Verity - когда контейнер загружается с шифрованного раздела будет запрошен пароль доступа, а когда с раздела Verity будет осуществлён поиск файла ".roothash" с проверочным хэшем;
-В systemd-fstab-generator добавлена проверка загрузки ядра с параметром "systemd.volatile=", что позволяет реализовать для обычных загрузок аналог режима "--volatile" в systemd-nspawn, позволяющем загрузить систему без предварительно подготовленных директорий /etc и /var. Корневой раздел с этими директориями будет создан на лету в tmpfs, а из системных разделов примонтирован только /usr (если указать "systemd.volatile=state", то будет использован обычный корневой раздел, а в tmpfs будет примонтирован только /var);
-В unit-файлы добавлена новая опция "RootImage=", похожая на "RootDirectory=", но монтирующая директорию из заданного образа вместо использования существующей директории;
-В unit-файлы добавлена опция "MountAPIVFS=", осуществляющая монтирование /proc, /sys и /dev ("API VFS") для сервиса;
-В coredumpctl добавлена опция "--reverse" для вывода списка core-дампов в обратном порядке и возможность показа дампов, созданных в определённый промежуток времени (опции "--since=" и "--until="). В coredumpctl также обеспечен вывод дополнительной информации об обрезанных, недоступных и сохраняемых в данный момент core-дампах. В systemd-coredump добавлены средства для выполнения обратной трассировки (backtrace) для крахов процессов интерпретируемых языков, например, для скриптов на Python;
-Добавлена опциональная возможность запуска исполняемых файлов для генерации переменных окружения на стадии загрузки конфигурации, что может быть использовано для добавления переменных окружения для запускаемых сервисов. По умолчанию поставляется генератор переменных окружения, использующих значения из каталогов /etc/environment.d и ~/.config/environment.d/;


-Реализована возможность обособленного запуска unit-тестов, не требующая наличия исходных текстов systemd и сборочного окружения. Тесты устанавливаются в каталог /usr/lib/systemd/tests/ и запускаются командой 'make install-tests';
-Начиная с выпуска 233 для работы systemd в ядре Linux должны быть включены опции CONFIG_CRYPTO_USER_API_HASH, CONFIG_CRYPTO_HMAC и CONFIG_CRYPTO_SHA256;
В unit-файлах прекращена поддержка спецификаторов "%c", "%r" и "%R";
При вызове службы debug-shell.service в качестве командной оболочки по умолчанию теперь всегда используется /bin/sh. Для настройки другой оболочки, например, /sbin/sushell, можно использовать сборочную опцию "--with-debug-shell=";
-Изменён список вариантов действий, выводимых при необходимости подтверждения запуска команды:

(c)ontinue, proceed without asking anymore
(D)ump, show the state of the unit
(f)ail, don't execute the command and pretend it failed
(h)elp
(i)nfo, show a short summary of the unit
(j)obs, show jobs that are in progress
(s)kip, don't execute the command and pretend it succeeded
(y)es, execute the command
-Вариант "n" (No) удалён, чтобы не вводить в заблуждение. Свою реализацию диалога можно можно настроить через параметр "systemd.confirm_spawn=";
-Для сервисов, которые не смогли корректно запуститься из-за сбоя, теперь всегда вызывается команда "ExecStopPost=" (раньше сервис оставался в состоянии "failed" без запуска команд остановки);
-Добавлена реализация MulticastDNS, включаемая командой "MulticastDNS=yes";
-В systemd-analyze добавлена команда "syscall-filter", позволяющая увидеть, какие группы системных вызовов определены в настройках unit-файлов (SystemCallFilter);
-Добавлены новые группы системных вызовов: "@filesystem", охватывающая системные вызовы, связанные с работой файловых систем; "@reboot" для вызовов, связанных с перезагрузкой и завершением работы; "@swap" для системных вызовов для настройки раздела подкачки;
-Добавлена новая опция unit-файлов "RestrictNamespaces=", предназначенная для ограничения доступа к различным типам пространствам имён, например, можно запретить создание дополнительных пространств имён для сетевых операций, файловой системы и идентификаторов пользователей для снижения риска эксплуатации уязвимостей, связанных с пространствами имён;
-В .link-файлы systemd-udev добавлен параметр "AutoNegotiation=" для настройки автоматического согласования линка для Ethernet;
-В команду "systemctl list-jobs" добавлены опции "--after" и "--before";
-В systemd-nspawn реализована возможность сочетания опций "--ephemeral" и "--image" для загрузки одноразовых контейнеров из заданного образа;
-В systemd-socket-proxyd добавлен параметр "--connections-max" для настройки максимального числа одновременных соединений;
-В sd-id128 добавлен новый API для генерации уникальных идентификаторов хоста, не приводящих к утечке сведений об идентификаторе машины (machine ID);
-В блоке "NotifyAccess=" добавлена поддержка параметра "exec", при указании которого принимаются уведомления от всех процессов, запущенных systemd;
-В .nspawn-файлах добавлена возможность определения многослойных файловых систем, реализуемая через опции "Overlay=" и "OverlayReadOnly=";
-В предоставляемых в systemd-nspawn опциях "--bind и "--overlay" добавлена возможность автоматического создания временных исходных директорий в /var/tmp, которые будут удалены после завершения контейнера. Например, при указании "--overlay=+/var::/var" будет создан многослойный раздел, включающий оригинальный /var из образа контейнера, с сохранением изменений во временной директории внутри /var/tmp, которая будет очищена после завершения работы контейнера;
-В systemd-nspawn добавлена возможность указания разделов блочных устройств в опции "--image", что позволяет загрузить контейнер из существующей файловой системы, размещённой в отдельном разделе;
-Добавлен новый инструмент /usr/lib/systemd/systemd-dissect, выполняющий работу по разбору дисковых образов в соответствии с Bootable Partition Specification, по аналогии с systemd-nspawn. systemd-dissect может применяться для монтирования в локальную директорию дисковых образов со сложной раскладкой разделов (например, включающих разделы LUKS и Verity). Утилита не представлена в /usr/bin так как API пока не стабилизирован и возможно будет меняться;
-Добавлен генератор "systemd-verity-generator", созданный по аналогии с "systemd-cryptsetup-generator" и позволяющий автоматически применять Verity для проверки корневых разделов на этапе загрузки;
-В unit-файлы сервисов добавлены опции "BindPaths=" и "BindReadOnlyPaths=" для выполнения bind-монтирования произвольных путей;
Документированы все низкоуровневые переменные окружения;
-В unit-файлы с сокетами добавлена поддержка создания слушающих соектов AF_VSOCK для взаимодействия с виртуализированными окружениями QEMU;
В скрипт "configure" добавлена опция "--with-fallback-hostname=" для задания запасного имени хоста, который будет использован в случае неопределения /etc/hostname;
-В systemd-cgls добавлены опции "--unit=" и "--user-unit=", позволяющие обрабатывать только cgroups от заданных unit-ов;
-В systemd-mount добавлена опция "--umount" для отмонтирования разделов;
Запрещена полная перезагрузка конфигурации через "systemctl daemon-reload", если в системе менее 16 Мб свободного дискового пространства в каталоге /run;
-В systemd-nspawn добавлена опция "--pivot-root=", позволяющая закрепить корневую директорию для образа контейнера к заданной точке монтирования, которая сохранится, даже если оригинальный корневой раздел будет перемещён в другое место (полезно для загрузки образов ostree).