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)
Ответ на: комментарий от BSD

> Но BSD-init наше все

Наверное, Вы опечатались, когда хотели написать «Service Control Manager и net start/net stop наше все»? :-)

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

Хорош? Ню-ню... Как в этом вашем хвалёном БСД-ините реализовать без костылей зависимости сервисов? Как запустить апач строго после мускуля?

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

А что, у вас ещё не уехали массово на initng? Или уже обратно приехали? :)

P.S. BSD-lovers, загляните в /usr/local/etc/rc.d . Сильно удивитесь :)

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

> Как запустить апач строго после мускуля?

Как-как...

/usr/local/sbin/mysqld $MYSQLD_ARGS
...
/usr/local/sbin/apachectl start

PS сейчас фряхи под руками нету, ставить лень, поэтому возможны непринципиальные вариации :)

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

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

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

>> Как запустить апач строго после мускуля?

Как-как...

/usr/local/sbin/mysqld $MYSQLD_ARGS
...
/usr/local/sbin/apachectl start

PS сейчас фряхи под руками нету, ставить лень, поэтому возможны >непринципиальные вариации :)

Каждый раз вручную???

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

Да, вроде, и не уезжали... по крайней мере массово.

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

Ну так не все дистры линукса одинаково полезны.

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

# head /usr/local/etc/rc.d/mysql-server
#!/bin/sh
#
# $FreeBSD: ports/databases/mysql50-server/files/mysql-server.sh.in,v 1.4 2008/07/30 06:11:16 ale Exp $
#
# PROVIDE: mysql
# REQUIRE: LOGIN
# KEYWORD: shutdown

# head /usr/local/etc/rc.d/apache2
#!/bin/sh
#
# $FreeBSD: ports/www/apache20/files/apache2.sh.in,v 1.3 2007/09/18 19:18:09 clement Exp $
#
# PROVIDE: apache2
# REQUIRE: LOGIN cleanvar mysql
# KEYWORD: shutdown

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

> PS сейчас фряхи под руками нету, ставить лень, поэтому возможны непринципиальные вариации :)

Очень даже принципиальные. Use PROVIDE:/REQUIRE:
man rc, rc.subr

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

Ну, пожалуй, метода сравнима с тем, что мы видим на SysV-style скриптах в SuSE и Debian:

/etc/init.d/samba из Lenny

#!/bin/sh

### BEGIN INIT INFO
# Provides: samba
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Should-Start: slapd
# Should-Stop: slapd
# Short-Description: start Samba daemons (nmbd and smbd)
### END INIT INFO

Во-первых, это уже не BSD-style init :) Ну и, во-вторых, как показала практика того же Debian и SuSE, порядка в управлении сервисами стало, может быть, и больше, но скорости загрузки сама по себе такая методика не добавляет. Хотя, конечно, я допускаю, что фряшная реализация менее топорная и/или менее параноидальная.

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

Этот «не BSD-style» существует со времен 5.x ветки. А про скорость.. кому она нафиг всралась при загрузке при трехмесячном аптайме на десктопе. И да. Фря грузится на порядок быстрее любого линукса.

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

> P.S. BSD-lovers, загляните в /usr/local/etc/rc.d . Сильно удивитесь :)

В OpenBSD нет такого ;) И скриптов для запуска локальных демонов тоже. Прописывай в /etc/rc.local и всё.

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

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

> Прописывай в /etc/rc.local и всё.

Ну я там и показывал, как организовать запуск apache после mysql ;)

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

Ну, и поэтому тоже. Но не только. В RH-like заметно более «индустриальная» и «навёрнутая» система запуска, причём, всё на том же небыстром bash. В Debian'е в качестве /bin/sh по умолчанию dash, если я правильно помню, но развесистость скриптов сравнима с RH. Плюс заметно более навороченные возможности по «системной инициализации» (штатно идёт поддержка cryptosetup, mdadm и прочих прелестей), что не добавляет скорости rc.sysinit'у & Co.

В общем, у меня сложилось мнение, что убунтеры в этом вопросе впереди планеты. И «навороченность» и модульность сохранена, и скорость приличная. Конечно, не без багов, но кто из нас без греха...

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

> кому она нафиг всралась при загрузке при трехмесячном аптайме на десктопе.

заметная часть треда про то, что на (домашнем) компе трёхмесячный аптайм противопоказан.

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

> Этот «не BSD-style» существует со времен 5.x ветки.

