initプロセスをLinuxのシェルスクリプトにすることはできますか?

TheMeaningfulEngineer

私は、カスタムinitramfsのセットアップに関するチュートリアルを行っていました

欠落しているのは/ initだけです。これは、initramfsのルートにある実行可能ファイルで、ロードされるとカーネルによって実行されます。sys-apps / busyboxには完全に機能するシェルが含まれているため、これは/ initバイナリを単純なシェルスクリプトとして記述できることを意味します(コンパイルする必要があるAssemblerまたはCで記述された複雑なアプリケーションにする代わりに)。

で始まるシェルスクリプトとしてのinitの例を示します #!/bin/busybox sh

これまでのところ、initが起動されるメインプロセスであり、他のすべてのユーザースペースプロセスは最終的にinitの子であるという印象を受けました。ただし、指定された例では、最初のプロセスは実際にbin/busybox/ shは、後のinitが生成されるプロセスです

これは正しい解釈ですか?たとえば、その時点で利用可能なインタプリタがあれば、Pythonスクリプトなどとしてinitを記述できますか?

霜防止

initは(子プロセスとして)「生成」されるのではなく、次execのようになります。

# Boot the real thing.
exec switch_root /mnt/root /sbin/init

execプロセス全体を適切に置き換えます。最後のinitは、Initramfsのプロセスに先行していても、まだ最初のプロセス(pid 1)です。

Initramfs/initは、pid 1を使用するBusyboxシェルスクリプトであり、Busyboxに送信さexecれますswitch_root(現在switch_rootはpid 1です)。このプログラムはマウントポイントを変更するので/mnt/root、新しいになり/ます。

switch_root再度execのよ/sbin/initあなたの本当のルートファイルシステムの。これにより、実際のinitシステムがpid 1を使用する最初のプロセスになり、これにより、任意の数の子プロセスが生成される可能性があります。

確かに、PythonをInitramfsに焼き付けることができれば、Pythonスクリプトでも同様に実行できます。とにかくbusyboxを含める予定がない場合でも、その機能の一部を入念に再実装する必要があります(などswitch_root、通常は単純なコマンドで行うすべての機能)。

ただし、スクリプトバイナリ(CONFIG_BINFMT_SCRIPT=y)を許可しないカーネルでは機能しません。そのような場合は、インタープリターを直接起動して、何らかの方法でスクリプトをロードする必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

シェルスクリプトで変数の内容を出力することはできますか?(間接参照)

分類Dev

ExcelリストのセクションをVBAを使用してSharePointリストにアップロードすることはできますか?

分類Dev

クリティカルセクションはプロセッサを無期限にストールさせることができますか?

分類Dev

アプリケーション(GUI)とWindowsサービスを使用して1つのプロジェクトを作成し、両方をインストールする1つのセットアップを行うことはできますか?

分類Dev

Pythonシェルスクリプトを書くときにsubprocess.call()またはos.system()を使用するのは悪いことですか?

分類Dev

シェルスクリプトをグローバルコマンドにすることはできますか?

分類Dev

CircleCI: ビルド テスト デプロイ プロセスのセクションまたはフェーズを条件付きにすることができますか

分類Dev

誰かがこのシェルスクリプトのグローバル変数について明確にすることができますか?

分類Dev

1つのビジュアルスタジオソリューションに、異なるタイプの2つのプロジェクト(デスクトッププロジェクトとWebプロジェクト)を含めることはできますか?

分類Dev

シェルスクリプトはバックグラウンドでsshremote runコマンドを使用しますが、このsshプロセスを閉じることはできません。でも画面は全部完璧です

分類Dev

インストールディレクトリを通知するUninstall()プロシージャの変数にアクセスすることは可能ですか?

分類Dev

このシェルスクリプトを置き換えるにはどうすればよいですか?

分類Dev

Linuxでプロセスを一時的にフリーズすることはできますか?

分類Dev

Cからの名前付きパイプを使用してシェルスクリプトと通信することはできません

分類Dev

コマンドが独立したプロセスであるのに、シェル スクリプトで使用されたときに他のプロセスがスリープしないように見えるのはなぜですか?

分類Dev

Linuxのどこにutilシェルスクリプトを配置しますか

分類Dev

LinuxでプロセスIDを取得するシェルスクリプト

分類Dev

ピクルスファイル用に、必要なオブジェクトを直接ロードして、シリーズ内の他のオブジェクトをジャンプすることはできますか?

分類Dev

ドロップダウンリストごとに異なるオプションを選択し、次のオプションでそれを繰り返すことができるループロジックを作成する方法はありますか?

分類Dev

