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

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

Как я создам, если я анонимус? Ну, не прямо все-все-все процессы, прикладные программы и пользовательские фоновые процессы. Короче, надо r/w-слой overlayfs свернуть в тарбол, когда на диск уже никто или почти никто не пишет, но до размонтирования дисков, иначе тарбол сохранять будет негде.

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

Тебе костыль?

/etc/systemd/system/getty@tty6.service.d/consoled-kludge.conf:

[Service]
Environment=XDG_SESSION_DESKTOP=systemd-console

Потом релоад и логинишься на VT6 как обычно. В момент логина появится consoled и перекроет ядерную консоль. Т. е. у тебя будет agetty с запущенным башем, а поверх них — consoled с ещё одним башем. :]

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

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

python-разработчика, или ruby-разработчика.

А ад для разработчика означает ад для пользователя.

знаю это на примере тулз от руби и питон разработчиков, которые переписывают из за рая поломки обратной совместимости.

P.S. Некоторые разрабы вообще забили, и наслаждаются адом по%уизма, оставив пользователей без сладкого ухода от обратной совместимости.

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

прикладные программы и пользовательские фоновые процессы.

Да, так уже более понятно. Предлагается вот такой юнит:

[Unit]
DefaultDependencies=no
After=local-fs.target
Before=sysinit.target
Conflicts=shutdown.target

[Service]
Type=oneshot
TimeoutStopSec=0 # на остановку нет ограничения времени
RemainAfterExit=yes
ExecStart= # на запуск нет действия
ExecStop=<твой скрипт>

[Install]
WantedBy=sysinit.target
intelfx ★★★★★
() автор топика
Ответ на: комментарий от cherry-pick

Совместимость с chroot (тот веселый systemd-nspawn), когда он остается чем-то широкоизвестным, просто необходима, пока никто не покусился переписать (хотя бы его) и заместить на свой.

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

Отсутствие поддержки совместимости со всякими древностями - это ад для разработчиков проектов, опирающихся на твой проект. Потому на Python 3 и не видно тучи-тучи кода. Интересно, а на ЛОРе были холивары 2vs3?

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

в man 7 ip как-то это чётко не оговорено, здесь

https://utcc.utoronto.ca/~cks/space/blog/linux/IpForwardingSettings

пишется, что установка глобальной переменной ресетит все per-interface переменные

экспериментальным путём выяснил, что ресетит per_interface переменные с 0 на 1 только со второй попытки записи в ip_forward

короче надо смотреть в исходники ядра, как оно там на самом деле

но фраза

более того, эта настройка не подействует на интерфейсы, управляемые systemd-networkd). Вместо этого предлагается использовать директиву IPForward= секции [Network] network-файлов (что эквивалентно включению форвардинга для конкретного интерфейса).

явно провокационна и её можно трактовать, что якобы этот ваш системдэ имеет больше власти над интерфейсами, чем ядро :D

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

есть скрипт/программа которая собирает статистику системных служб и отправляет на другой сервер в mysql? надо чтобы оно запускалась автоматически при любом рестарте/включении системы. Писал его java программист и добавил в зависимости что либо от джавы, что надо запустить, инит для upstart/sysvinit идёт в комплекте, сама по себе прога тот ещё гемор в работе, написана в 2008 году. Сколько времени займёт у человека, не фаната поттеринга, заменить тот init?

erzent ☆☆
()
Ответ на: комментарий от intelfx
[Unit]
DefaultDependencies=no
After=local-fs.target
Before=sysinit.target
Conflicts=shutdown.target

[Service]
Type=oneshot
TimeoutStopSec=0 # на остановку нет ограничения времени
RemainAfterExit=yes
ExecStart= # на запуск нет действия
ExecStop=<твой скрипт>

[Install]
WantedBy=sysinit.target

Почему After=local-fs.target, если надо до размонтирования? Или это не размонтирование? Conflicts=shutdown.target здесь процессы киллятся? Но тогда скрипт выполнится до убийства процессов или нет?

У меня сейчас так:

[Unit]
#After=shutdown.target
Before=umount.target
DefaultDependencies=false

[Service]
ExecStart=<скрипт>
Type=oneshot

[Install]
WantedBy=final.target
Вроде работает, но есть подозрение, что не совсем так, как нужно. Например, если смотреть по логам, выглядит, как будто размонтирование начинается раньше выполнения скрипта. Ну, и самое главное, нет уверенности, что процессы убиты. Если #After=shutdown.target раскомментировать, то ни черта не работает.

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

