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

по-моему, меня не понимаешь совсем.

По-моему, ты сам плохо себя понимаешь. Иначе не прыгал бы от примера к примеру.

Могу тебе собрать rpm-пакет. Какой? Могу наложить на него патч(небольшой, типа устраняющий уязвимость) и пересобрать пакет. И ты убедишься, что он зависит ровно от тех же библиотек, что и раньше.

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

Могу тебе собрать rpm-пакет.
И ты убедишься, что он зависит ровно от тех же библиотек, что и раньше.

Так было бы, если бы ты не собирал эти же библиотеки из этого же src.rpm. Ты, конечно, можешь ослабить межпакетные зависимости, но это чревато проблемами в другое время, например, при реальном обновлении версии. Обычно же внутри подпакетов проставляются зависимости на библиотеки вида «Requires: lib%name = %version-%release». И, в случае нормального ПО, это правильно.

Кроме того, даже если ты поломаешь вышеупомянутый Requires, у тебя из этого src.rpm получится и обновление для того пакета, который обновлять не надо. У него уползёт версия, он попадёт в updates к дистрибутиву, хотя его-то обновлять совсем не надо. Просто потому, что у них src.rpm общий. Ты можешь возразить, что обновления надо делать точечные, или блокировать обновления важных пакетов, но зачем так вообще делать надо было ?

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

Кроме того, даже если ты поломаешь вышеупомянутый Requires

А если бы у бабушки был хер... Ты так и не объяснил, почему ты так уверен, что все непременно будут делать твои идиотские ошибки? Начинаю подозревать, что ты просто иллюстрация синдрома Даннинга-Крюгера.

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

что все непременно будут делать твои идиотские ошибки?

Иди учись, сказал. Пособирай пакеты лет десять, потом возвращайся.

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

Пособирай пакеты лет десять, потом возвращайся.

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

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

И после этого мне можно будет бездоказательно обвинять незнакомых людей в том

Точно, что не раньше. Потому как тут всё очевидно, и не понять это может только школьник, которого допускать ещё нельзя к разработке системных пакетов. Игрушки, вон, пиши.

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

Потому как тут всё очевидно, и не понять это может только школьник

То-то я смотрю ты уже третью страницу подряд свой бред никак донести не можешь. Ну просто эталонный пример именни Даннинга с Крюгером :-D :-D :-D

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

тут всё очевидно

любимая присказка пыжащихся неучей

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

То-то я смотрю ты уже третью страницу подряд свой бред никак донести не можешь.

Такие слушатели. Одна надежда, что запомнят, а когда-нибудь дойдёт. Пока же вполне ещё можно жить без systemd. Главное - чтобы успело дойти вовремя. :-)

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

Могу тебе собрать rpm-пакет. Какой?

Вот этот ldapc++ undefined reference to

Могу наложить на него патч

Не надо. Один уже «патчит» инит, хватит.

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

Такие слушатели.

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

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

Так было бы, если бы ты не собирал эти же библиотеки из этого же src.rpm.

ОК. Согласен, не учёл, что там напрямую прописан %{version}-%{release}. Регэкспы туда не воткнёшь, а без зависимости на мажорную версию, только на основе soname, собирать плохо.

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

Осталось выяснить, что в этом может быть плохого на практике, ибо я сомневаюсь, что в rhel/centos без мажорных обновлений сломают systemd.

Вобщем ты прав. Но проблема, имхо, высосана из пальца.

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

Как я и говорил - чем тупее и безграмотней идиот

Особенно прогрессирование болезни заметно у анонимусов. :-)

Своих мозгов если нет, так подожди ответа Ivan_qrt на моё сообщение, для начала.

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

Но проблема, имхо, высосана из пальца.

Хотелось бы верить. Но ненужная связь между пакетами не только есть, но количество таких пакетов ещё и увеличивается.

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

Чудик, ты же пакеты не собирал - пользуешь готовое и не знаешь кухни, дак что споришь то?

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