画像やその他のアセットをロードするときに、Xcodeプロジェクトでディレクトリ/グループ化パスをシミュレートするにはどうすればよいですか?

分類Dev

Linuxでソケットを開いて別のプロセスに渡すことはできますか

分類Dev

busyboxでJSONを解析するためのシェルスクリプトはどこにありますか?

分類Dev

GROUP BYクエリでプロジェクションリストに非集計関数呼び出しを含めることはできますか?

分類Dev

Azure Devopsプロジェクトのソースをbitbucketに入れることはできますか?

分類Dev

シェルスクリプトでプロセスプールを作成できますか?

分類Dev

プロジェクトで実装されているライブラリ(.jarファイル)は、アクセスユーザデータのことができるようにすることはできますか?

分類Dev

プロセスチェックが失敗したときにシェルスクリプトを終了する

分類Dev

bashシェルスクリプトを使用して共有ホストのセットアップを自動化することは可能ですか?

分類Dev

Googleスプレッドシートスクリプト-あるシートから別のシートに範囲をコピーする方法。ただし、空でないターゲットセルを上書きすることはありません。

Related 関連記事

  1. 1

    シェルスクリプトで変数の内容を出力することはできますか?(間接参照)

  2. 2

    ExcelリストのセクションをVBAを使用してSharePointリストにアップロードすることはできますか?

  3. 3

    クリティカルセクションはプロセッサを無期限にストールさせることができますか?

  4. 4

    アプリケーション(GUI)とWindowsサービスを使用して1つのプロジェクトを作成し、両方をインストールする1つのセットアップを行うことはできますか?

  5. 5

    Pythonシェルスクリプトを書くときにsubprocess.call()またはos.system()を使用するのは悪いことですか?

  6. 6

    シェルスクリプトをグローバルコマンドにすることはできますか?

  7. 7

    CircleCI: ビルド テスト デプロイ プロセスのセクションまたはフェーズを条件付きにすることができますか

  8. 8

    誰かがこのシェルスクリプトのグローバル変数について明確にすることができますか?

  9. 9

    1つのビジュアルスタジオソリューションに、異なるタイプの2つのプロジェクト(デスクトッププロジェクトとWebプロジェクト)を含めることはできますか?

  10. 10

    シェルスクリプトはバックグラウンドでsshremote runコマンドを使用しますが、このsshプロセスを閉じることはできません。でも画面は全部完璧です

  11. 11

    インストールディレクトリを通知するUninstall()プロシージャの変数にアクセスすることは可能ですか?

  12. 12

    このシェルスクリプトを置き換えるにはどうすればよいですか?

  13. 13

    Linuxでプロセスを一時的にフリーズすることはできますか?

  14. 14

    Cからの名前付きパイプを使用してシェルスクリプトと通信することはできません

  15. 15

    コマンドが独立したプロセスであるのに、シェル スクリプトで使用されたときに他のプロセスがスリープしないように見えるのはなぜですか?

  16. 16

    Linuxのどこにutilシェルスクリプトを配置しますか

  17. 17

    LinuxでプロセスIDを取得するシェルスクリプト

  18. 18

    ピクルスファイル用に、必要なオブジェクトを直接ロードして、シリーズ内の他のオブジェクトをジャンプすることはできますか?

  19. 19

    ドロップダウンリストごとに異なるオプションを選択し、次のオプションでそれを繰り返すことができるループロジックを作成する方法はありますか?

  20. 20

    画像やその他のアセットをロードするときに、Xcodeプロジェクトでディレクトリ/グループ化パスをシミュレートするにはどうすればよいですか?

  21. 21

    Linuxでソケットを開いて別のプロセスに渡すことはできますか

  22. 22

    busyboxでJSONを解析するためのシェルスクリプトはどこにありますか?

  23. 23

    GROUP BYクエリでプロジェクションリストに非集計関数呼び出しを含めることはできますか?

  24. 24

    Azure Devopsプロジェクトのソースをbitbucketに入れることはできますか?

  25. 25

    シェルスクリプトでプロセスプールを作成できますか?

  26. 26

    プロジェクトで実装されているライブラリ(.jarファイル)は、アクセスユーザデータのことができるようにすることはできますか?

  27. 27

    プロセスチェックが失敗したときにシェルスクリプトを終了する

  28. 28

    bashシェルスクリプトを使用して共有ホストのセットアップを自動化することは可能ですか?

  29. 29

    Googleスプレッドシートスクリプト-あるシートから別のシートに範囲をコピーする方法。ただし、空でないターゲットセルを上書きすることはありません。

ホットタグ

アーカイブ