web-dev-qa-db-ja.com

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

シェルを使用する前に、QEMUにrootと入力する必要があります。

ビルドルートをスキップして直接ログインするように設定するにはどうすればよいですか?

Ubuntu 16.04でテスト済み。

::respawn:-/bin/sh

BR2_ROOTFS_OVERLAYを使用して、ゲストに/etc/inittabを含めます。

::respawn:-/bin/sh

デフォルトのフォーム行の代わりに:

console::respawn:/sbin/getty -L console 0 vt100

ビルド後、output/target/etc/inittabからデフォルトのinittabをコピーできます。

私は examples/inittab in Busybox 1_28_ を調べているときにこれを発見し、これを見つけて試してみましたが、うまくいったので、これまでのところ最高の解決策です。

先頭のダッシュ-を忘れないでください。そうしないと、Ctrl + Cなどのジョブ制御アクションが以下のように機能しません。

先頭のダッシュ-は、BusyBoxのinitによって魔法のように解析されます: https://github.com/mirror/busybox/blob/1_28_3/init/init.c#L439 次のコマンドのTTY。

BusyBoxはまた、-を先頭またはarg[0]に追加します。これは、/bin/shがログインシェルを示すものと解釈し、/etc/profileなどのいくつかのinitファイルを取得するようにします。参照: https://stackoverflow.com/a/42291142/895245

consoleがデフォルト値であるため、以下は同等です。

console::respawn:-/bin/sh

デフォルトで別のユーザーとしてログインするには、代わりに次を使用できます:

::respawn:-/bin/login -f user0

これが sample setup です。

前の回答:getty -l

ほぼ2年後、私はそれを見つけました! :-)

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がデフォルトの実行可能ファイルです。ユーザーrootが既に指定されている状態で/bin/loginを呼び出す実行可能ファイルを作成するために行ったこと。

これにより、initはデフォルトでrootユーザーとしてログインしようとし、デフォルトのパスワードは空(BR2_TARGET_GENERIC_ROOT_PASSWD)であるため、自動的にログインします。

この手法は基本的に、BusyBoxの実装にはないUbuntu 14.04のgettyにある-a <user>オプションを再実装します。

次に、別のユーザーとしてログインするには、次のコマンドを実行します。

/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_defconfigがあるため、BR2_INIT_BUSYBOX=yにより、Busyboxのinittabシステムでinitが使用されています。

ただし、この方法には欠点があります。ログイン直後に次のメッセージが表示されます。

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

宣伝どおり、Ctrl+Cのようなものは効果がありません。