LINUX.ORG.RU

systemd 220

 


2

4

21 мая был представлен очередной релиз системного менеджера systemd, совмещающего в себе функции системы инициализации, ведения журнала, управления сессиями пользователей и работы с контейнерами. systemd основан на модели зависимостей (в противовес событийной модели), производит отслеживание процессов запущенных сервисов при помощи механизма cgroups ядра Linux, поддерживает механизмы сокет- и dbus-активации сервисов и предоставляет удобный декларативный синтаксис для описания демонов и других сущностей. Это позволяет производить агрессивную параллелизацию при запуске и остановке сервисов.

В рамках проекта также разрабатывается ряд легковесных приложений и демонов, выполняющих второстепенные, но распространённые вспомогательные задачи (т. н. plumbing layer) — от настройки подсистемы VT (systemd-vconsole-setup) и первичного конфигурирования системы (systemd-firstboot) до управления сетью (systemd-networkd) и профилирования загрузки (systemd-bootchart). А теперь ещё и легковесный загрузчик для UEFI (бывший gummiboot).

В этот релиз вошли по большей части различные исправления и усовершенствования внутренней логики, а также расширения уже существующей функциональности. В частности, были существенно стабилизированы новые «контейнерные» фичи из systemd 219.

Изменения в ядре systemd

  • systemd больше не поддерживает обновление без перезагрузки («daemon-reexec») с версий, предшествующих systemd 44. Это не должно создать никаких реальных проблем, поскольку во всех актуальных на данный момент версиях распространённых дистрибутивов используются более новые версии systemd.
  • При генерации юнитов из sysvinit-скриптов соответствие между уровнями запуска sysvinit и стандартными целями systemd теперь жёстко задано:
    • уровням запуска 2, 3 и 4 соответствует multi-user.target;
    • уровню запуска 5 соответствует graphical.target.

    Раньше это соответствие можно было изменить, делая вспомогательные юниты runlevel[2-5].target симлинками на ту или иную цель. Оказалось, что устоявшаяся семантика алиасов юнитов в systemd приводит к неразрешимым проблемам при таком подходе.

  • Из состава systemd был исключён вспомогательный демон systemd-shutdownd, предназначавшийся для отложенного завершения работы в стиле shutdown(8). Теперь эта функциональность реализуется в systemd-logind. Интерфейс остался тем же — команда shutdown.(Если в вашей конфигурации systemd-logind не используется, отложенное завершение работы можно устроить с помощью systemd-run и таймерных юнитов — прим. пер.)
  • При использовании сокет-активации в режиме Accept=true (когда на каждое соединение запускается отдельный инстанс демона) systemd теперь устанавливает для каждой запускаемой копии демона переменные $REMOTE_ADDR и $REMOTE_PORT.
  • В секции [Automount] unit-файлов добавлена директива TimeoutIdleSec=, позволяющая указать таймаут автомонтирования — время, по истечении которого с момента последнего обращения к автоматической точке монтирования она будет отключена.

    Таймаут также можно установить из /etc/fstab, указав для соответствующего устройства параметр x-systemd.idle-timeout= (наряду с x-systemd.automount).

  • Помимо вышеуказанной x-systemd.idle-timeout=, обработчик /etc/fstab (systemd-fstab-generator) теперь поддерживает опции x-systemd.requires= и x-systemd.requires-mounts-for=. С их помощью можно задать дополнительные зависимости для соответствующего .mount-юнита.

    Это может пригодиться, например, при хранении журнала ФС на отдельном устройстве (-o logdev= в случае XFS), или при использовании оверлейных ФС, объединяющих несколько точек монтирования (-o lowerdir=<path1>,upperdir=<path2>). В каждом из этих случаев список зависимостей .mount-юнита требуется дополнять вручную.

  • Раздел ESP (EFI System Partition), автоматически монтируемый systemd-efi-boot-generator на /boot, теперь автомонтируется с таймаутом в 2 минуты. Это сделано ради того, чтобы уменьшить риск повреждения раздела при аварийном отключении системы — драйвер VFAT в ядре Linux по-прежнему ни на что не годен.
  • Суммарный расход процессорного времени всеми процессами юнита (атрибут cpuacct.usage соответствующей контрольной группы) теперь экспортируется как свойство CPUUsageNSec= объекта юнита на шине и отображается в выводе команды systemctl status.(Разумеется, это требует задействования контроллера cpuacct, т. е. CONFIG_CGROUP_CPUACCT=y в конфигурации ядра и DefaultCPUAccounting=yes в /etc/systemd/system.conf. Что, в частности, несовместимо с планировщиком задач BFS, поэтому примера не будет. – Прим. пер.)
  • Команды systemctl enable, systemctl disable и systemctl mask теперь поддерживают параметр --now, позволяющий вдобавок ко включению, отключению или маскировке юнитов также немедленно запустить или остановить их. Другими словами, команда systemctl enable --now эквивалентна последовательному выполнению systemctl enable и systemctl start (аналогично для disable и mask).
  • Команда systemctl reboot теперь поддерживает параметр --firmware-setup, позволяющий после перезагрузки войти в режим настройки прошивки (то, что называют Setup). Разумеется, это требует поддержки со стороны самой прошивки и применимо только к UEFI.

    Соответствующий вызов был добавлен в шинное API systemd-logind, так что DE также могут предоставлять графический интерфейс для этого.

  • Многие методы в шинных API systemd, systemd-logind и systemd-machined теперь поддерживают асинхронную авторизацию через polkit и могут использоваться непривилегированными процессами. Действия над своей сессией также по умолчанию разрешены и не требуют дополнительных привилегий (например, loginctl lock-session или loginctl kill-session теперь можно делать от имени пользователя).
  • В файле /etc/crypttab (за его обработку отвечает systemd-cryptsetup-generator) добавлена поддержка параметров offset= и skip= (как в Debian). Эти параметры позволяют указать расположение зашифрованных данных внутри блочного устройства.
  • В спецификацию формата файла /etc/os-release добавлены новые поля VARIANT= и VARIANT_ID=, позволяющие создателям дистрибутива указать «разновидность» дистрибутива (в человекочитаемом и машиночитаемом виде соответственно) — такую, как «Workstation», «Server» и так далее.
  • systemd-fsck теперь умеет передавать информацию о текущем состоянии fsck в сокет /run/systemd/fsck.progress. Это может пригодиться при реализации загрузочных сплеш-скринов.

