LINUX.ORG.RU
ФорумTalks

Новости systemd

 


0

1

Леннарт Поттеринг подготовил третий отчет о развитии systemd (предыдущий был 19.11.2010). 65 пунктов, перевод в первых комментариях.

Подробности

Перемещено DoctorSinus из linux-general

★★

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

  • В systemctl и подобных утилитах добавлен автоматический пейджер, как в git.
  • В systemctl добавлена опция --failed для показа только отказавших сервисов.
  • Ключ --ignore-dependencies для мгновенного запуска сервиса с игнорированием всей логики зависимостей. Эта возможности предназначена для отладки и не должна использоваться при нормальной работе системы.
  • Посылка SIGKILL, финальная операция во внутренней логике останова сервисов более не является безусловной и может быть настроена опцией SendSIGKILL= отдельно для каждого сервиса.
  • Утилиты на Vala/Gtk выделены в отдельный проект systemd-ui. /похоже, интеграция gtk в systemd пока откладывается - прим. пер./
  • systemd-tmpfiles теперь умеет подстановку файлов и создание специальных файлов - FIFO, символьных и блочных устройств, символических ссылок. Она также умеет менять метки определенных директорий при загрузке (имеется в виду SELinux).
  • Непосредственно перед отключением питания теперь вызываются все бинарники из /lib/systemd/system-shutdown/, что может быть полезно для отладки последней стадии выключения.
  • Можно глобально контролировать перенаправление STDOUT/STDERR сервисов (если не изменено индивидуальной конфигурацией для отдельных сервисов).
  • Новые опции: ConditionVirtualization= option, заставляющая systemd пропустить указанные сервисы в случае (не)обнаружения определенной технологии виртуализации; ConditionSecurity= служит для обнаружения механизмов контроля доступа (таких как SELinux); ConditionCapability= позволяет проверить наличие определенного права в наборе ограничений прав системы; ConditionFileIsExecutable=, ConditionPathIsMountPoint=, ConditionPathIsReadWrite=, ConditionPathIsSymbolicLink=.
  • Директивы условий файловой системы теперь поддерживают подстановку.
  • Условия сервиса теперь могут быть «triggering» (вызывающими срабатывание) и «mandatory» (обязательными).
  • Вывод сообщений во время загрузки, если: /usr на отдельном разделе и не смонтирован initrd; /etc/mtab не ссылается на /proc/mounts; ядро собрано без CONFIG_CGROUPS. Также информация об этом выводится tainted-флагом на шине.
  • Теперь возможна загрузка одного и того же образа системы непосредстванно на физической машине и в Linux namespace containers с беспроблемной загрузкой в обоих случаях. Это сложнее, чем кажется, так как управление устройствами через udev, запись в /sys, /proc/sys и вещи вроде /dev/kmsg недоступны из контейнера. Это делает systemd отличным выбором для управления конфигурациями с использованием контейнеров. Заявленная возможность проверена входящим в состав systemd инструментом systemd-nspawn, но все должно работать и в LXC-конфигурациях. В простейшем случае это означает отсутствие необходимости в ручной настройке системы для работы внутри контейнера, все просто работает из коробки. Кроме того, упрощается задача преобразования реальной системы для работы в контейнере.
  • Теперь автоматически запускаются getty на HVC tty при загрузке в VM.
  • Введен файл /etc/machine-id как обобщение логики идентификации машины D-Bus (подробности). В машинах без состояния/без поддержки записи ID генерируется при загрузке случайным образом. В виртуализированных окружениях он может передаваться из иенеджера машин (используя опцию quemu --uuid или через интерфейс контейнера).
  • Все специфичные для systemd опции монтирования в /etc/fstab теперь имеют формат x-systemd-xyz.
  • Для упрощения обнаружения несконвертированных сервисов описания всех LSB/SysV инитскриптов теперь безусловно предваряются строками «LSB:»/«SYSV:».
  • Введена директория /run, теперь она является жесткой зависимостью systemd, принята и реализована во всех соответствующих дистрибутивах Linux.
  • systemctl может выполнять операции удаленно (опция -H).
  • Вееден systemd-nspawn, мощный инструмент для запуска контейнеров для отладки, сборки и тестирования, подобно chroot(1). Он может быть использован как для получения оболочки внутри дерева сборки, так и для загрузки полноценной системы в нем.
  • В случае запроса у пользователя пароля для жесткого диска при загрузке, он может нажать Tab для сокрытия звездочек, которые по умолчанию отображаются при вводе.
  • Сервис udev-settle.service отключен, он нужен только для некоторых старых программ, которые до сих пор не обновлены для нормальной поддержки появления/исчезновения устройств.
  • Введен инструмент systemd-analyze для рисования диаграмм загрузки, аналогичный bootchartd.
  • В процессе загрузки логика binfmt_misc-подсистемы ядра инициализируется данными из /etc/binfmt.d.
  • systemctl теперь распознает запуск в chroot()-окружении и работает соответствующим образом (т. е. применяет изменения к дереву, в котором он запущен, вместо того, чтобы обращаться за этим к PID 1). Кроме того, теперь он имеет параметр --root= для работы с деревом системы, находясь вне его.
  • Новый тип зависимости юнитов OnFailureIsolate=, позволяющий задать определенный target при отказе юнита. Например, автометический переход в emergency при отрицательном результате проверки критичной файловой системы.
  • Socket-юниты теперь могут слушать Netlink-сокеты, специальные файлы в /proc и очереди сообщений POSIX.
  • Новый флаг IgnoreOnIsolate=, который может быть использован для проверки того, что определенные юниты не затронуты запросами изоляции. Новый флаг IgnoreOnSnapshot=, который может быть использован для исключения некоторых юнитов из snapshot-юнитов при их создании.
  • Небольшой механизм сервисов для смены имени и других метаданных хоста, системной локали, настроек консоли и системных часов.
  • Набор разрешений для некоторых внутренних сервисов теперь по умолчанию ограничен.
  • Plymouth теперь может быть отключен глобально передачей ядру аргумента plymouth.enable=0.
  • Высвобождение VT при авершении getty (и, опционально, других программ, выполняющихся на VT). Это дает дополнительную безопасность: очистка буфера лишает последующих пользователей возможности получить остатки вывода.
