如何在 Buildroot BusyBox init 中不輸入 root 使用者名或密碼自動登錄?
如果我做:
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
我必須先輸入
root
QEMU,然後才能使用 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/inittab
Busybox 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
將沒有效果。