\r\n\r\n

なぜlinuxのsystemdは何年経っても賛否両論なのか?

systemdは10年前のものですが、リナックスコミュニティの感性はまだ成熟しておらず、今も昔と同じように分裂しているのです。多くのメジャーなLinuxディストリビューションで採用されているにもかかわらず、筋金入りの反対派は譲らない...。

systemdは10年前のものですが、Linuxコミュニティの感性はまだ成熟しておらず、今も昔と同じように分裂しているのです。多くの主要なLinuxディストリビューションで採用されているが、筋金入りの反対派も容赦はしない。

linuxブートシーケンス

コンピュータの電源を入れると、ハードウェアが起動し、その後(コンピュータで使用されているブートセクタの種類によって)マスターブートレコード(MBR)を実行するか、Unified Extensible Firmware Interface(UEFI)を実行することになります。最後の動作は、Linuxカーネルの起動です。

カーネルは自らメモリにロードし、解凍して初期化する。一時ファイルシステムは、通常、initramfsまたはinitrdと呼ばれるユーティリティによってRAM上に作成されます。これにより、必要なドライバを特定し、ロードすることができます。これにより、ユーザー空間のファイルシステムがロードされ、ユーザー空間環境を構築するための準備が整う。

ユーザー空間環境の構築は、ユーザー空間でカーネルが最初に起動するプロセスであるinitプロセスによって処理される。プロセスID(PID)は1であり、他のすべてのプロセスはinitプロセスの直接または間接的な子プロセスである。

systemd以前は、initプロセスのデフォルトはUnix system V initを書き換えたものが主流でした。他にもオプションがありますが、systemvinitはBerkeley Software Distribution(BSD)以外のほとんどの派生ディストリビューションで標準のオプションとなっています。これは Linux の精神的な祖先である systemv Unix から直接来たものなので、多くの人が init の「公式な方法」だと考えています。

initプロセスは、オペレーティングシステムを有意義に対話的に動作させるために必要なすべてのデーモンとサービスを開始します。これらのデーモンは、ネットワークスタック、コンピュータ内部の他のハードウェアの有効化、ブート画面の提供といったことを処理します。

起動後も多くのバックグラウンドプロセスが実行されます。イベント情報の記録、デバイスの**や削除の際のハードウェア変更の監視、ユーザーのログイン管理などが可能です。当然のことながら、initシステムには、サービスを管理するための機能も含まれています。

PIDが1のプロセスを見るには、psを使用します。

ps -fp 1

