B.2. preseed の利用

事前設定ファイルを最初に作成し、使用する場所に配置する必要があります。 事前設定ファイルの作成は本付録で後ほど扱います。 ネットワーク preseed の場合や、 ファイルをフロッピーや USB メモリから読み込む場合、 簡単に正しい位置に事前設定ファイルを配置できます。 CD や DVD にファイルを含めたければ、 ISO イメージを再度マスタリングする必要があります。 initrd に含まれている事前設定ファイルを取り出す方法は、 この文書では扱いません。debian-installer の開発者向け文書を当たってください。

事前設定ファイルの手本にできる事前設定ファイルのサンプルは、 http://www.debian.org/releases/etch/example-preseed.txt から取得できます。 このファイルは、この付録にある設定の断片を元にしています。

B.2.1. 事前設定ファイルの読み込み

initrd preseed を使用する場合、preseed.cfg というファイルが initrd のルートディレクトリに確実にある必要があります。 インストーラは、このファイルがあるか自動的にチェックし、読み込みます。

他の preseed 方法では、起動時にどのファイルを読み込むか、 インストーラに指定する必要があります。 通常、カーネルのブートパラメータで渡して行います。 これは起動時に手動で与えるか、 ブートローダ設定ファイル (例: syslinux.cfg) を編集し、 カーネルへの append 行の最後にパラメータを追加して与えます。

ブートローダの設定で事前設定ファイルを指定する場合、 設定を変更すれば、インストーラの起動時に ENTER を押す必要はありません。 syslinux ではこの設定をするのに、 syslinux.cfg でタイムアウトを 1 にします。

インストーラが確実に正しい事前設定ファイルを取得するのに、 このファイルのチェックサムを指定できます。 現在、これには md5sum 値の指定が必要です。 指定した値と事前設定ファイルの値は一致しなければなりません。 一致しない場合は、インストーラは事前設定ファイルを使用しません。

ブートパラメータの設定:
- netboot の場合:
  preseed/url=http://host/path/to/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d

- リマスタリングした CD で起動する場合:
  preseed/file=/cdrom/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

- USB メディアで起動する場合 (事前設定ファイルを USB メモリの
  トップレベルディレクトリに置くこと):
  preseed/file=/hd-media/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

ブートパラメータに渡す際に、 preseed/urlurl に、 preseed/filefile に 短縮できることに注意してください。

B.2.2. preseed が質問するブートパラメータの利用

事前設定ファイルを preseed の各段階で使用できない場合でも、 preseed の値をインストーラ起動時のコマンドラインに与えることで、 インストールを自動で行えます。

preseed を使用せず指定した質問への答を設定したい場合にも、 ブートパラメータを使用します。 有用な使用法のサンプルが、このマニュアルの別の場所にあります。

debian-installer 内部で使用する値をセットするには、 path/to/variable=value のように本付録の例にある preseed 変数を渡すだけです。 値がターゲットシステムのパッケージを設定することがある場合、 owner[20] 変数を、あらかじめ用意し、 owner:path/to/variable=value で使用する必要があります。 owner を指定しない場合、 変数の値はターゲットシステムの debconf データベースにコピーされず、 関連パッケージの設定中使用されません。

ブートプロンプトによく使用される変数には、 短いエイリアスがあることに注意してください。 有効なエイリアスは、本サンプル内で完全な変数名の代わりに使用しています。 特に、preseed/url 変数には url というエイリアスがあり、短い URL が使えることによる技がいくつかあります。 もう一つ、tasks というエイリアスがあり、 これは tasksel:tasksel/first に変換されます。

ブートオプションの 「--」 は特別な意味を持ちます。 最後の 「--」 に続きカーネルパラメータがあると、 (インストーラがサポートするブートローダの場合) インストール済みのブートローダの設定にコピーされます。 インストーラは、(事前設定オプションのような) オプションを認識すると、 自動的にフィルタをかけます。

注意

現在の Linux カーネル (2.6.9 以降) では、 最大 (インストーラがデフォルトで指定するオプションを含め) コマンドラインオプションを 32 個、環境オプションを 32 個受け取れます。 この数を超えると、カーネルはパニック (クラッシュ) してしまいます。 (初期のカーネルではこの数字がもっと少ないです)

ほとんどのインストールでは、ブートローダ設定ファイルにある (vga=normal のような) デフォルトオプションを安全に削除できるかもしれません。 これにより preseed 用にもっとオプションを追加できます。

注意

ブートパラメータに空白を含んだ値を設定するのは、 引用符で囲んだとしてもいつもうまくいくとは限りません。

B.2.3. 自動モード

かなりシンプルなコマンドラインをブートプロンプトに与え、 任意の複雑なカスタマイズを自動インストールに対して行う Debian Installer の機能があります。 これを説明するため、以下にブートプロンプトで使用できる例を示します。

auto url=autoserver

これは、DNS で autoserver の名前解決ができ (おそらく DHCP でローカルドメイン追加後)、 そのマシンが DHCP サーバであることを前提にしています。 example.com というドメインのサイトが、 普通のまともな DHCP を設定していれば、 http://autoserver.example.com/d-i/etch/./preseed.cfg から、preseed ファイルを取得するようになります。

URL (d-i/etch/./preseed.cfg) の最後の部分は、 auto-install/defaultroot から取られています。 デフォルトでは、将来のバージョンでコードネームを指定して移行していけるように、 etch ディレクトリが含まれています。 /./ は、その後に続くパスが確定するように、 ルートからの相対パスを示します (preseed/include や preseed/run で使用)。 これにより、完全な URLや / で始まるパス、 前回 preseed が見つかった場所からの相対パスでファイルを指定できます。 スクリプトの階層構造を壊さずに新しい場所に移動できる (例えば ウェブサーバで開始し、USB メモリにコピーする)、 よりポータブルなスクリプトを構成するのに便利です。 このサンプルでは、preseed ファイルの preseed/run/scripts/late_command.sh が設定されている場合、 http://autoserver.example.com/d-i/etch/./scripts/late_command.sh からファイルを取得します。

手元に DHCP や DNS のインフラがない場合や、 preseed.cfg のデフォルトパスを使用したくない場合でも、 きちんとした URL を使用でき、/./ 要素を使用しない場合は、 パスの開始点を決定できます (例えば URL の 3 つ目の /)。 以下は、手元のネットワークインフラから最低限必要な物のサンプルです。

auto url=http://192.168.1.2/path/to/mypreseed.file

この方法は次のように動作します。

  • URL が見つからない場合、http だと仮定します。

  • ホスト名セクションにピリオドがなければ、DHCP から引き出して追加します。

  • ホスト名の後に / がなければ、デフォルトパスを追加します。

URL を指定するのに加えて、 debian-installer 自身の振る舞いには直接影響しない設定も追加できますが、 読み込んだ preseed ファイルの preseed/run で指定した、 スクリプトに渡すことができます。 現在のところ、classes というエイリアスを持つ、 auto-install/classes のサンプルのみです。 以下のように使用します。

auto url=example.com classes=class_A;class_B

classes にはこのサンプルでは、インストールするシステムのタイプや、 地域化を指定するのに使用できます。

この概念はもちろん拡張でき、もしそうする場合、 auto-install 名前空間を使用するのが妥当です。 ですから、次にあなたのスクリプトで使用する auto-install/style のような物かもしれません。 これが必要だと思うのなら、名前空間の衝突を避けるために メーリングリストで提案してください。 おそらくパラメータのエイリアスが追加されます。

auto ブートラベルは、 どのアーキテクチャでもまだ定義されていません。 カーネルのコマンドラインに、単にパラメータを 2 つ auto=true priority=critical を追加すると、 同じ効果を得られます。 auto パラメータは auto-install/enable のエイリアスで、ロケールやキーボードの質問を preseed で行えるよう遅らせます。 また、prioritydebconf/priority のエイリアスで、critical に設定すると、 優先度の低い質問を抑制するようになります。

DHCP を使用してインストールの自動化を行う際に、 関連する追加オプションは以下の通りです。interface=auto netcfg/dhcp_timeout=60 これはマシンが最初の使用可能 NIC を選択し、 DHCP 問い合わせに対する返答をもっと我慢強く待つようになります。

ティップ

スクリプトやクラスのサンプルを含む、 フレームワークの使用法についての大規模なサンプルが、 開発者のウェブサイトにあります。 そこで得られるサンプルでも、事前設定の独創的な使用を成し遂げる、 たくさんのすばらしい効果があります。

B.2.4. preseed で利用できるエイリアス

以下のエイリアスが (自動モード) preseed を使用する際に利用できます。

auto auto-install/enable
classes auto-install/classes
fb debian-installer/framebuffer
locale debian-installer/locale
priority debconf/priority
file preseed/file
url preseed/url
interface netcfg/choose_interface
hostname    netcfg/get_hostname
domain netcfg/get_domain
protocol mirror/protocol
suite mirror/suite

B.2.5. 事前設定ファイルを指定するための DHCP の利用方法

事前設定ファイルをネットワークからダウンロードするよう指定するのに、 DHCP も使用できます。DHCP はファイル名の指定ができます。 通常これは netboot のファイルですが、URL 形式になっていると、 ネットワーク preseed をサポートするインストールメディアが、 URL からファイルをダウンロードし、事前設定ファイルとして使用します。 以下は、ISC DHCP サーバのバージョン 3 用 dhcpd.conf で設定するサンプルです。

if substring (option vendor-class-identifier, 0, 3) = "d-i" {
    filename "http://host/preseed.cfg";
}

上記の例は、 "d-i" を名乗る DHCP クライアントにこのファイル名を渡すよう制限されており、 通常の DHCP クライアントではなく、 インストーラにのみ影響を与えることに注意してください。 この文字列で、ネットワーク上の全マシンに preseed でインストールするのではなく、 特定のホストに対して行うようにもできます。

DHCP preseed を使用するよい方法は、自分のネットワークには、 Debian ミラーサイトのような preseed の値のみ指定することです。 自分のネットワークにこの方法でインストールすると、 選択したよいミラーサイトから自動で取得しますが、 インストールの残りのプロセスはインタラクティブに行われます。 DHCP preseed を用いた Debian の完全自動インストールは、 充分注意しなければ行うべきではありません。



[20] debconf 変数 (やテンプレート) の所有者 (owner) は、 debconf テンプレートに含まれるように、通常パッケージ名です。 インストーラ自体が使用する値は、「d-i」 になっています。 テンプレートや変数は、複数の owner を持て、パッケージを完全削除する際に debconf データベースから削除できるかどうかを決定するのに利用されます。