LINUX.ORG.RU

Systemd 29

 , ,


0

1

16 июня, тихо и незаметно вышла 29-ая версия новой системы инициализации для Linux. Среди её возможностей основными являются:

  • событийно-ориентированная система параллельного запуска сервисов;
  • управление через dbus;
  • упразднение загрузочных bash-скриптов и замена схожим по функциональности кодом на C для управления консолью, установки локали, запуска fsck, монтирования файловых систем и др.;
  • возможность запуска сервисов по появлению данных в сокете, запуску или остановке других сервисов, наличию подключённых устройств или смонтированных файловых систем;
  • встроенное упреждающее чтение с диска;
  • интеграция с cgroups;
  • совместимость со старыми скриптами, предназначенных для использования с SysVinit.

Всё это даёт возможность загружать систему за время порядка 10 секунд и выключать за 1 секунду.

В новой версии были незначительно изменены Makefile-ы, и было добавлено 2 пункта в TODO:

  • посылать сигнал, когда загрузка завершена;
  • при неудачном запуске сервиса попытаться перезапустить его.

Будем надеяться, что в следующей 30 версии мы увидим эти новые фичи.

Исходники

О systemd и ссылки

>>> Подробности

★★★★★

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

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

Давай мне на баше, я переведу.

Тот скрипт делает не то, что было написано выше:

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

Потому что если флешки нет, то он просто выйдет. Вот 2 юнита, которые делают то, что было заявлено раньше:

[Unit]
Description=cryptmount
ConditionPathExists=/dev/disk/by-uuid/12345678-abcd-9876-f00d-fedcba987654

[Service]
Type=oneshot
ExecStartPre=/bin/bash -c 'dd if=/dev/disk/by-uuid/12345678-abcd-9876-f00d-fedcba987654 bs=16 count=1 skip=12 | cryptsetup ...'
ExecStart=/bin/mount /dev/mapper/something /mnt/extra
ExecStop=/bin/umount /mnt/extra
RemainAfterExit=yes
[Unit]
Description=nocryptmount
ConditionPathExists=!/dev/disk/by-uuid/12345678-abcd-9876-f00d-fedcba987654

[Service]
Type=oneshot
ExecStart=/bin/mount /dev/sda10 /mnt/extra
ExecStop=/bin/umount /mnt/extra
RemainAfterExit=yes

Если очень надо, то могу и тот скрипт перевести.

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

>А как работают udisks и usb_modeswitch?

usb_modeswitch

ЩИТО? Мне надо какую-то срань поставить, чтобы смонтировать /?

udisks

Он немного для съёмных устройств. systemd монтирует то, что в fstab. Разница есть. И я написал же:

монтирует разделы жёсткого диска

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

Вообще, по-хорошему, это делается через [Mount], а не [Service], но там, к сожалению, нет ExecStartPre. Вот вариант второго юнита на [Mount]:

[Unit]
Description=nocryptmount
ConditionPathExists=!/dev/disk/by-uuid/12345678-abcd-9876-f00d-fedcba987654

[Mount]
What=/dev/sda10
Where=/mnt/extra
Type=auto
Options=defaults
gentoo_root ★★★★★
() автор топика
Ответ на: комментарий от HiddenComplexity

> Беда в том, что как systemd, так и upstart зависят от dbus

От dbus зависит много чего, но не upstart.

так что собрать систему без dbus, которая шустро запускается, оказывается проблематично.

dbus не имеет отношения к скорости запуска. Он - просто лишняя зависимость для init-демона, лишний источник проблем, еще одно потенциальное узкое место. init - это основа системы, он должен быть маленьким, и не должен зависеть ни от чего, а любой его компонент должен быть легко заменяем. sysvinit удовлетворял этому условию, upstart удовлетворяет этому условию, systemd - нет.

Кстати, собрать систему без dbus-а можно на базе icewm, например.

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

В упор не вижу MARK - проверку на наличие ключа на этом устройстве.

Зато вижу... запуск баша:

ExecStartPre=/bin/bash -c 'dd if=/dev/disk/by-uuid/12345678-abcd-9876-f00d-fedcba987654 bs=16 count=1 skip=12 | cryptsetup ...'

То есть из systemd даже при неполном решении задачи приходится запускать баш? Так зачем нам тогда нужен systemd?

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

