Re: "Правильные" демоны - не демоны?
Alexander Galanin -> debian-russian@lists.debian.org @ Mon, 14 Sep 2009 11:53:22 +0400:
>> AG> Потому уточняю формулировку требования: честно попытаться всё запустить
>> AG> перед приглашением войти в систему, чтобы не создалось ситуации, когда я
>> AG> уже залогинился, а nfs всё ещё не смонтирован.
>>
>> То есть если у тебя тот конец лежит, то твоя машина не должна тебе дать
>> возможности залогиниться. Тогда событийная модель к твоим услугам.
AG> Да, не должна. Хотя бы потому что у меня /home может быть на nfs.
Силен... Типа home, может быть, на NFS, а может быть, и нет. Но если
NFS не смонтировалась, то возможности залогиниться и починить быть не
должно... Даже если (в случае "может быть, и нет") она вообще-то и не
нужна...
>> Именно событийная, а не sysvinit.
AG> Так, это уже похоже на обоснование необходимости событийной модели.
AG> То есть если система каким-либо образом узнает, что nfs-сервер умер
AG> и больше не оживёт, то она должна поубивать все демоны, зависимые
AG> от него, в том числе и мою логин-сессию?
Поубивать - вряд ли. Сами вымрут, если надо. А вот стартовать их, пока
сети нету, действительно не стоит.
>> AG> То, что конкретный демон и конкретный его инит-скрипт завершились
>> AG> до того, как им стало возможно пользоваться --- проблема
>> AG> исключительно этого демона. И к init-у это мало относится.
>>
>> Твоими бы устами да медку хряпнуть. Таковы 9 демонов из 10.
AG> Примем это за начальные условия. В обоих случаях: при проверке
AG> пререквизитов в параллельной инициализации и при проверке готовности
AG> сервиса к работе (в последовательной), - будет работать, очевидно,
AG> одинаковый код. Так какая разница?
Разницу я уже описывал. Когда имеют в голове событийную, а не
последовательную модель, по модели "форкнул и забыл" действуют, гм, не в
каждом первом случае. Во всяком случае, уже не будут надеяться на "пока
еще до старта зависимых скриптов дойдет дело..." Просто помнят о том, о
чем при якобы последовательной инициализации мысль в голову не приходит.
>> AG> У pppd, к примеру, есть на такой случай замечательная опция
>> AG> updetach. Или вот ещё ifupdown, который не завершается, пока не
>> AG> получит адрес по dhcp.
>>
>> ... в то время как мне сеть для логина нафиг не нужна, а нужна как раз
>> после - ибо нифига тут DHCP не дают, и чтобы ее получить, надо ручками
>> адрес прописать. Ну и на кой?
AG> Тебе, может, и не нужна, а другому понадобится.
Вот пусть этот другой и пропишет себе зависимость от сети. Благо
инит-скрипты у нас по полиси относятся к конфигам.
AG> Более того, предвижу ситуацию, когда тебе для логина потребуется
AG> только один интерфейс из десяти и только две из пяти файловых
AG> систем.
Ну, в общем, да - если есть сервер в стойке, то sshd на нем должен
подняться и начать пускать хотя бы рутом при наличи хоть какой-нибудь
сети. Хотя прям-вот-сразу - не обязательно, можно какое-то время и
подождать, авось поднимутся все.
AG> Причём наверняка появятся желающие распарсить руками конфиг
AG> соответствующего демона, чтобы выяснить, а какие же ему интерфейсы
AG> нужны.
Вряд ли. Народ ленив.
>> AG> И не стоит забывать, что мантайнеры не всегда добросовестные и не
>> AG> всегда компетентные, чтобы отследить и проверить все
>> AG> пререквизиты. В качестве примера того уровня, на котором находится
>> AG> продумывание инит-скриптов, могу указать то, что для thttpd и
>> AG> ejabberd на команду stop демон вообще не убивался (не знаю, как
>> AG> сейчас обстоят дела).
>>
>> Ты не выкручивайся. Ты покажи, чем тут последовательная загрузка лучше
>> параллельной. В параллельной ты, если обнаружил, что мейнтейнер забыл
AG> Она понятней и проще для отладки.
Есть большие сомнения. Последовательная модель понятней и проще только
тогда, когда последовательна вся архитектура.
>> пререквизит, сам его вписываешь, и тебе ура. А в последовательной?
>> Танцы с бубном вокруг числа после буковки S? Или от того, что загрузка
AG> Впишу пререквизит в зависимость, запущу insserv и он поправит мне
AG> число после буковки, попутно сделав минимальную проверку
AG> правильности зависимостей. Разумеется, это в теории, т.к. в моих
AG> тепличных условиях и проблем, которые мы тут обсуждаем, я не
AG> встречал.
Я предпочитаю, чтобы работу, которую может выполнить машина, машина же и
выполняла. Хотя, конечно, обнаружение циклов зависимостей до
(удаленной) перезагрузки полезнее, чем во время...
>> последовательная, мейнтейнер сразу станет на порядок ответственнее и
>> будет эти танцы танцевать сам? Так ты ж сам контрпримеры приводишь...
AG> Я привожу примеры того, как может мантейнер "накосячить". Исходя из
AG> этого, надо давать ему меньше мест для косяков. Логично вроде.
Да столько же их у него.
>> AG> Не многовато ли пререквизитов проверять придётся? Пример: в скрипте
>> AG> для запуска экзима надо будет проверять, смонтировался ли
>> AG> /var/spool, который может быть на nfs-е, поднялись ли сетевые
>> AG> интерфейсы из конфига и т.д.
>>
>> Ты туда хоть заглядывал, в этот инит-скрипт экзима?
>> Он мало того, что проверяет все, что ты сказал - он еще и проверяет то,
>> что ты забыл...
AG> Посыпаю голову пеплом. Но к тому же экзиму можно добавить в
AG> пререквизиты также и то, запущен ли spamd. Причём только в случае,
AG> если установлен sa-exim.
Нафига? Это гораздо проще проделывается в его конфиге (и я подозреваю,
что родной конфиг от оного sa-exim на эту тему куда более вменяем, чем
твое предложение, которое заодно и почту от крона доставлять не будет).
>> Ты эта... Не мешай одно с другим. Если у тебя драйвер сканера
>> неправильно подгрузился, то у тебя загрузка не встанет. У тебя,
>> может быть, не загрузится saned. И даже если он не загрузится
>> настолько неудачно, что зависнет, не реагируя на сигналы - или
>> реагируя, но на машинке без клавиатуры и монитора - это в sysvinit у
>> тебя будут проблемы, а в параллельной модели они откуда возьмутся?
AG> Пардон, а у нас ядро уже научилось грузить кривые драйвера не
AG> повисая? Чем мне поможет upstart, если у меня ядро замерло?
Если инит-скрипты перестанут гадить в консоль, то в момент замирания
ядра у тебя на экране будет вся релевантная информация. В остальном
sysvinit от upstart тут ничем не отличается - если ядро замерло, то
продолжить работу не сможет ни тот, ни другой.
--
Весь юникс для того и был придуман, чтобы PS в принтер выплевывать.
Alex Korchmar в <a63nn3$ef7$1@alx.private>
Reply to: