「init」と「systemd」の背後にある物語: Linux で「init」を「systemd」に置き換える必要がある理由
私は、どこで何が起こっているかを常に最新の情報を得るために、さまざまな Linux ディストリビューションとアプリケーションに関連するいくつかのメーリング リストに登録しています。新しいバグとは何ですか?リリースされたパッチとは何ですか?次のリリースでは何が期待されますか?他にもたくさんのものがあります。最近、メーリング リストには、主に Debian メーリング リストと他のいくつかのメーリング リストで、「Linux Divide でどちら側につくかを選択してください」というメッセージが大量に送信されています。
「Linux Divide でどちら側を選ぶか」とは何ですか?
init デーモンは、一部の Linux ディストリビューションでデーモン systemd に置き換えられる予定ですが、多くのディストリビューションではすでに実装されています。これにより、従来の Unix/Linux Guard と新しい Linux Guard、つまりプログラマーとシステム管理者との間に大きなギャップが生じます、または生じることになります。
この記事では、以下のすべてのクエリについて 1 つずつ説明し、解決していきます。
- initとは何ですか?
- システム化とは何ですか?
- なぜ init を置き換える必要があるのでしょうか?
- systemd が所有する機能。
初期化とは何ですか?
Linux では、init は初期化の略語です。 init は、コンピュータが起動するとすぐに開始され、シャットダウンされるまで実行を続けるデーモン プロセスです。実際、init はコンピュータの起動時に開始される最初のプロセスであり、直接的または間接的に他のすべての実行プロセスの親となるため、通常は「pid=1」が割り当てられます。
何らかの理由で init デーモンを開始できなかった場合、プロセスは開始されず、システムは「カーネル パニック」と呼ばれる段階に達します。 init は、最も一般的にはSystem V init と呼ばれます。 System V は最初に設計された商用 UNIX オペレーティング システムであり、今日のほとんどの Linux ディストリビューションでの init の使用法は、BSD スタイルを使用する Slackware やカスタム init を使用する Gentoo などのいくつかの例外を除いてSystem V OS と同じです。 。
init をより完璧なものに置き換える必要性は長い間感じられ、いくつかの代替案が随時開発され、その一部はディストリビューションのネイティブ init 代替案となりました。そのうちのいくつかは次のとおりです。
- Upstart – Ubuntu GNU/Linux に実装され、プロセスを非同期に開始するように設計された init 置換デーモン。
- Epoch – シンプルさとサービス管理を中心に構築された init 置換デーモンで、プロセスをシングルスレッドで開始するように設計されています。
- Mudar – Python で書かれた init 置換デーモン。Pardus GNU/Linux に実装され、プロセスを非同期に開始するように設計されています。
- systemd – プロセスを並行して開始するように設計された init 置換デーモンで、Fedora、OpenSuSE、Arch、RHEL、CentOS などの多くの標準ディストリビューションに実装されています。
システム化とは何ですか?
systemd は、デーモンの最後に「d」を追加する UNIX 規則に従って命名されたシステム管理デーモンです。そのため、簡単に認識できるようになります。当初は GNU General Public License に基づいてリリースされましたが、現在は GNU Lesser General Public License に基づいてリリースされています。 init と同様に、systemd は直接的または間接的に他のすべてのプロセスの親であり、ブート時に開始される最初のプロセスであるため、通常は「pid=1」が割り当てられます。
systemd は、デーモン周辺のすべてのパッケージ、ユーティリティ、ライブラリを指します。 init の欠点を克服するように設計されました。これ自体はプロセスを並行して開始するように設計されたバックグラウンド プロセスであり、起動時間と計算オーバーヘッドを削減します。 init と比較して他にも多くの機能があります。
なぜ init を置き換える必要があったのでしょうか?
init プロセスはシリアルに開始されます。つまり、1 つのタスクは、最後のタスクの開始が成功し、メモリにロードされた後にのみ開始されます。これにより、起動時間が遅くなり、起動時間が長くなることがよくありました。ただし、systemd は速度を重視して設計されたのではなく、物事をきちんと処理して、国連が必要とするすべての遅延を回避するために設計されました。
systemdの特徴
- クリーンでステートフォワードな効率的なデザイン。
- 起動プロセスが簡素化されました。
- 起動時の同時並行処理。
- より良いAPI。
- シンプルなユニット構文。
- オプションのコンポーネントを削除する機能。
- メモリ使用量が少ない。
- 依存関係を表現するための技術が改善されました。
- 初期化命令はシェルスクリプトではなく設定ファイルに記述されます。
- Unix ドメイン ソケットを利用します。
- systemd カレンダー タイマーを使用したジョブのスケジュール。
- ジャーナルドによるイベントログ。
- systemd と syslog によるシステム イベントのログ記録の選択。
- ログはバイナリ ファイルに保存されます。
- systemd の状態は、将来呼び出せるように保存できます。
- PID ではなくカーネルの cgroup を使用してプロセスを追跡します。
- ユーザーのログインは systemd-logind によって管理されます。
- Gnome との統合が強化され、相互運用性が向上しました。
システムのボトルネック
- すべてが 1 か所に。
- POSIX 標準ではありません。
Systemd とディストリビューションの統合
- Linux Distribution
統合
- Fedora
はい、systemd を採用した最初のディストリビューションです
- Arch
はい
- RedHat
はい
- CentOS
はい
- Debian
-
はい、Debian 8 コードネーム Jessie はデフォルトで systemd を持ちます
- Gentoo
はい、ただしダウンロード、インストールし、カスタム init を使用して側を構成する必要があります
- OpenSUSE
はい
- Slack
いいえ (これまでスラックウェアでは採用されていませんでしたが、Patric Volkerding は採用するかどうかの兆候を示していません)
- Ubuntu
はい、アップストリームを使用してインストールして構成する必要があります。
論争
Linux カーネルのチーフアーキテクトである Linus Torvalds 氏は、systemd の主要な開発者のユーザーに対する態度やバグレポートが適切ではないようだと感じています。 systemd の哲学は奇妙であり、システム プロセスを制御する異質な方法であるとも報告されました。同じことは、Patric Volkerding やその他の著名な Linux ユーザーや開発者、さらにはオンライン フォーラムからも随時記録されています。
systemd と init
Features | init | systemd |
DBus Dependency – Mandatory | No | Yes |
Device based Activation | No | Yes |
Device dependency configuration with udev | No | Yes |
Timer based Activation | Cron/at | Proprietary |
Quota Management | No | Yes |
Automatic Service Dependency Handling | No | Yes |
Kills users Process at logout | No | Yes |
Swap Management | No | Yes |
SELinux integration | No | Yes |
Support for Encrypted HDD | No | Yes |
Static kernle module loading | No | Yes |
GUI | No | Yes |
List all the child processes | No | Yes |
Sysv compatible | Yes | Yes |
Interactive booting | No | Yes |
Portable to non x86 | Yes | No |
Adopted on | Several Distro | Several Distro |
Parallel service startup | No | Yes |
Resource limit per service | No | Yes |
Easy extensible startup script | Yes | No |
Separate Code and Configuration File | Yes | No |
Automatic dependency calculation | No | Yes |
Verbose debug | Yes | No |
Version | N/A | V44+ |
Size | 560 KB | N/A |
Number of Files | 75 files | 900 files + glib + DBus |
Lines of code – LOC | 15000 (Approx) | 224000 (Approx) (inc Codes, comments and white space) 125000 (Approx) (acctual code) |
結論
pid=1 として実行されるものはすべて壊れてはならず、混乱してはならず、ユーザーが効果的かつ効率的に制御する必要があります。多くのユーザーは、init を systemd に置き換えることは、Linux の副作用として毎回車輪の再発明をすることに他ならないと信じています。しかし、これが Linux の多様な性質です。それは、Linux が非常に強力だからです。変化は良いことであり、それが正当な理由があるのであれば、私たちはそれを感謝しなければなりません。
それは今のところすべてです。ぜひまた読んでいただきたい興味深い記事をお届けします。それまでは引き続き Tecmint に接続してください。以下のコメント欄に貴重なフィードバックをお寄せください。