> 4.2. upstart не создаёт /dev/initctl и управляется через dbus.

Он управляется через юникс-сокет. Поддержка управления через dbus появилась начиная с версии 0.6 и она не обязательна (man initctl параметр --system).

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

>при неполном решении задачи

А ты сам не осилил вставить в строку баша нужный код?

Зато вижу... запуск баша:

Я же говорил:

Вообще, по-хорошему, это делается через [Mount], а не [Service], но там, к сожалению, нет ExecStartPre.

Если запилят, можно будет без баша.

Так зачем нам тогда нужен systemd?

Систему запускать, очевидно же.

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

>Вполне можно воспользоваться, скажем, временным файлом.

Можно FIFO сделать. Это лучше, чем просто файл. Но чтобы сделать '>' туда, то, наверное, sh понадобится. Или systemd умеет перенаправлять?

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

Кстати, собрать систему без dbus-а можно на базе icewm, например

Кстати да, оказывается много лет жил без dbus. И не замечал. И только недавно, когда захотел на wicd поглядеть (что же его так хвалят), обнаружил, что в /etc/rc.conf опечатался. dbas там было прописано. На ледяных окошках всю сознательную жизнь, с дебиан сарж. А вот хал выкинуть из демьяна было непросто, велосипеды городил. Что и сподвигло на арч перейти.

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

> Для запуска сервисов достаточно простого дерева зависимостей, которое можно обработать хоть на sh, хоть на Tcl, хоть на чем угодно.

Согласен. Заслуга Lennart'а заключается в том, что он понял, что большая часть этих зависимостей на самом деле не нужна.

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

Я буду очень рад, когда ему выдадут медаль «за понимание собственной ущербности»

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

Интересно, может не обращал внимания, поскольку всё работало. А значит и копать не надо было. Надо взад всё вернуть, посмотреть. А вообще, я же не против комбайнов. Пусть будут. Но печальный пример бунты и федоры показывает что linux из удобного конструктора превращается в монстра с тесно интерированными зависимыми структурами. Почему-то Форд вспомнился с его изречением: Не ломается только та деталь, которой нет.

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

>Ну так демьян на dash перешёл, если не ошибаюсь.

Там просто симлинк /bin/sh по дефолту не на bash указывает, а на dash. Уже давно, кстати.

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

ЗЫЖ а за автоматический перезапуск упавших сервисов надо сразу расстреливать. Даже в венде до такого не додумались, кажется.

Додумались с 1999 года. Вы опоздали на 12 лет.

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

> Да не запускает systemd систему быстро - он просто размазывает время старта, и быстрее выводит систему к login prompt.

ВЫ его пробовали или просто о-ла-ла?

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

> ВЫ его пробовали или просто о-ла-ла?

Я просто читал всю документацию о нем, которую смог достать.

А пробуют его пускай люди, у которых слишком много свободного времни (федора, арча). И по вестям с полей, не готово это чудо для эксплуатации.

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

>Как же ж нельзя? upstart рулит обычными sysv-скриптам

Ну вот так нельзя. Нативные юниты апстарта (которые *.conf) в свое время можно было только физически удалить с диска(ну или переименовать), а отключить, чтобы не грузился — нет. В 11.04 они таки догадались дать такую возможность, не прошло и пяти лет. В systemd это хотя бы изначально возможно было...

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

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

Могу сказать, что когда я ещё пользовался systemd, такого не наблюдалось.

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

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

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

> Так вот я им доволен

Рад за тебя. Но позволь спросить, сколько раз в неделю ты включаешь и выключаешь комп?

но это не значит, что его заочно нужно критиковать, даже не попробовав.

А вот это - серьезная ошибка класса «спердобейся». Критиковать можно и нужно, исходя из спеков.

Я, в общем, не против systemd. Юниты в нем проще, чем в SysV, интеграция с cgroups тоже может быть полезной, так что пусть себе кропают. Другое дело, что никаких критически важных проблем он не решает, и, по-моему, у него kitchen sink synrome.

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

>не готово это чудо для эксплуатации.

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

слишком много свободного времни (федора, арча)

Генту же забыл =)

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

>> не готово это чудо для эксплуатации.

Да ну?

Ога. То, что ты его поставил и настроил, не означает, что оно того стоило.

слишком много свободного времни (федора, арча)

