B.2. preseed の利用

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

事前設定ファイルの手本にできる事前設定ファイルのサンプルは、https://www.buy-develop.eu.org/releases/bookworm/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
- または
  preseed/url=tftp://host/path/to/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d

- リマスタリングしたインストールイメージで起動する場合:
  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 に、preseed/file/checksumpreseed-md5 に短縮できることに注意してください。

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

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

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

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

通常、この方法で答をあらかじめ設定しておくと、質問してきません。質問のデフォルト値を指定しているのに、まだ質問してくる場合には、= 演算子の代わりに、?= を使用してください。「preseed を用いたデフォルト値変更」 もご覧ください。

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

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

[注記] 注記

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

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

[注記] 注記

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

B.2.3. 自動モード

ブートプロンプトでの非常に簡単なコマンドラインで、自動インストールに対して任意の複雑なカスタマイズを行えるよう組み合わせる、Debian インストーラの機能がいくつかあります。

これは起動時の選択からインストールの自動化を使うことで有効化できます。アーキテクチャや起動方法によっては auto とも呼ばれます。ここでは、auto パラメータではなく、起動時の選択でそれを選択して起動時のプロンプトに以下のパラメータを付加するという意味になります。起動パラメータの追加方法についての情報は、「ブート画面」を見てください。

これを説明するため、以下にブートプロンプトで使用できる例を示します。

auto url=autoserver

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

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

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

[ヒント] ヒント

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

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

以下のエイリアスは、(自動モード) preseed の際に、役に立つ場合があります。これらは単に、質問名の短いエイリアスであることに注意してください。そのうえで、常に値を指定する必要があります。例えば、auto=trueinterface=eth0 のようにです。

priority debconf/priority
fb debian-installer/framebuffer
auto auto-install/enable
classes auto-install/classes
file preseed/file
url preseed/url
theme debian-installer/theme
language debian-installer/language
country debian-installer/country
locale debian-installer/locale
keymap keyboard-configuration/xkb-keymap
modules anna/choose_modules
firmware hw-detect/firmware-lookup
interface netcfg/choose_interface
domain netcfg/get_domain
hostname    netcfg/get_hostname
protocol mirror/protocol
suite mirror/suite
recommends base-installer/install-recommends
tasks tasksel:tasksel/first
desktop tasksel:tasksel/desktop
preseed-md5 preseed/file/checksum

B.2.5. ブートプロンプトの preseed の例

ここではブートプロンプトの見た目の例を示します (これを必要に応じて調整してください「ブート画面」もご覧ください)。

# To set French as language and France as country:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz language=fr country=FR --- quiet
# To set English as language and Germany as country, and use a German keyboard layout:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz language=en country=DE locale=en_US.UTF-8 keymap=de --- quiet
# To install the MATE desktop:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz desktop=mate-desktop --- quiet
# To install the web-server task:
/install.amd/vmlinuz initrd=/install.amd/initrd.gz tasksel:tasksel/first=web-server ---

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

事前設定ファイルをネットワークからダウンロードするよう指定するのに、DHCP も使用できます。DHCP はファイル名の指定ができます。通常これは netboot のファイルですが、URL 形式になっていると、network 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 の完全自動インストールは、充分注意しなければ行うべきではありません。



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