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

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

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

Ubuntu 16.04でテストされました。

答え1

::respawn:-/bin/sh

を使用するには、次のようにBR2_ROOTFS_OVERLAYゲストを変更します。/etc/inittab

::respawn:-/bin/sh

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

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

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も先頭に追加されますarg[0]。これは/bin/shログインシェルを表すと解釈され、これによりいくつかの初期化ファイルをインポートできます/etc/profile。また、以下を見てください。https://stackoverflow.com/a/42291142/895245

consoleこれがデフォルトなので、次は同じです。

console::respawn:-/bin/sh

既定では、別のユーザーとしてログインするには、次のものを使用できます。

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

ここに一つあります。設定例

前の答え: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指定しない場合、デフォルトの実行可能ファイルが使用されます。私たちがすることは、私たちが指定した/bin/loginユーザーが呼び出すことができる実行可能ファイルを作成することだけですroot

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

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

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

/bin/login

これは設定例

前の答え:console::respawn:/bin/sh

私は持っていますメーリングリストに尋ねるトーマス・ペタゾニーはこう答えました。

/etc/inittab

以下を含める必要があります。

console::respawn:/bin/sh

変える:

console::respawn:/sbin/getty -n -L  console 0 vt100 # GENERIC_SERIAL

以来、qemu_x86_defconfigBusyboxシステムinittabinit使用していますBR2_INIT_BUSYBOX=y

しかし、このアプローチには1つの欠点があります。ログイン後のメッセージは次のとおりです。

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

広告したように、このようなものはCtrl+C何の変化ももたらしません。

関連情報