shatsky ★★
() автор топика
Ответ на: комментарий от shatsky
  • В socket-юнитах теперь есть опции для контроля опций IP_TRANSPARENT, SO_BROADCAST, SO_PASSCRED, SO_PASSSEC самих сокетов.
  • Для буферов приема и передачи socket-юнитов при необходимости может быть указан объем больший, чем по умолчанию, через SO_{RCV,SND}BUFFORCE.
  • Установка аппаратного часового пояса теперь выполняется в самом начале работы PID 1, чтобы избежать скачков времени при нормальной работе юзерспейса и обеспечить нормальные значения времени во всех генерируемых логах. Системные часы более не сохраняются в RTC при выключении; предполагается, что это делается пользовательской утилитой настройки часов при задании нового времени или автоматически ядром при включенном NTP.
  • Директория SELinux перемещена из /selinux в /sys/fs/selinux.
  • Добавлен небольшой сервис systemd-logind, который ведет учет залогиненных пользователей и их сессий. Он создает для них контрольные группы, реализует для них спецификацию XDG_RUNTIME_DIR, управляет рабочими местами и ACL устройств и реализует запрет выключения/ввода в спящий режим для клиентов. Он также автоматически запускает getty на всех локальных VT при их активации (вместо безусловного запуска шести экземпляров), тем самым уменьшая потребление ресурсов по умолчанию /гы/. Он имеет интерфейс D-Bus, а также реализованный библиотекой простой синхронный интерфейс. Этот механизм делает ненужным ConsoleKit, который заброшен и более не должен использоваться.
  • Полная, автоматическая поддержка многоместной системы, которая может быть использована в GNOME 3.4. При подключении обородования, формирующего новое рабочее место, на его дисплее запускается менеджер входа, подхватываются устройства ввода /это для каких-то USB-auto-multiseat-приблуд, для обычного пучка мониторов/клавиатур/мышей нужно настраивать - прим. пер./.
  • Опция ControlGroupModify= позволяет разрешить сервисам динамически изменять свойства своих контрольных групп, а также ControlGroupPersistent=, позвмоляющая сделать контрольные группы в дереве постоянными, чтобы они могли создаваться и управляться внешними инструментами.
  • Возврат в initrd при выключении, так что из него может быть отключена корневая ФС и стоящие за ней накопители. Это позволяет (впервые!) надежно размнотировать сложные конфигурации хранения данных при выключении и оставить их в целостном состоянии.
  • systemctl теперь поддерживает пресеты, что позволяет дистрибутивам и администраторам указывать свои политики касательно того, должны ли сервисы быть включены/выключены при установке пакетов.
  • systemctl теперь имеет высокоуровневые коменды для маскировки/размаскировки юнитов. Также имеется новая команда (systemctl list-unit-files) для определения списка всех установленных юнит-файлов и должны ли они быть включены или нет.
  • Переменные sysctl теперь применяются к каждому сетевому устройству при его появлении. Это делает /etc/sysctl.d совместимым с горячим подключением сетевых устройств. /вот каак запилят networkmanager в systemd... - прим. пер./
  • Ограниченное профилирование для производительности SELinux при запуске встроено в PID 1.
  • Новая опция PrivateNetwork= для запрета доступа к сети отдельным сервисам.
  • Service-юниты теперь могут включать конфигурацию контрольных групп. Для некоторых параметров предусмотрены высокоуровневые опции (напр., MemoryLimit=), прочие доступны через обобщенный ControlGroupAttribute=.
  • Теперь есть опция для объединенного монтирования определенных контроллеров cgroup при загрузке. Это сделано для cpu и cpuacct по умолчанию.
  • Добавлен и включен по умолчанию журнал.
  • Весь вывод сервисов теперь по умолчанию направляется в Journal, независимо от того, выводится ли он через syslog или же просто через stdout/stderr. Оба потока сообщений попадают в одно и то же место и объединяются должным образом. Все сообщения, даже от ядра и ранней загрузки, попадают в журнал. Теперь никакой вывод сервиса не может остаться незамеченным, все сохраняется в едином месте.
  • Кманда systemctl status теперь по умолчанию показывает по 10 последних строк лога сервиса из Journal.
  • Прогресс fsck снова отображается в консоли /когда у меня с systemd-29 первый раз остановилась загрузка, долго думал и даже сделал Sys+AltRq+B, прежде чем сообразил, что пришло время проверять файловую систему - прим. пер./. Возврящены любимые всеми нами цветные сообщения статуса [ OK ] при загрузке, как в большинстве реализаций SysV.
  • udev объединен с systemd.
  • Мы реализовали и документировали интерфейсы к менеджерам контейнеров и initrd для передачи данных выполнения systemd. Мы также реализовали и документировали интерфейс для демонов хранения, которые нужны для представления корневой файловой системы.
  • Две новых опции в service-файлах для распространения запросов перезагрузки описания в наборе юнитов.
  • systemd-cgls по умолчанию больше не показывает нити ядра и пустые контрольные группы.
  • Добавлен инструмент systemd-cgtop, показывающий использование ресурсов сервисами подобноtop(1).
  • systemd теперь может контролировать работу сервисов, как watchdog. При использовании этой возможности демон должен пинговать PID 1 через регулярные промежутки времени, наче будет сочтен упавшим (что может, в замисимости от настройки, вызвать его перезапуск или даже перезагрузку системы). Кроме того, PID 1 может пинговать аппаратный watchdog. Если объединить это, аппаратный watchdog будет следить за PID 1, а PID 1 - за отдельными сервисами. Это крайне полезно как для высокодоступных серверов, так и для встроенных систем. Поскольку watchdog-устройства сегодня встроены во все железо (включая десктопные чипсеты), это должно расширить использование этой функциональности.
  • Новый аргумент ядра systemd.setenv= для установки общесистемных переменных окружения.
  • По умолчанию для сервисов, запускаемых systemd, будет установлено игнорирование SIGPIPE. Unix-логика SIGPIPE используется для надежной реализации конвееров в оболочках, а когда ее оставляют в сервисах, это обычно становится источником проблем и багов.
  • Можно настроить ограничение частоты перезапуска определенных сервисом. Ранее эти параметры были заданы в исходном коде (как в SysV).
  • Поддержка загрузки политик целостности IMA в ядро в начале работы PID 1, по аналогиис SELinux.
  • Теперь есть официальный API для планирования выключений и опроса запланированных выключений.
  • Лицензия изменена с GPL2+ на LGPL2.1+.
  • systemd-detect-virt теперь является официальным инструментом в наборе. Так как у нас уже был код для распознавания пределенных VM и контейнерных окружений, мы добавили официальный инструмент для администраторов, который можно использовать в скриптах и т. п.
  • Задокументированы многочисленные интерфейсы systemd.
