LINUX.ORG.RU

systemd 218

 ,


3

5

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

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

Список изменений:

  • Все компоненты systemd, обладающие конфигурационными файлами в /etc/systemd, теперь умеют считывать настройки из соответствующих *.d-директорий в /usr/lib, /run и /etc.

    Например, /etc/systemd/system.conf можно дополнять из /{usr/lib,run,etc}/systemd/system.conf.d/*.conf.

  • Добавлена команда systemctl edit, которая позволяет редактировать unit-файлы (используется редактор, указанный в переменной окружения $EDITOR).

    Возможные режимы работы таковы:

    • (по умолчанию): «режим дополнения», т. е. редактирование нового drop-in'а (создаётся и открывается /etc/systemd/system/$unit.d/override.conf)
    • --full: «режим исправления», т. е. редактирование всего юнит-файла (он предварительно копируется в /etc/systemd/system, если необходимо)
    • --runtime: «режим временных изменений», т. е. вместо /etc используется /run и все внесённые изменения живут только до перезагрузки
  • Команда systemctl is-enabled теперь выводит «indirect» вместо «static» (при этом код возврата равен 0) в тех случаях, когда секция [Install] юнита содержит только директивы Also=, т. е. когда сам юнит не может быть включен, но «включает» другие юниты.
  • Команда systemctl status ЮНИТ теперь выводит также и «предлагаемое» состояние юнита согласно preset'ам. Это показывает, должен ли юнит быть включен согласно дистроспецифичному дефолту.

    Пример:

    $ grep -R remote-fs.target /usr/lib/systemd/system-preset
    /usr/lib/systemd/system-preset/90-systemd.preset:enable remote-fs.target
    
    $ systemctl status remote-fs.target
    ● remote-fs.target - Remote File Systems
       Loaded: loaded (/usr/lib/systemd/system/remote-fs.target; disabled; vendor preset: enabled)
    

  • Команда systemd-run теперь поддерживает отложенный запуск команд в стиле at(1) (параметры командной строки --on-calendar и аналогичные). Это реализовано с помощью создания временного timer-юнита наряду с основным service-юнитом (поддержка создания timer-юнитов как раз была добавлена в API systemd).
  • В команде busctl, предназначенной для работы с шиной D-Bus, добавлены следующие подкоманды и параметры командной строки:
    • busctl capture (захват всех данных, проходящих через шину, в формате libpcap)
    • busctl tree (отображение дерева объектов для конкретного сервиса или для всех сервисов на шине)
    • busctl introspect (отображение подробной информации о конкретном объекте на шине)
    • busctl call, busctl get-property и busctl set-property (предназначение очевидно из названий)
    • busctl --augment-creds= (включение или отключение сбора вспомогательных данных о процессах на шине из /proc)

      Последняя опция по умолчанию включена, но в некоторых случаях это может привести к race conditions, поэтому и была добавлена возможность её отключения.

  • В команде journalctl добавлены параметры командной строки --vacuum-size= и --vacuum-time=, позволяющие принудительно удалить старые файлы журнала. Как легко понять из названий параметров, критерием очистки может быть или суммарный размер файлов журнала, или давность сообщений в конкретном файле.
  • В команде systemd-nspawn добавлены параметры командной строки --link-journal=try-guest и --link-journal=try-host, которые работают аналогично значениям guest и host (а именно — включают объединение журналов хоста и контейнера), но не возвращают ошибку, если на хосте ведение постоянного журнала отключено.

    Параметр командной строки -j теперь является синонимом для --link-journal=try-guest.

  • Команда systemd-inhibit при отображении списка активных ингибиторов теперь поддерживает фильтрацию по типу (block или delay).
  • Для каждой директивы вида ConditionXYZ= в секции [Unit] unit-файлов добавлена аналогичная директива AssertXYZ= в той же секции.

    Отличие между ними состоит в том, что невыполнение Condition-директив приводит к пропуску (игнорированию) юнита, а невыполнение Assert-директив переводит юнит в состояние «failed».

  • В секциях [Scope] и [Service] unit-файлов добавлена директива Delegate=, разрешающая процессам юнита самостоятельно управлять своим поддеревом контрольных групп.
  • В секции [Service] unit-файлов добавлена директива SmackProcessLabel=, позволяющая установить для всех процессов юнита указанную метку SMACK64.
  • Директива ConditionSecurity= unit-файлов теперь может принимать значение audit, что будет приводить к проверке доступности audit-подсистемы ядра.
  • systemd-coredump теперь собирает и кладёт в журнал вместе с core-дампом некоторое количество метаданных об упавшем процессе, а именно:
    • контрольные группы, к которым принадлежал процесс (/proc/$PID/cgroup)
    • список переменных окружения и их значения (/proc/$PID/environ)
    • карту адресного пространства процесса (/proc/$PID/maps)
    • рабочую директорию (/proc/$PID/cwd)
    • корневую директорию (/proc/$PID/root)
    • состояние процесса (/proc/$PID/status)
    • список открытых файловых дескрипторов (/proc/$PID/fd)
  • journald теперь умеет собирать сообщения audit-подсистемы ядра (с обработкой сопутствующих метаданных) и записывать их в общий лог. В частности, это означает, что journalctl становится альтернативой традиционному audit-клиенту ausearch.
  • systemd-networkd теперь поддерживает:
    • конфигурирование VXLAN-устройств (секция [VXLAN] netdev-файлов)
    • указание «стоимости» портов bridge-устройств (директива Cost= в секции [Bridge] network-файлов)
    • настройку правил IP source routing (директива Source= в секции [Route] network-файлов)
    • выбор сетевого интерфейса по его исходному имени (до переименования; директива OriginalName= в секции [Match] link-файлов)
    • изменение MAC-адреса и MTU интерфейса из network-файлов (директивы MACAddress= и MTUBytes= в секции [Link] network-файлов)
  • В systemd-networkd начата работа по реализации протокола PPPoE.
  • NSS-модуль nss-myhostname теперь ресолвит имя «gateway» в IP-адрес шлюза по умолчанию. Если таковых несколько — они сортируются по значению метрики.

    Отмечу, что это изменение не нарушает работу конфигураций, в которых имя «gateway» уже как-либо используется, поскольку модуль nss-myhostname обычно идёт последним в списке NSS-модулей.

  • macvlan-устройства, создаваемые systemd-nspawn внутри контейнеров, теперь имеют стабильные MAC-адреса (в том смысле, что они не будут изменяться каждый раз).
  • systemd-cryptsetup-generator теперь поддерживает указание key-файлов и назначение имён для отдельных устройств из командной строки ядра (luks.key=<UUID>=<имя файла> и luks.name=<UUID>=<назначаемое имя устройства>).
  • В systemd-tmpfiles добавлено действие t — назначение файлу произвольных расширенных атрибутов (xattrs).
  • systemd-localed теперь опционально зависит от libxkbcommon. Эта библиотека будет использоваться для проверки корректности устанавливаемых настроек раскладки клавиатуры X11 (напр., с помощью localectl set-x11-keymap).
  • В systemd-hostnamed список текстовых описаний типов системы (chassis type) был пополнен значением «embedded».
  • systemd-rfkill теперь ассоциирует запоминаемое состояние rfkill'а не с его именем (rfkill0, rfkill1, ...), а с комбинацией его типа (wlan, bluetooth, ...) и свойства ID_PATH.

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

  • База данных аппаратного обеспечения (hwdb) udev'а теперь содержит базу данных разрешений оптических сенсоров мышей. Она будет использоваться в libinput для автоматической коррекции ускорения курсора.

    Ситуация более подробно описана в этом сообщении.

  • systemd теперь умеет корректно обрабатывать ситуации, в которых система одновременно
    • не имеет файла /etc/machine-id
    • запускается с корневой ФС в режиме «только чтение»

    Для обработки этих случаев была добавлена вспомогательная утилита systemd-machine-id-commit, которая запускается сразу после перемонтирования корневой ФС в режим «чтение и запись» и атомарно перемещает временный файл machine-id из tmpfs в /etc/machine-id.

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

★★★★★

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

Ответ на: комментарий от A-234

И самое главное: Зачем тебе рутовый пароль, если у тебя уже есть рут?

Linux, учите Linux и доступные для него сигналы. -9 - это далеко не единственный сигнал, lol.

Читать, учитесь читать английский текст. Там про kill как концепт, а не про конкретный девятый сигнал.

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

systemd заявляет, что вместо теперь ее можно использовать в двух вариантах - pppoe через pptpd или pppoe через встроенную библиотеку. Что будет с гибкостью проекта через некоторое время?

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

systemd ничего не заявляет: эту библиотеку ещё не дописали, не экспортируют и даже не используют :]

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

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

Поддержка PPPoE в systemd-networkd будет только через эту библиотеку, потому что у него такая цель: сетевой менеджер, не имеющий внешних зависимостей.

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

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

По сравнению с тем состоянием, когда ничего не было? Это очень странная логика.

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

Что будет с гибкостью проекта через некоторое время?

Ну ты не путай свой пукан с чужим проектом - это у тебя от вкорячивания фичи «уменьшается гибкость», а в нормальном проекте всё только у лучшему :)

anonymous
()

Блин, 12 страниц уже - на рекорд идём! Вот уж не думал, что от добавления какого-то pppoe у хейтеров так попка пригорит :-D

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

Как программа обрабатывает ctrl+c по умолчанию? Морозим какой нибудь free и никакого рута не нужно, пользюк сам все сделает. Или делаем прыг в никуда. Причем, все ведь будет работать, пусть с помарками но код ведь правильный, очень долго никто ничего не заподозрит. Понятно что это opensource а не выньда поэтому глобальной беды не случится, грамотные люди в конце концов все поправят. Но мне уже страшно использовать ваш systemd.

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

Вы забываете, что посылать сигнал можно только процессам, у которых EUID совпадает с вашим (ну или вы root). Так что всё не так просто, и если firstboot запускается от root, то без прав root эту «уязвимость» не проэксплуатировать.

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

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

целую в дёсна, вечно ваш...

denkin
()
Ответ на: комментарий от A-234

Морозим какой-нибудь free

Как? Процесс работает от рута, напоминаю.

Впрочем, если способ есть, тогда везде всё плохо, потому что тем же образом можно перехватить да хоть write().

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

Или делаем прыг в никуда.

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

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

Все вокруг говорят

Лучшего аргумента просто не существует.
Либо поясняете по существу и аргументируете:

Системд навязывается

он ограничивается «очень некоторыми» десктопами

в его говнокоде


либо тихо убегаете реветь в подушку.

При такой архитектуре

При какой архитектуре? Указывайте конкретно, что именно вас не устраивает в «архитектуре». Также хотелось бы узнать людей из списка «все говорят». Налицо явная демагогия и/или толстый троллинг.

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

Для того, чтобы systemd-logind работал. upstart этой функциональностью не пользуется.

6.4 cgroup Upstart 1.13 supports cgroups with the aid of cgmanager (see cgmanager(8)). A new «cgroup» stanza is introduced that allows job processes to be run within the specified cgroup.

А это что тогда?

LongLiveUbuntu ★★★★★
()
27 февраля 2015 г.
Ответ на: комментарий от intelfx

При том, что ничего в glibc не ломали ради какого-то «блага». memcpy как соответствовала стандарту до поломки легаси, так и осталась соответствовать после.

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

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