LINUX.ORG.RU

Разъясните за ранлевелы init'a

 ,


0

1

Есть железка, простоты большой. Инит, насколько я понял, читает /etc/inittab и запускает в соответствии /etc/init.d/rc с третьим и 5 уровнем.

Что за уровни? Правильно ли я понимаю что уровни с 6 по 10 я могу использовать чтоб удовлетворить потребность в запуске сервисов гаранированно один после деругого (типа зависимости)? Где почитать-ликвидировать собственную безграмотность по вопросу?

Спасибо.

★★★★

1 single user
2 terminal multi users
3 network? daemon and terminal multi users
4 - 5 All from 3 and graphical multi users
6 shutdown of systems

Извини за корявый английский.

А так было довольно удобно, но в openrc всё перелопатили.

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

Правильно ли я понимаю что уровни с 6 по 10 я могу использовать

Зависит от реализации Вашего init. В моём man 5 inittab написано, что не можете:

Init(8) distinguishes multiple runlevels, each of which can have its own set of processes that are started. Valid runlevels are 0-6 plus A, B, and C for ondemand entries.

Хотите заняться извращениями со встроенной железкой - возьмите runit или аналог, там runlevel-ов можно уметь сколько угодно с произвольными именами.

anonymous ()

Правильно ли я понимаю что уровни с 6 по 10 я могу использовать чтоб удовлетворить потребность в запуске сервисов гаранированно один после деругого (типа зависимости)?

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

anonymous ()

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

Ну или используй openrc и укажи зависимости. Хотя, это не всегда помогает.

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

я к тому что я сам не могу взять и запилить rc7.d

просто попробуй сделать, тут тебе не системд, а init и bash, всё делается просто.

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

А так может тебе стоит занять уровень 4, его так ничем и не заняли.

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 3)
Ответ на: комментарий от pihter

все что хочу запускать в последнюю очередь?

Это делается указанием циферки в имени симлинка в соответствующем каталоге /etc/rc$num.d
Линки на К останов сервиса, линки на S старт, учти что имя в целом должно быть в определённом формате.

Например(предположительно, уточняй в мане)
K01xdm - сервис xdm будет остановлен в первую очередь.
S06xdm - сервис xdm стартует в шестую очередь.

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

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 5)

Ранлевел это типа стейт в котором находится система (выключено - тоже состояние). Так вот это путь перехода к состоянию. Сделано правда довольно примитивно, ближайший аналог в дисистеме это видимо target. Но, управлять порядком запуска можно оперируя числовыми префиксами в именах ссылок на init скрипты сервисов. Ещё, была специальная утилита для этого, но это ты уже сам погуглишь, ибо с головы я не помню, название у неё было мутное это всё что могу вспомнить:)

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

А так было довольно удобно, но в openrc всё перелопатили.

Совместимость осталась, telinit 1 по прежнему переведёт систему в single user, а telinit 3 вернёт в default runlevel. Да и /etc/inittab никуда не делся, его можно поизучать и разобраться.

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

Совместимость осталась,

С одной стороны да, но только вот в Devuan по крайней мере xorg стартует на всех уровнях, что при неисправности графиги очень неприятный сурприз, при том что система по умолчанию грузится в уровень 2.
То есть полностью поломали назначение уровней и главное не ясно зачем, всё же было сделано прекрасно.
Ну ладо я или те кто видел это раньше легко разберутся, а как быть тем кто пришёл недавно?
У меня вот был рядом человек который мне объяснил основы на примере RH7, а как быть тем у кого нет рядом дядьки, который поводит рукой(новичка) по мыши и пальцами(новичка) по клавеатуре?

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

https://wiki.gentoo.org/wiki/Sysvinit

Там ещё есть (в теории) уровни A, B, C. Сам initd запускает только: sysinit -> boot(bootwait) -> initdefautl. Дальше уровни сами не переключаются. Конечно, можно наколхозить скрипт, который будет вызывать telinit с разными уровнями, но лушче так не делать.

Инит, насколько я понял, читает /etc/inittab и запускает в соответствии /etc/init.d/rc с третьим и 5 уровнем.

Он ещё getty/mgetty запускает (перезапускает).

mky ★★★★★ ()

По доброте душевной подкидываю тебе кусочек своего inittab, passwd и shadow

/etc/passwd

root:x:0:0:root:/root:/bin/bash
root_tty1:x:0:0:root:/root:/bin/bash
root_tty2:x:0:0:root:/root:/bin/bash
root_tty3:x:0:0:root:/root:/usr/bin/htop
root_tty4:x:0:0:root:/root:/bin/bash
root_tty5:x:0:0:root:/root:/usr/bin/mc
root_tty6:x:0:0:root:/root:/bin/bash

/etc/shadow

root:!$тут_был_хеш_пароля:18435:0:99999:7:::
root_tty1:!$тут_был_хеш_пароля:14638:0:99999:7:::
root_tty2:!$тут_был_хеш_пароля:14638:0:99999:7:::
root_tty3:!$тут_был_хеш_пароля:14638:0:99999:7:::
root_tty4:!$тут_был_хеш_пароля:14638:0:99999:7:::
root_tty5:!$тут_был_хеш_пароля:14638:0:99999:7:::
root_tty6:!$тут_был_хеш_пароля:14638:0:99999:7:::

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

Далее всё /etc/inittab

1:2345:respawn:/sbin/getty -a root_tty1 38400 tty1
2:2345:respawn:/sbin/getty -a root_tty2 38400 tty2
3:2345:respawn:/sbin/getty -a root_tty3 38400 tty3
4:2345:respawn:/sbin/getty -a root_tty4 38400 tty4
5:2345:respawn:/sbin/getty -a root_tty5 38400 tty5
6:2345:respawn:/sbin/getty -a root_tty6 38400 tty6

Надеюсь что опция –force в нужный момент даст войти под рутом несмотря на то, что рут у меня заблокирован в /etc/shadow

# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin --force
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin --force
torvn77 ★★★★★ ()
Ответ на: комментарий от torvn77

Вот ещё в довесок /etc/sudoers

user host.local=(steam_linux:host.local) NOPASSWD:/home/steam_linux/steam/steam.sh

Как не сложно догадаться, логин под пользователем steam_linux у меня тоже отключен, так что Стим у меня можно запустить только через sudo запускаемым пользователем user

И ещё, sudo почему то не понимает localhost и по этому приходится писать host.local, незабудь добавить соответствующую запись в /etc/host
127.0.0.2 host.local host
Обрати внимание, если задать 127.0.0.1 который совпадёт с адресом localhost то разрешения в отдельный host.local не будет и логин через sudo будет выполнить нельзя.

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от pihter

ЕМНИП, да. если правильно помню ту лекцию, то инит запускает уровни по порядку от первого до указанного.
чтобы из директории скрипты запускались в нужном порядке, их имена должны быть в нужном порядке, например, использовать префиксы 01-..., 02-..., ...

teod0r ★★★★★ ()