Arch Linux /usr/lib/initcpio/busybox
はパッケージmkinitcpio-busybox 1.27.2-1によって所有されており、 機能が少ないように構成されています 、たとえばCONFIG_FEATURE_USE_INITTABは設定されていません。
そのbusyboxを含むカスタムinitramfsで、ソース/etc/profile
が機能するsshネットワークログインを取得することができました。また、VGAモニターにashシェルプロンプトが表示されます。
ただし、その「vga」シェルは/etc/profile
をソースしません。 Q: ログインシェルと非ログインシェルの違いは? このシェルはログインシェルではないと思います。そのシェルは/init
によって開始されます:
exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
回帰:
exec setsid sh -c 'exec sh -i </dev/tty1 >/dev/tty1 2>&1'
exec setsid sh -c 'exec sh - </dev/tty1 >/dev/tty1 2>&1'
exec setsid sh -c 'exec -sh </dev/tty1 >/dev/tty1 2>&1'
このbusybox
ash
シェルをソース/etc/profile
にする方法、および/または(自動)ログインシェルにする方法は?
従来、シェルは、-
で始まるコマンド名で呼び出された場合、ログインシェルとして機能します。 exec -sh
は、パスに-sh
という実行可能ファイルがある場合に機能します。 BusyBoxashは-l
オプションもサポートしているため、sh -l
を実行できます。
ログインすると、login
プログラム(またはsshd
、またはログインを処理するもの)が、コマンド名の先頭に-
を付けてユーザーのシェルを実行します(コマンド名は実行可能ファイルの名前と同じである必要はありません。これは、login
が故意に違反する非常に一般的な規則です)。ここでは、「ログインを処理しているものは何でも」がミニスクリプトなので、注意する必要があります。