システム5は、init物語の小さな部分だけを教えてくれます。

システム5は、init物語の小さな部分だけを教えてくれます。

Linuxディストリビューションを作成していますが、initプログラムが必要です。 Cでコーディングもかなり上手く、Linuxについても多く知っていて(多くはないが4年間アーチLinuxで開発をしてきたので)Cで基本初期化スクリプトを直接作成してみようかと思いました。私はシステムを単純なシェルに設定するためにinitが何をするのか疑問に思います。 (「initが何をしますか?」と尋ねるとき、私はinitが何であるか、何をしているのかを知っています。

コードも必要なく、基本コマンドも必要ないかもしれませんが、する実行順序は必須です。

ベストアンサー1

システム5は、init物語の小さな部分だけを教えてくれます。

Linuxの世界には一種の近視があります。人々はinit伝統的であり始めるのに最適な「システム5」というものを使うと思います。そうではありません。

まず第一に、伝統は実際にこれらの人々が言うのとは異なります。システム5initとシステム5はrcAT&T UNIXシステム5にさかのぼります。これは、Linux-Mandrakeの最初のバージョン以降である今(例えば)私たちが今(例えば)最初のUNIX以降であるのとほぼ同じです。

UNIXの最初のバージョンには対応しinitていませんrc。初版アセンブリ言語init誰のコードすでにWarren Toomey et al.が復元して提供しました。)は12のプロセスを直接作成および再生成しgetty、組み込みテーブルから3つのハードワイヤファイルシステムをマウントし、ユーザー名を持つユーザーのホームディレクトリから直接プログラムを実行しますmel。このgettyテーブルはプログラムイメージにも直接配置されます。

UNIXシステム5 いわゆる「伝統的な」Linux初期化システムが登場するまで、もう10年が経ちました。 1992年、Miquel van SmoorenburgはLinux init+rcと関連ツールを(再び)作成しました。このツールinitは実際にUNIX System 5のソフトウェアではありませんでしたが、現在の人々は「System 5」と呼ばれていますinit

System 5 init/はrc最高の出発点ではありません。 systemdの知識を増やしても、必要なものの半分にも達しません。過去20年間(LinuxおよびBSD用)、initシステム設計領域で多くの作業が行われてきました。様々なエンジニアリング決定が議論、定式化、設計、実装、実行されます。 Commercial Unicesも多くのことを行います。

研究・研究に利用可能な既存システム

これはいくつかの主要な初期化システムの不完全なリストです。外のこれらの両方とそのうちの1つと2つの(いくつかの)ポイントは次のとおりです。

  • ヨアキム・ニールセン有限価値より理解しやすい設定ファイルを使用する方法を選択しました。
  • フェリックス・フォン・ライトナーミニデータベース構成システムであるファイルシステム、小さなメモリースペース、およびinit開始された項目間の開始/停止依存関係を選択します。
  • ゲレットペプの走るさっき説明したところに行きました4つのシェルスクリプトを作成しました。方法。
  • 初期化NG依存関係、名前付きターゲット、複数の構成ファイル、およびより柔軟な構成構文を持ち、サブプロセス用のより多くの設定をロードするように設計されています。
  • 突然現れる我々は、サービスと相互依存性のために発生するイベントやタスクではなく、システムをモデル化するために完全な再設計を行いました。
  • デザインおやつすべてのサービス管理(getty作成とゾンビの収穫までを含む)を別々のサービス管理者に任せることを含みます。ただオペレーティングシステム固有の「API」デバイス/シンボルリンク/ディレクトリおよびシステムイベントを処理します。
  • サイン非常に簡単な初期化です。実行する作業は/bin/rc.init、プログラムの起動、ファイルシステムのマウントなどです。これには、次のようなものを使用できます超小型コンピュータ

また、約10年前に、daemontoolsユーザーと他のユーザーの間でプロセス#1として使用することについての議論がありました。svscanその結果、次の結果が出ました。プロセス1研究としてのポール・ジャークのsvscanゲレットペプの考えLaurent Bercotのsvscanプロセス1