PIDが1のプロセスはsystemdであることがわかります。Manjaro-Linuxで同じコマンドを実行すると、異なる結果が得られます。PIDが1のプロセスは、/**in/initとして識別されます。ファイルをすばやく見ると、systemdへのシンボリックリンクであることがわかります。

ps -fp 1 ls -hl /**in/init

ps の ppid (親プロセス ID) オプションを使うと、systemd が直接起動したプロセスを確認することができます。

ps -f --ppid 1

以下のように長いリストになっています。

代替品

従来のシステムビニットに代わるものを作ろうと、いくつかのプロジェクトが試みられています。大きな問題点として、systemvinitでは、すべてのプロセスが次々と連続して起動されることが挙げられます。ブートシーケンスの効率を上げるため、多くの代替プロジェクトでは、並列処理を用いて同時・非同期にプロセスを開始するようにしています。

以下はその情報です。

  • Upstart:Canonical社が開発したubuntu 9.10、Red Hat、Red Hat Enterprise Linux (RHEL) 6、CentOS 6、Fedora 9向けの製品です。
  • Runit: FreeBSDおよびその他のBSD派生システム、macOS、Solaris、Linuxシステムで動作します。また、voidlinuxのデフォルトのinitシステムでもあります。
  • s6linux-init: この systemv-init の置き換えは、しばしば "do one thing and do it well" と単純化される Unix の哲学に厳格に従うように設計されています。

他にもさまざまな機能やデザインがありますが、このシステムのような怒涛の展開は**ありません**。

システマティックなアプローチ

systemdは2010年にリリースされ、2011年にFedoraで採用されました。以来、多くのディストリビューターで採用されている。Redhart社のソフトウェアエンジニアであるlennartpoetteringとkaysiewersの2人が開発したものです。

systemd は init の単なる置き換えではありません。その代わり、システムの初期化、デーモンやサービス、ログの記録、その他Linuxで既に専用モジュールが扱っている多くの機能を扱う約70個のバイナリ群となっています。これらのほとんどは、システムの初期化とは関係ありません。

systemd が提供するデーモンには、以下のようなものがあります。

  • systemd udevd: 物理デバイスを管理する。
  • systemd logind: ユーザーのログインを管理します。
  • systemd resolved: ローカルアプリケーションにネットワークの名前解決を提供します。
  • systemd networkd: ネットワークデバイスの管理、検出、ネットワーク設定の管理。
  • systemd tmpfiles: 揮発性ファイルと一時ファイル、ディレクトリの作成、削除、クリーンアップを行います。
  • systemd localed: システムの地域設定を管理します。
  • systemd: 仮想マシンやコンテナの検出と監視を行う。
  • systemd nspawn: 軽量な名前空間コンテナでコマンドや他のプロセスを起動し、chroot のような機能を提供することができます。

そして、それは氷山の一角であり、問題の核心です。systemd は init システムの要件をとっくに超えており、反対派によれば、それはまさにスコープクリープの定義なのです。

"大きすぎるし、機能も多すぎる。"

systemdの反対派は、systemdには奇妙な機能の組み合わせが多数存在することを指摘しています。これらの機能はすべてLinuxにすでに存在するものであり、おそらく、そのうちのいくつかは更新されるか、新しいアプローチが採用される必要があるのでしょう。しかし、これらすべての機能をinitシステムであるはずのシステムにバンドルすることは、アーキテクチャ的に複雑なものとなってしまいます。

systemdは、あまりにも多くの重要な機能のために単一障害点であると言われてきましたが、これは理不尽なことのように思えます。確かに、すべてを窓から出してしまうようなソフトウェアの大きな塊ではなく、一緒に動くガジェットを作るというUnixの哲学を放棄しています。systemd は厳密にはモノリシックではありませんが(1つの巨大なバイナリではなく、多くのバイナリから構成されています)、1つの傘の下に多くの異なる管理ツールやコマンドを含んでいます。

鉄板ではないにしろ、大きいですね。大きさを知るために、カーネル 5.6.15 のコードベースの systemd master ブランチと GitHub リポジトリのテキストの行数を数えてみました。

これは比較的粗い指標です。コードの行数だけでなく、テキストの行数もカウントされます。つまり、コメントやドキュメントなど、あらゆるものが含まれるわけです。しかし、同じような比較であり、次のようなシンプルな基準を与えてくれます。

( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc -l

カーネルは約2800万行(正確には27784340行)のテキストを含んでいます。これに対し、systemdは134万9,969人で、140万人近くいることになる。私たちのハッピー・ゴー・ラッキー指標を使うと、systemd はカーネルの約 5% のサイズになります。

もう一つの比較として、Arch Linux ディストリビューションの systemv init の最新の実装は 1721 行です。

Poettering氏は、明らかにIEEE(Institute of Electrical and Electronics Engineers)コンピュータ学会やPOSIX(Portable Operating System Interface)標準を軽視している。実際、彼は開発者にPOSIXを無視するように勧めています。

「The Linux Programming Interfaceを手に入れ、POSIXとの互換性について書いてあることをすべて無視して、素晴らしいLinuxソフトウェアをハックしてください。かなり安心しました!"

systemd は redhat のプロジェクトであり、redhat にしか利益をもたらさない、と非難する人もいますが、systemd は力ずくでより広い Linux の世界に提供されているのです。そう、redhatから生まれ、redhatに支配され、操られているのです。しかし、1321人のコントリビューターのうち、Red Hatで働く人はごく一部です。

では、Red Hatの利点は何でしょうか。

IBMの社長で、レッドハットの前CEOであるジム・ホワイトハーストは、次のように述べています。

"Red Hat は多くの利用可能なオプションを検討し、Canonical の Red Hat Enterprise Linux 6 用の Upstart も使用しました。最終的に systemd を選択したのは、我々が今日目にし、将来予測する問題に対処するための拡張性、シンプルさ、拡張性、明確に定義されたインタフェースを提供する最高のアーキテクチャであるためです "と述べています。

Whitehurst氏は、組込みシステムの利点も理解しており、Red Hatは "世界最大の組込みベンダー、特に安定性と信頼性が最優先される通信業界や自動車業界 "と協業していると付け加えた。

これらは技術的には問題ないと思われます。企業が信頼性を求めるのは理解できますし、Red Hatが自社の利益に気を配るのは悪いことではありません。

システムからコーラを飲む?

systemdに反対する人の中には、ディストリビューションや人々はただ盲目的にRed Hatのリードに従ってsystemdを採用するだけだと言う人もいます。

しかし、「コーラを飲め」という言葉と同じで、これはちょっと違う。1978年、カルト教団の指導者ジム・ジョーンズが900人あまりの信者に青酸カリ入りのブドウ味の液体を飲ませ、誤ってクールエイドを貶めたことから、この言葉が生まれた。このグループは実際にその香料を飲んだが、それ以来、クールエイドは筆で汚されるようになった。

さらに、Linuxディストリビューションは盲目的にRed Hatに追従したわけではなく、慎重に検討した上でsystemdを採用した。Debianのメーリングリストでの議論は長い間続いた。しかし2014年、コミュニティはsystemdをデフォルトのinitシステムとして採用することを決議したが、代替案もサポートした。

Debianは、RedHatやFedora、CentOSから派生したものではないので、重要な例となります。Debian は PID 1 と同様、Ubuntu とその派生物を含む多くの子孫を持っています。

Debian コミュニティが下した決断は、広範囲に及ぶものでした。また、白熱した議論が交わされ、コンドルセ投票方式を採用することになった。このような選択は、地域社会にとっても軽々しくできることではありません。

2019年12月に再度投票を行い、systemdに引き続き注力することと、代替案の検討を継続することを決定した。盲従とは逆に、実は民主主義や選択の自由が機能している教科書的な例と言えるでしょう。

選択の限界

通常、特定のLinuxディストリビューションでsystemdを使うかどうかという選択肢はないでしょう。その代わり、ディストリビューション自体がそれを使うかどうかを選択するので、どのLinuxディストリビューションを選ぶかはあなた次第です。お気に入りのLinuxディストリビューションがsystemdに変わるかもしれません。お気に入りのミュージシャンがスタイルを変えるように、これには戸惑うかもしれません。

Debian, Fedora, CentOS, Ubuntu, Arch, Solus, openSUSE を使っていて、systemd の採用に反対している人たちは、自分が選んだディストリビューションを使うことから排除されていると感じるかもしれません。もし、アーキテクチャの選択、スコープクリープ、POSIXへの無関心などのいずれかに強く感じたら、このディストリビューションを使い続けるのは無理だと思うかもしれません。

もちろん、スペクトラムはあります。一方では、問題を理解していない(あるいは関心がない)人たちがいて、他方では、熱狂的な否定派がいるのです。その中間に位置するのが、変化を好まないが、船に飛び乗るほど心配しない人たちだ。しかし、自分の好みや主義主張のために、選んだ配分にこだわれない配給難民はどうでしょう。

残念ながら、どのinitシステムもインストールは簡単ではありません。GNOME のようなアプリケーションやデスクトップ環境が systemd に依存している場合に困難が生じるとしても、誰もがこれを実行する技術的なスキルを持っているわけではありません。

別のディストロはいかがでしょうか?Devuanのように、systemdを採用したディストリビューション(この場合はDebian)の非systemdブランチに登場するものもあります。Devuan を使うことは親ディストリビューションと似ているはずですが、systemd 以外のフォークではそうではありません。例えば、Fedoraを離れて、AntiX、Gentoo、Slackwareに移行した場合、非常に異なる経験をすることになります。

どこにも行かない

私はsystemdのいくつかの特徴(シンプルで標準化されたプロセス制御機構)が好きです。一部の機能(バイナリログ)の基本が理解できていない。また、一部の機能が気に入らない(ホームフォルダの改造を依頼したのは誰?).

Debian のようなディストリビューションは賢いことをしていて、選択肢を広げておくために様々な代替案を検討しています。しかし、systemdは長期に渡ってここに存在します。

他人のためにLinuxマシンを管理するのであれば、systemdだけでなくsystemv initも習得し、どちらの場合でも自分の職務を遂行できるようにしましょう。

もしそうなら、あなたの技術的ニーズを満たし、かつあなたのLinuxの考え方を補完するディストリビューションを選んでください。

関連:Systemd が Linux のホームディレクトリの仕組みを変える

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