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)
Ответ на: комментарий от Meyer

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

Пистеш

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

другой даже цитату в новости ниасилил гайти ибо многабуков.

Там, действительно, много букв сомнительного достоинства. :-) И, кстати, с Поттеринга станется.

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

Лень искать сейчас. До меня запостили уже давно. Может даже пофиксили, но факт остаётся фактом: мне надо было быстро собрать систему под ядро 3.4 и я потерял 2 драгоценных дня на возню с ним, после чего развернул wheezy и был рад.

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

Там, действительно, много букв сомнительного достоинства

Открой для себя ctrl+f, животное.

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

java
chmod
chown
собирает информацию о том, что делал пользователь
с chown
на java
ИБ
mysql
chown

Хосспаде, ты сам то веришь в то, что пишешь? Ты это, смотри, носом потолок не пробей.

cherry-pick
()

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

Лол.

*шутка про systemd-kernel*

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

Поддержка совместимости со всякими древностями - это ад для разработчика

Поэтому разработчики systemd пытаются использовать ещё не включенный в ядро kdbus? :)

kirk_johnson ★☆
()

чего то gpu-manager сегфолтиться, бяда примо ((

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

не знаю как syslog-ng, rsyslog сейчас у меня просто читает из journal файлов. Пытаться заменить journald другой системой логирования не тривиальная задача. Не уверен что осуществимая. Лучше наверно просто разбивать логи на отдельном сервере, где нет systemd. А еще лучше не ставить systemd на сервер:)

vitalikp
()

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

mix_mix ★★★★★
()

я тут из криокамеры ток выполз. Как там с пользовательскими сервисами? Конкретно интересует запуск демона с уровнем cap_setuid+ep из под пользователя, чтобы делать всякие непотребства :)

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

Пытаться заменить journald другой системой логирования не тривиальная задача. Не уверен что осуществимая.

Это самая тривиальная задача.

/etc/systemd/journald.conf:

Storage=none
ForwardToSyslog=true

Потом берёшь свою любимую реализацию syslogd и натравливаешь её на /run/systemd/journal/syslog. Это первый способ.

Второй — как ты описал, плюс Storage=volatile.

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

Когда же, наконец, в systemd запилят системный реестр вместо устаревших текстовых файлов конфигураций в /etc?

Так как systemd един, то и конфигурацию можно хранить в едином виде, и поставлять наружу через единый интерфейс, так как systemd модульный, то и иерархическая структура само собой разумеющееся, ну а бинарное представление сам Бог велел - даже журналы и те в бинарях.

frost_ii ★★★★★
()

Скоро можно будет заменить GNU/Linux на systemd/Linux так как система заменить все гнутое :) и не могу сказать что это так плохо. За все треды о системД моё мнение из «скорее отрицательное» сменилось на «положительное».

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

Очень годная система инициализации. Работает, как часы

а хотелось бы таки чтобы как система инициализации

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

основная штука в той проге, это гуй, который ибшнику отдельных окнах подписанных пишет, изменены права, владелец, из конфигурационных файлов удалено/добавлено/изменено, открыты закрыты такие то порты и тп. Всё в виде гуя, ибшники в 90% случаев даже понятия не имеют что такое chmod, chown, drop и тд.

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

Очень годная система инициализации. Работает, как часы

Тикает и оттуда торчат проводки разного цвета?

anonymous
()

Из-за этого поделия ноут выключается теперь полчаса. Вырвать бы этому гарри поттеру руки по жопу.

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

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

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

чем он меня бить будет? он дрищ к тому же живёт в райском государстве, я же живу в государстве войны, где каждый день на улицах разборки, я за одну парковку в месяц дерусь раз 8.

А ты смешной, сделал мне день, спасибо. В самом RH что-то не торопятся рекламировать шиштемде в своем энтерпрайз-продукте. Странно :З

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

Из-за этого поделия ноут выключается теперь полчаса. Вырвать бы этому гарри поттеру руки по жопу.

Наверняка где-то кривой юнит стопорится, а анон уже готов разодрать идейного немецкого парнишу. Эх, анон, анон.

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

ну в rhel 7 его уже поместили, а рекламировать смысла нет.

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

То что ты предлагаешь - это все равно рутовый сервис, предоставлять подобный (в котором юзер прописан в system-wide сервиск) в пакете плохо. Алсо, если я правильно помню, там формат немного другой

Capabilities=CAP_SETUID

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

В Capabilities= формат именно такой. То, что ты говоришь, — это CapabilityBoundingSet=.

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

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

Это мне очень напоминает desktop-ярлыки. Их дизайном случайно не те же люди занимались?

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

Залогинься обратно, достал.

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

Не совсем о том, хотя можно, наверное, его с каким-нибудь tripwire скрестить.

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

Кщё года два, и его можно будет пользовать не только на десктопе, но и в ынтерпрайзах.

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

ну там новомодные технологии какие нить :) вообще, идея была делать некоторые ограниченные действия, требующие рутовых прав, запустив пользовательский демон.

Пока остановился на реализации системного демона, создающего системную же dbus шину с некоторыми правилами доступа через конфиг dbus

arcanis ★★★★
()
Последнее исправление: arcanis (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.