Изменения во вспомогательных компонентах

  • В состав проекта systemd под именем systemd-boot был влит исходный код UEFI-загрузчика gummiboot. Соответствующая утилита командной строки называется bootctl.

    Вместе с ним в проект был добавлен примитивный EFI-«контейнер», предназначенный для объединения файла ядра, initcpio и других вспомогательных файлов в один самозагружающийся образ. Это позволяет, к примеру, подписать совокупность ядра, initcpio и строки параметров в соответствии со стандартами Secure Boot (и при необходимости обойтись без использования загрузчика-прослойки).

    Загрузчик systemd-boot был соответственно доработан для того, чтобы извлекать из таких контейнеров метаданные (название, версию, …) и отображать их при выборе варианта загрузки.

  • В systemd-tmpfiles добавлены действия h и H — установка атрибутов файлов аналогично chattr(1).

Изменения в journald

  • systemd-journald больше не пытается самостоятельно устанавливать флаг FS_NOCOW на файлах журнала. Вместо этого используется вновь добавленное действие h в systemd-tmpfiles. Это позволяет администратору системы переопределить поведение, замаскировав файл journal-nocow.conf в конфигурации tmpfiles.d.
  • systemd-journald при обработке сообщений audit-подсистемы ядра теперь декодирует типы сообщений и записывает в лог текстовые идентификаторы.

Изменения в udev

  • Библиотека gudev (биндинги udev к GObject) была выделена в отдельный репозиторий; теперь её поддержка ведётся в рамках проекта GNOME. Копия исходного кода gudev ещё некоторое время будет оставаться в дереве systemd, но в ближайшее время оттуда исчезнет.

    Мейнтейнерам дистрибутивов рекомендуется ознакомиться с обсуждением в списке рассылки и постепенно переходить на новый репозиторий.

  • udev не будет создавать симлинки (/dev/disk/by-foo/bar) для неизвестных типов блочных устройств (чёрный список в соответствующем udev-правиле был заменён на белый).(Это не должно никого затронуть, но если у вас феерически странная конфигурация устройств хранения данных и вдруг исчезли эти самые симлинки — теперь вы знаете, куда копать. — Прим. пер.)
  • Начата работа над новым API sd-device, которое является модернизацией традиционного API libudev и в итоге его заменит. (Ещё не скоро: новый API не стабилизирован и извне systemd на данный момент не доступен.)
  • База данных аппаратного обеспечения (hwdb) udev’а теперь содержит базу данных Trackpoint-подобных устройств. На данный момент она состоит из информации об их чувствительности и требуемом ускорении курсора. Опять же, предполагается, что это будет использоваться в libinput.

Изменения в networkd

