suckless の "sinit" init の実際の使用法

suckless の "sinit" init の実際の使用法

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

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

答え1

同梱のマニュアルページ sinit.8 と README は私にとって非常にわかりやすいものでした。ただし、ソースを調べる際に簡単に紹介しておきます。

  • sinitメイン実行可能ファイル、/sbin/initカーネルによってpid 1として起動される
  • /bin/rc.initスクリプトを別の子プロセスとして実行するための初期環境を準備します。
  • 別個のプロセスとして実行される/bin/rc.initため、/bin/rc.initそれ以降のシステムを初期化するためのコマンドが含まれています。
  • ゾンビ化したプロセスを捕捉し、その終了コードをどこにも読み込まない無限ループに入ります。
  • 無限ループ中はシグナルによって中断される可能性があります。待機するように定義されているシグナルは SIGUSR1 と SIGINT です。SIGUSR1 はスクリプト名/bin/rc.shutdownとしてinit を強制的に実行しpoweroff、SIGINT はスクリプト内の操作モードを区別するために init を強制的に同じスクリプトreboot名で実行します。これらの 2 つのシグナルは init が待機するものだけであることに注意してください。含むSIGKILL と SIGSTOP は無視されます。また、スーパーユーザーのみが init にシグナルを送信できます。SIGINT は、Ctrl-Alt-Delete を押すとカーネルによって生成されますが、そのように指示された場合のみです (通常、init プロセスは、cad で SIGINT を送信できるようにするために、特別なシステムコールを実行します)。

だから、このことから、提供しない:

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

しかし、sinit は、きちんと動作する、小さくてかわいい init です。組み込みシステムだけでなく、現代のデスクトップ環境の煩わしさのないシンプルなデスクトップ システムにも非常に適していると思います。

答え2

結局のところ、Linuxカーネルは解析するシェバンそれ自体で。

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

関連情報