如何在Buildroot BusyBox init中不输入root用户名或密码自动登录?

Cir*_*郝海东 8 busybox buildroot busybox-init

如果我做:

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
Run Code Online (Sandbox Code Playgroud)

我必须先输入rootQEMU,然后才能使用 shell。

如何配置 buildroot 跳过它并直接登录?

在 Ubuntu 16.04 上测试。

Cir*_*郝海东 12

::respawn:-/bin/sh

使用BR2_ROOTFS_OVERLAY,修改来宾/etc/inittab以包含:

::respawn:-/bin/sh
Run Code Online (Sandbox Code Playgroud)

而不是默认的表单行:

console::respawn:/sbin/getty -L console 0 vt100
Run Code Online (Sandbox Code Playgroud)

您可以复制默认inittaboutput/target/etc/inittab生成后,从它修改上述行。

我在研究examples/inittabBusybox 1_28_3 时发现了这个,发现了这个,尝试了一下,它奏效了,所以这是我迄今为止找到的最好的解决方案。

不要忘记前导破折号-,或者像 Ctrl + C 这样的作业控制操作不起作用,如下所述。

-BusyBox 的 init 神奇地解析了前导破折号:https : //github.com/mirror/busybox/blob/1_28_3/init/init.c#L439并为后面的命令设置 TTY。

BusyBox 还将 附加-到开头 or arg[0],它/bin/sh解释为指示登录 shell,这使得它可以获取一些 init 文件,例如/etc/profile. 另见:https : //stackoverflow.com/a/42291142/895245

以下是等效的,因为console是默认值:

console::respawn:-/bin/sh
Run Code Online (Sandbox Code Playgroud)

要默认以其他用户身份登录,您可以改用:

::respawn:-/bin/login -f user0
Run Code Online (Sandbox Code Playgroud)

这是一个示例设置

上一个答案: 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
Run Code Online (Sandbox Code Playgroud)

/loginroot.sh:

#!/bin/sh
exec /bin/login root
Run Code Online (Sandbox Code Playgroud)

/bin/login如果-l未给出,则为默认可执行文件。我们做了什么来创建一个可执行文件,该可执行文件/bin/loginroot已指定的用户一起调用。

这使得init默认尝试以 root 用户身份登录,然后由于默认密码为空 ( BR2_TARGET_GENERIC_ROOT_PASSWD),它会自动登录。

这种技术基本上重新实现了-a <user>Ubuntu 14.04 中存在的选项getty,而 BusyBox 的实现没有。

然后,要以其他用户身份登录,只需运行:

/bin/login
Run Code Online (Sandbox Code Playgroud)

这是一个示例设置

以前的回答: console::respawn:/bin/sh

在邮件列表上询问过,Thomas Petazzoni 回答说:

/etc/inittab
Run Code Online (Sandbox Code Playgroud)

应包含:

console::respawn:/bin/sh
Run Code Online (Sandbox Code Playgroud)

代替:

console::respawn:/sbin/getty -n -L  console 0 vt100 # GENERIC_SERIAL
Run Code Online (Sandbox Code Playgroud)

由于qemu_x86_defconfiginittabBusybox 的init系统正在使用BR2_INIT_BUSYBOX=y

然而,这种方法确实有一个缺点:登录后,消息显示:

/bin/sh can't access tty; job control turned off
Run Code Online (Sandbox Code Playgroud)

正如宣传的那样,诸如此类的事情Ctrl+C将无效。