systemd-networkd теперь поддерживает:

  • отключение интерфейсов при потере аплинка а-ля Uplink Failure Detection (директива BindCarrier= секции [Network] network-файлов);
  • установку идентификатора DHCP-клиента (директива ClientIdentifier= секции [DHCP] network-файлов);
  • явное включение или отключение использования NTP-серверов, полученных через DHCP на конкретном интерфейсе (директива UseNTP= секции [DHCP] network-файлов);
  • создание IPv6-over-IPSec туннелей (директива Kind=vti6 секции [NetDev] netdev-файлов);
  • множество новых настроек для VXLAN- и bond-интерфейсов (секции [VXLAN] и [BOND] netdev-файлов).

Также в systemd-networkd было исправлено управление IP forwarding. Начиная с данного релиза, не требуется вручную включать глобальный форвардинг с помощью sysctl-переменных net.ipv[46].ip_forward. Вместо этого предлагается использовать директиву IPForward= секции [Network] network-файлов (что эквивалентно включению форвардинга для конкретного интерфейса).

Изменения, связанные с поддержкой контейнеров

  • systemd-nspawn теперь поддерживает:
    • параметр --property — установка произвольных свойств для scope-юнита контейнера (в частности, ограничений ресурсов);
    • параметр --private-users=<нулевой UID>,<количество UID> — переход в изолированное пространство имён пользователей;
    • параметр --overlay=<lower>:<higher>:...:<точка монтирования> — монтирование директорий из хоста в контейнер с использованием оверлейной ФС (по аналогии с --bind);
    • параметр --kill-signal — явное указание сигнала, передаваемого PID 1 контейнера при его остановке;
    • запуск в составе конвейера, в каковом случае псевдо-TTY не создаётся, а файловые дескрипторы стандартного ввода и вывода напрямую передаются запускаемому процессу.
  • systemd-importd теперь способен импортировать контейнеры из локальных tar-архивов, побайтовых (.img, .raw) и .qcow2-образов, а также записывать их в tar-архивы и побайтовые образы. Ещё он научился импортировать Docker-образы через его Docker Registry HTTP API v2 (раньше умел только v1 — прим. пер.).
  • systemd-importd теперь поддерживает верификацию загруженных образов с помощью gpg2 (опять же, раньше умел только gpg1 — прим. пер.).
  • Многие (почти все) операции с контейнерами (в частности, импортирование) поддерживаются только для файловой системы btrfs, поскольку основаны на присутствующей в этой ФС функциональности снапшотов. Если используется другая ФС, при первой операции с контейнерами автоматически создаётся файл /var/lib/machines.raw, на котором создаётся btrfs, и этот файл монтируется на /var/lib/machines.

    Файл-образ (и файловая система на нём) автоматически расширяется при необходимости.

    (Почему они не сделали всё то же самое через overlayfs — загадка природы. — прим. пер.)
  • Наконец, была добавлена команда machinectl set-limit, позволяющая устанавливать ограничение на дисковое пространство для каждого контейнера. Эта функциональность реализована, опять же, через механизм квот btrfs.

>>> Объявление о релизе

★★★★★

Проверено: fallout4all ()
Последнее исправление: JB (всего исправлений: 7)

Простой вопрос местным гуру systemd: как выполнить скрипт после убиения всех процессов, но до размонтирования файловых систем?

anonymous
()
Ответ на: комментарий от knovich

Бегать - ноги ломать. Лучше пешочком пройтись, полезнее для здоровья.

anonymous
()
Ответ на: комментарий от aplay

Ну и круто же! Будет у GNU/Linux два ядра, до поры до времени.

Два ядра и посередине systemd?

alex-w ★★★★★
()

Снёс это мракобесие в Jessie поставил sysvinit. Оно не может загрузить кеймапс и тд. Вводить кракозябры ради любви к Поттерингу? Разницы в скорости загрузки и выключения не заметил.

anonymous
()
Ответ на: комментарий от tailgunner

Но ведь polkit устарел и ненужен!!111

Ты с consolekit не перепутал? Полкит везде используется, да и альтернатив ему, вроде как, нет.

Ivan_qrt ★★★★★
()

Нужно. Разрабы определенно следят за своими ошибками и исправляют их. Да и к юзерам прислушиваются.

karton1 ★★★★★
()
Ответ на: комментарий от fludardes

Не бойся, свои рядом (в хорошем смысле). Начинай.

knovich
()

более того, эта настройка не подействует на интерфейсы, управляемые systemd-networkd

Топики «Я НАСТРОЕЛ OPENVPN ПО ПЕРВОЙ ССЫЛКЕ ИЗ ЯНДЕКСА И МЕНЯ НИПУСКАЕТ В ИНТЕРНЕТ» не иссякнут никогда.

