VMware ESXiを自動インストールする際、設定用のスクリプトやOVAファイル等をCD-ROM(DVD-ROM)に入れておいて、それをESXiインストール後にデータストア等にコピーしたいと思うときがあるだろう。
その際の手法について記述する。
ESXiのKickstartでCD-ROMからファイルをコピーする場合、「%post」に記述する方法と「%firstboot」に記述する方法の2通りある。
どちらでも記述の方法はそう変わらないが、応用性で言うと「%firstboot」への記述の方が優れているように思える。
以下に、「%post」「%firstboot」それぞれでの記述例を記載する。
なお、以下例でコピーはCD-ROMの「/work」フォルダをまるごとコピーするようにしている。
1.「%post」への記述
「%post」への記述の場合、以下の例のように記述することでCD-ROMからファイルをコピーすることが可能となる。
●ks.cfg
#
# Sample scripted installation file
#
# Accept EULA
vmaccepteula
# Set root password
rootpw password
#Install on local disk overwriting any existing VMFS datastore
install --firstdisk --overwritevmfs
# Network configuration
network --bootproto=dhcp --device=vmnic0
# Reboot after installation completed
reboot
%post --interpreter=busybox
cp -r /vmfs/volumes/CDROM/WORK/ /vmfs/volumes/datastore1/
で、ここで問題なのが「%post」で指定した場合、そのスクリプトを実行させる事が出来なかった事だ。
スクリプトの実行コマンドを「%post」「%firstboot」どちらに記述しても正常に実行されないため、『ただファイルを設置、配布する』という目的であればこちらを採用すると良い。
2.「%firstboot」への記述
「%firstboot」への記述の場合、以下の例のように記述する。
●ks.cfg
#
# Accept EULA
vmaccepteula
# Set root password
rootpw password
#Install on local disk overwriting any existing VMFS datastore
install --firstdisk --overwritevmfs
# Network configuration
network --bootproto=dhcp --device=vmnic0
# Reboot after installation completed
reboot --noeject
%firstboot --interpreter=busybox
vmkload_mod iso9660
/sbin/vsish -e set /vmkModules/iso9660/mount mpx.vmhba32:C0:T0:L0
cp -r /vmfs/volumes/CDROM/WORK/ /vmfs/volumes/datastore1/
reboot
ここでポイントになるのが、12行目と15、16行目。
「%firstboot」はインストール後最初に起動した際に行われる動作となることから、ディスクをリジェクトされるとファイルをコピーすることができなくなる。
そのため、12行目でリジェクトをさせないように記述している。
さらに、「%firstboot」は一度再起動されているため、そのままではディスクをマウントしてくれない。このため、15、16行目で再度ディスクをマウントさせている。
こちらの手法であれば、ファイルコピー後にスクリプトを実行させることが出来る。
なお、どちらの手法を採用しても発生する問題点としては、以下の点が挙げられる。
- CD-ROMのファイルが全て大文字として扱われてしまうため、包括的にコピーするとコピーしたファイルが全て大文字になる
- CD-ROMからコピーした場合、何故か文字数に制限がある。(拡張子3文字以内?)
- 「/vmfs/volumes/」配下のフォルダではない場所にコピーした場合、再起動するとファイルが削除されてしまう
この辺りについては、ks.cfgで一個一個のファイルを名前指定でコピーしたり、コピー後リネームする、ファイルを移動する等で対処出来る。