LINUX.ORG.RU

Systemd 207

 


0

3

Вышел новый релиз популярной системы инициализации и управления сервисами GNU/Linux.

В этой версии:

  • добавлена логика, позволяющая автоматически монтировать home и swap разделы на GPT-дисках, что позволяет отказаться от fstab-файла на множестве конфигураций;
  • добавлена минимальная утилита для сохранения яркости дисплея между перезагрузками;
  • теперь сервис может быть перезапущен, если он определенное время не сообщал о своей активности (watchdog);
  • новый генератор getty-сервисов, который позволяет запускать getty не только на основной консоли ядра, но и на любой другой, указанной в параметре ядра console;
  • опции InaccessibleDirectories= и ReadOnlyDirectories= теперь могут принимать пути, начинающиеся с -; systemd будет учитывать, что файлы могут и не существовать;
  • journalctl -o и похожие команды теперь понимают новый режим отображения "short-precise", похожий на "short", но показывающий отметки времени;
  • больше кода распространяется под LGPL;
  • systemd больше не передает параметры окружения из ядра и initrd сервисам, однако это все еще возможно через параметр ядра systemd.setenv=;
  • команды systemctl set-log-level и systemctl dump перемещены в состав systemd-analyze;
  • systemd-sysctl теперь не читает файл /etc/sysctl.conf; если вам всё же это нужно, создайте на него симлинк из /etc/sysctl.d/99-sysctl.conf;
  • исправлены некоторые баги; добавлены другие, незначительные изменения.

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

★★★★★

Проверено: Shaman007 ()

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

ничего, что они и близко не эквивалентны? если урезать то, что реализовано в init до того, что есть в юните то теже 14-20 строк и будут.

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

А что конкретно это, которое реализовано в ините? Я в убунтушном нашел только обычные операции старта и рестарта.

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

как будто данные федоропроблемы это проблемы классического инита?

Просили пример, а не проблемы вообще. Классический инит, классические проблемы.

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

Во-первых, она уже разорвана; во-вторых, ты просил показать тебе повторение «LoadUnit» - я показал, в чем проблема?

Разбиение по типам, которых меньше 7 - это не разорвана. Это разбиение.

Если ее нужно было бы рвать меньше чем на 7 кусков - плохо но сносно, но твое решение ужасно.

Но то что ты разницы не понимаешь - меня не удивляет.

А правильное решение тебе уже назвал baka-kun - парсер языка.

Ага, языка, которого нет и быть не может. Хорошее решение. :) Не делать так как он сделал, а сделать так как невозможно. Ну что что невозможно, зато правильно...

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

меня интересует только openrc, тыж знаешь, остальные инитсистемы действительно странные, =)

Смотрю сверху вниз перечисляю, что вижу: 1). установка дефолтного юзера группы, конфиг-файла nginx (не conf файла сервиса), 2). проверки конфига, вот тут AVL2 на подобную проблему в другом сервисе ругается (9+10строк) 3). upgrade (переключение nginx на новую версию без потери соединений). (28 строк) 4). удаление pid файла при выключении. (3 строки)

того -42 строки если выпилить. Итого 14 строк если убрать лицензию и комменты.

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

это а). не проблемы инита, а проблема конкретного инит файла, в конкретном дистрибутиве, которая элементарно решается б). это не проблемы гонок в).как эту проблему решает systemd?

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

Ага, языка, которого нет и быть не может.

Если у ini-файла-юнита, или у dbus, или у межмодульного взаимодействия в этом вашем systemd нет формализованных синтаксиса и грамматики, то это даже не камень, а огромный такой гвоздь.

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

Вот это хз, интересно как это решают дистры с systemd.

Либо эти элементарные для стандартных init вещи не решают совсем, оставляя регрессии, либо запускают скрипт, аналогичный init.d, только корявый из-за отсутствия инфраструктуры. Либо переписываю скрипт на C, и в systemd появляется новая «утилита» на ровном месте.

И будет новость: «в systemd x*y^z появилась поддержка nginx, в следующей версии планируется возможность бесшовного перезапуска при обновлении».