thesis ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Но ведь polkit устарел и ненужен!!111

Ты с consolekit не перепутал?

Да, наверное. Спасибо, что поправил.

tailgunner ★★★★★
()
Ответ на: комментарий от fludardes

Spelling

Yes, it is written systemd, not system D or System D, or even SystemD. And it isn't system d either. Why? Because it's a system daemon, and under Unix/Linux those are in lower case, and get suffixed with a lower case d. And since systemd manages the system, it's called systemd. It's that simple. But then again, if all that appears too simple to you, call it (but never spell it!) System Five Hundred since D is the roman numeral for 500 (this also clarifies the relation to System V, right?). The only situation where we find it OK to use an uppercase letter in the name (but don't like it either) is if you start a sentence with systemd. On high holidays you may also spell it sÿstëmd. But then again, Système D is not an acceptable spelling and something completely different (though kinda fitting).
Chaser_Andrey ★★★★★
()
Ответ на: Spelling от Chaser_Andrey

On high holidays you may also spell it sÿstëmd.

Отлично, на новый год создам тред с таким тегом.

vurdalak ★★★★★
()

Когда уже добавят в systemd свой интерпретатор bash?

Было бы удобно писать простые скрипты и юниты на баше...

AVL2 ★★★★★
()
Ответ на: комментарий от fludardes

нет, он не установится, пока не выполнишь # bootctl install. да и даже если установить - с EFISTUB ничего не случится, очевидно же.

Lincor
()
Последнее исправление: Lincor (всего исправлений: 1)
Ответ на: комментарий от AVL2

мне больше интересно когда systemd своё ядро получит, это уже не система инициализации а полу ось какая то.

Только PowerShell! Заодно выпилить устаревшую текстоту/файлоту и наслаждаться няшными обьектами. Тем более, что пожелания уже неоднократно поступали.

anonymous
()
Ответ на: комментарий от anonymous

Заодно выпилить устаревшую текстоту/файлоту

Надеюсь не выпилят. Мне нравится эта парадигма.

Deleted
()
Ответ на: комментарий от erzent

Вот еще:

systemd больше не поддерживает обновление без перезагрузки

Идут семимильными шагами в сторону svchost.exe. Чтобы все было как в вендавс, а это Ынтерпрайз клЫентам и вендоадминчикам, по-быстрому переучившимся, неудобно.

Meyer ★★★★★
()

не требуется вручную включать глобальный форвардинг с помощью sysctl-переменных net.ipv[46].ip_forward (более того, эта настройка не подействует на интерфейсы, управляемые systemd-networkd

Это как это не подействует? Это ж параметр ядра?

Harald ★★★★★
()
Ответ на: комментарий от Meyer

Ты дурак? Ещё бы так зацитировал:

systemd больше не поддерживает обновление

anonymous
()

а почему networkd какая-то отдельная сущность? почему нельзя было сделать как .mount, .service, etc?

Нельзя же сделать After: somenetwork.network

i_gnatenko_brain ★★★★
()
Ответ на: комментарий от erzent

По-моему, он засланный казачок. Или просто упорот. Ну нельзя вот так вот просто взять самое кривое из SMF и svchost, посыпать специями ошметками launchd, и подать на стол «любителям инноваций», а потом и везде внедрять начать.

Meyer ★★★★★
()
Последнее исправление: Meyer (всего исправлений: 1)
Ответ на: комментарий от i_gnatenko_brain

потому что в svchost управление сетью тоже нет.

erzent ☆☆
()
Ответ на: комментарий от anonymous

А ты все еще не понял, откуда Лёня черпал вдохновенья на создание своего франкенштейна?

Deleted
()
Ответ на: комментарий от anonymous

И чем же оно удобнее

$cat chroot.sh 
export MNT="/mnt/gentoo"

cp -L /etc/resolv.conf $MNT/etc/

mount -t proc none $MNT/proc
mount --rbind /sys $MNT/sys
mount --rbind /dev $MNT/dev
chroot $MNT /bin/bash
umount $MNT/proc
umount $MNT/sys -l
umount $MNT/dev -l

?

Deleted
()

Логотип нарисовали уже?

...если нет — то когда же? народ требует! :-)

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 1)
Ответ на: комментарий от Meyer

При всей моей нелюбви к systemd, ты дальше вообще не читал? Не поддерживает обновление без перезагрузки с реально дремучих версий. Попробуй тот же OpenRC обновить одним махом с версии пятилетней давности и без ребута - геморроя словишь некисло.

Pinkbyte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.