LINUX.ORG.RU

systemd — новый подход к инициализации системы

 , , smf, ,


2

2

Lennart Poettering, сотрудник компании Red Hat, представил концепцию принципиально нового механизма управления инициализацией системы — systemd (system daemon), которая вобрала в себя достоинства классического System V init и более современных launchd (Mac OS X), SMF (Solaris) и Upstart (Ubuntu, Fedora), но при этом лишена многих их недостатков. В разработке этого проекта ему помогали сотрудники Red Hat, Novell, IBM, Intel и Nokia.

systemd опирается на современные linux-технологии: cgroups, AutoFS, D-Bus, и при этом совместим с исторически устоявшимися механизмами: init-скриптами, стандартными командами shutdown, poweroff и т.п. Предоставляемый systemd функционал позволяет заменить не только систему инициализации, но и ряд других подсистем, в частности, cron, (x)inetd, xdm/kdm/gdm/..., частично даже SELinux.

Основные идеи, использованные при создании systemd:

  • Контроль над сокетами. Многие демоны, запускаемые при инициализации, взаимодействуют с другими демонами через unix domain и сетевые сокеты, и большинство существующих систем инициализации запускают демона-клиента только после того, как демон-сервер запустится и создаст сокет. Вместо этого, systemd создает сокеты, а затем запускает демонов, передавая им эти сокеты. Даже если демон-клиент запустится быстрее и начнет использовать сокет раньше сервера, ничего страшного не произойдет: его запрос будет буферизован и передан серверу, как только тот сможет его обработать. Такой подход уже используется в Mac OS X (launchd), позволяя этой ОС достигать впечатляющей скорости загрузки.

    Аналогичный принцип используется systemd и при запуске служб, использующих шину D-Bus.

    Кроме того, возможен автоматический запуск служб при обращении к заданным сокетам (см. ниже).

  • Фоновое монтирование. Такие операции, как монтирование, проверка и активация квот файловых систем, занимают весьма значительную долю загрузочного времени. В большинстве современных систем они выполняются последовательно, до запуска всех демонов. systemd же предлагает монтировать не-жизненно-важные ФС только тогда, когда они кому-то понадобятся. Для этого используется механизм AutoFS. Например, многие служебные демоны вовсе не обязаны ждать, пока смонтируется огромный и к тому же зашифрованный /home.

    Разумеется, этот подход неприменим к /, /proc, /sys и т.п.

  • Минимизация числа вспомогательных процессов. В настоящее время значительная часть работ по инициализации производится шелл-скриптами, что приводит к колоссальным времязатратам. В частности, Леннарт пишет:

    On my system the scripts in /etc/init.d call grep at least 77 times. awk is called 92 times, cut 23 and sed 74,

    при этом замечая, что почти каждый такой запуск влечет накладные расходы на поиск библиотек, подгрузку данных интернационализации (i18n) и т.п.

    В качестве альтернативы Леннарт предлагает предлагает переписать критичные участки на C, а также вынести часть функционала в самих демонов и в systemd. Сейчас для systemd уже готовы написанные на C подсистемы монтирования и установки имени хоста. До полной победы, отмечает Леннарт, работа предстоит огромная, но результат того стоит.

  • Отслеживание процессов. В ныне используемых системах инициализации в принципе возможна такая ситуация, когда при неправильном форке процесс может «потеряться». Например, так может произойти с некорректно написанным CGI-приложением, и процесс останется работать даже после остановки веб-сервера.

    Для предотвращения таких ситуаций systemd использует интегрированный в ядро Linux механизм контрольных групп (cgroups). Если приложение не имеет доступа к псевдо-ФС, управляющей работой cgroups, то оно не может самостоятельно покинуть свою группу и «потеряться».

    Также к этой группе задач относится и автоматический перезапуск демонов, перенаправление их stdout/stderr на выбранные TTY или в системный журнал, регистрация всех запусков и остановок служб, и многое другое.

  • Ограничение процессов. systemd предоставляет множество возможностей ограничить или расширить полномочия процессов, контролируя такие параметры, как uid, gid, umask, рабочий и корневой каталоги, класс и приоритет CPU и I/O, наличие доступа на чтение и запись к смонтированным файловым системам и отдельным каталогам и т.п. Также можно использовать возможности по ограничению ресурсов, предоставляемые cgroups.

