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, совмещающего в себе функции системы инициализации, ведения журнала, управления сессиями пользователей и работы с контейнерами.

Не ожидал такого тонкого троллинга от, казалось бы, приверженца systemd intelfx :)

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

сидели бы сейчас на SysVinit и никаких проблем.

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

мне страшно представить, кто будет обновлять генту 5 летней давности, установить заново куда проще.

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

win nt 2000.

Что-то я в них такого не видел

Deleted
()

А как там с kdbus идут дела? Я читал месяц-два назад на lkml, что Линус запустил профайлер и все лососнули тунца =) С тех пор что-нибудь интересное произошло?

anonymous
()

Между тем, между релизами 219 и 220 сначала ребята из Canonical запилили systemd-fsckd, чтобы хоть как-то иметь возможность предотвращать нежелательную беременность самодеятельность systemd-fsck, а потом Лёня отпилил его нахрен, но «оставил двери открытыми» в виде сокета, торчащего из последнего.

Моча съела говно.

К слову, в jessie вернулись на fsck из util-linux.

like-all ★★
()
Последнее исправление: like-all (всего исправлений: 1)

Судя по ченджлогу systemd, пора начинать переписывать хотя бы sysvinit на Rust. Ну или bsd init. Или вообще скелет init`a. Ни у кого идеи не появлялось?

исключён вспомогательный демон systemd-shutdownd

Ребята, к нам приехали парни из GNOME и мы решили выпить вместе.

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

Да, это сообщение является реквестом скелета init на Rust.

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

Таких бы на мертвые проекты привязать. Но похоже, в Hurd к ним отнесутся плохо, а в ReactOS не оценят творчества. О, пусть tox допилят до уровня скайпа и даже выше.

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

Не гони на полуось. Это зареганная товарная марка, между прочим.

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

Ты весь проект померь. А потом файлы, зависящие от systemd. systemd-cat, например. Я, конечно, понимаю, что cat быстрее без свичей, но не надо так усердствовать. Это не GNU/systemd, это systemd/systemd Им ещё OTCC включить надо. Может, tcc получит генератор кода из QEMU, наконец.

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

DEMONS, a modification of the init start process by KahelOS, where daemons are started only when the DE (desktop environment) started

Го опакечивать.

anonymous
()

Очень годная система инициализации. Работает, как часы, комп с ней очень быстро загружается и выключается. Мне она нравится.

Rinaldus ★★★★★
()
Ответ на: Spelling от Chaser_Andrey

Теперь понятно, почему у них релизы давно обошли по упоротости релизы Chromium`a.

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

У них есть cat, они не какой-нибудь busybox.

anonymous
()

А есть ли роадмап проекта? То есть список того, что планируется добавить/убрать и т.д.

at ★★
()
Ответ на: комментарий от like-all

В sid на openrc живут вместе два fsck и орут друг на друга. Недавно openrc либо поломался, либо я его поломал. Зашел на ЛОР - а там systemd, так и манит своими красными тру^H^H^H демонами.

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

Зарегаюсь, стану Карлом. Джонсоном. Можднее в два раза.

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

Ты про размеры glibc сказал же. Дожили, спорю о systemd, сидя на systemd. И вообще, выдай мне скелет init`a на Rust. Кастовать некого, один ты со мной и говоришь. Можно будет потом им на главную отправить.

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

Хотелось бы, чтобы это было собрано в одном месте

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

Креститься надо, когда кажется. Товарищ Леннарт делает то, что давно пора было сделать, а баги в любом сложном ПО есть. Да та же пульса рай по сравнению с alsa, или, не приведи сатана, oss. Будущее за системд, а не за говном мамонта родом из 70х.

cherry-pick
()
Ответ на: комментарий от vurdalak

consoled до минимального состояния допилили; это логин-скрин не допилили (там нет /bin/login, консоль стартует после создания сессии).

intelfx ★★★★★
() автор топика
Ответ на: комментарий от t184256

Не хватало. Сделал cd, оно примонтировалось, потом что-то случилось и привет, повреждение раздела. Это как я понял из треда на ML.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от disarmer

Хз, смотрите доки по ядерному механизму autofs (внутри используется именно он). Насколько я понимаю, с момента закрытия последнего файла внутри ФС.

intelfx ★★★★★
() автор топика

И вообще, тем, кто возмущается тем, что системд все «поломал», и что им теперь все скриптики переписывать надо, на заметку:

  • systemd - свободное ПО - это в проприетарных проектах, за которые денежки платят, совместимость с говнами мамонтов различной свежести обеспечивают, ибо клиент платит, а тут то нафига трупиков поддерживать? Вон, Jenkins 6 яву до сих пор поддерживает - в кодестайле запрещено юзать фичи из 7/8 явы - а нафига? Только девелоперам геммороя больше, всеравно как минимум 7 ява везде есть.
  • Поддержка совместимости со всякими древностями - это ад для разработчика. А ад для разработчика означает ад для пользователя. Так что уход от обратной совместимости в ваших же интересах, сладенькие мои.
cherry-pick
()
Ответ на: комментарий от anonymous

Произвольный маппинг ранлевелов на таргеты — это уже больше, чем просто «совместимость с sysvinit». Последняя никуда не делась.

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

Ничего, по крайней мере фронтенд-девелоперы этого ужасающего ада не видят, и то хорошо.

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

Сломано. Сломано, Карл.

Где?

Всё для людей, мля.

Это я так понял. Могу быть не прав. Если установить per-interface переменную для форвардинга, глобальная на него перестанет действовать или там логическое И?

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

Перепутал polkit и consolekit.

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

After=local-fs.target, наверное. А что значит «после убиения всех процессов»? Создай новую тему.

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

Насколько я понял, при установке per-interface переменной глобальная перестаёт действовать на интерфейс. Если я не прав и там логическое И — скажи, я поправлю.

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

Это ты у Тома спроси. :]

Думаю, дело в layering violation — ядро systemd не должно никак зависеть от опционального компонента (например, связываться с ним и получать какие-то нотификации). Но я не знаю.

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

Линус запустил профайлер и все лососнули тунца

Угу.

С тех пор что-нибудь интересное произошло?

Вроде нет.

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