LINUX.ORG.RU

systemd 215

 ,


1

3

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

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

Большая часть изменений, вошедших в этот релиз, была направлена на поддержку т. н. stateless-систем, в которых все данные находятся на разделе /usr (монтируемом в режиме только для чтения), а корень (включая /etc) размещается на tmpfs и автоматически пересоздаётся при каждой загрузке системы. Этот функционал предполагается использовать в легковесных контейнерах, а также как средство «полного сброса» без переустановки ОС.

Изменения по поддержке stateless-систем:

  • Добавлен компонентsystemd-sysusers, способный автоматически добавлять и исправлять записи о служебных пользователях в /etc/passwd и /etc/group, основываясь на декларативных определениях из /usr/lib/sysusers.d. Наиболее важные определения уже поставляются в этом релизе.
    Этот функционал является частью работы по поддержке stateless-систем.
  • В секции [Unit] юнит-файлов добавлена директива ConditionNeedsUpdate=, инструктирующая systemd запускать юнит-файл только в том случае, если требуется обновление или перестроение директорий /etc или /var. Юнит-файлы, использующие эту директиву, вероятно, должны содержать также директиву Before=systemd-update-done.service.

    В поставку включён ряд unit-файлов, использующих этот функционал и реализующих перестроение:

    • базы данных аппаратного обеспечения udev (/etc/udev/hwdb.bin);
    • каталога сообщений journald (/var/lib/systemd/catalog/database);
    • кэша динамического компоновщика (/etc/ld.so.cache, т. е. ldconfig).
  • systemd-tmpfiles теперь поддерживает действия L+, b+, c+ и p+. Это варианты соответствующих действий без знака «+», принудительно удаляющие файл назначения.
  • В systemd-tmpfiles действия L, L+, C, C+ теперь допускают отсутствие поля «argument». В этом случае исходный файл берётся из директории /usr/share/factory/<полный путь к файлу назначения>. Разработчики ОС могут размещать в указанной директории стандартные файлы конфигурации, которые должны копироваться в системные директории при запуске системы с пустым корнем.

    В поставку включён конфигурационный файл для systemd-tmpfiles, пересоздающий наиболее важные файлы в /etc.

  • Добавлена команда systemctl preset-all, применяющая стандартные настройки включения/отключения ко всем установленным юнит-файлам.
    («presets» — функционал systemd, предназначенный для автоматического включения или отключения служб в стиле «как должно быть по умолчанию».)
    В случае запуска системы с пустым /etc, эквивалент этой команды выполняется автоматически, чтобы включить и активировать все «стандартные» службы.

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

  • Файл /etc/os-release перемещён в /usr/lib/os-release, поскольку он является статическим и его изменение не предполагается. В директории /etc автоматически создаётся симлинк на новое местонахождение.

Прочие изменения:

  • systemd-networkd теперь включает в себя клиент DHCPv6, поддержку IPv6 Router Solicitation, а также сервер DHCPv4.
    Клиент DHCPv4 теперь поддерживает получение от сервера статических маршрутов.
    Секция DHCPv4 network-файлов была переименована в DHCP; совместимость со старым синтаксисом сохранена.
  • systemd-networkd теперь поддерживает управление виртуальными сетями VXLAN, TUN/TAP и dummy-интерфейсами.
  • systemd-networkd теперь поддерживает автоматическое назначение интерфейсам статических адресов из предварительно указанного диапазона. Этот функционал предназначен для управления большим числом однотипных соединений, таких, как veth-интерфейсы между хостом и контейнерами.
  • systemd-coredump теперь генерирует стектрейс всех потоков упавшей программы и пишет его в лог. Этот функционал реализован на библиотеке libdw из состава elf-utils.
  • systemd-coredump теперь может сохранять core-дампы на диск (/var/lib/systemd/coredump), а не в лог. По умолчанию включен режим сохранения на диск.
    Также был добавлен конфигурационный файл /etc/systemd/coredump.conf, позволяющий настраивать это поведение и некоторые другие параметры.
  • Утилита systemd-coredumpctl была переименована в coredumpctl, что означает её готовность к широкому использованию.
    Также была добавлена команда coredumpctl info, отображающая подробную информацию о зарегистрированных core-дампах.
  • journald теперь по умолчанию работает в режиме SplitMode=uid, т. е. файлы логов разделяются по UID источников сообщений.
  • Добавлена команда systemd is-system-running, позволяющая узнать общий статус запуска системы (starting, stopping, running, maintenance, degraded).
  • machined теперь экспортирует (позволяет узнать через D-Bus) версию ОС в запущенных контейнерах.
  • Команда systemctl -H (подключение к другой машине по сети) теперь позволяет заходить в контейнеры, запущенные на такой машине. Синтаксис для этого выглядит как root@host:container. Следует обратить внимание, что пользователь должен быть root, т. к. обращение к контейнеру — привилегированная операция.
  • В секции [Mount] unit-файлов добавлена директива SloppyOptions=, эквивалентная ключу -s программы mount(8). Эта директива включает режим нестрогой обработки несуществующих опций монтирования.
  • В секции [Install] юнит-файлов добавлена директива DefaultInstance=, указывающая, какую строку использовать как instance по умолчанию, если запрошено включение шаблонного юнита без явного указания instance.
  • В секции [Service] юнит-файлов добавлена директива RestartForceExitStatus=, позволяющая указать набор кодов возврата из главного процесса, при которых служба будет принудительно перезапущена (вне зависимости от значения директивы Restart=).
  • Добавлена обработка параметров ядра systemd.wants=, systemd.mask= и systemd.debug-shell. Их обработка реализована в новом генераторе systemd-debug-generator.
  • Добавлена пассивная цель cryptsetup-pre.target. Она предназначена для служб, которые должны запуститься до начала инициализации LUKS-устройств.
  • Добавлена страница документации file-hierarchy(7), содержащая рекомендации по организации иерархии файловой системы в дистрибутивах, использующих systemd. По сути, это является обновлённой версией FHS или hier(7). (Уже обсудили на ЛОРе.)
    Также была добавлена утилита systemd-path, позволяющая узнать точные (действующие) пути для некоторых пунктов из указанной документации.
  • Из поставки исключён unit-файл, периодически (по таймеру) пересоздающий кэш man-db. Он теперь будет поставляться в составе самого man-db (начиная со следующего релиза).
  • systemd.pc теперь экспортирует больше путей (в т. ч. libdir и некоторые директории файлов конфигурации второстепенных компонентов systemd).
  • В поставку включены макросы RPM для обработки файлов конфигурации systemd-sysusers, systemd-sysctl и systemd-binfmt (т. е. для их считывания и применения «на лету»).

Изменения, касающиеся udev:

  • Файлы устройств /dev/loop-control и /dev/btrfs-control теперь принадлежат служебной группе disk.
  • Функционал предсказуемых имён сетевых интерфейсов в udev теперь использует свойство dev_port (добавленное в Linux 3.15) вместо dev_id, чтобы различать несколько PCI-портов на одной PCI-функции.
  • Добавлена новая служебная группа input, которая теперь назначается всем файлам устройств ввода. Её предназначение во многом аналогично таковому для групп audio и video.

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

★★★★★

Проверено: fallout4all ()
Последнее исправление: fallout4all (всего исправлений: 4)
Ответ на: комментарий от daemonpnz

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

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

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

Да. А в чём проблемы? Тебе часто приходится смотреть одновременно на десяток пользователей?

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

Когда ждать замену .ELF и динамическое отслеживание версий библиотек? А то надоел зоопарк.

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

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

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

Минуточку, как динамические зависимости соотносятся с модульностью? Или по-твоему любая программа, имеющая больше двух (трёх?) строчек в выводе ldd, объявляется не модульной, не unix-way и прочее?

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

это текстовый редактор + /etc

это далеко не централизированое решение

supervisord
It shares some of the same goals of programs like launchd, daemontools, and runit.

Что именно из этого списка еще не умерло и активно используется в линуксах? Что из этого умеет контейнеры и cgropus? Базовая поддержка последних есть в upstart, но его также можно спокойно закапывать.

малость подустаревшие runit и daemon tools

давно умерли

Из нового Поцеринг ничего не сделал

http://0pointer.de/blog/projects/why.html

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

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

но реально в убунте например тот же logind нормально работает без systemd. так что по факту твое мнение просто является вбросом на вентилятор.

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