Базовым элементом systemd являются модули (units), которые связаны между собой и имеют определенный тип. Каждый модуль может требовать для своей работы другие модули, конфликтовать с модулями, запускаться только после или до определенного модуля (директивы конфигурации Requires, Conflicts, Before, After, Wants). Из типов модулей определены:

  • service — обычный демон, поддерживающий операции start, stop, restart, reload. Может быть представлен родным (native) файлом конфигурации systemd или System V init-скриптом.
  • socket. При обращении к сокету генерируется событие, для которого можно настроить обработчик. Например, автоматически запускать определенные службы при обращении к заданному сокету. В этом отношении systemd похож на давно известный (x)inetd, однако при этом поддерживает unix domain сокеты и FIFO.
  • device. Отметив нужные устройства в конфигурации udev, впоследствии можно использовать такие события, как появление и удаление устройства, в качестве событий systemd, назначив на них обработчики. Например, при появлении устройства bluetooth будет запущена соответствующая служба.
  • mount. systemd контролирует все точки монтирования файловых систем. В целях обратной совместимости поддерживается сбор информации о точках монтирования из /etc/fstab.
  • automount. Для помеченных таким образом точек монтирования, монтирование выполняется только при обращении к ним.
  • target. Более гибкий аналог уровней исполнения (runlevels), используемых в System V init. Представляет собой группу служб, объединенных по функциональному назначению. Например, multi-user.target идентичен runlevel 5, а bluetooth.target приводит к инициализации подсистемы bluetooth.
  • snapshot — во многом похож на target. Позволяет «запомнить» существующую конфигурацию units (запущенных служб, открытых сокетов, смонтированных ФС) с тем, чтобы в дальнейшем восстановить это состояние. Позволяет, например, перейти в emergency shell (сейчас это init 1), а затем полностью восстановить набор запущенных служб. Другой пример — выход системы из состояния suspend.

Надо заметить, что systemd отличается от SMF, во-первых, тем, что позволяет оперировать не только зависимостями между службами, но и событиями, например, «готовность устройства» или «обращение к сокету». Во-вторых, systemd использует более простой формат файлов конфигурации (.desktop aka .INI против XML в SMF).

От upstart же systemd отличается более высокой степенью параллелизации, и как следствие, более высокой скоростью загрузки. Например, если демон A требует для работы сокет, открытый демоном B, то upstart сначала запустит демона B, а затем демона A, в то время как systemd создаст сокет сам и запустит обоих демонов одновременно, что занимает примерно в два раза меньше времени. Используемый в upstart принцип, когда ключевыми событиями является лишь запуск и остановка демона, Леннарт и его коллеги считают изначально неэффективным.

Well, the point of the part about Upstart above was to show that the core design of Upstart is flawed, in our opinion. Starting completely from scratch suggests itself if the existing solution appears flawed in its core. However, note that we took a lot of inspiration from Upstart's code-base otherwise.

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

★★★★

Проверено: isden ()
Последнее исправление: isden (всего исправлений: 2)

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

>А теперь расскажите нам всем, как вы это сделаете?
Я, конечно, ничерта не понимаю в линупсах, но autofs

Вы уж определитесь, можно будет, или нельзя :-)

Просто перечитайте исходное предложение во второй раз.

Deleted
()

Закопать! Срочно! Убить в зародыше пока не разрослось!

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

Предоставляемый systemd функционал позволяет заменить не только систему инициализации, но и ряд других подсистем, в частности, cron, (x)inetd, xdm/kdm/gdm/...

Нафиг такого монстра. Адский монолитный велосипед, разрабатываемый единственным разработчиком, глючный и с риском, что в любой момент его разработку забросят и будет как с халом. Он станет узким местом всей системы. Повиснет смонтированная по самбе шара - повисло все. Кому нужен монстр, если все по отдельности (upstart, xinetd, cron, autofs) уже есть и отлично работает? К тому же все сетевые демоны ведь не просто так не запихивают в xinetd.

