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)

Ответ на: комментарий от Dron

Это признак ынтырпрайзности, так быдлоко^W солидные дядьки делают.

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

Ты в его код заглядывал? Этож кромешный п-ц.

Приведи куски кода, травмировавшие твою нежную душу. И версию указать не забудь.

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

Да ладно, всего-то 2,5 тысячи багов - это мелочь по сравнению с тем, что предстоит в будущем. Наверное, это будет единственная система инициализации, в которой будут перманентно находить CVE.

alex-w ★★★★★
()

Ну хоть кто-то пытается вытянуть Linux из болота. Иначе он скоро ляжёт вместе с BSD.

И вообще я не понимаю из-за чего весь сыр-бор? Не нравится systemd, напишите свою систему инициализации.

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

В кривой винде, глядя на API, которое торчит наружу для приложений, хочется рыдать кровавыми слезами.

Будто бы POSIX лучше.

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

Не нравится systemd, напишите свою систему инициализации.

Главное не боятся высказывать свое мнение. Публичные обсуждения крайне важны.

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

почему венда, если идея системд слизана с макоси полностью?

Нет она вчистую слизана с Solaris SMF. Только маленькая проблема. В соляре на их железках, если закончил в сценарии и SMF лаунчер вставал раком, ты получал аларм и через ALOM или напрямую шнурком мог подцепится к консоли запущенной в синглюзере. Здесь же, монолитный трэш, падение которого приводит к состоянию кирпича.

Причем логика архитектуры вообще не прослеживается. Хочешь контролировать все в одной сущности чтобы «сделать ништяк» - да флаг в зубы, но предусмотри fallback на случай отказа. Ну не будет у systemd PID 1, будет PID 2 в чем проблема? При этом натолкать в простой, по сути дела, сервис вебсерверов и QR-кодов это норм, а уложить туда кастрированный шелл чтоб завестись в случае отказа неееее, не барское это дело - архитектура, это вон пусть плебеи из команды grub'а со стэйджами трахаются, а «художник» должен творить.

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

Вот тогда вы будете выгодно выглядеть на фоне.

А зачем полчать когда откровенно брешут? Ткнуть мордой в овно неадеквата - это же так приятно.

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

Зачем писать, уже есть готовые. Надо просто не использовать systemd.

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

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

почему венда, если идея системд слизана с макоси полностью?

Враньё в кубе. Изучай матчасть.

alex-w ★★★★★
()
Ответ на: комментарий от dnf83

И вообще я не понимаю из-за чего весь сыр-бор? Не нравится systemd, напишите свою систему инициализации.

Если тебе не нравятся дистрибутив без systemd, то сделай себе свой собственный - с systemd.

alex-w ★★★★★
()
Ответ на: комментарий от dnf83

Я и использую. А еще я высказываю свое мнение. Какие-то проблемы с этим? Так не сиди на площадках где есть комментарии. Или не читай их. А systemd совершенно не современный и не нормальный. Никакой гибкости, надежности, совместимости и универсальности в нем нет.

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

нет, именно что катит, потому что те, кому не нужно, могут пересобрать (а если не можешь пересобрать — что ты вообще здесь делаешь? сиди и спокойно юзай свой дистрибутив)

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

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

Если тебе не нравятся дистрибутив без systemd, то сделай себе свой собственный - с systemd.

За меня уже сделали. И раз все дистростроители массово переходят на systemd, значит это всё не прост о так.

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

За меня уже сделали. И раз все дистростроители массово переходят на systemd, значит это всё не прост о так.

Мда... Будь добр, ответь на два этих простых вопроса:

1) Сколько именно существует дистрибутивов linux?

2) Сколько дистрибутивов linux перешло на systemd?

alex-w ★★★★★
()
Ответ на: комментарий от Lincor

RedHat всех подкупил.

Да ну прямо. Просто людей достало, что всё разбросано по разным местам, и это постоянно ломается. Обычный пользователь этого не видит, а мейнтейнеры с этим постоянно сталкиваются. Вот они и решили использовать одну монолитную систему инициализации, наделив её максимумом возможностей.

