Леннарт Поттеринг (Lennart Poettering) представил выпуск системного менеджера systemd 219, в котором наиболее значительные улучшения отмечены в networkd, механизмах обеспечения работы изолированных контейнеров и поддержке подразделов и снапшотов Btrfs.
Systemd сочетает в себе функции системы инициализации, механизм для контроля за выполнением фоновых процессов, службу для журналирования событий и средства для управления сервисами, сеансами пользователей и подключаемыми устройствами. Для определения параметров сервисов в Systemd используется набор конфигурационных unit-файлов, вместо оформления сценариев запуска в виде shell-скриптов. Система нацелена на интенсивную параллелизацию выполнения сервисов на этапе загрузки системы, вобрав в себя лучшие черты таких систем, как launchd (Mac OS X), SMF (Solaris) и Upstart (Ubuntu, старые версии Fedora). В настоящее время на использование systemd уже перешли такие дистрибутивы, как Fedora, openSUSE, Mandriva и Arch Linux, одобрен переход дистрибутивов Debian и Ubuntu по умолчанию на systemd.
Наиболее существенные изменения:
- Представлен новый API "sd-hwdb.h", предоставляющий средства для обращения к БД с метаданными оборудования (udev hwdb). Старый интерфейс libudev теперь является надстройкой над sd-hwdb. Для получения информации из базы оборудования и обновления БД из командной строки добавлена новая утилита systemd-hwdb.
- При копировании файлов в процессе работы компонентов systemd внутри, для разделов Btrfs теперь применяется операция клонирования метаданных ("reflink"), без создания дубликата содержимого;
- В systemd-nspawn добавлена опция "--ephemeral" для создания одноразовых контейнеров. Возможность позволяет запустить контейнер в снапшоте Btrfs и удалить данный снапшот после завершения работы контейнера. Например, так можно поступить при проведении экспериментов, не ограничивая ФС доступом только для чтения, но не сохраняя какие-либо изменения. Другим применением может быть запуск контейнера поверх корневой ФС хост-системы без влияния на базовую систему;
- В systemd-nspawn добавлена опция "--template", позволяющая передать путь к дереву директорий, которые будут использованы в качестве шаблона для создания начинки контейнера. При использовании шаблонов директория контейнера, путь к которой передаётся через опцию "--directory", формируется на лету при первом запуска контейнера с применением возможностей файловой системы Btrfs;
- В утилиту machinectl добавлены команды "copy-from" и "copy-to" для копирования файлов из работающих контейнеров в окружение хост-системы и обратно, а также команда "bind" для монтирования директорий хост-системы в пространство локальной ФС контейнера;
- Представлен новый фоновый процесс "systemd-importd", позволяющий организовать загрузку образов контейнеров в форматах tar, raw, qcow2 и dkr и их размещение в директории /var/lib/machines для запуска через nspawn. Для проверки валидности загружаемых образов контейнеров используется GPG. Если образ поставляется в сжатом видео осуществляется его автоматическая распаковка. Для запроса образов в machinectl представлены новые команды "pull-tar", "pull-raw" и "pull-dkr". Например, при помощи данной функции можно быстро загрузить и запустить контейнеры на базе готовых образов Fedora и Ubuntu Cloud. Возможность поддерживается только на системах с Btrfs;
- В machinectl добавлена команда "list-images" вывода списка образов контейнеров, доступных в /var/lib/machines, а также данных об их размере. Если директория размещена в разделе Btrfs и включены квоты, то будет выведена информация о квотах. Для показа детальных сведения об образе в machinectl добавлена команда "image-status".
- В machinectl реализован эффективный механизм клонирования образов контейнеров, применяемый при использовании Btrfs, а также добавлены новые команды для удаления и переименования образов, и пометки их как доступными только для чтения;
- В machinectl добавлена новая команда "start", позволяющая запустить контейнер в виде сервиса. Например, команда "machinectl start foo" функционально эквивалентна "systemctl start systemd-nspawn at foo.service", но более удобна для ввода;
- Директория /var/lib/containers объявлена устаревшей и заменена на var/lib/machines, в которой, в том числе, могут размещаться загрузочные образы для qemu/kvm. Таким образом, термин "machines" в systemd распространяется не только на контейнеры, но и на виртуальные машины. При запуске systemd-nspawn с опцией "-M", но без определения директории (--directory) или образа (--image), теперь производится автоматический поиск в /var/lib/machines подходящей запрошенному контейнеру корневой директории, подраздела или дискового образа;
- Представлен новый юнит machines.target, который можно использовать для группировки всех контейнеров и виртуальных машин, которые запускаются в системе в качестве сервисов;
- В networkd добавлена поддержка сбора анонсов от сетевого оборудования по протоколу LLDP (Link Layer Discovery Protocol);
- В systemd-run добавлена опция "-t" ("--pty"), позволяющая запустить процесс как системный сервиc, но сохранить возможность интерактивного управления им через терминал. В том числе, можно запустить "systemd-run -t /bin/bash" без создания отдельного сеанса входа;
- Для создания подразделов Btrfs в tmpfiles добавлен новы тип строк "v";
- В systemd-nspawn обеспечено монтирование для каждого контейнера большей части дерева cgroupfs в режиме только для чтения, за исключением принадлежащего контейнеру поддерева в иерархии name=systemd;
- Для файлов с логами journald теперь устанавливается флаг FS_NOCOW, который позволяет увеличить производительность при размещении данных в Btrfs, благодаря сокращению фрагментации;
- В systemd реализована поддержка сохранения файловых дескрипторов отдельных сервисов в обработчике PID 1, что позволяет сохранить закреплённые за сервисом файловые десктипторы после его перезапуска;
- В networkd в файлах .network обеспечена возможность настройки параметров перенаправления пакетов (IPv4/IPv6) и маскаридинга (IPv4) в привязке к сетевым интерфейсам, которые включены по умолчанию для интерфейсов veth, используемых в контейнерах. Таким образом запуск контейнера с опцией "--network-veth" приведёт к автоматической настройке маршрутизации для доступа к сетям хост-системы из контейнера;
- В networkd обеспечена возможность настройки IPv6-адресов для локальных интерфейсов по аналогии с IPv4, В секциях "[Match]" теперь можно использование масок и перечисления нескольких элементов через пробел;
- В systemd-nspawn добавлена опция "--port" ("-p"), позволяющая привязать сервис в контейнере к сетевому порту хост-системы, т.е. запущенный в контейнере сервис, будет доступен как будто это обычный сервис на хост-системе;
- В базу параметров оборудования udev, для манипуляторов мышь, помимо ранее представленных данных о DPI, добавлены сведения о параметрах прокрутки. Также добавлена поддержка информации о типах тачпадов;
- В networkd добавлена поддержка создания сетевых устройств "ipvlan", "gretap","ip6gre", "ip6gretap" и "ip6tnl";
- В systemd-tmpfiles добавлен новый тип строк "a" для привязки ACL к файлам;
- В systemd-nspawn обеспечено автоматическое монтирование раздела /tmp с использованием tmpfs;
- При нажатии Ctrl-Alt-Del более семи раз за интервал в две секунды теперь выполняется немедленная перезагрузка.
Кроме того, можно отметить проект openwrt-systemd, в рамках которого развивается набор компонентов и патчей для использования systemd в дистрибутиве OpenWRT, вместо поставляемого по умолчанию системного менеджера procd.