Выпуск systemd 215 с поддержкой генерации содержимого /etc и встроенным DHCP-сервером
Леннарт Поттеринг (Lennart Poettering) представил выпуск системного менеджера systemd 215, в котором реализованы идеи по динамической генерации содержимого /etc для обеспечения работы систем, не сохраняющих своё состояние (stateless). Кроме того, реализована поддержка сброса настроек в первоначальное «заводское» состояние, добавлена утилита systemd-sysusers, в networkd появился встроенный DHCP-сервер. Systemd сочетает в себе функции системы инициализации, механизм для контроля за выполнением фоновых процессов, службу для журналирования событий и средства для управления сервисами, сеансами пользователей и подключаемыми устройствами. Для определения параметров сервисов в Systemd используется набор конфигурационных unit-файлов, вместо оформления сценариев запуска в виде shell-скриптов. Система нацелена на интенсивную параллелизацию выполнения сервисов на этапе загрузки системы, вобрав в себя лучшие черты таких систем, как launchd (Mac OS X), SMF (Solaris) и Upstart (Ubuntu, старые версии Fedora). В настоящее время на использование systemd уже перешли такие дистрибутивы, как Fedora, openSUSE, Mandriva и Arch Linux, одобрен переход дистрибутивов Debian и Ubuntu по умолчанию на systemd.
Наиболее существенные изменения:
Продолжена работа по предоставлении средств для создания stateless-систем, не сохраняющих своё состояние после перезапуска. В дополнение к появившимся в прошлом выпуске механизмам для автоматической генерации структуры раздела /var, в systemd 215 подобная функциональность реализована для раздела /etc. Система теперь может быть загружена без предварительно подготовленной директории /etc, содержимое которой может быть на лету сгенерировано во время загрузки и размещено в разделе Tmpfs. Указанный подход позволяет упростить запуск множества типовых экземпляров контейнера на основе одного базового образа директории /usr и не заботиться об их изоляции друг от друга. Содержимое /etc формируется на основе шаблонов. Типовые системные пользователи и группы определяются в каталоге /usr/lib/sysusers.d/. Для формирования содержимого /etc/passwd и /etc/group на основе /usr/lib/sysusers.d/ представлена новая утилита systemd-sysusers. В systemd-tmpfiles расширены возможности по копированию в новый раздел файлов и директорий — второй аргумент в строках с типом операции «L», «L+», «C» и «C+», определяющий источник копирования данных, теперь не является обязательным. Если источник не указан, то systemd-tmpfiles предпримет попытку копирования заданного файла из директории /usr/share/factory/. Добавлена поддержка директивы «L+» для создания симлинков, которая отличается от «L» удалением уже существующего файла.
Одним из следствий подобных нововведений является предоставление поддержки сброса конфигурации к заводским настройкам. В системах, содержимое /etc в которых сгенерировано автоматически, но в которых не применяется очистка /etc после каждой перезагрузки (например, прошивки для маршрутизаторов или медиацентров), в случае возникновения проблем с настройками, пользователь имеет возможность привести конфигурацию к изначальному виду, заново воссоздав её из шаблонов. Кроме того, стало проще проследить какие были внесены изменения по сравнению с изначальной конфигурацией.
Добавлен новая условная директива «ConditionNeedsUpdate=», которая позволяет инициировать запуск сервисов только при условии, когда состояние /etc или /var старее чем /usr. Подобное необходимо для организации автоматического обновления содержимого динамически сформированных директорий /etc или /var в условиях обновления /usr. Например, подобная синхронизация необходима в ситуациях, когда контейнеры сформированы на базе единого образа /usr, который был обновлён вендором. «ConditionNeedsUpdate=» позволяет организовать запуск сервисов, которые сами обновят конфигурацию при загрузке с новым /usr. «ConditionNeedsUpdate=» также можно использовать для обеспечения одноразового запуска сервисов после инициирования сброса к заводским настройкам. Из сервисов, подготовленных для использования с «ConditionNeedsUpdate=», отмечаются systemd-sysusers и службы перестроения базы udev, каталога journald и кэша ldconfig; В systemd-networkd добавлена реализация простого сервера DHCPv4, в дополнение к ранее присутствовавшей реализации клиента DHCP. Код DHCP-клиента расширен поддержкой DHCPv6 и IPv6 Router Solicitation, а также возможностью получения статических маршрутов от DHCP-сервера Секция конфигурации »[DHCPv4]» переименована в »[DHCP]» и теперь совместно используется для DHCPv6 и DHCPv4; В systemd-networkd добавлена поддержка сетевого интерфейса vxlan для создания виртуальных расширяемых локальных сетей (Virtual Extensible LAN), используемых для туннелирования виртуализированных сетей второго уровня поверх сетей третьего уровня (VXLAN позволяет обойти ограничение на 4096 VLAN-ов за счёт использования 24-разрядных идентификаторов). Также реализована поддержка туннелей tun/tap и dummy-устройств; В systemd-networkd обеспечена возможность автоматического выделения диапазонов адресов для сетевых интерфейсов из общесистемного пула адресов. Указанная возможность позволяет организовать динамическое управление большим числом интерфейсов на основе одного файла конфигурации. Например, можно достаточно просто назначать IP-адреса виртуальным интерфейсам veth для большого числа работающих изолированных контейнеров; В утилиту coredumpctl добавлен параметр «info» для вывода детальной информации о заданном coredump-файле, опция »-1» для показа только данных о самом свежем coredump-е. Так как утилита может оказаться полезной для обычных пользователей, отныне она поставляется без префикса «systemd-». Сервис systemd-coredump теперь автоматически генерирует и сохраняет в журнал трассировки стека для всех coredump-ов, используя для этого библиотеку libdw. Кроме записи дампов coredump в журнал теперь поддерживается их сохранение в директорию на диске /var/lib/systemd/coredump, при этом данный режим отныне используется по умолчанию. Для управления конфигурацией systemd-coredump представлен отдельный файл /etc/systemd/coredump.conf; В journald значение по умолчанию настройки «SplitMode=» изменено на «uid», что позволяет непривилегированным пользователям просматривать информацию о своих coredump-ах при помощи утилиты coredumpctl; Добавлена новая системная группа «input», назначаемая для всех файлов устройств ввода (по аналогии с группами «audio» и «video»); Устройства /dev/loop-control и /dev/btrfs-control теперь принадлежат группе «disk», что позволяет обращаться к ним членам данной группы; Файл /etc/os-release перемещён в /usr/lib/os-release, в /etc/ оставлена символическая ссылка. Перенос обусловлен тем, что версия ОС больше относится к состоянию /usr, чем к состоянию файлов конфигурации в /etc; Добавлена команда «systemctl preset-all» позволяющая применить преднастройки сервисов для всех установленных unit-файлов; Добавлена команда systemctl is-system-running» для проверки общего состояния системы, например, для оценки полностью ли загрузилась ОС; Добавлена поддержка новых опций командной строки ядра Linux: «systemd.wants=» для вызова дополнительных unit-ов при загрузке, «systemd.mask=» для скрытия юнитов при загрузке, «systemd.debug-shell» для запуска отладочной консоли на tty9; В systemd-nspawn по умолчанию активирован фильтр системных вызовов для контейнеров, блокирующий обращение к syscall, через которые можно загрузить модуль ядра, получить прямой доступ к портам ввода/вывода, управлять разделом подкачки и использовать kexec. В частности, фильтром закрывается недавно выявленная уязвимость в docker, позволяющая обращаться к файлам через манипуляции с inode. В systemctl расширены возможности опции »-H», которая теперь позволяет не только обращаться к удалённым хостам с systemd, но и подсоединяться к контейнерам на заданном хосте. Например, «systemctl -H root at foobar: waldi» позволяет пройдя аутентификацию подключиться под пользователем root к контейнеру waldi на сервере foobar.
© OpenNet