preseed.cfg
引数から/proc/cmdline
内にミラーを設定するために、d-i Early/commandまたはd-ipresed/runを介してこれをpreseedに追加する方法を知る必要があります。
私が行った場合:
d-i preseed/run string ws/ubuntu.sh
#!/bin/sh
for x in `cat /proc/cmdline`; do
case $x in RPHOST*)
eval $x
d-i mirror/http/hostname string ${RPHOST}
d-i mirror/http/mirror string ${RPHOST}
d-i apt-setup/security_Host string ${RPHOST}
;;
esac;
done
失敗します。
CentOSキックスタート%pre
セクションではうまく機能しますが、debian/ubuntuプレシードを介してそれを行う方法がわかりません。
debconfに関するいくつかの調査の後、私はこの解決策を思いつきました:
preseed.cfgで、次の方法でスクリプトを呼び出します。
d-i preseed/run string ws/ubuntu.sh // subdir from preseed file location
ubuntu.shのコンテンツ:
#!/bin/sh
echo "Start ubuntu.sh runscript" >> /var/log/syslog
for x in `cat /proc/cmdline`; do
case $x in RPHOST*)
eval $x
Host=$RPHOST
echo "d-i mirror/http/hostname string ${Host}" > /tmp/mirror.cfg
echo "d-i mirror/http/mirror string ${Host}" >> /tmp/mirror.cfg
echo "d-i apt-setup/security_Host string ${Host}" >> /tmp/mirror.cfg
;;
esac;
done
// add´s values to /var/lib/cdebconf/question.dat
debconf-set-selections /tmp/mirror.cfg
12.04.2 LTSでうまく機能します!
(PXE?)ブート中にカーネルに任意の値を渡して、preseed中にそれを検出して反応しようとしているようです。これを達成するためのより良い方法があるかもしれないと思いますが、私はあなたの特定のシナリオについてもっと知る必要があります。 Cobblerプロジェクト が頭に浮かびます。
とにかく、これを実現する別の方法は、ホスト名またはコマンドラインに基づいて、適切なミラー設定を持つ構成ファイルを含む条件付きインクルードを使用することです。インクルードファイルは以前のファイルの値をオーバーライドします。
# More flexibly, this runs a Shell command and if it outputs the names of
# preconfiguration files, includes those files.
#d-i preseed/include_command \
# string if [ "`hostname`" = bob ]; then echo bob.cfg; fi