baka-kun ★★★★★ ()
Последнее исправление: baka-kun (всего исправлений: 2)
Ответ на: комментарий от derlafff

Это идиотское решение. Должна быть либо единая точка конфигурации, либо она должна отсутствовать. Третий вариант создает неопределенность в конфигурации и в случае использования автоматической установки ОС на сервера может привести к большим проблемам. Например, из 1000 машин 50 загрузятся с fstab, 100 с systemd который подхватит свап и хоум, а остальное будет из fstab и 850 машин только подхватят systemd хоум и свап.

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

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

и генту с ее форками.

Отсыпь на забивку: в Генту OpenRC. Хотя можно и сабж поставить, но нафиг надо: хватает глюков с частью сабжа: udev :( Жаль что идея форкнуть udev заглохла :(

На счет параллельной загрузки сервисов: OpenRC это умеет, но процесс загрузки тогда выглядит ужасно :(

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

Пусть Поттеринг сделает systemd менеджером загрузки - перестанут пихать.

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

Ты несешь какой-то бред. Если бы ты был регистрантом, я бы пометил тебя фразой «человек-фейспалм».

Думаю ты не удивишься. Что у меня ты помечен как полный троль. Судя по тому, что здесь видел. Не у меня одного.

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

Наверное я тоже что-то не так делаю. У меня чисто база данных останавливается 1,5 минуты. А при запуске Hardware Raid инициализирует диски 2 минуты.

linux_art ()
Ответ на: комментарий от baka-kun

Если у ini-файла-юнита, или у dbus, или у межмодульного взаимодействия в этом вашем systemd нет формализованных синтаксиса и грамматики, то это даже не камень, а огромный такой гвоздь.

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

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

это а). не проблемы инита, а проблема конкретного инит файла, в конкретном дистрибутиве, которая элементарно решается

Проблем инита, что у него кругом скрипты.

Давайте отменим rpm. Есть же инсталлеры. А что они кривые и рушат систему, ну так это проблемы инсталлеров...

б). это не проблемы гонок

Напрямую запускаемый говнокод, это проблема всего. Безопасности, гонок и т.д. Гонки, это самое малое, из того, что вылазит.

в).как эту проблему решает systemd?

Упрощает юниты. Позволяет вместо скрипта обойтись конфигом.

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

Проблем инита, что у него кругом скрипты.

Это не проблема инита, кривые скрипты можно чинить.

Давайте отменим rpm. Есть же инсталлеры. А что они кривые и рушат систему, ну так это проблемы инсталлеров...

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

Напрямую запускаемый говнокод, это проблема всего. Безопасности, гонок и т.д.

код systemd тоже гениальностью не отличается, что дальше?

Гонки, это самое малое, из того, что вылазит.

однако, ты так и не удосужился привести пример гонок, которыми, цитирую, кишат инитскрипты.

Упрощает юниты. Позволяет вместо скрипта обойтись конфигом.

в котором не решается эта проблема, прекрасно! В openrc напр. большая часть инитов полностью декларативные, а то, что сделать декларативно нельзя делается скриптом, и в systemd это тоже делается скриптом, или не делается совсем.

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

как эту проблему решает systemd?

Упрощает юниты. Позволяет вместо скрипта обойтись конфигом.

mediatomb, пускаемый под управлением systemd, внезапно перестает использовать свой шелл-конфиг? Чудеса.

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

поставь 5 комментов на страницу и будет 90. Хотя у меня только 5 страниц, все на одной уж слишком много. %)

dr_dobermann ()
Последнее исправление: dr_dobermann (всего исправлений: 1)
Ответ на: комментарий от x-signal

тоже самое только на Си в 50 строк быдлокода - это они считают не трешем))

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

Получается уже 2 языка.

Не два, больше. Каждое взаимодействие порождает свой DSL. Если ты не понимаешь, что и как правильно писать вместо 1200 строк if else if, необходимо подучиться. Начни с понятий синтаксиса, граматик, что такое лексер и парсер.

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