Я рад, что разум в итоге восторжествовал даже у фряшников :) Любители опенки, вон, до сих пор в rc.local пишут и считают, что их волосы: 1. есть 2. мягки и 3. шелковисты

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

Экий вы въедливый. =) Скажем так. Скорость загрузки достаточна, чтобы не напрягаться по этому поводу.

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

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

ак говорил мой многоуважаемый шеф.

1. Не лезь в исправный механизм.
2. Даже если инструмент устарел, но его применение решает задачу хотя бы на 60%, то нет необходимости применять что-то новое.

Очевидно, что в опенке:
1. Народ более адекватный. Ибо зачем параллелить задачи при убогой SMP. Текущая схема задачу свою решает достаточно хорошо, чтобы не заморачиваться.
2. У них есть чем заняться и без волос.

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

Ну, насчёт «хорошо» - это вопрос привычки ;) У меня товарищ как на опенку переехал, так на вопрос «ну и как справляешься?», стал отвечать: «А чо, емакс и нетскейп запускаются, что ещё нужно для домашнего компа :)»

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

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

Дело в том, что параллельная загрузка не включена по-умолчанию. Я пробовал параллельную как-то - работает. Потом её по-умолчанию выключили, но так как мне не критично, я включать её не стал.

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

Ну, в отличие от tailgunner'а я мал-мал экспериментировал с параллельным запуском. Сам по себе этот метод (грубо говоря, for i in /etc/init.d/*; do $i start &; done) особого прироста не даёт, т.к. мы быстренько упираемся в лимит ресурсов (ну, наиболее вероятно, что в I/O). Это всё равно что типичную десктопную машинку задр...ть при помощи make -j 10 - и ей плохо, и тебе никакого толку.

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

> Это всё равно что типичную десктопную машинку задр...ть при помощи make -j 10 - и ей плохо, и тебе никакого толку.

Доо... аналогии такие аналогии. make -j2 на типичной десктопной машине даст почти 2-кратный выигрыш.

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

