LINUX.ORG.RU
ФорумAdmin

Как получить доступ к stdin & stdout из /sbin/init или из initrd?

 


0

1

Здравствуйте, коллеги!

Пишу 2 скрипта для initrd (/init) и /sbin/init.

Не понимаю, что нужно сделать, что бы, например возпользоваться bash или sh в initrd? Вызываю /bin/bash (/bin/sh) и скрипт останавливается в ожидании ввода, вот только ввести ни чего не получается. Такое впечатление что отсутствует stdin.

Мучения с initrd заметно бы упростились, если бы я мог получить нормальный доступ к bash (он есть). Но справился и без bash, пусть и затратил много больше времени чем хотелось бы.

Система грузится так как мне нужно. Монтируется squashfs, на нее накладывается overlay rw слой и все работает как мне нужно. Ввод-вывод, соответственно, работает.

Теперь появилась идея грубо воздействовать на /sbin/init, что бы загрузить ТОЛЬКО то, что в дальнейшем будет нужно. А нужно будет что бы, в качестве демонов, болталось несколько процессов и жила сеть.

В данный момент только перешел к /sbin/init и воткнул вместо оригинального маленький скрипт на bash, который всего лишь, должен получить строку от пользователя и вывести ее на экран. Чем не функционал для /sbin/init? :)

Но не тут-то было. Ожидаемо, как и в initrd я не могу ни чего ввести. Нет ни какой реакции на клавиши.

Вроде нужно как-то связать свой терминал c tty, но тут я, мягко говоря, плаваю. Вообще тему с tty не понимаю.

Подскажите, пожалуйста, как это победить? Как получить нормальный input/output в initrd?

PS В своем замудреном скрипте вызываю who и… пустой вывод. Нужно как-то получить терминал, но как?

#tty
not a tty


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

Ничего не понятно. Если надо «минимальную систему» удалите лишние пакеты.

Раз хочется поиграться с initrd, то гуглите «initrd busybox» или повторите у себя к примеру https://github.com/brandsimon/mkinitcpio-authentication

ps в большинстве систем, если initrd не справился с примонтировать root, он падает в консоль восстановления, этот самый busybox.
Может посмотреть есть ли такое в вашем случае и заставить принудительно запускать именно busybox?

Flotsky ★★
()

Лучше полностью от busybox не отказываться, там, допустим, есть такое:

https://github.com/brgl/busybox/blob/master/shell/cttyhack.c

прочитайте там весь текст, посмотрите на примеры с setsid. И, либо в образе initramfs должны быть файлы-устройства в /dev/, либо монтировать туда devtmpfs до всяких попыток читать из /dev/tty1.

mky ★★★★★
()

Может модуль клавиатуры не загрузился? Запусти нормальную систему с этим ядром и посмотри в lsmod какие модули подгружены и есть ли среди них что-то про клаиатуру и её интерфейсы. dmesg ещё сравни, там тоже что-то может быть интересное.

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

Может модуль клавиатуры не загрузился? Запусти нормальную систему с этим ядром и посмотри в lsmod какие модули подгружены и есть ли среди них что-то про клаиатуру и её интерфейсы. dmesg ещё сравни, там тоже что-то может быть интересное.

Прошу прощения.

Задал вопрос и исчез.

Отчасти проблема решилась, когда я нормально загрузил udev.

Загрузилось множество модулей и какой-то из них нормально поднял клавиатуру.

Кстати, а как понять какой модуль и за что отвечает?

HighMan
() автор топика