shatsky ★★
() автор топика

Леннарт Поттеринг подготовил третий отчет о развитии systemd. 65 пунктов,

65 пунктов, а emacs, минимальный shell и текстовый редактор до сих пор не встроили.
//видел без коментариев.

ymuv ★★★★
()

Ну что ж.. попробую эту поделку на ac100. Всеравно, вероятно скоро оно будет везде, лучше уж рано, чем поздно .

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

И зачем это все к Линугсу. С его размахом пусть пилит свою ОС.

Во-во. И встраивает туда хоть systemd, хоть иное унылое говно. А если кому очень надо будет - портируют в линуксы.

zgen ★★★★★
()

Пусть портирует под венду и там навсегда остаётся.

Quasar ★★★★★
()

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

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

Установка аппаратного часового пояса теперь выполняется в самом начале работы PID 1, чтобы избежать скачков времени при нормальной работе юзерспейса и обеспечить нормальные значения времени во всех генерируемых логах. Системные часы более не сохраняются в RTC при выключении; предполагается, что это делается пользовательской утилитой настройки часов при задании нового времени или автоматически ядром при включенном NTP.

Возврат в initrd при выключении, так что из него может быть отключена корневая ФС и стоящие за ней накопители. Это позволяет (впервые!) надежно размнотировать сложные конфигурации хранения данных при выключении и оставить их в целостном состоянии.

