::respawn:-/bin/sh
Using BR2_ROOTFS_OVERLAY
, modify the guest /etc/inittab
to contain:
::respawn:-/bin/sh
instead of the default line of form:
console::respawn:/sbin/getty -L console 0 vt100
You can copy the default inittab
from output/target/etc/inittab
after the build to modify the above line from it.
I found this while studying the examples/inittab
in Busybox 1_28_3 and found this, tried it out, and it worked, so it is the best solution I've found so far.
Don't forget the leading dash -
, or job control actions such as Ctrl + C don't work as mentioned below.
The leading dash -
gets magically parsed by BusyBox' init: https://github.com/mirror/busybox/blob/1_28_3/init/init.c#L439 and sets up the TTY for the command that follows.
BusyBox also appends the -
to the beginning or arg[0]
, which /bin/sh
interprets as indicating a login shell, which makes it source some init files such as /etc/profile
. See also: https://stackoverflow.com/a/42291142/895245
The following is equivalent since console
is the default value:
console::respawn:-/bin/sh
To login as another user by default, you can use instead:
::respawn:-/bin/login -f user0
Here is a sample setup.
Previous answer: getty -l
After almost two years, I've found it! :-)
Using BR2_ROOTFS_OVERLAY
, override / create the following files:
/etc/inittab: start from https://github.com/buildroot/buildroot/blob/2018.02/package/busybox/inittab and edit the console line to be:
console::respawn:/sbin/getty -n -L -l /loginroot.sh console 0 vt100
/loginroot.sh:
#!/bin/sh
exec /bin/login root
/bin/login
is the default executable if -l
is not given. What we did it to create an executable that calls /bin/login
with the user root
already specified.
This makes init
try to log in as the root user by default, and then since the default password is empty (BR2_TARGET_GENERIC_ROOT_PASSWD
), it automatically logs in.
This technique basically re-implements the -a <user>
option present in Ubuntu 14.04's getty
, which BusyBox' implementation doesn't have.
Then, to login as a different user, just run:
/bin/login
Here is a sample setup.
Previous previous answer: console::respawn:/bin/sh
I've asked on the mailing list and Thomas Petazzoni replied that the:
/etc/inittab
should contain:
console::respawn:/bin/sh
instead of:
console::respawn:/sbin/getty -n -L console 0 vt100 # GENERIC_SERIAL
With qemu_x86_defconfig
, the inittab
is being used by Busybox' init
system, due to BR2_INIT_BUSYBOX=y
.
This method does have a downside however: just after login, the message shows:
/bin/sh can't access tty; job control turned off
and as advertised, things like Ctrl+C
will have no effect.