Генту же забыл =)

Каюсь, искуплю.

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

Ну, у него традиционный sysv-инит как во всех старых дистрибутивах. А что там в конфигах — детали реализации скриптов, которые ITT обсирают (кстати, с systemd можно изменить конфиги настолько, не трогая бинарник?).

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

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

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

>кстати, с systemd можно изменить конфиги настолько, не трогая бинарник?

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

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

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

Вообще-то, можно - переключением ранлевела. Но кому нужны были эти нативные юниты? В нативных - только getty. А все остальное лежит в «обычных» sysv-скриптах, в которых в начале написано что-то вроде:

# Provides: httpd
# Required-Start: $local_fs $remote_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
И эти скрипты замечательно отключаются через chkconfig/update-rc.d/ntsysv. Все работало правильно, и быстро. Пока не пришел Леннар с systemd и не заявил, что все не так, а он сделает как надо.

Раньше можно было посмотреть информацию о том, что загружалось на каждом ранлевеле одной командой `chkconfig --list`. Это работало для sysvinit, это работало для upstart. А что нужно выполнить в systemd, чтобы увидеть то же самое?

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

>Вообще-то, можно - переключением ранлевела.

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

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

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

Остальных нет, в юнитах - только getty. Таким методом в redhat-based дистрибутивах выключали иксы - в runlevel 5 иксы включены, а в runlevel 3 - нет. А «остальные» - лежали в sysv-скриптах и управлялись классическими, проверенными годами методами.

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

>А «остальные» - лежали в sysv-скриптах и управлялись классическими, проверенными годами методами.

И никакого профита upstart не давал. Это, кстати, уже не так. Так сделано в Дебиане, и время загрузки с upstart не отличалось от времени с SysVinit (проверял лично). Если же написать нативные юниты для upstart, то был профит в несколько секунд (так сделано в бубунте, но и там до сих пор остались старые скрипты).

Раньше можно было посмотреть информацию о том, что загружалось на каждом ранлевеле одной командой `chkconfig --list`. Это работало для sysvinit, это работало для upstart. А что нужно выполнить в systemd, чтобы увидеть то же самое?

С systemd как таковых ранлевелов нет. Есть таргеты. Посмотреть можно с помощью systemctl (systemctl --help в помощь) или 'ls -1 /{etc,lib}/systemd/system/*.target.wants'

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

> +1, лютая жесть. «I wrote most of Avahi and PulseAudio, among other stuff. Right now I am focusing > on systemd which I created»

Черт! Он еще и avahi написал! Самое прискорбное, что это все почему-то намертво внедряют. Привилегии программера в RedHat что ли? Будем надеяться, что к моменту, когда он начнет свой 10ый проект, то уже натренируется на предыдущих.

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

>Черт! Он еще и avahi написал!

Особенность его проектов в том, что они, вроде, что-то полезное делают, но вполне можно жить без них. Но с ними интереснее.

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

Во всём виноват RedHat и потому он не нужен.</fat>

Deleted
()

Крутейшая штука. Запуск / ждущий режим / выключение радуют.

Jayrome ★★★★★
()

ждём ебилдов?

а как же bolgenos? загрузка 5 секунд(!) новые обои(!) антивирус Попова(!)

А тут 10 секунд почему-то... отстаём, товарищи.

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

>I wrote most of Avahi and PulseAudio

OMG, опять этот велосипедист ///_-

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

> Наконец-то хоть кто-то осуществил этот шаг.

Такое уже было в initng... но он по ходу загнулся :(

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

>А тут 10 секунд почему-то... отстаём, товарищи.

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

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

> Чем примечательна 29-я версия? Их выпускают довольно часто.

Сказано же: «В новой версии были незначительно изменены Makefile-ы, и было добавлено 2 пункта в TODO».

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

>А если не запилят?

Если всё пойдёт хорошо, то systemd будет во всех ведущих дистрибутивах наравне с udev. Тогда если появится более новая альтернатива udev, которая будет хороша, но всё ещё малоиспользуемая, то разработчики systemd должны обратить на неё внимание, если она будет продвигаться как замена udev (как сейчас systemd заменяет SysVinit).

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

>ждём ебилдов?

Оверлей systemd, похоже, забросили. Там всё давно протухло (в основном udev). systemd 28 появился недавно в дереве.

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