Кто-нибудь может подробнее пояснить два этих пункта? С остальными вроде всё более-менее ясно.

RussianNeuroMancer ★★★★★
()

>Утилиты на Vala/Gtk выделены в отдельный проект systemd-ui.

И утилиты для пульсы тоже на гтк сделал. Покажите ему кто-нибудь curses.

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

Мляпесец. Одновременно терминальные стадии NIH- и kitchensink-синдрома.

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

Кто-нибудь может подробнее пояснить два этих пункта?

Могу пояснить последний: обычно отмонтирование rootfs выполняется путём перевода в ro, причём, если она находится на устройствах DM/MD, последние так просто уже не остановить. Это поверхностная теория. На самом же деле LVM не нуждается в остановке вообще, а MD RAID останавливается непосредственно ядром незадолго до остановки самого ядра, когда корневой ФС уже нет. Вывод: бесполезная косметическая плюшка.

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

Возврат в initrd при выключении, так что из него может быть отключена корневая ФС и стоящие за ней накопители

Актуально для пользвателей софтовых raid'ов (mdadm). По-хорошему, перед выключением их надо разобрать. Однако, поскольку утилита для разборки в обычной системе хранится на корневой файловой системе, которая на raid'е, который надо разобрать, то разборка невозможна, и выключение получается несколько «грязным».

Для сборки raid'а на этапе загрузки системы в большинстве дистрибутивов все равно требуется initramfs. Так вот, если образ initramfs собран с помощью dracut, то непосредственно перед выключением компьютера initramfs распаковывается скриптом /usr/lib/dracut/dracut-initramfs-restore в /run/initramfs (/run - это tmpfs).

Непосредственно перед перезагрузкой, если существует файл /run/initramfs/shutdown, systemd делает pivot_root, так что /run/initramfs становится новой корневой файловой системой, а корневая файловая система становится смонтирована в /oldroot. После pivot_root'а вызывается скрипт /shutdown, как PID 1. Поскольку теперь процессов, которые держат файловую систему /oldroot, нет, то ее можно отмонтировать (раньше можно было только перемонтировать в ro) и разобрать raid той копией mdadm, которая была в initramfs.

P.S. Идея на самом деле далеко не новая. В применении к LFS LiveCD и именно для корректного отмонтирования и извлечения CD я это реализовал за 6 лет до Поттеринга. Пруф: http://wiki.linuxfromscratch.org/livecd/browser/branches/6.2/scripts/shutdown...

