さまざまなタイプのサーバー(HP Proliant ML110、ML310、ML350)にUSBドライブとpreseedファイルを使用してUbuntu-14.04サーバーを無人インストールしています。
/dev/sda
にあり、USBドライブは/dev/sdb
を取ります。/dev/sda
を取得し、ハードドライブは/dev/sdb
に表示されます。これは完全に無人のインストールである必要があるため、サーバーの種類に関係なく、d-i partman-auto/disk
に正しいデバイスパスを指定する方法を見つける必要があります。
私の最初のアイデアは、ハードドライブをUSBドライブの前に表示させ、ML350サーバーで/dev/sda
を使用できるようにすることでした。しかし 私はそれをする方法を見つけられませんでした 。
そのため、partman
が実行される直前にデバイス名を検出し、それを変数$INSTALL_DEV
に記録する小さなスクリプトを作成しました。
d-i partman/early_command string \
for DEV in `ls /sys/block | grep sd`; do \
if [ -n "`ls -l /sys/block/$DEV | grep /usb`" ]; then \
USB_DEV=/dev/${DEV}; \
echo "USB_DEV is $USB_DEV" >> /var/log/syslog; \
else \
INSTALL_DEV=/dev/${DEV}; \
echo "INSTALL_DEV = $INSTALL_DEV" >> /var/log/syslog; \
break; \
fi; \
done; \
それ以来、私はその変数をd-i partman-auto/disk
に与える方法を見つけるのに苦労しています。私はさまざまな代替案を考えましたが、それらの1つを実装する方法を見つけることができませんでした。
partma-auto/disk
が変数を解釈するようにします。しかし、残念ながらそれは値として文字列のみを受け取ります。debian-installer
データベースを変更します。しかし、私はデータベースファイルを見つけられませんでした(それを変更する方法でもありません)。preseed/include
に表示される前に、/dev
からのファイルしか含めることができません。これが私が望んでいたことを正確に実行する単純なpartman/early_command
です
d-i partman/early_command \
string debconf-set partman-auto/disk "$(echo /dev/`ls -l /sys/block/[hs]d* | grep -v "usb" | head -n1 | sed 's/^.*\([hs]d[a-z]\+\).*$/\1/'`)"
このearly-command
は、partman
が実行される直前に実行されます。 partman-auto/disk
のdebian-installer
構成の値を動的に設定します。
$(
と)
の間のコマンドは、USBドライブではない最初に見つかったハードドライブを出力します。