Busybox

如何在 Buildroot BusyBox init 中不輸入 root 使用者名或密碼自動登錄?

  • April 16, 2021

如果我做:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
make BR2_JLEVEL=2
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user

我必須先輸入rootQEMU,然後才能使用 shell。

如何配置 buildroot 跳過它並直接登錄?

在 Ubuntu 16.04 上測試。

::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/inittabBusybox 1_28_3 時發現了這一點,並發現了這一點,並嘗試了它,它奏效了,所以這是我迄今為止找到的最佳解決方案。

不要忘記前導 dash -,或者 Ctrl + C 等作業控制操作不起作用,如下所述。

前面的破折號-被 BusyBox 的 init 神奇地解析:https ://github.com/mirror/busybox/blob/1_28_3/init/init.c#L439並為隨後的命令設置 TTY。

BusyBox 還在-開頭附加 或arg[0],這/bin/sh解釋為指示登錄 shell,這使得它可以獲取一些 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 <user>Ubuntu 14.04 中存在的選項getty,而 BusyBox 的實現沒有。

然後,要以其他使用者身份登錄,只需執行:

/bin/login

這是一個範例設置

以前的上一個答案:console::respawn:/bin/sh

在郵件列表中詢問過,Thomas Petazzoni 回答說:

/etc/inittab

應包含:

console::respawn:/bin/sh

代替:

console::respawn:/sbin/getty -n -L  console 0 vt100 # GENERIC_SERIAL

Busybox 的系統正在使用qemu_x86_defconfig,由於.inittab``init``BR2_INIT_BUSYBOX=y

但是,此方法確實有一個缺點:登錄後,消息顯示:

/bin/sh can't access tty; job control turned off

正如所宣傳的那樣,諸如此類的事情Ctrl+C將沒有效果。

引用自:https://unix.stackexchange.com/questions/299408