::respawn:-/bin/sh
Используя BR2_ROOTFS_OVERLAY
, сделайте гостевой /etc/inittab
содержащим:
::respawn:-/bin/sh
вместо стандартной строки вида:
console::respawn:/sbin/getty -L console 0 vt100
Вы можете скопировать стандартный inittab
из output/target/etc/inittab
после сборки.
Я нашел это, изучая examples/inittab
в Busybox 1_28_3, нашел это, попробовал, и это сработало, так что это лучшее решение, которое я нашел до сих пор.
Не забывайте о ведущем тире -
, иначе действия по управлению заданиями, такие как Ctrl + C, не будут работать, как указано ниже.
Ведущее тире -
волшебным образом разбирается BusyBox' init: https://github.com/mirror/busybox/blob/1_28_3/init/init.c#L439 и устанавливает TTY для следующей команды.
BusyBox также добавляет -
к началу или arg[0]
, что /bin/sh
интерпретирует как указание оболочки входа в систему, что заставляет его использовать некоторые файлы init, такие как /etc/profile
. См. также: https://stackoverflow.com/a/42291142/895245
Следующее эквивалентно, поскольку console
является значением по умолчанию:
console::respawn:-/bin/sh
Чтобы войти в систему под другим пользователем по умолчанию, вы можете использовать вместо этого:
::respawn:-/bin/login -f user0
Вот пример настройки.
Предыдущий ответ: getty -l
Спустя почти два года я нашел это! :-)
Используя BR2_ROOTFS_OVERLAY
, переопределите / создайте следующие файлы:
/etc/inittab: начните с https://github.com/buildroot/buildroot/blob/2018.02/package/busybox/inittab и отредактируйте строку консоли так:
console::respawn:/sbin/getty -n -L -l /loginroot.sh console 0 vt100
/loginroot.sh:
#!/bin/sh
exec /bin/login root
/bin/login
- это исполняемый файл по умолчанию, если не указано -l
. Мы создали исполняемый файл, который вызывает /bin/login
с уже указанным пользователем root
.
Это заставляет init
пытаться войти в систему как пользователь root по умолчанию, а затем, поскольку пароль по умолчанию пуст (BR2_TARGET_GENERIC_ROOT_PASSWD
), он автоматически входит в систему.
Эта техника в основном реализует опцию -a
, присутствующую в getty
Ubuntu 14.04, которой нет в реализации BusyBox.
Затем, чтобы войти в систему под другим пользователем, просто выполните:
/bin/login
Вот пример установки.
Предыдущий ответ: console::respawn:/bin/sh
Я спрашивал в списке рассылки, и Томас Петаццони ответил, что:
/etc/inittab
должно содержать:
console::respawn:/bin/sh
вместо:
console::respawn:/sbin/getty -n -L console 0 vt100 # GENERIC_SERIAL
С qemu_x86_defconfig
, inittab
используется системой init
Busybox, из-за BR2_INIT_BUSYBOX=y
.
Однако у этого метода есть и обратная сторона: сразу после входа в систему появляется сообщение:
/bin/sh can't access tty; job control turned off
и, как и было заявлено, такие вещи, как Ctrl+C
не будут иметь никакого эффекта.
Я только что проверил следующее:
docker run -ti --rm -v /proc:/writable_proc rhel bash
echo 3 > /writable_proc/sys/vm/drop_caches
И это не удалось:
bash: /writable_proc/sys/vm/drop_caches: Permission denied
Я запускаю его с привилегиями:
docker run -ti --rm --privileged -v /proc:/writable_proc rhel bash
echo 3 > /writable_proc/sys/vm/drop_caches
И все работало, поэтому я почти уверен, что каким-то образом все сработало для Жиля, потому что его демон или cli настроен на использование привилегированных, не зная об этом: