init(8)とrc(8)に替わる仕組みの模索
*BSDはシステムの起動をinit(8)からのシェルスクリプト、サービスの起動や制御をシェルスクリプトをベースとしたrc(8)で行っています。商用UNIXやMac OS X、最近のLinuxディストリビューションではこの仕組みではなく、より汎用的なフレームワークを使った起動および制御を採用しています。
init(8)+rc(8)からこうした汎用フレームワークへ移行している理由はいくつかありますが、まとめるとだいたい次のような目的があるように見えます。
- サービスの並列起動などによるシステム起動の高速化
- サービスを制御するための汎用的なインターフェースの提供
- サービスのモニタリングと自動スタートの実現
- サービスのモニタリングと自動アイドルの実現
- サービスのモニタリングと自動リスタート機能による高可用性の実現
- root権限でのサービス起動の削減とセキュリティの向上
利点だけ見ていると良さそうですが、この取り組みに懐疑的な見方もあります。Linuxディストリビューションでは概ねsystemd(1)へ移行しつつありますが、systemd(1)のように単一の大きな制御ソフトウェアを開発することはセキュリティや安定性の面でどうなのかという意見があります。Mac OS Xで採用しているlaunchdは*BSDカーネルとはセマンティックが異なるため*BSDで利用するのは適切ではないとする見方もあります。
しかしながら、全体の流れとして*BSDでもinit(8)+rc(8)からこれに替わる方法の模索が進んでいるのも確かです。今後どうなるかは個々のプロジェクトの進展次第、*BSDデベロッパ間の議論次第ということになるかと思いますが、状況を知っておくことは無駄ではないと思います。現状では次の3つの取り組みが特に有力な候補ではないかと思います。
- NextBSD launchd
- relaunchd
- nosh
次にそれぞれの特徴を簡単にまとめておきます。
NextBSD launchd
FreeBSDをベースとしながら、ここにMac OS Xで実装された管理機能を実装しようという取り組みにNextBSDがあります。NextBSDの開発はiXsystemsが進めており、将来的にはTrueNASやFreeNAS、PC-BSDのベースオペレーティングシステムとして採用したい狙いがあるものと見られます。
このNextBSDの開発を率いているのはiXsystemsのJordan K. Hubbard氏です。彼は長らくAppleの技術畑で業務に従事してきました。Jordan K. Hubbard氏の取り組みはAppleがMac OS Xで取り組んだシステム管理向けの開発をFreeBSDに持ち込むといった取り組みに見えます。
Mac OS Xで利用されているlaunchdと同様の機能を提供するデーモンおよびエージェントマネージャの実装を目指すほか、Mac OS Xと同様の制御を実現するためにカーネルに手を加える、またはカーネルモジュールで同様の機能を実現するための機能が実装されるのではないかと見られます。iXsystemsが開発に取り組んでいることから、一定の開発成果が期待できるのではないかと思います。
relaunchd
NextBSD launchdのようにlaunchdと同じ機能の実装を目指しているものの、それに縛られることなくFreeBSDの特徴的な機能への対応を進めているのがrelaunchdです。ソースコードはGitHub - mheily / relaunchdで公開されています。追加機能としては次のような機能が実装されています。
- Jail内部におけるサービス制御のサポート
- ホストからJailへのソケットディスクリプタの移行
- 設定済みのCapsicum(4)サンドボックスにおけるプログラムの起動
- JSON風設定ファイルフォーマットUCLに対応
relaunchdのソースコードはすでにPorts Collectionに追加されています。クラッシュしたサービスの自動再起動機能、cron(8)と同様の機能、ファイルおよびディレクトリモニタリング機能、Jail関連機能のさらなる実装、ソケットディスクリプタのより強力な管理の実現など開発すべきことは多く残っているものの、FreeBSDとの高い親和性が魅力的な取り組みです。
relaunchdはFreeBSDを主なターゲットとして開発されていますが、Linuxでも動作するように考慮されています。NextBSD launchdやLinux systemdは対象とするカーネルが限定的ですが、relaunchdはより広く利用される可能性があります。
nosh
同様の取り組みで開発が活発なプロジェクトにnoshがあります。NextBSD launchdとrelaunchdがMac OS Xのlaunchdをモデルとしているのと比べ、noshはlaunchdのみならずsystemdやほかの商用UNIXにおける同様の機能からもアイディアを持ってきています。
すでにかなり開発が進んでおり、こちらは*BSDのみならずLinuxディストリビューションにも対応しています。実装済み機能の多さと対応の広さでは今のところnoshがもっとも進んでいるかもしれません。
今のところLinux systemdの互換システムを開発しようという取り組みはそれほど積極的ではないように見えます。systemdがまだ開発段階であること、特定のLinuxカーネルおよびディストリビューションを対象としていること、systemdが肥大化していることに対する懸念などがあるのではないかとみられます。
現在は研究開発の段階
FreeBSDプロジェクトはどの実装をinit(8)+rc(8)の代替とするのかまだ決定していません。init(8)+rc(8)から移行するかどうかも決めていません。複数の仕組みを切り替えて使用できるようなフレームワークを導入するかもしれませんし、どれかに置き換わるかもしれませんし、このままinit(8)+rc(8)を使うかもしれません。
しかし、こうした汎用的な管理方法を欲しているベンダがいることも事実なので、何かしらの進展を見せるのではないかと思います。四半期ごとに公開されるFreeBSD Quarterly Status Reportに注目するとともに、世界各国で開催されるFreeBSD DevSummitにおける会議結果などに注目しておきましょう。