Помимо либы, должна быть и dbus шина созданная, а создать её может либо kdbus, либо dbus сервер, который стартует с того же самого /usr/lib, так что fallback режим таки должен быть.

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

Централизованное решение настройки системы - это текстовый редактор + /etc

Это localhost, энтерпрайз - NIS+, который GNU не осилило.

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

это далеко не централизированое решение

Я выше писал про NIS+ и прочие yellow pages, выкинутые неосиляторами.

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

По ссылке:

General Features

- Interfacing via D-Bus
- Shell-free bootup
- Swap handling
- Static loading of kernel modules

Это, разумеется, очень важные новшества :D

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

Это ask-password, а я про локальное управление юзерами

Долго ли, сегодня ask-password, завтра set-paswword, а послезавтра уже глядишь harm-user будет.

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

оно там самописанное

с чего ты это придумал? systemd-timedated, systemd-hostnamed и systemd-hostnamed тоже оказывается переписаны канониклом?

а заменить logind в systemd не представляется возможным

а на что его можно поменять при умершем consolekit?

timuaz
()

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

cheez ★★★
()

Добавлен компонентsystemd-sysusers, способный автоматически добавлять и исправлять записи о служебных пользователях в /etc/passwd и /etc/group, основываясь на декларативных определениях из /usr/lib/sysusers.d. Наиболее важные определения уже поставляются в этом релизе.

Обоземой. Кто-нибудь остановит этот маразм?

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

Ну, для начала, это не так :) Но я говорил немного о другом. В случае C и SIGSEGV не ясен размер ущерба. Ты мог просто попытаться разименовать указатель, а мог выйти за границы массива, перезаписать данные, на которые ссылается указатель, который ты передаешь execve() и вызвать `rm -rf /'. Такие дела.

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

Да, да, если ошибка, то возвращается... Буквоеды на марше.

перезаписать данные, на которые ссылается указатель

Перезаписать строковую константу. В секции RODATA. Ага.

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

не важно на что можно менять сейчас, если системд модульным, то такая возможность должна быть out-of-box и by design, но оно есть как оно есть монолитный кусок гуано.

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

В любом случае, я не вижу подобного в коде systemd.

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

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

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

а потом посмотреть на то как они себе «упростили» жизнь при помощи m4 и умножить коэффициент упоротости на 100500 :)

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

Это если у тебя константная строка, на которую ссылается константный указатель. А если у тебя выделенная память, указатель на которую ты получаешь от какого-нибудь getcfg (что обычно делают в проектах, где есть конфигурационные файлы), то переписать ты можешь и то, и другое.

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

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

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

initramfs — не костыль.

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

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

systemd-timedated, systemd-hostnamed и systemd-hostnamed тоже оказывается переписаны канониклом?

Их можно выкинуть.

а на что его можно поменять при умершем consolekit?

*kit тоже можно выкинуть, пользы от них один хрен никогда не было.

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

А где оно не юзер-френдли? Смотреть глазками? Часто это делаешь? (тут ответ - нет, ибо после двух-трёх просмотров уже помнишь структуру, да и из контекста она по большей части ясна).

А вот обработать из шел-скрипта - на раз два при помощи awk или даже cut. Как просто обрабатывать ini-like файлы из консоли я слабо представляю. При том, что в соседних секциях могут вполне себе находиться поля с одинаковым именами.

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

Я не долго думая запустил pkill -SIGSEGV systemd от рута на своем ноутбуке. В первый раз случился oops, системд не перезапустился, все его потомки и сам он стали [defunct]. Со второго раза удалось увидеть панику ядра.
Никакого чуда. systemd 208. ©

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

Так есть же, в солярке - SMF. Но... xml это самое плохое, что там есть. Если бы systemd сделали по образу и подобию, нормальная бы система получилась.

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

Assumption is the mother of all fuckups. В любом случае, если я правильно понимаю, то это main.c:120. И вроде оно адекватно, да.

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

Это потому что он зовет shell. И уходит в for (;;) pause(); И во второй раз ты его прикончил, да.

Объясни подробнее, про shell. Шелл нигде не видел, нерабочий systemd-ask-password на всех tty. Кроме тех, где я был залогинен до попытки сломать систему, естественно.

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