dnf83
()
Ответ на: комментарий от alex-w

2) Сколько дистрибутивов linux перешло на systemd?

3) Какой процент пользователей linux дистрибутивов перешедших на systemd.

4) Какой процент «мертвых» дистибутивов не перешедших на systemd.

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

И раз все дистростроители массово переходят на systemd, значит это всё не прост о так.

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

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

«новые сущности» добавляются отдельными компонентами, гибкость и надёжность проекта в целом от этого не уменьшается

разработка всех этих компонентов в рамках одного проекта понижает надежность и гибкость

нет конкуренции, нет разобщенности, которые и составляют главную фичу линукса

stevejobs ★★★★☆
()
Ответ на: комментарий от alex-w

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

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

решили использовать одну монолитную систему инициализации

Вообще-то systemd это модульная система инициализации с грамотно прописанными и отлично документированными интерфейсами.

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

одну монолитную систему инициализации

Тут есть еще один плюс.

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

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

И раз все дистростроители массово переходят на systemd, значит это всё не прост о так.

Срыв покровов специально для dnf83:

Большинство этих ваших «дистростроителей» просто тащит билды из федоры и переделывает под свой пакетный менеджер.

А кто ведёт собственную разработку в своей предметной области, тем на systemd, понятное дело, насрать. Это эмбедд в основном.

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

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

Считать остальных людей глупее себя, это типичная ошибка некоторых групп людей.

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

нет разобщенности, которые и составляют главную фичу линукса
stevejobs

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

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

Неплохая попытка, коллега. Нетолсто, но слишком объемно, а значит неподъемно для поколения твиттера.

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

Это эмбедд в основном.

Эмбедед, в основном, ждет пока все устаканиться в основных модулях systemd. Такова суть эмбедед. И облизывается предвкушая плюшки.

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

И раз все дистростроители массово переходят на systemd, значит это всё не прост о так.

Считать остальных людей глупее себя, это типичная ошибка некоторых групп людей.

И раз все дистростроители массово переходят на systemd, значит это всё не прост о так.

Считать остальных людей глупее себя, это типичная ошибка некоторых групп людей.

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

Вот они и решили использовать одну монолитную систему инициализации, наделив её максимумом возможностей.

Если б это была закрытая, но качественная система, никто б и не пикнул. Но, если до вас еще не дошло, основные претензии к systemd не по критерию «открытая-закрытая», а по критерию качества.

Раньше инцизиализация служб осуществлялся при помощи говна и трех палок, теперь осуществляется при помощи буханки хлеба, переделанной в троллейбус, которую, до кучи, научили еще пылесосить, проверять почту и трансформироваться в жигули. «Стало лучше?» Ага, ага. В глазах фанбоев локалхоста — безусловно. На практике — нет.

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

Простой пример. Что называется наговнякал так наговнякал.

Тебя буква 'a' в коде раздражает?

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

Выглядит как будто кто-то sh-скрипт переписал на Си.

Вот и молодцы отойдите в уголочек и общайтесь друг с другом. Обсуждая какие все говнюки.

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

Скажите кто-нибудь плиз, коммиты из https://bugzilla.redhat.com/show_bug.cgi?id=1047719#c13 вошли в эту версию, или уже нет?

Да, вошли. С другой стороны это не панацея, так что проверь насколько сильно оно ускорилось под твою задачу и отпишись - любопытно ведь!

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

Выглядит как будто кто-то sh-скрипт переписал на Си.

Ну ты не бзди, покажи нам уже, как сделать это правильно.

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

«Бисмарк».

Капец утюг. То-то его так долго топили :)

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

Когда получу свежую версию в генте, проверю.

Сейчас у меня journalctl --since=yesterday крутится 1m7.736s

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

Вообще я не очень понимаю, почему там не БД, в которой можно сделать нормальную быструю выборку. Эдак я расстроюсь и накачу себе какой-нибудь rsyslog :)

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

Вот и молодцы отойдите в уголочек и общайтесь друг с другом. Обсуждая какие все говнюки.

Заметь, в моём комментарии не было ни характеристики качеству кода, ни отсылки к каким-либо «говнюкам».

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

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