これはプロセス#1プログラムの役割を紹介します。

プロセス#1プログラムは何をしますか?

プロセス#1が「しなければならない」作業の概念は本質的に主観的です。意味のある目的デザイン標準プロセスとは何ですか#1少なくともしなければならないする。カーネルはこれに対するいくつかの要件を提示します。そして、常にオペレーティングシステムごとに実行する必要があるさまざまなタスクがあります。プロセス#1が何であるかについて伝統的にもしそうなら、私たちはその最小値に達せず、実際に到達したこともありません。

さまざまなオペレーティングシステムカーネルや他のプログラムによってプロセス#1には避けられないいくつかの要件があります。

fork()人々は物事を処理し、孤児プロセスの親プロセスとして機能することがプロセス#1の主な機能であると言うでしょう。皮肉なことに、これは事実ではありません。孤児プロセスを処理することは(説明されているように、最近のLinuxカーネルの場合)https://unix.stackexchange.com/a/177361/5132)プロセス#1から専用プロセスなどの他のプロセスに大幅に分解できるシステムの一部サービスマネージャ。これらはすべてプロセス#1の外部で実行されるサービスマネージャです。

  • IBM AIXsrcmstrプログラムシステムリソースコントローラ
  • ゲレットペプのrunsvdirルーネットから
  • ダニエルJ.バーンスタインsvscandaemontoolsでは、Adam svscanSampson艦隊、ブルースガンターsvscandaemontools-encoreとLaurent Bercotが提供s6-svscans6から
  • ウェインマーシャルperpd犯罪者から
  • Solaris 10のサービス管理ツール
  • service-managernosh から

もう一度説明しましょうhttps://superuser.com/a/888936/38062、全体の/dev/initctlアイデアがプロセス#1に近づく必要はありません。皮肉なことに、プロセス#1から抜け出すことができることを証明したのは、高度に集中化されたシステムでした。

init代わりに、人々が一時的な設計で一般的に忘れてしまう必須事項は、カーネルの意味SIGINTなどでSIGPWRSIGWINCHhttps://unix.stackexchange.com/a/196471/5132、BSDツールセット「知っている」という特定のSIGUSR1意味を持ちます。 )

インストールなど、避けられない、または実行しないと、大きな損失を引き起こす可能性があるワンタイム初期化および仕上げ作業もあります。「API」ファイルシステムまたは、ファイルシステムキャッシュをフラッシュします。

「API」ファイルシステムを扱う基本は、initROMの最初のUNIXバージョンの動作とほとんど変わりません。つまり、プログラムにはハードワイヤード情報のリストがあり、mount()リスト内のすべての項目を保存するだけです。initこのメカニズムは、BSD(sic!)からnosh、systemdまでのシステムにありますsystem-manager

「システムを単純なシェルに設定する」

ご覧のとおり、init=/bin/sh「API」ファイルシステムはタイプexithttps://unix.stackexchange.com/a/195978/5132)、通常、システムを最小限に使用可能にする操作を手動で実行することは(スーパー)ユーザーに委ねられます。

指定されたデザイン目標のための良い基礎を得るためにプロセス#1プログラムで人々が実際に何をすべきかについての良いアイデアを得るための最良の方法は、Gerrit Papeのrunit(Felix von)でアクションLeitnerのminitとsystem-managernoshパッケージです。プログラムが重複しています。最初の2つは、ミニマリズムに対する2つの試みを示していますが、まだ避けられない問題に対処しています。

後者は、system-managerどの「API」ファイルシステムがマウントされるのか、どの初期化タスクが実行されるのか、システムがどの信号が処理されるのかを詳細に説明する多くの手動入力をプログラムに含めるため、便利です。デザインによってシステム管理者は、他の3つのタスク(サービスマネージャ、コンパニオンロガー、状態変更を実行するプログラム)のみを生成し、プロセス#1で避けられないタスクのみを実行します。

おすすめ記事