Хотя чего еще ждать от автора пульсаудио...

PS: ну расскажите ему уже кто-нибудь про базовый принцип еще со времен юникс:

Делай одно дело, но делай его хорошо.

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

> Закопать! Срочно! Убить в зародыше пока не разрослось!

А я читаю про upstart и тихо фигею - такая уж наколенная поделка :)

Кому нужен монстр, если все по отдельности (upstart, xinetd, cron, autofs) уже есть и отлично работает?

upstart собирается заменить и cron, и xinetd. Походу у всех изобретателей новых init - мания величия.

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

> а ты предусмотрел в своем systemd например возможность сделать такую инструкцию, как { cd /dev/spool && for i in * ; do setup_this_device $i; done; }? Не предусмотрел? Какая жалость! Или предусмотрел через возможность вписать свой скрипт в схему инициализации через специальный враппер?

когда я читал статью, у меня тоже такой вопрос возник — и сложилось впечатление, что можно дополнить предложенную схему такой возможностью — только видимо не враппер, а запуск (точне м.б. exec) sh для этого

Ну так во втором случае, чем твое решение отличается от классического /etc/rcX.d/*?

тем, что *твоя* инструкция будет наравне с остальными распараллелена; т.е. запущена сразу, а в случае, если setup_this_device дергает еще не примонтированную ФС, то будет выполнена как только та ФС примонтируется

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

> grep у него тормозит, блин.

что касается времени запуска, то это чистые понты

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

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

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

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

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

Есле все делать на зависимостях, то система будет крайне сложной и запутанной.

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

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

никто же не заставляет. можно пользоваться CentOS, например

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

>Ждем в Дебиане... (плача) ...через года 3... ну хотя бы в experimental

Лет 7-8.

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

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

Да, я согласен с тем, что в целом устройство «ранешнего» линукса (и других фрюниксов) было простым и даже примитивным. Но несмотря на это, знание даже о таком устройстве воспринимается «обычными людьми», как «тайна, покрытая мраком»... В этом смысле разница между старыми подходами и новыми есть только для людей, которые успели хорошо познакомиться со старыми, но ещё не успели привыкнуть к новым. Увы, это неизбежная часть жизни. Вон, старики по десять минут дорогу перейти не могут. Нынешний дорожный трафик их просто пугает, в их молодости всё было совсем по-другому. (у нас, кстати, как правило, водители стали останавливаться даже перед нерегулируемым пешеходным переходом, но пешеходу для этого нужно недвусмысленно высказать желание перейти улицу)

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

> Вон как здорово, когда вместо убогой консоли, сыпящей кучей непонятных сообщений, виден красиво переливающийся ползунок...

Совсем несвязанные с IT вендузятники видя эти непонятные сообщения у меня в консоли при буте фтыкали на них как на немерянную крутость, а не на их пошлый прогрес при буте XP.

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

% grep -rn -E 'sed |awk |grep |cat |cut ' /etc/rc.d|wc -l
32
% grep -rn -E 'sed |awk |grep |cat |cut ' /usr/local/etc/rc.d|wc -l
6
% grep -rn -E 'sed |awk |grep |cat |cut ' /etc/rc.subr|wc -l
1

FBSD 8.0. Десктопная машина.

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

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

% ls -lh /etc/rc.subr
-rw-r--r-- 1 root wheel 36K 3 дек 08:31 /etc/rc.subr

Очевидно это крайне сложно и запутанно.

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

Почему? Справляемся же с make'ами худо-бедно. В конце концов, аналог make -dA никто не запрещает сделать.

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

> несколько смущает, что Linux (как впрочем и любая другая крупная система) со временем начинает всё больше и больше усложняться. Впрочем, у нас всегда есть в запасе Slackware ;) runtime * (03.05.2010 12:14:33)

Slackware - это SystemBSD. Сейчас же хотят сделать бинарный реестр как в Виндовс. Какой это будет кошмар для _многопользовательской_ системы мы видим по миллионной вирусной базе Касперского.

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

> тут предложено находить все зависимости автоматически — это позитивно;

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

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

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

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

upstart собирается заменить и cron, и xinetd. Походу у всех изобретателей новых init - мания величия.

upstart все же поскромнее. От cron-а он думает взять только некоторые фичи старта по времени, вроде «запустить через 15 минут после апача». И то - это только в планах, если очень будет нужно. А про inetd там написано, что это вообще не работа upstart-а, а в лучшем случае - отдельного приложения, использующего libupstart.

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

>Невозможно их автоматически найти. Нельзя же угадать, от чего зависит апач - от mysql, postgresql или чего-то еще. Все равно руками прописывать.

Не, ну в теории можно по сокетам определить. Как полезет к СУБД, так её и стартовать.

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

>у нас, кстати, как правило, водители стали останавливаться даже перед нерегулируемым пешеходным переходом

Это обязательно, если пешеходы есть.

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

>при том, что там JFFS2 с компрессией

А чего UBIFS-то, ниасилил?

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

upstart собирается заменить и cron, и xinetd. Походу у всех изобретателей новых init - мания величия.

upstart все же поскромнее.

Отчасти да, но после чтения его Вики я перестал понимать, как он работает, но зато появилось подозрение, что спроектирован он криво :)

http://www.netsplit.com/2008/05/01/upstart-05-relationships/

«job A would have:

start on stopping B
stop on starting B

and job B would have:

start on stopping A
stop on starting A

Such a definition would create two jobs that flip-flopped between each other»

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

А про inetd там написано, что это вообще не работа upstart-а

Из upstart FAQ:

«Will Upstart replace inetd?

Maybe»

Да, там «maybe» и «perhaps», но время покажет.

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

>А, гентушнег... пользуешься portage и что-то имеешь против скриптовых языков?

libastral.so? Может, у него paludis?

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

>что касается уродского числового префикса в стартовых скриптах

Это только в корявых/древних реализациях.

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

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

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

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

Да, надо двигаться в сторону event-driven систем иницализации. И чтобы зависимости были. Но все это надо проектирвоать тщательно, документировать тщательно, чтобы решение было легко скриптуемым и управляемым, понятным, и чтобы лишние сущности не привлекались. Проектировать надо, чтобы было надолго. Наколенные разработки больше не нужны. UNIX-way для меня это еще и стабильность инфраструктуры. А сейчас новаторы-инноваторы норовят каждый год что-то менять. Сегодня upstart, а завтра systemd, а послезавтра еще кто-то что-то родит. И вся та стабильность (повторю, что стабильность не только в техническом плане), которой юниксоиды-линуксоиды гордились, станет легендой из прошлого.

За HAL давно надо было кому-то по голове надавать. Я даже не про идею говорю тут, не про техническую сторону этого HAL, а про то, что документации внятной не было. У разработчиков было семь пятниц на неделе: то одно поменяют, то другое. В итоге настройки при обновлении отваливались. А какие-то горячие головы потянули это еще в иксы. Должно же быть какое-то общественное порицание (у нас же сообщество!). Вот я его и выражаю тут. Надоели мне такие методы работы. Я надеюсь, что у Debian хватит ума не тащить грязное в рот, пока его не помыли и не причесали. А Ubuntu пусть себе экспериментирует.

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

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

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

Когда делаешь бекпорт программ из sid в stable, то наталкиваешься на такое иногда. Версия 0.15 чего-то там отличается от версии 0.16 так, что уже надо править код. Ребятки, а проектировать не пробовали? Ну так, чтобы хотя бы в рамках major-версий было все стабильно?

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

>> Вот думаю - сказать тебе «ПНХ» или спросить «ты о чем?».

О! Сработало.

Ты опять в эфире, толстый?

$ zgrep ^etc/init.d <Contents-powerpc.gz | wc -l

891

А теперь - ПНХ.

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

> Версия 0.15 чего-то там отличается от версии 0.16 так, что уже надо править код. Ребятки, а проектировать не пробовали? Ну так, чтобы хотя бы в рамках major-версий было все стабильно?

major-версия 0 не может быть стабильной, давно пора знать. На то она и 0.

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

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

правильно ответили про make :-)

на самом деле системд — это ЛЕНИВАЯ инициализация по АВТОМАТИЧЕСКИ найденным зависимостям + параллельное исполнение инит-скриптов с указанными зависимостями

можно попытаться критиковать его можно за лень

1. в некоторых случаях это будет непривычно выглядеть, например, возможно будет возможен логин при fsck-емом /home — тогда логин будет ждать конца fsck, а юзер недоумевать

видимо, необходим демон, показывающий, что щас еще в процессе загрузки

2. ну там например возможно, что мускул стартанет только тогда, когда юзер попросит нестатическую страницу (требующую БД)

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

в общем, надо несколько умерить лень этой системы

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

> Я уже мысленно представила это: системный адимнистратор перенес спул сендмайла куда-нибудь на другйю файловую систему, после чего сендмайл проснулся и не нашел своего спула, ибо файловая систем «монтируется в фоне». Фантастическое и феерическое зрелище...

прочти статью и критикуй со знанием дела (хотя статься да, написано слишком размазанно)

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

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

А в этом что плохого? На девелоперской тачке я б вообще фичей назвал. А на продакшне - ну первый запрос во многих фреймворках не быстрый. Хотя согласен, возможность сказать, что сервис НУЖЕН - нужна.

vga ★★
()

конечно, демоны (типа апача) надо переписывать для *более* полноценной работы под системд, но у этого есть плюсы:

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

2. общий код вынесен в одно место (а-ля inetd, только без тормозов на запуск)

3. можно закрыть ВСЕ порты, которые не слушает системд (так как демоны получают порты только от него) — получаем единое место конфигурирования

www_linux_org_ru ★★★★★
()

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

это говорит о том, что ручное указание зависимостей нужно — не все может быть найдено автоматически (хотя некоторые притензии к *такому* способу реализации шейпера/приоритайзера можно указать)

боюсь только, что у поттеринга карма плохая...

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

> Научились разрешать циклические зависимости?

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

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

> Круто. Ждем в Дебиане... (плача) ...через года 3... ну хотя бы в experimental...

на десктопе можно хоть щас, если не патчить демоны

а вообще можно и патчить демоны и собирать под системд — все же развлечение — не все же гентушникам развлекаться, нам тоже хочется!

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

>на десктопе можно хоть щас, если не патчить демоны

Есть официальные дебы? Если нету - нафиг, нафиг.

а вообще можно и патчить демоны и собирать под системд — все же развлечение — не все же гентушникам развлекаться, нам тоже хочется!


Собираю с сорцов некоторые пакеты, больше красноглазия не хочется:)

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

> 30 лет init-скрипты работали и всех устраивали,

они и дальше будут работать, но это не отменяет того, что система цифровых префиксов — уродская;

это несколько компенсировалось тем, что были админы, специально дрессированные под нее и сжившиеся с этим уродством; но сейчас жизнь меняется

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

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

> 30 лет init-скрипты работали и всех устраивали,

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

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

>Обоснуешь, или так, дело вкуса

Отвечу я: это мудачество - костыльная замена автоматических зависимостей, давно требующая, чтобы ее похоронили.

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

> это мудачество - костыльная замена

Откуда вы такие экспрессивные беретесь...

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

Обоснуешь, или так, дело вкуса?

обосную;

1. для кого создавалась эта система? я предполагаю, что для человека

2. почему человек должен помнить, что <сколько-то там> означает что все интерфейсы подняты, еще <сколько-то там> означает, что БД запущены (и да, я не помню этих цифр) ? это примерно как ЯП, где нельзя определить или задефайнить константу

3. хорошо, пусть префиксы — можно было бы дать на них по одной букве (это если нужна совместимость с говном мамонта, где имена файлов короткие) и писать префиксы в виде --n-d--xyz-apache, что означает, что апачу нужна сеть (n), база данных (d) и еще че-то (xyz)уже апущенной; префиксы сортируются как и раньше, и даже можно и цифирку одну добавить в префикс

кстати в дебиане ленни не только префиксы, вот например

$ head /etc/init.d/hal
#! /bin/sh
### BEGIN INIT INFO
# Provides:          hal
# Required-Start:    $remote_fs dbus
# Required-Stop:     $remote_fs dbus
# Should-Start:      $syslog acpid
# Should-Stop:       $syslog acpid
# Default-Start:     2 3 4 5
# Default-Stop:      1
# Short-Description: Hardware abstraction layer

это я к тому, что уродство цифровых префиксов не означает автоматической хорошести системд

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

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

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

> Обоснуешь, или так, дело вкуса?

если кратко: а давай мы ключи всех команд *тоже* сделаем чисто цифровыми?

wget -37 -23 -45 http://example.com

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

1. для кого создавалась эта система? я предполагаю, что для человека

Для человека и для скрипта.

2. почему человек должен помнить, что <сколько-то там> означает что все интерфейсы подняты, еще <сколько-то там> означает, что БД запущены

Ы? Цифры ничего такого не значат:

$ ls /etc/rc2.d/
README           S20distcc             S25nfs-user-server
S05loadcpufreq   S20exim4              S26network-manager
S05vbesave       S20kerneloops         S26network-manager-dispatcher
S10rsyslog       S20kvm                S30gdm
S12acpid         S20nfs-common         S30system-tools-backends
S12dbus          S20nfs-kernel-server  S89anacron
S14avahi-daemon  S20openbsd-inetd      S89atd
S16ssh           S20rsync              S89cron
S19autofs        S20vsftpd             S99acpi-support
S19cpufrequtils  S24dhcdbd             S99rc.local
S20apmd          S24hal                S99rmnologin
S20cups          S25bluetooth          S99stop-bootlogd

имя службы и ее порядковое место в запуске. Без затей, но зато работает. Как ты одной командой посмотришь порядок запуска служб в upstart?

префиксы в виде --n-d--xyz-apache, что означает, что апачу нужна сеть (n), база данных (d) и еще че-то (xyz)уже апущенной

А вот это уже уродство.

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

> системд — это ЛЕНИВАЯ инициализация по АВТОМАТИЧЕСКИ найденным зависимостям + параллельное исполнение инит-скриптов с указанными зависимостями

Ну нельзя их автоматически обнаружить. Не сможет systemd пропарсить конфиг mysqlя, и узнать, на каком порту он висит, не сможет и пропарсить конфиг ftp-сервера, чтобы узнать, что он авторизуется через этот mysql (а mysql не только через TCP работает). Это только в сферической ОС в вакууме может быть. На практике это сделать не возможно, так же, как не возможно полностью автоматическое определение зависимостей в пакетах.

В пылу фантазий забывают, зачем все это надо, и пытаются стрелять по воробью даже не из пушки, а из линкора Миссури. А надо это для быстрого старта десктопа. Ну и зачем на десктопе автоматическое определение зависимости mysqlя, апача и ftp-сервера? Для десктопа надо только запустить Х-ы как можно раньше, с чем успешно справится и upstart.

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

PS: а про лень - замечание правильное. По сути Леннарт пытается всем доказать, что-то вроде «Лисп лучше, чем Cи, а Си вообще дефективен по дизайну».

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

>> 2. почему человек должен помнить, что <сколько-то там> означает что все интерфейсы подняты, еще <сколько-то там> означает, что БД запущены

Ы? Цифры ничего такого не значат:

детский сад какой-то (или я чего-то совсем не понимаю)

1. цифры назначаются (в дебиане) в пакете (допустим, в postinstall скрипте) и *едины* для всего дистрибутива

2. допустим ты пакуешь в пакет какую-то свою прогу (например, no-sql хранилку данных; она может слушать как на наружных сетевых интерфейсах, так и на 127.0.0.1 и юзаться апачем/лайти/...); ты понимаешь, что не можешь ей присвоить от балды номер? ты понимаешь, что тебе придется узнавать номера тех фич, которые она юзает (интерфейсы) и тех, которые ее юзают (апач) ?

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

> Ну нельзя их автоматически обнаружить. Не сможет systemd пропарсить конфиг mysqlя, <...> Для программистов, страдающих этим синдромом - читать Джоэла «Астронавты архитектуры».

это *тебе* сначала надо прочитать статью по ссылке — тогда бы ты понял, что системд и не пытается парсить конфиг мускула

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