B.5. 高度なオプション

B.5.1. インストール中のカスタムコマンド実行

事前設定ツールには、インストール中の一定の箇所でコマンドやスクリプトを実行するといった、とても強力で柔軟なオプションが存在します。

ターゲットシステムのファイルシステムがマウントされると /target 以下で利用できるようになります。インストールCD/DVDを利用している場合はマウント後には /cdrom 以下で利用できるようになります。

#注意: d-i 事前設定予約は本質的に安全ではありません。
#インストーラはバッファオーバーフローやその他の悪意のある
#操作に対するチェックを行いません。信頼できるソースからのみ、
#事前設定ファイルを使用してください。
#これらはインストーラ内で任意のシェルコマンドを自動的に
#実行する便利な機能を紹介します。

# 最初のコマンドが事前設定が読み込まれた直後に実行されます。
#d-i preseed/early_command string anna-install some-udeb
# これは、パーティションマネージャが起動する直前に実行されます。
#  前述のコマンド実行時に発見されなかった動的なディスクも事前予約の
# 対象として設定されるので便利です。
#d-i partman/early_command \
#       string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
# このコマンドはインストールが完了する直前、まだ /target が存在
# している間に実行されます。/target に chroot したり、apt-install や
# in-target を利用してパッケージをインストールしたり、コマンドを
# 実行したりすることができます
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

B.5.2. preseed を用いたデフォルト値変更

事前設定を用いて質問へのデフォルトの回答を変更できますが、その状態で質問を表示もできます。それには、質問への回答を設定した後で、seen フラグを false に再設定してください。

d-i foo/bar string value
d-i foo/bar seen false

ブートプロンプトで preseed/interactive=true パラメータを設定し、すべて の質問に対して同じ効果を及ぼすこともできます。これは事前設定ファイルのテストやデバッグにも便利です。

d-i という owner は、インストーラ自身が使用する変数でのみ、使用するべきであることに注意してください。ターゲットシステムにインストールされたパッケージに属する変数用には、パッケージ名を代わりに使用するべきです。「preseed が質問するブートパラメータの利用」 の脚注をご覧ください。

ブートパラメータを利用して preseed を行う場合、質問に対して ?= 演算子を使用して回答できます。例: foo/bar?=value (もしくは owner:foo/bar?=value) これはもちろん、インストール中に実際に表示される質問に対応するパラメータにのみ効果を及ぼし、内部パラメータには効果を及ぼしません。

詳細なデバッグ情報を取得するためには、ブートパラメータ DEBCONF_DEBUG=5 を使用してください。これにより debconf が、各変数の現在の設定と各パッケージのインストールスクリプトの動作について、より詳細な情報を出力してくれます。

B.5.3. 事前設定ファイルのチェーンロード

事前設定ファイルから他の事前設定ファイルを読み込めます。先に読み込まれたファイルの既存設定を、後から読み込まれた設定で上書きします。これは例えば、あるファイルに一般的なネットワークの設定を書いておき、他のファイルで具体的な設定を指定する、という使い方ができます。

# 複数のファイルをスペース区切りで指定でき、すべてを読み込みます。
#同一ディレクトリ内のファイルも事前予約の適用を受けます。注: 相対パスで
#指定されたファイル名は、設定ファイルと同じディレクトリにある
#ものとみなされます。
#d-i preseed/include string x.cfg

# インストーラーはオプションとして、使用する設定ファイルの
# チェックサムを検証できます。現時点では md5sum のみサポートされて
#います。ディレクトリにあるファイルと同じ順番で md5sum を列挙してください。
#d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d

# より柔軟な方法として、シェルコマンドを実行し、その出力が
#設定ファイル名であれば、それらのファイルを読み込むこともできます。
#d-i preseed/include_command \
#      string if [ "`hostname`" = bob ]; then echo bob.cfg; fi

# 最も柔軟な方法として、シェルスクリプト実行することができます。
#このプログラムは debconf-set コマンドなどを用いて debconf 
#データベースを操作できます。複数のスクリプトをスペース区切りで指定
#できます。相対パスで指定されたファイル名は、実行する設定ファイルと
#同じディレクトリにあるものとみなされます。
#d-i preseed/run string foo.sh

また initrd や file preseed の段階で、あらかじめ用意したファイルの preseed/url で設定した network preseed へ、チェーンロードを行うことができます。これにより、ネットワークに接続した時点で network preseed を行えます。この場合、2 種類の異なる preseed が実行されることに注意してください。例えば、preseed/early コマンドを実行する機会が 2 度あり、2 回目はネットワークに接続した時に発生するということです。