>Сам по себе этот метод (грубо говоря, for i in /etc/init.d/*; do $i start &; done) особого прироста не даёт, т.к. мы быстренько упираемся в лимит ресурсов (ну, наиболее вероятно, что в I/O).

У меня метод прирост дал. На глаз. Вероятно, потому, что у меня двухъядерник.

А лимит ресурсов будет всегда, при любом методе. Или вы уже нашли способ его обойти?

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

> Я пробовал параллельную как-то - работает. Потом её по-умолчанию выключили, но так как мне не критично, я включать её не стал.

Кстати, как ее включить? Попробую при следующей перезагрузке.

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

Варианты описаны тут: /usr/share/doc/insserv/README.Debian

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

> А если make -j4?

на обычном двухъядернике это не даст заметного выигрыша по сравнению с make -j2, и даже может быть медленнее. Но на двухъядернике даже make -j10 будет быстрее обычного make.

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

Это я к вопросу обычности, а не к тому, что вы там все зажрались. :-)

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

> А на Celeron-е (обычном)?

На одноядерннике make -j2 тоже может дать выигрыш, но небольшой. Впрочем, уже вроде есть двухъядерные Celeron'ы :)

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

> А лимит ресурсов будет всегда, при любом методе. Или вы уже нашли способ его обойти?

Разумеется, будет. И уперевшись в физические лимиты железки придётся думать, как сделать умнее, чем есть сейчас. Тов. tailgunner уверен, что делать умнее, чем сейчас, не нужно, и всё можно решить брутфорсом...

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

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

Я там приводил цифры суси. 21 сек до kdm а через ~38 сек KDE 4 готов к работе.

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

>1. Не лезь в исправный механизм.

2. Даже если инструмент устарел, но его применение решает задачу хотя бы на 60%, то нет необходимости применять что-то новое.

Совершенно верно. Хочу только добавить, что эти девелоперы со своими новшествами не только лезут в то, что работает, но и по-хамски тратят мое драгоценное время. Они думают, мне больше нечего делать, как каждый год изучать заново их героиновые приходы. Есть стабильное знание, стабильный инструмент. Это же большое завоевание. По этим инструментам большое количество литературы (даже старой и еще актуальной), курсы, большое число носителей знания. Чуть только люди застабилизируют свои знания, так находится какой-то хрен, который пытается все отменить. grep у него тормозит, блин.

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

>заметная часть треда про то, что на (домашнем) компе трёхмесячный аптайм противопоказан.

works for me!

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

И вы ещё под win не пишете! Вот там действительно приходы. И не надо мне про «стабильный API». С моим уходом оттуда лучше не стало (6 лет).

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

> Чуть только люди застабилизируют свои знания, так находится какой-то хрен, который пытается все отменить. grep у него тормозит, блин.

Аминь, брат.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

r ★★★★★
()
Ответ на: комментарий от 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 ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

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

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

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

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

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

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

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

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

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

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

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 ★★★★★
()
Ответ на: комментарий от Zubok

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вообще-то Леннарт пытается все переписать на Си как настоящий труСишка.

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

> Уродский или не уродский — это не так важно. Важно, что хорошо документированный.

дружественная к пользователю система (с точки зрения техносноба, как назвал меня сву) должна быть понятна СРАЗУ грамотному человеку, а не специально дрессированному специалисту, убившему время на тупое запоминание и условные рефлексы

короче — синтаксис make-а (с дополнением для мягких зависимостей) был бы примером хорошего дизайна инит-системы

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

> дружественная к пользователю система (с точки зрения техносноба, как назвал меня сву) должна быть понятна СРАЗУ грамотному человеку

Старая SysV init понятна всем и сразу.

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

> Старая SysV init понятна всем и сразу.

МНЕ непонятно, как воткнуть что-то начинающееся на «а» *между* S24hal и S25dbmail, может разъяснишь?

(в то время как в мейк-файле это быбо бы без проблем)

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

> Старая SysV init понятна всем и сразу.

МНЕ непонятно

Доо.

как воткнуть что-то начинающееся на «а» *между* S24hal и S25dbmail, может разъяснишь?

Я даже не буду требовать с тебя хотя бы придумать службу, которая нужна dbmail, и которая нуждается в HAL. Но решается проблема так: ты перенумеруешь нужное количество скриптов (или даже их все), чтобы получить удовлетворяющую тебя последовательность.

Нерешаемая задача для SysV init - это более 100 служб. Ну или по крайней мере я не знаю, как это решить.

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

> Но решается проблема так: ты перенумеруешь нужное количество скриптов (или даже их все), чтобы получить удовлетворяющую тебя последовательность.

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

этот граф не зависит от дистрибутива

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

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

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

> мы получем противоречие с

этот граф не зависит от дистрибутива

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

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

> Нет, форма графа останется почти той же - добавится новая вершина (твоя служба) и изменится нумерация следующих за ней вершин уплощенного графа (что естественно).

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

как такое может случится? очень просто — какой-нить шейпер трафика, который берет себе данные из БД

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

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

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

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

> Нерешаемая задача для SysV init - это более 100 служб. Ну или по крайней мере я не знаю, как это решить.

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

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

> Нерешаемая задача для SysV init - это более 100 служб. Ну или по крайней мере я не знаю, как это решить.

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

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

>Вообще-то Леннарт пытается все переписать на Си как настоящий труСишка.

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

Вот если бы вы переписали linux на шарпе или яве, и оно работало быстрее и надёжнее нынешнего сишного варианта, тогда бы ваша правота была бы очевидной. А так вы, извините, бред несёте.

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

>> Нерешаемая задача для SysV init - это более 100 служб. Ну или по крайней мере я не знаю, как это решить.

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

Ну тогда нерешаемая задача отодвигается вообще до неприличия далеко :)

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

> Ну тогда нерешаемая задача отодвигается вообще до неприличия далеко

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

а мне сразу не ясно было то, что эти приоритеты сохранятся при апдейте — это я узнал только из man update-rc.d (про возможность одинаковых номеров я давным-давно прочел, а не догадался)

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

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

и еще добавлю — мой стиль не трогать там, где специально не написано, что можно трогать, и не изучать особенно глубоко — я не админ — так что я бы НЕ СТАЛ собственноручно менять приоритеты

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

>> Ну тогда нерешаемая задача отодвигается вообще до неприличия далеко

и что более интересно, так это то, что это было тебе *сразу* не ясно

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

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

и вот еще — ты сразу догаешься щас — реальный порядко загрузки определяется сортировкой по полному имени, включая префикс, или же инит имеет право отсортировать только по префиксу, и запустить S42foo *раньше* S42bar?

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

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

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

с мейк-файлом таких проблем не было бы и в 3 часа ночи, т.к. он не уродство

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

> с мейк-файлом таких проблем не было бы и в 3 часа ночи, т.к. он не уродство

С абстрактным makefile в вакууме - конечно.

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

> Об Undefined Behaviour что-нибудь слышал?

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

я еще и поподробнее отвечу.

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

> и ты же потом выставляешь претензию неясности порядка запуска скриптов апстарту.

Почитай про апстарт, потом будешь гыгыкать. В sysvinit есть способ пустить 100 сервисов в строшо определенном порядке. В upstart такого нет by design.

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

еще раз повторю — твое непонимание в 3 часа ночи говорит не том, что у тебя мозгов нет, а о том, что система кривая

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

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

> Почитай про апстарт, потом будешь гыгыкать. В sysvinit есть способ пустить 100 сервисов в строшо определенном порядке. В upstart такого нет by design.

и как же апстарт тогда хоть что-то в порядке пускает?

если написать

в файле X001.conf: start on started X000
в файле X002.conf: start on started X001
...
в файле X999.conf: start on started X998

то он по-твоему не запустит их строго по порядку?

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

У апстарта другая (виндо-подобная:-) проблема есть, если верить поттерингу.

И вообще не верю, что убунта — пример для подражания.

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

> с мейк-файлом таких проблем не было бы и в 3 часа ночи, т.к. он не уродство

Он - большее уродство с точки зрения автонастройки. Симлинки с номерами можно легко добавлять и удалять автоматически при установке/удалении пакета. А автоматически редактировать make-файл при установке, вписывая запуск в нужное место, практически нереально. То есть его придется писать руками - уродство.

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

>Если вы полагаете, что этого делать не стоит, извольте доказать.

Вообще-то доказывать надо что что-то стоит делать а не наоборот.

Потому что выгода от выкидывания лишних прослоек вполне очевидна.


Ты анегдот про Ландау потерявшего десять страниц вывода знаешь?

Вот если бы вы переписали linux на шарпе или яве, и оно работало быстрее и надёжнее нынешнего сишного варианта


Нынешний вариант - на баше.

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

Симлинки с номерами можно легко добавлять и удалять автоматически при установке/удалении пакета. А автоматически редактировать make-файл при установке, вписывая запуск в нужное место, практически нереально.

как раз наоборот — очень просто

например, для апача можно было бы в /etc/init-make.d/ закинуть файл apache с содержанием:

apache-start: local-fs-start network-start databases-start
        ...
        /etc/init.d/network start
        /etc/init.d/apache start
network-stop: apache-stop
        /etc/init.d/apache stop
        /etc/init.d/network stop
databases-stop: apache-stop
        /etc/init.d/apache stop
        /etc/init.d/databases stop

и дальше для получения целевого мейк-файла можно даже просто cat /init-make.d/* (хотя конечно желательно проверить что все файлы начинаются со строки с нулевой позицией)

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

* хотя конечно желательно проверить что все файлы начинаются со строки с алфавитно-цифровым символом в нулевой позиции

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

network-stop: apache-stop
      /etc/init.d/apache stop
      /etc/init.d/network stop

Да уж. Прописывать остановку апача в остановку сети - это Ъ-зависимость. Кто там говорил об интуитивной понятности?

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

> Да уж. Прописывать остановку апача в остановку сети - это Ъ-зависимость. Кто там говорил об интуитивной понятности?

если ты отправляешь машинку в ребут, то *только* так и надо делать (и делается); если же тебе просто надо ifdown eth0 или допустим /etc/init.d/network stop, то никто не мешает *именно* это и сказать

тут есть что покритковать другое :-)

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

Да уж. Прописывать остановку апача в остановку сети - это Ъ-зависимость. Кто там говорил об интуитивной понятности?

если ты отправляешь машинку в ребут, то *только* так и надо делать (и делается)

Я знаю, как это делается. Но хоть более-менее вменяемый makefile выглядел бы так:


apache-stop: network-stop
   /etc/init.d/apache stop

Заметь отсуствие команды остановки сети в остановке apache. А вообще, правильный makefile был бы:


apache: network

network: local-filesystems

и всё. init сам знает, как запускать и останавливать службы, а порядок их запуска и останова задан зависимостями. И прикинь... это уже есть в LSB init-скриптах.

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

я тут ступил, конечно не нужно останавливать сеть при остановке апача, надо останавливать зависящие от него

И прикинь... это уже есть в LSB init-скриптах.

я уж догадался по началу инит-скриптов (и постил тут head /etc/init.d/hal)

там еще есть слабые зависимости, не знаю как насчет них в мейк-файлах

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

вот это:

apache-stop: network-stop

        /etc/init.d/apache stop



точно неправильно; мой вариант тоже неправильный; щас напишу правильный

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru
apache-start: local-fs-start network-start databases-start 
        ... 
        /etc/init.d/network start 
        /etc/init.d/apache start 
network-stop: apache-stop network-abort
network-abort:
        /etc/init.d/network stop 
databases-stop: apache-stop databases-abort
databases-abort:
        /etc/init.d/databases stop
www_linux_org_ru ★★★★★
()
Ответ на: комментарий от tailgunner

> network: local-filesystems

кхе-кхе... а это всегда так?

И прикинь... это уже есть в LSB init-скриптах.

мейкфайл приводился для того, чтобы:

1. показать, что и во времена system V можно было сделать неуродский инит;

2. выяснить, насколько язык мейкфайлов ограничен (кстати, я его очень поверхностно знаю) — как там насчет слабых зависимостей и *обращения* зависимостей, чтобы не писать boilerplate правила для стопорения сервисов/unmake?

3. я не знаю как реализована LSB инит-система, но юниксвейно было бы выкусывать зависимости из инит-скриптов, сливать их вместе и напускать на это *отдельную* командно-строчную утилиту (или libутилит-у, ладно) — т.е. я хочу иметь возможность юзать ее и отдельно.

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

Можешь не стараться :)

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

в файле /etc/init-make.d/apache:

apache-start: local-fs-start network-start databases-start  
        /etc/init.d/apache start
apache-stop: apache-abort
apache-abort:
        /etc/init.d/apache stop
network-stop: apache-stop network-abort 
databases-stop: apache-stop databases-abort

а в других файлах:

network-abort: 
        /etc/init.d/network stop
www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

можно даже и сократить:

в файле /etc/init-make.d/apache:

apache-start: local-fs-start network-start databases-start   
        /etc/init.d/apache start 
apache-stop: apache-abort 
apache-abort: 
        /etc/init.d/apache stop
local-fs-stop: apache-stop 
network-stop: apache-stop  
databases-stop: apache-stop

в файле /etc/init-make.d/network:

network-stop: network-abort
network-abort:  
        /etc/init.d/network stop

и в принципе инит-скрипты из init.d вообще становятся не нужны, их можно целиком вписать в мейкфайл вместо строчек /etc/init.d/xxx yyy

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

возможно и тот вариант неправильный, т.к. /etc/init.d/network stop мог выполнится до /etc/init.d/apache stop, так что вот:

в файле /etc/init-make.d/apache:

apache-start: local-fs-start network-start databases-start    
        /etc/init.d/apache start  
apache-stop:  
        /etc/init.d/apache stop 
local-fs-stop: apache-stop  
network-stop: apache-stop   
databases-stop: apache-stop

в файле /etc/init-make.d/network:

network-start:   
        /etc/init.d/network start
network-stop:   
        /etc/init.d/network stop

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

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

Интересная задачка. Ну что ж, раз вы так хотите сделать это через Makefile...

#/etc/init-make.d/Makefile
default: runlevel5
halt poweroff shutdown: runlevel0
single: runlevel1
reboot: runlevel6
runlevel0 runlevel1 runlevel2 runlevel3 runlevel4 runlevel5 runlevel6:
        @echo switched to $@
include *.mk
#/etc/init-make.d/network.mk
network_start:
        @echo starting network

network_stop:
        @echo stopping network

runlevel2 runlevel3 runlevel4 runlevel5: network_start
runlevel0 runlevel1 runlevel6: network_stop
#/etc/init-make.d/mysql.mk
mysql_start: network_start
        @echo starting mysql

mysql_stop:
        @echo stopping mysql

network_stop: mysql_stop
runlevel2 runlevel3 runlevel4 runlevel5: mysql_start
runlevel0 runlevel1 runlevel6: mysql_stop

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

> 1. показать, что и во времена system V можно было сделать неуродский инит;

Через мейкфайлы он получается еще более уродским. :)

Технически систему костылей сделать можно. Но на практике работать она все равно будет криво.

Скажем, как писать такие файлы для случаев, когда не важно, что будет запущено - sendmail или exim, но как минимум кто-то один из них должен запуститься?

Или, например, в моем примере выше команда `make runlevel2` при активном runlevel5 не должна выполнить ничего. А вместо этого она позапускает все сервисы еще раз. Чтобы это предотвратить придется наворотить еще большую систему костылей.

Кто-то все еще думает что это - лучше, чем цифры? Уж не проще - это точно. ;-)

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

> Кто-то все еще думает что это - лучше, чем цифры? Уж не проще - это точно. ;-)

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

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

Или, например, в моем примере выше команда `make runlevel2` при активном runlevel5 не должна выполнить ничего. А вместо этого она позапускает все сервисы еще раз.

(в результате я понял, каким должен быть полноценный make — он должен поддерживать мягкие зависимости, обращение зависимостей, un-make, re-make и жадные цели a.k.a. runlevels! вполне возможно что даже gnu make это поддерживает, только я это не знаю)

тем не менее даже имеющийся make лучше того init-а, что есть;

цифровые ранлевелы — тоже уродство;

если нам хочется перейти на 2 ранлевел с 5-го — это значит нам хочется стопорнуть иксы и все, что от них зависит:

make -f /etc/init-make.d/Makefile X-STOP

если нам хочется перейти на 1 ранлевел с 2-го — это значит нам хочется стопорнуть все не-сингл-юзерское

make -f /etc/init-make.d/Makefile MULTIUSER-STOP

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

MULTIUSER-START: apache-start
apache-start:  local-fs-start network-start databases-start    
        /etc/init.d/apache start  
apache-stop:  
        /etc/init.d/apache stop
MULTIUSER-STOP: apache-stop 
local-fs-stop: apache-stop  
network-stop: apache-stop   
databases-stop: apache-stop

______________________________________________________

ранлевелы — это тоже makefile target, только в отличие от допустим apache-start, которые запускает *только* необходимое ему, MULTIUSER-START запускает все по-максимуму

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

> Полагаю, отцы рассмотрели такой вариант и отказались от него.

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

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

> Скажем, как писать такие файлы для случаев, когда не важно, что будет запущено - sendmail или exim, но как минимум кто-то один из них должен запуститься?

в дебиан есть debian diversions на эту тему, и с инитом это никак не связано; «минимум одно» — это кривой подход: админ должен четко определять, что конкретно запустится

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

> Но делать его через make - это, конечно, большая ошибка.

большая, гы-гы. ну так объясни в чем она.

пока что имеем:

1. мейк не требует перенумерации, а цифры требуют

2. мейк требует ручное обращение зависимостей, и цифры требуют ручное обращение зависимостей (As a rule of thumb, the sequence number of the stop link should be 100 minus the sequence number of the start link)

3. мейк требует дополнительный код для re-make и цифры требуют дополнительный (но правда уже написанный) код для оптимизации «при переходе на другой ранлевел не выполнять остановку а затем запуск общего для двух ранлевелов скрипта»;

и вообще п.3 не очень нужен, так как реально нужно что-то типа MULTIUSER-STOP, т.е. ранлевелы все сравнимы по включению (нет несравнимых)

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

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

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

> 1. мейк не требует перенумерации, а цифры требуют

Цифры тоже не требуют перенумерации. Или можно хоть один пример, когда они ее требуют?

2. мейк требует ручное обращение зависимостей, и цифры требуют ручное обращение зависимостей

Цифры не требуют разбора зависимостей вообще. Это - задача пакетного менеджера. Это в мейках надо думать, например, как бы стартовать IMAP-сервер только после exim-а или sendmail-а, при этом не зная заранее, кто из них будет установлен. А в цифрах - вписал и забыл. :)

3. мейк требует дополнительный код для re-make и цифры требуют дополнительный

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

и вообще п.3 не очень нужен, так как реально нужно что-то типа MULTIUSER-STOP, т.е. ранлевелы все сравнимы по включению (нет несравнимых)

Не нужно. В runlevel-ах нет никаких runlevel-stop и runlevel-start. И не должно быть. Есть просто переход между runlevel-ами. И во время перехода некоторые сервисы запускаются, а некоторые - останавливаются. Например при переходе в runlevel6 останавливается network и запускается reboot.

Речь идет не о том, что через make-файлы это реализовать нельзя. Можно. Но это будет намного более громоздким и сложным, чем через обычные сервисы, а все ради чего?

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

ты явно не понял что я написал — прочитай внимательно мой пост (в т.ч. английский) и придидущие 150 постов треда

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