/etc/init.d/nginx configtest && /etc/init.d/nginx reload

Как выглядит в systemd аналог? Никак? А в чем тогда одинаковость работы?

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

mediatomb, пускаемый под управлением systemd, внезапно перестает использовать свой шелл-конфиг? Чудеса.

Ну где ты видел шелл-конфиги в программах? Этот конфиг - часть инита.

В systemd это смотрится вот так:

cat /lib/systemd/system/mediatomb.service 
[Unit]
Description=UPnP MediaServer
After=NetworkManager-wait-online.service network.target

[Service]
Type=forking
EnvironmentFile=-/etc/mediatomb.conf
PIDFile=/run/mediatomb.pid
ExecStartPre=-/usr/sbin/route add -net 239.0.0.0 netmask 255.0.0.0 $MT_INTERFACE
ExecStartPre=-/usr/sbin/ifconfig $MT_INTERFACE allmulti
ExecStart=/usr/bin/mediatomb -d -u $MT_USER -g $MT_GROUP -P /run/mediatomb.pid -l $MT_LOGFILE -m $MT_HOME -f $MT_CFGDIR -p $MT_PORT -e $MT_INTERFACE 

Файл с переменными среды указывается явным образом. И в sytemd если нагадить в этот конфиг, то:

 cat /etc/mediatomb.conf 
## This is a sambel configuration file for the MediaTomb daemon script
## used on Fedora Core

## By default the configuration will be created in /etc/mediatomb

whoami >> /tmp/mediatomb.log
echo "rmm -rf " >> /tmp/mediatomb.log

ничего не получится:

service mediatomb start
Redirecting to /bin/systemctl start  mediatomb.service
[root@avl etc]# 
[root@avl tmp]# ls /tmp/media*
ls: невозможно получить доступ к /tmp/media*: Нет такого файла или каталога

А в обычном init, где народ в скриптах пишет . /etc/mediatomb.conf легко:

[root@avl tmp]# . /etc/mediatomb.conf 
[root@avl tmp]# ls /tmp/media*
/tmp/mediatomb.log
[root@avl tmp]# cat /tmp/media*
root
rmm -rf 

Вот так...

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

На всякий случай, как в init принять заполнять переменные:

grep -P 'sysconfig' /etc/init.d/*

/etc/init.d/crond:[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
/etc/init.d/dhcpd:[ -f /etc/sysconfig/dhcpd ] && . /etc/sysconfig/dhcpd
/etc/init.d/dhcpd6:[ -f /etc/sysconfig/dhcpd6 ] && . /etc/sysconfig/dhcpd6
/etc/init.d/dhcrelay:[ -f /etc/sysconfig/dhcrelay ] && . /etc/sysconfig/dhcrelay
/etc/init.d/functions:      . /etc/sysconfig/init
/etc/init.d/halt:	. /etc/sysconfig/ups
/etc/init.d/httpd:        . /etc/sysconfig/httpd
/etc/init.d/named:[ -r /etc/sysconfig/named ] && . /etc/sysconfig/named
/etc/init.d/named:  [ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
/etc/init.d/netconsole:. /etc/sysconfig/network
/etc/init.d/netconsole:	. /etc/sysconfig/netconsole
/etc/init.d/netfs:. /etc/sysconfig/network
/etc/init.d/network:. /etc/sysconfig/network
/etc/init.d/network:	. /etc/sysconfig/pcmcia
/etc/init.d/nmb:. /etc/sysconfig/network
/etc/init.d/nmb:   . /etc/sysconfig/samba
/etc/init.d/ntpdate:	. /etc/sysconfig/ntpdate
/etc/init.d/rdisc:. /etc/sysconfig/network
/etc/init.d/rdisc:[ -f /etc/sysconfig/rdisc ] && . /etc/sysconfig/rdisc
/etc/init.d/rpcbind:[ -f /etc/sysconfig/network ] &&  . /etc/sysconfig/network
/etc/init.d/rpcbind:[ -f /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
/etc/init.d/rsyslog:if [ -f /etc/sysconfig/$prog ] ; then
/etc/init.d/rsyslog:    . /etc/sysconfig/$prog
/etc/init.d/sandbox:. /etc/sysconfig/sandbox
/etc/init.d/saslauthd:	. /etc/sysconfig/saslauthd
/etc/init.d/sendmail:[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
/etc/init.d/sendmail:    . /etc/sysconfig/sendmail
/etc/init.d/smb:. /etc/sysconfig/network
/etc/init.d/smb:   . /etc/sysconfig/samba
/etc/init.d/snmpd:  . /etc/sysconfig/snmpd
/etc/init.d/snmptrapd:  . /etc/sysconfig/snmptrapd
/etc/init.d/sshd:[ -f /etc/sysconfig/sshd ] && . /etc/sysconfig/sshd
/etc/init.d/udev-post:. /etc/sysconfig/udev
/etc/init.d/winbind:. /etc/sysconfig/network
/etc/init.d/winbind:[ -f /etc/sysconfig/samba ] && . /etc/sysconfig/samba
/etc/init.d/xinetd:test -f /etc/sysconfig/network && . /etc/sysconfig/network
/etc/init.d/xinetd:test -f /etc/sysconfig/xinetd && . /etc/sysconfig/xinetd
AVL2 ★★★★★ ()
Ответ на: комментарий от qnikst

Это не проблема инита, кривые скрипты можно чинить.

Эти скрипты пишут сторонние разработчики. Чинить можно, но это бесконечный процесс. Больше скриптов, больше ошибок.

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

И это решение. Как и в systemd

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

одно из двух - или принимать существующие проблемы или нет.

Мне в свое время очень понравилось то, что сами rpm-пакеты пассивны. Все активные действия делаются пакет-менеджером, который написан грамотными людьми, а не так, как в венде, где каждый сам себе ваяет install.exe и делает в нем все, что хочет.

Так почему в ините все должно быть по другому? Почему скрипты?

код systemd тоже гениальностью не отличается, что дальше?

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

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

Эти скрипты пишут сторонние разработчики.

меинтейнеро проблема, да и не проблема вовсе если нормально подходить к вопросу, а не пихать уйму логики в скрипт, но от этого systemd не защищает.

Чинить можно, но это бесконечный процесс. Больше скриптов, больше ошибок.

это не повод удалять скрипты.

И это решение. Как и в systemd.

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

Мне в свое время очень понравилось то, что сами rpm-пакеты пассивны.

насколько я помню там можно писать произвольный баш код, ну и rpm(не src), это набор вполне определенного узкого круга действий, их положить на dsl просто, и в rpm dsl, а не декларативное описание.

Так почему в ините все должно быть по другому? Почему скрипты?

Например, потому, что в общем случае на скрипты инициализации ложится плохо формализуемая задача, зачастую требущая доводки под систему (в сложных случаях), а Shell зарекомендовал себя как хороший клей. Естественно увеличивается опасность работы, но тут уже стандартный вариант это выделение общих блоков, таких как preload [1] функции в LSB, или runscript в openrc.

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

не знаю как у вас в федоре, а у нас инитскрипты тестятся и проверяются меинтейнерами, причем как пакета, так и команды openrc.

[1] я честно не помню терминологии, а гуглить сейчас не хочу, в общем тот набор функций, который обязан быть загружен перед запуском init скрипта.

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

А давайте изо ВСЕХ языков программирования выпилим обработку исключений, раз быдлокод не нужен

Exceptions это больше про flow control.

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

mediatomb, пускаемый под управлением systemd, внезапно перестает использовать свой шелл-конфиг? Чудеса.

Ну где ты видел шелл-конфиги в программах? Этот конфиг - часть инита.

/me пожимает плечами в полном недоумении. Т.е. какие-то умники использовали в sysvinit шелл-конфиг, и это вина sysvinit. Потом от шелл-конфига отказались, и это заслуга systemd. Логика - просто класс.

И в sytemd если нагадить в этот конфиг

А в systemd просто гадить надо по-другому:

[Service]
ExecStart=rm -rf /

Вот так...

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

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

Мне в свое время очень понравилось то, что сами rpm-пакеты пассивны.

насколько я помню там можно писать произвольный баш код

Можно. И его пишут.

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

/me пожимает плечами в полном недоумении. Т.е. какие-то умники использовали в sysvinit шелл-конфиг

как знал...

Я уже привел выжимку умников из centos, которые используют шелл-конфиги. Их там тонны.

А в systemd просто гадить надо по-другому:

В этом и состоит задача инита - заставить совершать ошибки в явном виде.

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

Можно. И его пишут.

1) В большинстве пакетов нет триггеров. Наличие скрипта в пакете само по себе является признаком возможных проблем.

2) Перед установкой пакета можно посмотреть, есть ли в нем скрипты и что они делают.

3) http://bb.comp-house.ru/comp-house.repo/wiki/abuse-rpm-scripts

Лично мне такая ситуация нравится гораздо больше, чем то, что творится инсталляторами...

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

в большинстве пакетов нет триггеров

И ведь не возразишь - триггеры в самом деле используются редко. Молодец, ловко ушел от темы о {пре,пост}-инсталляционных скриптах.

мне такая ситуация нравится гораздо больше, чем то, что творится инсталляторами...

Нерелевантная демагогия.

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

задача инита - заставить совершать ошибки в явном виде.

Задача инита - инициализировать систему. Правда, systemd - не инит.

tailgunner ★★★★★ ()

Интересно, когда уже с journald что-нибудь придумают, он как тек, так и продолжает, даже в persistent, по 20MB за сутки.

Единственный способ — Storage=nonе и запустить нормальный логгер, а не это прибитое шурапами поделие очкастого чмошника.

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

В генте есть и openrc, и systemd. А понятия «из коробки» в генте нет.

А в архиве третьей стадии у нас что? :}

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

Жаль что идея форкнуть udev заглохла

што

$ eix -e eudev
[U] sys-fs/eudev
     Available versions:  1.1 (~)1.2 (~)1.2-r1 (~)1.3 **9999 {doc gudev hwdb introspection keymap kmod +modutils +openrc +rule-generator selinux static-libs test ABI_MIPS="n32 n64 o32" ABI_X86="32 64 x32"}
     Installed versions:  1.0^t{tbz2}(03:58:51 14.06.2013)(gudev hwdb modutils openrc rule-generator -doc -introspection -keymap -kmod -selinux -static-libs)
     Homepage:            https://github.com/gentoo/eudev
     Description:         Linux dynamic and persistent device naming support (aka userspace devfs)

На счет параллельной загрузки сервисов: OpenRC это умеет, но процесс загрузки тогда выглядит ужасно

У меня всё выглядит опрятно. Попробуйте переставить руки.

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

Задача инита - инициализировать систему. Правда, systemd - не инит.

ну тогда 99% инитов - чистый оверхед. В слаке или арче есть скриптик, поднимающий систему и хватит. А все эти уровни загрузки, сервисы - ересь одна...

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

И ведь не возразишь - триггеры в самом деле используются редко. Молодец, ловко ушел от темы о {пре,пост}-инсталляционных скриптах.

Странная логика. Триггер, это скрипт, который вызывается автоматически по событию. Чем тебе {пре,пост}-скрипты не триггеры, хрен знает...

Скриптов/триггеров в рпм- пакетах реально мало. В большинстве случаев эти скрипты состоят из одной-двух строк типа вызова ldconfig в библиотеках или там update-desktop-file.

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

AVL2 ★★★★★ ()

Бывало, когда я был молод, я писал CGI скрипты на C++. Теперь я не страдаю х....й, в отличие от... Хотя, это было бы прекрасно, если бы, например, Makefileы обрабатывались CC непосредственно...

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

все эти уровни загрузки, сервисы - ересь одна...

Дык, собственно... А тут многие спрашивают, почему BSD всё не умирает... Для слаковода преимущества systemd странны и неочевидны.

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