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行目で再度ディスクをマウントさせている。
こちらの手法であれば、ファイルコピー後にスクリプトを実行させることが出来る。

なお、どちらの手法を採用しても発生する問題点としては、以下の点が挙げられる。

  1. CD-ROMのファイルが全て大文字として扱われてしまうため、包括的にコピーするとコピーしたファイルが全て大文字になる
  2. CD-ROMからコピーした場合、何故か文字数に制限がある。(拡張子3文字以内?)
  3. 「/vmfs/volumes/」配下のフォルダではない場所にコピーした場合、再起動するとファイルが削除されてしまう

この辺りについては、ks.cfgで一個一個のファイルを名前指定でコピーしたり、コピー後リネームする、ファイルを移動する等で対処出来る。