AEP ★★★★★
()

нифига себе. А сколько ещё добавить надо, чтобы им можно было нормально пользоваться???

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

А ссылку не на LOR (а скажем на исходники ядра) можешь дать?

Проблема в любом случае актуальна для LiveCD, который ядром уж точно не eject-ится.

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

А ссылку не на LOR (а скажем на исходники ядра) можешь дать?

Уже не помню, где об этом писали. Но это легко проверяется:

  • Массив, который не был остановлен, начинает пересборку при следующей загрузке. Это сложно не заметить;
  • При должном уровне dmesg можно легко увидеть перед сообщением «Powerdown» соответствующие уведомления об остановке массивов (что-то вроде «detected capacity change of device to 0»).
GotF ★★★★★
()

Short: if you want a modern system, then there are better choices than Debian (or Gentoo, which is in a very similar spot, sharing the inability to make choices and strong conservatism). Try Fedora, or OpenSUSE or Mageia, or similar.

вот и «ху ис ху» от леннарта

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

Утилиты на Vala/Gtk

Вдвойне не нужно!

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

Фигасе настрочил. Как новость оформлять надо.

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

Эротический сон леннартоловера: systemctl restart linux-4.0.kernel

fixed

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

Short: if you want a modern system, then there are better choices than Debian (or Gentoo, which is in a very similar spot, sharing the inability to make choices and strong conservatism). Try Fedora, or OpenSUSE or Mageia, or similar.

вот и «ху ис ху» от леннарта

Все правильно же. Я вот подумываю на Exherbo свалить. Там paludis с собственным EAPI ebuild'ов из коробки. И systemd, оказывается.

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

И systemd, оказывается.

Даже лучше:

There’s no init system in our stages. This allows you to choose whatever init system (or none) you’d like to use:
* sys-apps/systemd (recommended) - modern, fast init system. Needs kernel >=2.6.36-rc1.
* sys-apps/baselayout - Gentoo’s old, crufty Baselayout-1.
* sys-apps/upstart - Ubuntu’s init system. We don’t generally supply init scripts for this.

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

[code]
~/ >>systemctl --version
systemd 182
arch
[/code]

182

Вот оно где собака зарыта ...

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

>Try Fedora

Перевод: тестируйте меня, черти полосатые! :}

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

Первое, очевидно, нужно для того, чтобы предотвратить clock drift. И значение системного времени уже давно не сохраняется в юзерспейсе.

Lighting ★★★★★
()

По крайней мере на словах новое поделие Поттеринга мне нравится. Явно комманда разрабов разбирается в том что делает. Уже ради одной поддержки cgroups я бы поставил на сервачки. Ждёмс когда оно в ubuntu server будет портировано. А upstart... Затрахал он меня в убунте тем что часть скриптов перевели, а на остальное забили.

Теперь есть кому отдадь ведро линукса когда Линус уйдёт на пенсию :). Там глядишь pulse audio и в ядро перетянут...

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

Первое, очевидно, нужно для того, чтобы предотвратить clock drift.

не совсем. clock drift это постепенное «убегание» часов, когда они постепенно отклюняются от правильных. а поттеринг говорит о явлении когда, например время в бивисе выставлено на UTC, соответственно начальная загрузка и лог идет с этим времени, потом запускаются сервисы, читаются файлы из основной фс и устанавливается часовой пояс, время в логах перескакивает. а у них теперь часовой пояс устанавливается сразу и скачка часов не происходит.

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

время в логах перескакивает

А у меня не перескакивает. Поттеринг решил очередную несуществующую проблему.

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

А у меня не перескакивает. Поттеринг решил очередную несуществующую проблему.

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

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

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

Лог udev, например.

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

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

Логи самого ядра например.

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

Логи самого ядра например.

А что, в dmesg теперь время пишется в каком-то новом формате, не в секундах с момента загрузки ядра? Это я к тому, что никакого вымышленного «скачка» нет.

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

Ты не на того накинулся, луддитушка.
Я всего-лишь указал человеку на то, что логи ведутся задолго до того, как / перейдёт в состояние rw. Пока не прочитано реальное время из железки, само собой метки времени будут привязаны к событию старта и отсчитываться от него.

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