# Изменение действий в системных runlewels

## kirill_ant

Здравствуйте!

Не подскажет ли кто, где найти ПОДРОБНУЮ документацию по загрузке/остановке системы.

Если конкретно, то:

сделал ПХЕ - загрузку бездисковой (условно бездисковой) рабочей станции.

ОК, для работы хватает пока, но хотелось всё-таки иметь своп (ну так, на всякий случай.) При этом для совместимости с ДЕЙСТВИТЕЛЬНО бездисковыми машинами своп нужен был СЕТЕВОЙ.

Ладно, прикрутил через loop и swapon. Теперь при попытке размонтировать сетевые диски получается ошибка, ессно, с сетевым своп-файлом же связан девайс, а с девайсом - своп. Соответственно на ранлевеле 0 хотелось бы выполнить swapoff и losetup -d. Да и вообще, многие стандартные процедуры init мне не нравятся для случая бездисковой станции, хочу их ковырять..  :Smile:  Подскажите, где их найти, чтобы ковырять.

Ну там, хочу на этапе загрузки примонтировать юзер-специфик части /etc ну и т.д.

Интересует именно gentoo, так как у неё, похоже, несколько специфичный процесс загрузки.

----------

## ArtSh

Все скрипты храняться в /etc/init.d В каталогах /etc/runlevels храняться ссылки на эти скрипты, уровней загрузки - 4. В скриптах используется специальная оболочка #!/sbin/runscript в которой определены специальные функции. Простейший скрипт выглядит следующим образом:

```

#!/sbin/runscript

start()

{

    команды (как в bash)

}

stop()

{

    команды (как в bash)

}

```

Есть некоторые расширенные функции, такие как проверка зависимостей, концигурационных файлов, и т.д.

Например вот этот кусочек из /etc/init.d/xdm определяет когда будет запущен сервис.

```

# Start X Font Server before X

depend() {

        need localmount

        # this should start as early as possible

        # we can't do 'before *' as that breaks it

        # (#139824) Start after ypbind and autofs for network authentication

        # (#145219) Could use lirc mouse as input device

        # (#70689 comment #92) Start after consolefont to avoid display corruption

        after bootmisc consolefont modules netmount

        after readahead-list ypbind autofs openvpn gpm lircd

        before alsasound

        # Start before X

        use acpid consolekit hald xfs

}

```

И вобще, посмортите как написаны другие скрипты в этом каталоге

----------

## kirill_ant

Там, куда Вы указали, лежат ПОЛЬЗОВАТЕЛЬСКИЕ ранлевелы, к которым имеет доступ, например, утилита rc-update...

Ранлевелов явственно больше четырёх.

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

В мане есть что-то про то, что при переходе в ранлевел 0, бишь shutdown, init предпринимает там всякие шаги типа  сначала мягко, а потом жёстко киляет все процессы, размонтирует ФС и чего-то ещё. Кто знает больше? Например, что выполняется вперёд, откуда беруться ФС для размонтирования (из /proc/mounts?), почему вполне корректно обрабатывается невозможность остановки сети у меня, просто пишется, что мол на сети весит nfs-root, и её мы останавливать не будем поэтому... Как изменить поведение init-а, добавить туда какие-то свои обработчики, либо вставить хотя-бы sh-скрипт, выполняемый перед shutdown?

Про runscript тоже неплохо бы если бы кто кинул ссылкой опять же не на старт/стоп/депенд-экземпл, а на качественную доку, которая бы полностью описывала всевозможные функции runscript и доступное окружение.

А так-то простенькие init-скрипты я и сам пишу, например для unfsd, который родом из БСДей...

Народ, ну скажите чего-нибудь про старт/стоп системы поподробнее, чем в мане,а?

Всё усложняется ещё и тем что в генте вроде-бы как используется SystemV инициализация, а вроде и не совсем?

----------

## ArtSh

Специально для тех, кто забанен в гугле и у кого интернет по талонам:

http://www.opennet.ru/docs/RUS/gentoo_init/ http://www.sdteam.com/?tid=1326

Это соответственно первая и последняя ссылка на первой странице гугла по запросу "runscript gentoo". Я надеюсь, после прочтения у Вас отпадёт вопрос почему никто не скажет какой порядок запуска сервисов.

----------

## kirill_ant

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

куцая, вот! Вместо ваших ссылок можно с успехом использовать

http://www.gentoo.org/doc/ru/handbook/hb-working-rcscripts.xml?glang=ru

Думаете, я там не был? 

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

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

Вот есть у вас на запущенной системе swap на /dev/loop0, который связан с файлом /swap в директории, примонтированой по nfs. Соответственно хочу, чтобы при каждом shutdown/halt/reboot выполнялись два действия - swapoff и losetup -d /dev/loop0.

Вас с вашими знаниями это не должно затруднить, насколько я понял?  :Smile: 

----------

## calculator

Ладно, прикрутил через loop и swapon.

...

Соответственно на ранлевеле 0 хотелось бы выполнить swapoff и losetup -d

Мне послышалось "откусил себе голову, помогите выплюнуть"  :Wink: 

По "gentoo PXE swap" полно линков

Вот к примеру http://gentoo-wiki.com/TIP_automount_swap не то что нужно?

----------

## kirill_ant

Хм... Тоже не по теме, но теплее.

Вы знаете, я например, когда меня мучал этот вопрос, делал поиск по "NFS swap" и получил ответ, что под это надо патчить ядро, и т.д. и т.п. Поэтому плюнул на всё и сделал через loop, и честно говоря, очень обрадовался, что заработало.

То что вы привели - второй этап эксперимента, то есть изготовление свопа на месте и автомонтирование его потом.

Но ДОЛЖНА быть возможность сетевого свопа для ДЕЙСТВИТЕЛЬНО БЕЗДИСКОВЫХ клиентов.

А по теме: кто-нибудь знает, зачем по ссылке выше провайдится метод "СТОП"?

```
stop() {

   ebegin "Remove swap from"

   do_swap /sbin/swapoff

   eend $?

}
```

Означает ли это, что при остановке вот того процеса /etc/init.d/my-autoswap система воспользуется данным методом стоп?

Для меня это архиважно, т.к. здесь система и так отмонтирует своп, операция-то стандартная. А вот в моём случае мне точно надо экспортировать свой метод "СТОП", несколько отличный от стандартного.

Я-то пока запускаю монтирование shell-скриптом, и только ещё планирую перейти на runscript.

----------

## calculator

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

```
# grep -r -E "losetup|swap" /etc/init.d/
```

stop() при остановке обязательно будет задействован - об этом в хандбуке вроде написано.

----------

