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で一個一個のファイルを名前指定でコピーしたり、コピー後リネームする、ファイルを移動する等で対処出来る。