Какие есть лёгкие init системы и как их добавлять?
Хочу сделать свой мини дистрибутив (на подобии mulinux, но без графики).
По туториал у сделал iso с ядром Линукса и несколькими командами (ls, cp, rm, login). Осталось только сделать выключение своей операционки, но для этого нужен init (systemd, openrc, sysvinit).
Я выбрал openrc, т.к. он лёгкий (в плане веса). Но у меня не получается его использовать - ОС при включении выполняет файл /init, в котором я прописал создания root пользователя и вход в него. Но т.к. этот файл запускается первым - ему присваивается id 1, и при выполнении команды poweroff возникает ошибка типа "openrc не запущен с id 1". Попробовал вместо моего init файла вставить openrc-init с переименованием - при запуске системы он, конечно, запускается, но я не могу использовать консоль, т.к. команды bash не было.
Вообщем - как запустить openrc init с id 1, а после него - мой скрипт? И есть ли альтернативы openrc? (не такие тяжёлые, как systemd, хочу размер файла не больше 100 мб)
ЕМНИП это похоже сказ про initramfs, т.к. обычно запускается /sbin/init
но не суть, а что мешает сделать exec /sbin/init в конце этого самого /init? и уже этот /sbin/init должен запустить всё остальное через свой конфиг
а так shell в качестве PID 1 запускают обычно в аварийных ситуациях
Zailox, а этот init на чём написан? там всё равно шелл, пусть и не в интерактивном режиме
в общем тут нужно запускать полноценный init, и уже его настраивать, чтобы он запускал остальное через свой вариант inittab
IvanU7n, init - просто sh файл. Полноценный init, как я понял - это openrc-init? Если так - я не нашел в инете информации, как заставить его запускать все остальное
Zailox, да именно он, и никто не говорил, что будет просто
глубоко в своё время я разбирался только с sysvinit, и там основной файл управляющий что и как запускать был /etc/inittab, если в этом openrc-init есть подобное, то хорошо, если нет — тогда ой и нужно читать документацию на этот самый инит, чтобы его настроить
кстати, в текущей конфигурации выход из баша запаникует систему из-за смерти PID 1
Zailox, разумеется либо-либо, загузчик не может передать управление сразу 2м процессам. Используйте openrc как init, и в нем запускайте свой скрипт, как IvanU7n и написал. Openrc судя по доке и inittab и еще куча конфигов есть.
IvanU7n, спасибо, попробую inittab настроить, насчёт паники - я знал ещё до добавления баша, поэтому и хочу добавить возможность выключать ПК, а не выходить из консоли и ловить панику
Вам нужно либо запускать getty или аналог в качестве сервиса openrc, либо в вашем init-скрипте запускать openrc-демон последним, с помощью exec
exec [-cl] [-a name] [command [arguments]]
If command is specified, it replaces the shell. No new process is created. The
arguments become the arguments to command. If the -l option is supplied, the shell
places a dash at the beginning of the zeroth argument passed to command. This is
what login(1) does. The -c option causes command to be executed with an empty
environment. If -a is supplied, the shell passes name as the zeroth argument to
the executed command. If command cannot be executed for some reason, a non-
interactive shell exits, unless the execfail shell option is enabled. In that
case, it returns failure. An interactive shell returns failure if the file cannot
be executed. If command is not specified, any redirections take effect in the
current shell, and the return status is 0. If there is a redirection error, the
return status is 1.