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

如何在 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

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

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

在 Ubuntu 16.04 上测试。

答案1

::respawn:-/bin/sh

使用BR2_ROOTFS_OVERLAY,修改 guest/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解释为指示登录 shell,这使得它可以获取一些初始化文件,例如/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

由于qemu_x86_defconfiginittabBusyboxinit系统正在使用BR2_INIT_BUSYBOX=y

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

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

正如广告所宣传的那样,类似的事情Ctrl+C不会产生任何影响。

相关内容