IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker 

第29回 Systemdは全てを統べる・・・?! (中井悦司) 2013年10月

はじめに

 先日、「Systemd」について色々と調べる機会があり、一連のBlog記事(*1)に技術情報の詳細を記載したところ、予想外に大きな反響があって驚きました。「Systemd」は、Fedoraで採用されているプロセス管理の仕組みで、従来の「SysVinit」の代替となる機能です。今回は、古き良き「SysVinit」の仕組みを振り返りながら、Systemdが必要とされる背景やその役割について紹介したいと思います。Red Hat Enterprise Linux(RHEL)では、次期バージョンであるRHEL7での採用が予定されています。

SysVinitの仕組みを覚えていますか?

 Linuxの入門コースでLinuxの起動プロセスを学んだ方なら、「/etc/inittab」の存在はご存知でしょう。Linuxカーネルが起動した後、最初に実行されるプロセスは、伝統的に「/sbin/init」と決まっています。これがSysVinitです。RHELの場合は、RHEL5まで、SysVinitが採用されていました(*)。
 「/sbin/init」は、「/etc/inittab」の設定にしたがって、さまざまなスクリプトやコマンドを順番に実行していきます。最初は、スクリプト「/etc/rc.d/rc.sysinit」を実行して、この中で、さまざまな初期化処理を行います。ざっと上げるだけでも、ホスト名、カーネルパラメータ、システムクロック、スワップ領域、ファイルシステムのマウント、quota設定など、多数の項目があります。
 次に実行されるのが、サービス起動スクリプト「/etc/rc.d/rc」です。これは、ランレベルに応じて、必要なサービスを起動するスクリプトです。それぞれのサービスごとに、ディレクトリ「/etc/init.d」の下に、専用の起動スクリプトが用意されており、これが順番に実行される形になります。
 これから分かるように、「/sbin/init」の仕事は、基本的にはスクリプトを順番に実行するだけのことで、実際の処理の中身はスクリプトの方に任されています。この仕組みは、Unixの時代から伝統的に受け継がれてきたもので、スクリプトを書き換えることで、起動処理を自由にカスタマイズできるというメリットがあります。特に、Linuxにはさまざまなディストリビューションがあり、ディストリビューションごとに固有の起動処理を実現することが可能になります。

*)RHEL6では、Upstartという仕組みに変わっていますが、処理の流れは、本質的には、RHEL5までと同じです。

スクリプト処理の限界を超えて

 伝統的なSysVinitを捨てて、新たな仕組みを導入するのはなぜでしょうか? ポイントは、「依存性」と「並列化」の2つです。Linuxの利用環境の変化に伴い、システム初期化処理において、これらの要素が求められるようになりました。
 たとえば、物理サーバでLinuxを稼働する場合、前述のようなシステム初期設定は、起動時に行えば十分です。稼働中に新たなサービスを追加起動したり、あるいは、稼働中にネットワーク設定を変更するような必要はありません。
 一方、最近の仮想化環境であれば、起動中の仮想マシンに対して、新たに仮想ディスクを接続するなど、動的な構成変更が発生します。クラウド上では、ネットワークの構成すらも動的に変更される可能性があります。これらに対応するには、システム構成の変化にあわせて、特定コンポーネントの初期化処理を再実行したり、必要なサービスを自動的に追加起動することが求められます。
 しかしながら、従来のSysVinitでは、1つのシェルスクリプトの中にさまざまな処理がまとめて記述されています。そのため、特定の初期化処理だけを取り出して実施することができません。そこで、Systemdでは、システムの初期化に必要な処理を細かく分類して、すべて個別に実行できるようにしています。併せて、それぞれの処理ごとに、「どの処理を実施するには、どの処理があわせて必要なのか」という依存関係を定義します。これにより、システム構成の変化に応じて、依存する一連の初期化処理をまとめて再実行することができます。
 この仕組みは、デスクトップ環境でも役立ちます。USBメモリを差し込むと、それに依存してマウント処理を実施する、あるいは、プリンタを接続すると、それに依存してプリンティングサービスを起動するなどの応用例があります。

並列化による処理の高速化

 Systemdのもうひとつの特徴に、処理の「並列化」があります。さまざまな処理の依存関係を定義すると言いましたが、これは、「Aを実施するなら、Bも実施するべき」、つまり、「どちらか一方だけを実施しても意味がない」という事を表します。「AとBのどちらを先に実施するべきか」という順序関係は規定しません。
 したがって、特に順序関係の指定がない限り、依存関係のある処理は、まとめて同時に実行されます。最近のシステムは、マルチコアによる並列処理が得意ですので、スクリプトで1つ1つの処理を順番に実行する場合に比べると、全体の実行速度は格段に向上します。特に、システム起動時の時間短縮にはめざましいものがあります。クラウド環境で新たなLinuxを頻繁に起動する場合などには、うれしい機能改善です。もちろん、実行順序の指定が必要な処理については、依存関係とは別に、順序関係を定義することも可能です。設定方法の詳細は、先のBlog記事(*1)を参考にしてください。

次回予告

 Systemdは、システム起動処理の他にも、さまざまな機能を提供します。サービスを提供するデーモンをcgroupsで分類してリソース配分を制御したり、あるいは、デーモンのログ出力を一元管理して、各種条件でログを検索するなども可能になります。今回のタイトルは『指輪物語』の一節が元ネタですが、Systemdがさまざまなデーモンプロセスを「しもべ」として司る ―― そんな様子を想像して、筆者の同僚が考えだした表現です。
 さて、今週末は、「VYATTA USERS MEETING Autumn 2013」に参加してきます。次回は、こちらのイベントで仕入れた最新ネタをお届けする予定です。

参考資料

*1Systemd入門(1) - Unitの概念を理解する
   これに続く一連のBlog記事(Systemd入門(1)~Systemd入門(5))を参照

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker