web-dev-qa-db-ja.com

サックレスの「sinit」initの実際の使用

sinit をLinux(PC上)のinitとして設定しようとしています。現時点での私の目標は、そこから1つのtty/bashを実行することです。カーネルはすでにcmdlineに対してroot=/dev/sda2を取得しているため、特別なマウントは必要ありません。

/sbin/initとしてsinitバイナリがあり、次に何をすべきかわかりません。いくつかのスクリプトを配置する必要があることは知っていますが、sinitがそれらを実行したり、bashに関連付けたりする方法がわかりません。

2
user156556

含まれているマニュアルページsinit.8とREADMEは私にとって非常に説明的です。しかし、ソースを調べるときの簡単な紹介:

  • sinitメイン実行可能ファイル、/sbin/initはカーネルによってpid1として開始されます
  • /bin/rc.initスクリプトを個別の子プロセスとして実行するための初期環境を準備します
  • /bin/rc.initを個別のプロセスとして実行するため、/bin/rc.initにはそのポイントを超えてシステムを初期化するコマンドが含まれます
  • 無限ループに入り、ゾンビ化されたプロセスをキャッチし、終了コードをどこにも読み込まない
  • ただし、無限ループにある間は、信号によって中断される可能性があります。リッスンするように定義されているシグナルは、SIGUSR1とSIGINTです。 SIGUSR1は、initにpoweroffスクリプト名として/bin/rc.shutdownを実行させ、SIGINTは、スクリプト内の操作モードを区別するために、initにrebootnameを使用して同じスクリプトを実行させます。これらの2つのシグナルは、initがリッスンするシグナルにすぎないことに注意してください。含む SIGKILLとSIGSTOPは無視します。また、スーパーユーザーのみがinitにシグナルを送信できます。 Ctrl-Alt-Deleteを押すと、カーネルによってSIGINTが生成されますが、その場合に限ります(c-a-dでSIGINTを送信できるようにするために、initプロセスが通常行う特別なシステムコールがあります)。

したがって、これのうち、sinit 提供しません

  • initスクリプト(独自に作成するか、ディストリビューションが提供するスクリプトを適応させる必要があります)
  • 制御方法(ランレベルなど)、2つの簡単なコマンドのみ

ただし、sinitは機能する素敵なかわいい小さなinitです。組み込みシステムだけでなく、最新のデスクトップ環境に煩わされることのない単純なデスクトップシステムでも非常に優れていると思います。

4
user140866

結局のところ、Linuxカーネル parsesShebang それ自体です。

したがって、任意の「Shebanged」スクリプト(バイナリのフルパスを含む)をsinitに使用できます。

2
user156556