Минимальный Linux с ядром и BusyBox:/etc/inittab проигнорирован, только/init выполняется

Вход в систему как корень опасен, поскольку корень всесилен. Вы научитесь на горьком опыте, когда Вы сделаете "комнату-rf *" в неправильном месте.

Если Вы хотите запустить некоторую программу как корень каждая начальная загрузка, необходимо настроить systemd, таким образом, это запускается каждый раз. Посмотрите на соответствующие страницы справочника и возможно воруйте некоторые идеи от, например, файлы, на которые ссылаются в/lib/systemd/system/sysinit.target.wants

12
19.06.2015, 18:28
1 ответ

Хорошо, я провел много обширных исследований и выяснил, что было не так. Начнем один за другим:

  • При использовании схемы загрузки initramfs первым процессом, на который ссылается ядро, является скрипт /init. Ядро никогда не будет пытаться выполнить /sbin/init напрямую.
  • /init назначен идентификатор процесса 1. Это очень важно!
  • Проблема в том, что /init может быть запущен только как PID 1, но мы уже запустили /init как PID 1.
  • Решение заключается в выполнении командной строки /выполнение /sbin/init, пока мы находимся внутри /init. Таким образом, новый процесс (которым является /sbin/init) унаследует PID от своего родителя (/init с PID 1), и это все, что нам нужно сделать.

Проблема, которую я испытывал с моей первоначальной конфигурации (см. вопрос) была связана с тем, что последнее, что мой /init сценарий делает, это породить новый /bin/sh процесс, который назначен совершенно новый PID. С этого момента невозможно запустить /sbin/init непосредственно из интерактивной консоли, потому что даже когда мы выполняем командную строку exec /sbin/init, лучшее, что мы достигаем - это присваиваем тот же самый PID, который уже был присвоен оболочке, и этот PID определенно не PID 1.

Короче говоря, выполните командную строку exec /sbin/init непосредственно из /init и все.

11
27.01.2020, 19:56

Теги

Похожие вопросы