巨大な IT サービスの管理者と同様、Falcot Corp の管理者もまた、可能であれば自動的に新しいマシンへ素早くインストール (または再インストール) するツールを必要とします。
これらの要求に応えるための様々な解決策が存在します。一方では、SystemImager などの一般的なツールが存在します。これはテンプレートマシンに基づくイメージを作成し、そのイメージを目標のシステムで展開します; 他方では、標準的な Debian インストーラが存在します。これはインストール作業中に尋ねられる質問の回答を含めた設定ファイルを使って preseed を実行します。両者の折衷案として、FAI (Fully Automatic Installer) などのハイブリッドツールが存在します。これはパッケージ化システムを使ってインストールし、自分自身の機能を使って大規模な配備に特有のタスク (起動、パーティショニング、設定など) をこなします。
これらの解決策には、利点と欠点があります: SystemImager は特定のパッケージ化システムに依存しません。この事により、復数の Linux ディストリビューションを使う数多くのマシン群を管理する事が可能です。SystemImager には、再インストール要らずの更新システムが含まれていますが、この更新システムを信頼できるのは、各マシンは個別に変更されないという仮定が満足される場合だけです; 言い換えれば、ユーザは自分のマシンにインストールされたソフトウェアを更新する事ができないし、他のソフトウェアをインストールする事もできません。同様に、セキュリティ更新を自動的に行ってはいけません。なぜなら、セキュリティ更新は SystemImager が保守する中央集権化された基準イメージによって提供されるからです。また SystemImager による解決策では、管理される側のマシンの種類が同じである必要があります。異種マシンを管理する場合、多くの異なるイメージを保守管理する必要があります (i386 用のイメージを powerpc マシンに使うことはできません)。
逆に、debian-installer を使ってインストールを自動化する場合、マシンごとの違いに適合したシステムをインストールする事が可能です: インストーラは対応するリポジトリから適切なカーネルとソフトウェアパッケージを取得し、利用可能なハードウェアを検出し、利用可能な領域全体を生かしてハードディスク全体をパーティショニングし、対応する Debian システムをインストールし、適切なブートローダを設定します。しかしながら、標準的なインストーラはベースシステムと事前に選択された「tasks」を含む標準的な Debian バージョンをインストールするだけです; パッケージ化されていないアプリケーションを備えた特製のシステムをインストールする事ができません。この特別な必要性を満足させるにはインストーラのカスタマイズが必要です… 幸いなことに、インストーラはとてもモジュール化されており、カスタマイズに必要なほとんどの仕事を自動化するツールが存在します。最も重要なツールは simple-CDD です (CDD は Custom Debian Derivative の頭字語です)。しかしながら simple-CDD が取り扱う事が可能なのは最初のインストールだけです; これは通常問題になりません。なぜなら、APT ツールのお陰でインストール後の更新作業は効果的に行う事が可能だからです。
FAI については大まかな概要を説明し、(もはや Debian に含まれない) SystemImager については完全に省略し、Debian だけのシステムではより興味深い debian-installer と simple-CDD に特に注目します。
12.3.1. Fully Automatic Installer (FAI)
Fully Automatic Installer はおそらく最も古い Debian 用の自動配備システムで、基準としての地位を確立しています; しかし FAI の高い柔軟性は FAI の複雑性を補っています。
FAI には、配備情報を保存してネットワークから目標のマシンを起動する事を可能にするために、サーバシステムが必要です。サーバシステムには、fai-server パッケージ (または fai-quickstart、これには、標準的な設定に必要な要素が含まれています) が必要です。
FAI は特殊なやり方で、インストール可能なプロファイルを定義します。単純に基準のインストールを複製する代わりに、FAI は本格的なインストーラで、サーバに保存されているファイルとスクリプトを通じて完全に設定可能です; デフォルトの位置 /srv/fai/config/
は自動的に作成されません。このため管理者は対応するファイルと一緒にこれも作成する必要があります。大体の場合、これらのファイルは例ファイルからカスタマイズされます。このファイルは fai-doc パッケージの文書の中、より具体的に言えば /usr/share/doc/fai-doc/examples/simple/
ディレクトリの中、に含まれています。
プロファイルを定義したら、fai-setup
コマンドを使って FAI のインストールを開始するために必要な要素を生成します; これはインストール中に使われる最小限のシステム (NFS-root) の準備と更新を行う事を意味します。別の方法として、fai-cd
を使って専用の CD を生成する事も可能です。
これらすべての設定ファイルを作成するには、FAI の動作方法を理解する必要があります。典型的なインストール作業は以下の順番で進みます:
ネットワークからカーネルを取得して起動します;
NFS で root ファイルシステムをマウントします;
/usr/sbin/fai
を実行します、これはインストール作業を制御します (このスクリプトが以降の各段階を初期化します);
サーバから /fai/
に設定領域をコピーします;
fai-class
を実行します。/fai/class/[0-9][0-9]*
スクリプトが順番に実行され、インストールされるマシンに適用する「クラス」の名前を返します; この情報は以降の各段階の基礎としての機能を果たします。これを使うことで、インストールおよび設定されるサービスを定義する際にいくらかの柔軟性を持たせる事が可能です。
対応するクラスに基づき、設定変数を取得します;
/fai/disk_config/class
で定義された情報に基づいて、ディスクのパーティショニングとパーティションのフォーマットを行います;
指定されたパーティションをマウントします;
ベースシステムをインストールします;
fai-debconf
を使って Debconf データベースを事前配布します;
APT で利用可能なパッケージのリストを取得します;
/fai/package_config/class
にリストされたパッケージをインストールします;
事後設定スクリプト /fai/scripts/class/[0-9][0-9]*
を実行します;
インストールログを記録し、パーティションをアンマウントし、再起動します。
12.3.2. Debian-Installer の preseed
結局のところ、Debian システムをインストールする最良のツールは必然的に公式の Debian インストーラということになるでしょう。このため、当初から debian-installer は debconf の提供するインフラを活用して自動的に使えるように設計されています。debconf を使うことで、尋ねられる質問の数を減らしたり (隠された質問に対する回答はデフォルトが使われます)、質問に対する回答を個別に事前指定したりする事が可能です。この事により、インストールを非対話的に進める事が可能です。質問に対する回答の事前指定機能は preseeding として知られています。
12.3.2.1. Preseed ファイルの利用
インストーラが preseeding ファイルを取得する事が可能な場所には幾つかあります;
マシンを開始するために使われる initrd の中; この場合、インストールの最初から preseeding を行い、すべての質問を回避する事が可能です。preseeding ファイルの名前は必ず preseed.cfg
にして initrd のルートに保存しなければいけません。
起動メディア (CD や USB メモリ) の中; メディアがマウントされた直後から preseeding が始まります。これは言語とキーボードレイアウトに関する質問の直後を意味します。preseed/file
起動パラメータを使って preseeding ファイルの場所を指定する事が可能です (例えば、インストールが CD-ROM から開始された場合は /cdrom/preseed.cfg
、USB メモリから開始された場合は /hd-media/preseed.cfg
などです)。
ネットワークから; ネットワークが (自動的に) 設定された直後から preseeding が始まります; 対応する起動パラメータは preseed/url=http://server/preseed.cfg
です。
一見すると、preseeding ファイルを initrd の中に含める事が最も上手い解決策のように見えます; しかし、実際のところこれはほとんど行われません。なぜなら、インストーラの initrd を生成することはかなり複雑だからです。その他の 2 種類の解決策はよく使われます。なぜなら起動パラメータを使うことで、インストール作業の最初の質問の回答を他のやり方で事前指定する事が可能だからです。インストール毎に起動パラメータを手作業で打ち込む手間を省くためによく使われる方法は isolinux
(CD-ROM の場合) や syslinux
(USB メモリの場合) の設定ファイルに起動パラメータを保存する事です。
12.3.2.2. preseed ファイルの作成
preseed ファイルはプレーンテキストファイルで、各行に 1 つの Debconf 質問に対する回答が含まれます。行は空白 (スペースかタブ) で区切られた 4 種類のフィールドに分割されます。例えば d-i mirror/suite string stable
のようになります:
preseed ファイルを書く最も簡単な方法はシステムを手作業でインストールする方法です。インストール完了後に debconf-get-selections --installer
を実行してインストーラに関連する回答を取得します。debconf-get-selections
を使えば、他のパッケージに関連する回答を取得する事が可能です。しかしながら、最も明確な解決策は記載例と基準文書を参考にしながら手作業で preseed ファイルを書く事です: このような取り扱い方をすることで、デフォルト回答に対して上書きが必要な質問だけに回答を事前指定する事が可能です; priority=critical
起動パラメータ使うことで、Debconf が重要な質問だけを尋ね、他の質問にはデフォルトの回答を使うようにする事が可能です。
12.3.2.3. カスタマイズされた起動メディアの作成
preseed ファイルを保存する場所を知ること大変結構な事ですが、場所がすべてではありません: 起動パラメータを変更し preseed ファイルを追加するためには、いずれにせよインストール用の起動メディアを改造しなければいけません。
コンピュータをネットワークから起動する場合、初期化要素を送信するサーバが起動パラメータを定義します。このため、変更は起動サーバの PXE 設定の中で行う必要があります; より具体的に言えば
/tftpboot/pxelinux.cfg/default
設定ファイルの中です。事前にネットワーク起動をセットアップする事が必要です; 詳しくはインストールガイドをご覧ください。
12.3.2.3.2. 起動可能な USB メモリの準備
起動可能な USB メモリを用意した場合 (
「USB メモリから起動」参照)、幾つかの追加的な操作が必要です。USB メモリの内容は
/media/usbdisk/
で利用可能とします:
例12.2 syslinux.cfg ファイルと preseeding パラメータ
default vmlinuz
append preseed/file=/hd-media/preseed.cfg locale=en_US console-keymaps-at/keymap=us languagechooser/language-name=English countrychooser/shortlist=US vga=normal initrd=initrd.gz --
12.3.2.3.3. CD-ROM イメージの作成
USB メモリは読み書きメディアなので、ファイルを追加したり幾つかのパラメータを変更する事が簡単に可能です。CD-ROM の場合、この操作は更に複雑になります。なぜなら、完全な ISO イメージを再生成する必要があるからです。debian-cd がこの作業を担当しますが、debian-cd ツールは少し使いにくいです: debian-cd ツールを使うには、ローカルミラーと /usr/share/debian-cd/CONF.sh
によって提供されるすべてのオプションについて理解する必要があります。そしてさらに、make
を複数回実行する必要があります。このため、/usr/share/debian-cd/README
を一読する事を強く推奨します。
そうは言っても、debian-cd の挙動は仕方は常に同じです: CD-ROM の内容を展開した「image」ディレクトリが生成され、その後 genisoimage
、mkisofs
、xorriso
等のツールを使って ISO ファイルに変換します。image ディレクトリは debian-cd の make image-trees
段階の後に仕上げられます。この時点で、preseed ファイルを適切なディレクトリ (通常 $TDIR/wheezy/CD1/
です、$TDIR はCONF.sh
設定ファイルによって定義されるパラメータの 1 つです) に挿入します。CD-ROM は isolinux
をブートローダとして使います。必要な起動パラメータを挿入するためには、isolinux
の設定ファイル (ファイルは $TDIR/wheezy/boot1/isolinux/isolinux.cfg
にあります) を debian-cd が生成した内容に適合させなければいけません。この後、「通常の」プロセスを再開し、make image CD=1
(または make images
復数の CD-ROM を生成する場合) を実行して ISO イメージを生成します。
12.3.3. Simple-CDD: 一体型の解決策
単純に preseed を使うだけでは、大規模な配備に要求されるすべてを満足させることはできません。preseed を使うことで、通常のインストール作業の最後に幾つかのスクリプトを実行する事が可能とは言うものの、インストールするパッケージ群の選択にはまだ大きな制限があります (基本的に「tasks」を選択できるだけです); より重要なこととして、preseed は公式の Debian パッケージをインストールすることは可能ですが、その場で生成されたものをインストールすることは不可能です。
逆に、debian-cd を使えば外部パッケージを統合する事が可能で、debian-installer を使えばインストール作業に新しい段階を挿入するように拡張する事が可能です。これらの機能を組み合わせることで、自分の要求を完全に満足するカスタマイズされたインストーラを作成する事が可能です; 更にこの方針を取ることで、必要なパッケージを展開した後、幾つかのサービスを設定する事が可能です。幸いなことに、この方針は全くの仮説に過ぎないわけではありません。なぜなら、これこそが Simple-CDD (simple-cdd パッケージに含まれます) の方針だからです。
Simple-CDD の目的とは、利用可能なパッケージの一部を選択したり、Debconf を使ってパッケージを事前設定したり、特定のソフトウェアを追加したり、インストール作業の最後にカスタムスクリプトを実行することで、誰でも簡単に Debian の派生ディストリビューションを作成する事です。これは「ユニバーサルオペレーティングシステム」の原理に一致します。なぜなら、このことにより誰でも自分自身の要求にオペレーティングシステムを適合させる事が可能だからです。
Simple-CDD は FAI における 「クラス」の概念に対応する「プロファイル」を定義し、マシンは (インストール時に定義される) 復数のプロファイルを持つ事が可能です。プロファイルは profiles/profile.*
ファイルを使って定義されます:
.description
ファイルには、プロファイルに関する 1 行の説明が含まれます;
.packages
ファイルには、プロファイルが選択された場合に自動的にインストールするパッケージがリストされています;
.downloads
ファイルには、インストールメディアに保存するがインストールの必要が無いパッケージがリストされています;
.preseed
ファイルには、(インストーラおよびパッケージの) Debconf 質問に関する preseeding 情報が含まれます;
.postinst
ファイルには、インストール作業の最後に実行されるスクリプトが含まれます;
最後に、.conf
ファイルを使うことで、イメージに保存されるプロファイルに基づいて幾つかの Simple-CDD パラメータを修正する事が可能です。
default
プロファイルは特別な役割を担います。なぜなら default
プロファイルは常に選択されれるからです; default
プロファイルには、Simple-CDD を動作させるために最低限必要な要素が含まれています。通常 default
プロファイルの中でカスタマイズが必要なのは simple-cdd/profiles
preseed パラメータだけです: これは Simple-CDD によって追加されたインストールするプロファイルの選択に関する質問を避けます。
コマンドは profiles
ディレクトリの親ディレクトリから実行する必要がある点に注意してください。
12.3.3.2. build-simple-cdd
の設定と利用
Simple-CDD を完全に動作させるには多くのパラメータが必要です。通常、パラメータは設定ファイルの中にまとめられ、build-simple-cdd
は --conf
オプションを使って設定ファイルを指定します。しかし、パラメータは専用パラメータを build-simple-cdd
に渡すことでも指定する事も可能です。以下は build-simple-cdd
の挙動とパラメータの使われ方をおおまかに説明したものです:
profiles
パラメータは生成する CD-ROM イメージに含めるプロファイルをリストします;
Simple-CDD は要求されるパッケージのリストに基いて、server
で指定されているサーバから適切なファイルをダウンロードし、(後に debian-cd に渡される) ローカルミラーにまとめます;
また local_packages
で指定されたカスタムパッケージがこのローカルミラーの中に統合されます;
この後、統合するパッケージのリストを使って debian-cd が実行されます (実行場所は debian_cd_dir
変数を使って設定されたデフォルト位置です);
debian-cd がディレクトリを用意したら、Simple-CDD は幾つかの変更をこのディレクトリに加えます:
プロファイルを含むファイルが simple-cdd
サブディレクトリに追加されます (CD-ROM に追加されます);
all_extras
パラメータで指定された他のファイルも追加されます;
起動パラメータが調整され、preseeding が有効化されます。言語と国に関する質問を避けるには、これらの情報を language
と country
変数に保存します。
この後、debian-cd が最終的な ISO イメージを生成します。
設定ファイルの記述と自分のプロファイルの定義が完了したら、build-simple-cdd --conf simple-cdd.conf
を実行します。数分後、必要なイメージが images/debian-7.0-amd64-CD-1.iso
に完成します。