программа, нужна для иб, она собирает информацию о том, что делал пользователь например с chmod, chown, и тп, это пишется в мускуль, а потом можно посмотреть из него в гуе, за n промежуток времени. Программиста уже нет, дописывать некому, мало того, что написано ещё на 1.5 java так ещё и кучу хрени разной требует. И такого барахла у фирм сотни.

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

Потому что это указаны зависимости при активации: «после монтирования и до запуска прикладных демонов». Но при активации (ExecStart=) у нас задано пустое действие.

Важно другое: зависимости при остановке всегда имеют обратный порядок, поэтому остановка (ExecStop=) будет выполнена после остановки прикладных демонов и до начала отмонтирования. А скрипт твой предлагается выполнять именно при остановке.

Ах да: это заработает только начиная с systemd 217. Если у тебя версия более древняя, укажи ExecStart=/bin/true.

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

Потому что они не должны писать весь софт во вселенной, но именно к этому они идут.

Ну ты ж не пишешь, а пользователи требуют. Как говорил «лорд» Varys - «someone have to».

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

Сколько времени займёт у человека, не фаната поттеринга, заменить тот init?

[Unit]
Description=Start that shitty java app

[Service]
ExecStart=java -jar shittyapp.jar -cp <shittyapp-deps>
Type=oneshot

[Install]
WantedBy=multi-user.target

Должен будешь.

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

Ясно, попробую. Спасибо за помощь.

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

oneshot? Тогда как минимум RemainAfterExit=yes и KillMode=control-group. Это если оно форкается, и форкается как-то странно (так, что Type=forking не работает).

В остальных случаях нужно или Type=simple, или Type=forking.

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

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

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

Если человек умеет читать маны — минут двадцать, включая время на несколько попыток (если с первого раза не получится).

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

У меня в убунте systemd жрет 4.6M. Это много?

Это катастрофаааа!!!!111один

Срочно приготовь анализ кала и звони участковому!

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

из-за этого говна свалил на мак

теперь баттхёрт обусловлен более физиологическими причинами?

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

значит куча джава программистов не умеют читать маны, потому что целый банк сидит на rhel 5 из-за этой софтины и уходить никуда не думает.

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

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

Смотри как бы он тебе нос не сломал. Хотя такое ссыкливое чмо вряд-ли в реале вякнуть решится.

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

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

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

Или вообще скелет init`a. Ни у кого идеи не появлялось?

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

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

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

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

Он говорил, что собирался прилепить. Может, к 16 слаке и прилепит.

Серьёзно?! А ссылки есть? Это ж coup de grace практически будет - последние уцелевшие после релиза убунты пуканы порвёт вклочья.

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

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

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

я за одну парковку в месяц дерусь раз 8.

А еще у тебя черный пояс по оригами. Ты просто зверь.

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

Сколько времени займёт у человека, не фаната поттеринга, заменить тот init?

У тебя - пару лет как минимум, потому что дурак. Я сделаю за 3 часа, ставка в час 200 баксов при условии что все исходники выкладываются под GPL, проприетарщикам - двойной тариф. Последующая техподдержка - за отдельную плату.

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

Если это действительно критично — юзай rsyslog, журнал далеко не панацея.

это критично для серверов.

У syslog-ng 3.6, кстати, появился плагин для отбора логов у journald. Я, правда, не смотрел ещё.

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

Должен будешь.

Демпингуешь ;-)

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

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

Я никогда не сомневался, что ты балабол, но за каминг-аут зачет.

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

чем он меня бить будет?

может быть, даже ногами.

я за одну парковку в месяц дерусь раз 8

опять в гта заигрался? уроки не забыл сделать?

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

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

Это шутка такая, или правда ? Люди замену ядра без перезагрузки делают, и тут на тебе. :-)

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

у меня в дебьяне он ломает tty в ядре из-за слишком интенсивного доступа.

Какая-то гомоэротическая фантазия. Ссылка на баг с изнасилованием tty где?

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

Это шутка такая, или правда ?

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

И народ ещё удивляется, как systemd с его эталонной документацией ругают за сложность. А это просто подросло поколение дегенератов, не способное понять текст длиннее, чем надпись на баллоне освежителя воздуха. Сортирные читатели блин.

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

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

Вот, так надо сокращать цитаты. Чего ты скромничаешь?

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