Релиз systemd 235
После трех месяцев разработки доступен релиз системного менеджера systemd 235. Из новшеств можно отметить прекращение поддержи сборочных сценариев на основе Automake, агрессивное кэширование метаданных в systemd-journald, возможность учета трафика и разграничения сетевого доступа для юнитов, расширенные средства фильтрации системных вызовов, доведение до пригодного к использованию вида системы динамического выделения идентификаторов пользователя для сервисов.
Основные изменения:
- Прекращена поддержка сборочных сценариев на основе Automake. В качестве системы сборки теперь предлагается только система Meson, использующая инструментарий Ninja;
- Для unit-файлов представлены опции RuntimeDirectory и RuntimeDirectoryPreserve, позволяющие переопределить путь к runtime-каталогу (в иерархии /run или $XDG_RUNTIME_DIR) и поведения в отношении сохранения его содержимого после остановки unit-а;
- По аналогии с RuntimeDirectory для unit-ов представлены опции StateDirectory, CacheDirectory, LogsDirectory и ConfigurationDirectory, позволяющие вынести данные состояния, кэша, логов и настроек в отдельные подкаталоги в иерархиях /var/lib/, /var/cache/, /var/log/ и /etc, содержимое которых сохранится между запусками сервиса. Дополнительно добавлены вспомогательные пары опций, определяющие режим доступа к каталога - StateDirectoryMode, CacheDirectoryMode, LogsDirectoryMode, ConfigurationDirectoryMode.
Новые опции удобно использовать вместе с режимом DynamicUser=yes для отделения компонентов сервисов c небольшим жизненным циклом. В режиме DynamicUser при каждом запуске подобного сервиса создается новый пользователь с идентификатором из диапазона 61184..65519, действующий только на время работы сервиса и удаляемый после остановки сервиса. Опции [State|Cache|Logs|Configuration]Directory позволяют вынести данные сервиса в отдельные каталоги и обеспечить сохранность данных между разными запусками сервиса. Опции [State|Cache|Logs|Configuration]DirectoryMode позволяют при запуске сервиса настроить корректные права доступа для динамически созданного пользователя. - В поставку добавлен файл для modprobe.d, обеспечивающий переопределение параметров модуля bonding для корректного управления интерфейсом bond0 из systemd-networkd;
- В journald.conf добавлена включенная по умолчанию настройка ReadKMsg, управляющая чтением лога ядра в systemd-journald, а также опция LineMax для задания максимального размера строки при выводе логов через STDOUT/STDERR;
- В systemd-journald реализовано агрессивное кэширование метаданных из /proc/ (UID/GID/PID/SELinux), что позволило увеличить производительность записи логов при большой нагрузке. Так как метаданные читаются в асинхронном режиме, их состояние может немного запаздывать относительно выводимых в лог записей;
- В unit-ы добавлена опция IPAccounting, при включении которой для сервиса добавляются счетчики с данными о трафике и числе пакетов. Данные о трафике можно посмотреть через "systemctl status" или "systemd-run --wait";
- Обеспечено сохранение в логе сведений о потреблении ресурсов CPU и трафике. Запись создается при каждой остановке юнита, если включены опции CPUAccounting или IPAccounting;
- В unit-ы добавлены опции IPAddressAllow и IPAddressDeny для встраивания списка разрешенных и запрещенных IP-адресов и подсетей, формируя простую систему контроля доступа (органичения применяются как для входящего трафика, так и для исходящего). Возможность также доступна для файлов.slice и.socket, что позволяет вносить ограничения для групп сервисов и обработчиков сокетов;
- В nss-myhostname/systemd-resolved по умолчанию обеспечена генерация DNS-записей A/AAAA для хоста "_gateway" вместо ранее применяемого имени "gateway", так как оно используется для внутренних нужд некоторых дистрибутивов (старое поведение можно вернуть во время сборки);
- В systemd-networkd представлена серия новых настроек, задаваемых через файлы.network: Scope (область достижимости) в секции [Address], ConfigureWithoutCarrier (игнорировать статус линка при настройке) в секции [Network], Anonymize (включение опций анонимного профиля RFC 7844) в секции [DHCP], Type (определение спецмаршрутов для направления трафика в blackhole/unreachable/prohibit) в секции [Route]. Добавлена новая секция [RoutingPolicyRule] для задания правил маршрутизации;
- В файлы.netdev добавлены опции: Table в секции [VRF] для выбора используемой таблицы маршрутизации, Independent в секции [Tunnel] для настройки туннеля независимо от связанного с ним сетевого интерфейса, GroupForwardMask в секции [Bridge] для настройки распространение локальных сетевых кадров между портами сетевого моста;
- В файлах.link добавлены новые режимы работы опции WakeOnLan, добавлена настройка TCP6SegmentationOffload для включения аппаратного ускорения обработки сегментов TCP/IPv6;
- В реализацию сервера для анонса маршрутов IPv6 (Router Advertisment) добавлена поддержка отправки записей RDNSS и RDNSSL для передачи настроек DNS;
- В systemd-nspawn добавлен флаг "--system-call-filter" для добавления и удаления элементов из применяемого по умолчанию фильтра системных вызовов. Реализована возможность определения белых списков системных вызовов с запретом всех остальных (ранее предлагались черные списки);
- Добавлены новые фильтры групп системных вызовов: @aio, @sync, @chown, @setuid, @memlock, @signal и @timer, которые можно указывать через опцию SystemCallFilter или флаг "--system-call-filter";
- В опцию ExecStart для unit-файлов добавлены два новых модификатора: При указании префикса "!" команда запускается без смены индентификатора пользователя/группы (без вызова setuid/setgid/setgroups). Второй модификатор "!!" идентичен "!" за исключением того, что его действие игнорируется на системах с поддержкой наследования расширенных прав (capabilities PR_CAP_AMBIENT, появились в ядре 4.3);
- В systemd-run добавлен флаг "--pipe", при котором в вызываемый сервис systemd передаются файловые дескрипторы на STDIN/STDOUT/STDERR, что позволяет использовать его в цепочке с другими утилитами в shell с передачей данных через неименованные каналы;
- Для каждого сервиса обеспечено поддержание счетчик перезапусков, который можно посмотреть командой "systemctl show -p NRestarts сервис".
- Для unit-файлов реализована новая опция LockPersonality, позволяющая на лету привязать сервис к выбранному домену выполнения;
- Добавлен новый целевой юнит для пользовательских сеансов: "getty-pre.target", который выполняется до консольного входа в систему;
- Для увеличения качества энтропии в генераторе псевдослучайных числе systemd теперь при запуске каждого виртуального окружения пытается загрузить модуль ядра virtio-rng.ko;
- В /etc/crypttab обеспечена возможность применения опции _netdev, по аналогии с /etc/fstab, для организации настройки шифрованных устройств после запуска сети; Для подключения внешних обработчиков в cryptsetup.target добавлено два целевых юнита remote-cryptsetup-pre.target и remote-cryptsetup.target, решающих те же задачи, что remote-fs.target и remote-fs-pre.target в local-fs.target;
- В сервисы добавлена опция UnsetEnvironment, позволяющая убрать любую переменную окружения, которая в обычных условиях будет передана сервису;
- Команды "systemctl poweroff", "systemctl reboot", "systemctl halt", "systemctl kexec" и "systemctl exit" теперь всегда выполняются в асинхронном режиме, т. е. сразу возвращают управление, не дожидаясь фактического завершения операции;
- В systemd-resolve добавлен флаг "--reset-server-features", при указании которого очищаются и перезапрашиваются ранее полученные сведения о возможностях вышестоящих DNS-серверов. Отправка данных в лог теперь включает сведения о всех используемых DNS-серверах.