Re: sarge: /etc/init.d/networking , default runlevels
On Sat, Jul 09, 2005 at 03:28:46 +0400, Roman Shiryaev wrote:
>
> Прописал в /etc/network/interfaces для интерфейса eth0
> загрузку/сохранение своих правил iptables (через опции
> pre-up и post-down). Не суть каких. Суть в том, что сохранять
> их
> при выключении/перезагрузки машины у меня система ну никак не
> хотела.
>
> Ладно, решил упростить задачу. Прописал опять-таки с помощью
> pre-up и post-down команду echo -e \\a , чтобы убедиться, что
> она выполняется в нужные моменты. При загрузке (поднятии eth0) -
> "пик"
> раздается. В остальных случаях (reboot, halt) его просто нет.
>
> Решил проверить нехитрой командой
> find /etc/rc* | grep networking ,
> на каких уровнях (runlevels) запускается/останавливается "сеть".
> И вот что увидел:
> /etc/rc0.d/S35networking
> /etc/rc6.d/S35networking
> /etc/rcS.d/S40networking
>
> Довольно странно. Получается, что при корректном ctrl-alt-delete
> (переход на 6-й runlevel) сетевые интерфейсы, вместо того, чтобы
> опускаться, наоборот повторно поднимаются? И в single mode, и в
> halt тоже???
Итак, немного разобрался что к чему. По поводу single mode
(SM) оказался не совсем прав. Да, в приведенной выше конфигурации
сеть поднимается и в нем (в SM) по той простой причине, что
скрипты из rcS выполняются при загрузке и при входе в SM
( вычитано в /etc/rcS.d/README ). Правда, мне всегда касалось,
что в SM сетевые интерфейсы должны опускаться. Отсюда первый
вопрос:
* Должна ли сеть подниматься в single mode?
Далее. Почему сеть поднимается в режимах останова (0) и
перезагрузки (6) (согласно /etc/inittab в debian sarge)?
Решил найти виновника среди установочных скриптов пакета netbase.
Скачал файлы с правилами сборки пакета netbase
(netbase_4.21.tar.gz) и почитал руководство начинающего
разработчика Debian
/usr/share/doc/maint-guide/maint-guide.en.html/ch-dother.en.html#s-maintscripts
Откуда был перенаправлен в Policy Manual, chapter 6, т.е. в
/usr/share/doc/debian-policy/policy.html/ch-maintainerscripts.html
В каталоге debian/ изучил находящиеся там файлы.
Из debian/README.Debian
------------------
Debian has traditionally used a free-form /bin/sh script called
/etc/init.d/network to configure networking (usually run from
/etc/rcS.d/S40netwok). This was created at a first install, and
then left to the admin to update as necessary.
------------------
ok. Что-то похожее на правду. При первой установке из созданных
у меня 3-х линков в /etc/rc?.d/ /etc/rcS.d/S40networking следует
считать легально существующем. Откуда взялись остальные два для
0-го и 6-го runlevel`ов? Копаю дальше.
Из debian/netbase.postinst
-----------------
93 fi
94 }
95
96 update_rc() {
97 update-rc.d networking start 40 S . start 35 0 6 . > /dev/null
98 }
99
100 case "$1" in
101 configure)
102 remove_old_files
103 kill_portmapper "$@"
104 update_hosts_file
105 update_initd_networks "$@"
106 fix_old_initscript "$@"
107 update_rc
108 ;;
109
110 abort-upgrade|abort-remove|abort-deconfigure)
-----------------
В общем, судя по коду скрипта, который вызывается и выполняется
после установки пакета netbase, умолчальные runlevel`ы
выставляются именно в этом месте через функцию update_rc(), код
которой укладывается в одну, 97-ую строку:
update-rc.d networking start 40 S . start 35 0 6 . > /dev/null
Далее иду повторно читать man update-rc.d и понимаю, что то ли
мейнтейнер что-то напутал, то ли я дурак. Но причина всех моих
бед в этом топике обнаружена. Собственно, эта строка и создала те
самые злополучные 3 ссылки, две из которых - неправильные(?).
По-моему, 97-я строка скрипта должна иметь следующий вид:
update-rc.d networking start 40 S . stop 35 0 6 . > /dev/null
Писать багрепорт или я все-таки не прав и в чем-то заблуждаюсь?
>
> Сам я накосячить с runlevel`ами не мог, поскольку только сейчас
> до разборки с ними дошёл.
>
> В общем, в итоге пришлось удалить вышеприведенный ссылки вручную
> find /etc/rc* | grep networking | xargs rm -f
> (т.к. update-rc.d с ключом -f этого делать почему-то не захотел)
Да, тут тоже понял причину. Ключ -f работает только при
соблюдении следующего синтаксиса:
update-rc.d [-n] [-f] name remove
А я пытался разом и удалить ссылки, и создать новые. Скрипт же
этого делать не умеет и требует последовательного, в два шага,
удаления и создания ссылок.
Reply to: