ESXi は、Kickstart でインストールとその後の設定を一部自動化することができます。
Kickstart は PXE ブートと合わせて利用することが多いですが、
今回は Kickstart スクリプトを自動的に読み込む ESXi のカスタム ISO インストーラを作成してみます。
ESXi 6.5 のドキュメントでは下記のあたりです。
カスタムのインストールまたはアップグレードスクリプトを含む、インストーラ ISO イメージの作成
ISO イメージ ファイル作成のための環境準備。
ESXi のインストーラは、ESXi 6.5 U1 のもの
(VMware-VMvisor-Installer-6.5.0.update01-5969303.x86_64.iso)を利用しています。
これは、あらかじめ MyVMware からダウンロードしておきます。
ISO を作成する OS は、Oracle Linux 7 を利用しています。
(ただ、RHEL や CentOS でも同様のはずです。)
[root@ol74 ~]# cat /etc/oracle-release
Oracle Linux Server release 7.4
ISO イメージを作成するために、genisoimage をインストールします。
[root@ol74 ~]# yum install -y genisoimage
ちなみに、mkisofs コマンドも alternatives で管理されていて 、genisoimage へのリンクになっているようです。
[root@ol74 ~]# alternatives --display mkisofs
mkisofs -ステータスは自動です。
リンクは現在 /usr/bin/genisoimage を指しています。
/usr/bin/genisoimage - 優先度 50
スレーブ mkisofs-mkisofsman: /usr/share/man/man1/genisoimage.1.gz
スレーブ mkisofs-mkhybrid: /usr/bin/genisoimage
スレーブ mkisofs-mkhybridman: /usr/share/man/man1/genisoimage.1.gz
現在の「最適」バージョンは /usr/bin/genisoimage です。
[root@ol74 ~]# which mkisofs
/usr/bin/mkisofs
[root@ol74 ~]# ls -l /usr/bin/mkisofs
lrwxrwxrwx. 1 root root 25 1月 4 21:02 /usr/bin/mkisofs -> /etc/alternatives/mkisofs
[root@ol74 ~]# ls -l /etc/alternatives/mkisofs
lrwxrwxrwx. 1 root root 20 1月 4 21:02 /etc/alternatives/mkisofs -> /usr/bin/genisoimage
オリジナルのインストーラのファイルを配置。
あらかじめ この Linux に転送しておいた、
ESXi のインストーラの ISO イメージ ファイルをマウントします。
[root@ol74 ~]# ls -l VMware-VMvisor-Installer-6.5.0.update01-5969303.x86_64.iso
-rw-r--r--. 1 root root 348788736 1月 4 14:55 VMware-VMvisor-Installer-6.5.0.update01-5969303.x86_64.iso
[root@ol74 ~]# mount -o loop VMware-VMvisor-Installer-6.5.0.update01-5969303.x86_64.iso /mnt/
mount: /dev/loop0 is write-protected, mounting read-only
インストーラのファイルを、一時的に利用するディレクトリ(今回は /tmp/ESXi65u1-custom-iso)にコピーします。
[root@ol74 ~]# mkdir /tmp/ESXi65u1-custom-iso
[root@ol74 ~]# cp -pr /mnt/* /tmp/ESXi65u1-custom-iso/
Kickstart ファイルの配置。
Kickstart で利用するスクリプト(今回は KS.CFG)を作成します。
事情によりネットワーク設定は VLAN ID を設定して、DHCP にしていますが、
静的に IP アドレスを設定することもできます。
今回の Kickstart ファイルは、/tmp/ESXi65u1-custom-iso/KS.CFG として配置していています。
ファイル名は 8.3形式で大文字にしておきます。
boot.cfg の編集(もしくは新規作成)。
Kickstart スクリプトを読み出すように、boot.cfg を編集します。
今回は カスタム ISO で対話式インストールもできるように、
boot.cfg の編集ではなく、boot-ks.cfg というファイルを新規作成します。
[root@ol74 ~]# sed 's|^kernelopt=.*$|kernelopt=runweasel ks=cdrom:/KS.CFG|' /tmp/ESXi65u1-custom-iso/boot.cfg > /tmp/ESXi65u1-custom-iso/boot-ks.cfg
[root@ol74 ~]# grep kernelopt /tmp/ESXi65u1-custom-iso/boot-ks.cfg
kernelopt=runweasel ks=cdrom:/KS.CFG
ちなみに新規作成されたファイルの全体は下記のようになっています。
[root@ol74 ~]# cat /tmp/ESXi65u1-custom-iso/boot-ks.cfg
bootstate=0
title=Loading ESXi installer
timeout=5
kernel=/tboot.b00
kernelopt=runweasel ks=cdrom:/KS.CFG
modules=/b.b00 --- /jumpstrt.gz --- /useropts.gz --- /features.gz --- /k.b00 --- /chardevs.b00 --- /a.b00 --- /user.b00 --- /uc_intel.b00 --- /uc_amd.b00 --- /sb.v00 --- /s.v00 --- /ata_liba.v00 --- /ata_pata.v00 --- /ata_pata.v01 --- /ata_pata.v02 --- /ata_pata.v03 --- /ata_pata.v04 --- /ata_pata.v05 --- /ata_pata.v06 --- /ata_pata.v07 --- /block_cc.v00 --- /char_ran.v00 --- /ehci_ehc.v00 --- /elxnet.v00 --- /hid_hid.v00 --- /i40en.v00 --- /igbn.v00 --- /ima_qla4.v00 --- /ipmi_ipm.v00 --- /ipmi_ipm.v01 --- /ipmi_ipm.v02 --- /ixgben.v00 --- /lpfc.v00 --- /lsi_mr3.v00 --- /lsi_msgp.v00 --- /lsi_msgp.v01 --- /misc_cni.v00 --- /misc_dri.v00 --- /mtip32xx.v00 --- /ne1000.v00 --- /nenic.v00 --- /net_bnx2.v00 --- /net_bnx2.v01 --- /net_cdc_.v00 --- /net_cnic.v00 --- /net_e100.v00 --- /net_e100.v01 --- /net_enic.v00 --- /net_fcoe.v00 --- /net_forc.v00 --- /net_igb.v00 --- /net_ixgb.v00 --- /net_libf.v00 --- /net_mlx4.v00 --- /net_mlx4.v01 --- /net_nx_n.v00 --- /net_tg3.v00 --- /net_usbn.v00 --- /net_vmxn.v00 --- /nhpsa.v00 --- /nmlx4_co.v00 --- /nmlx4_en.v00 --- /nmlx4_rd.v00 --- /nmlx5_co.v00 --- /ntg3.v00 --- /nvme.v00 --- /nvmxnet3.v00 --- /ohci_usb.v00 --- /pvscsi.v00 --- /qedentv.v00 --- /qfle3.v00 --- /qflge.v00 --- /qlnative.v00 --- /sata_ahc.v00 --- /sata_ata.v00 --- /sata_sat.v00 --- /sata_sat.v01 --- /sata_sat.v02 --- /sata_sat.v03 --- /sata_sat.v04 --- /scsi_aac.v00 --- /scsi_adp.v00 --- /scsi_aic.v00 --- /scsi_bnx.v00 --- /scsi_bnx.v01 --- /scsi_fni.v00 --- /scsi_hps.v00 --- /scsi_ips.v00 --- /scsi_isc.v00 --- /scsi_lib.v00 --- /scsi_meg.v00 --- /scsi_meg.v01 --- /scsi_meg.v02 --- /scsi_mpt.v00 --- /scsi_mpt.v01 --- /scsi_mpt.v02 --- /scsi_qla.v00 --- /shim_isc.v00 --- /shim_isc.v01 --- /shim_lib.v00 --- /shim_lib.v01 --- /shim_lib.v02 --- /shim_lib.v03 --- /shim_lib.v04 --- /shim_lib.v05 --- /shim_vmk.v00 --- /shim_vmk.v01 --- /shim_vmk.v02 --- /uhci_usb.v00 --- /usb_stor.v00 --- /usbcore_.v00 --- /vmkata.v00 --- /vmkplexe.v00 --- /vmkusb.v00 --- /vmw_ahci.v00 --- /xhci_xhc.v00 --- /emulex_e.v00 --- /btldr.t00 --- /weaselin.t00 --- /esx_dvfi.v00 --- /esx_ui.v00 --- /lsu_hp_h.v00 --- /lsu_lsi_.v00 --- /lsu_lsi_.v01 --- /lsu_lsi_.v02 --- /lsu_lsi_.v03 --- /native_m.v00 --- /rste.v00 --- /vmware_e.v00 --- /vsan.v00 --- /vsanheal.v00 --- /vsanmgmt.v00 --- /tools.t00 --- /xorg.v00 --- /imgdb.tgz --- /imgpayld.tgz
build=
updated=0
Boot メニューの編集。
Boot メニューのファイル(isolinux.cfg)を下記のように編集します。
- Kickstart むけのエントリ追記。
- Kickstart むけのエントリでの自動起動設定を追記。
下記のように、Kickstart むけのエントリを追記します。
vi などでの編集でもよいですが、今回はコピーペーストしやすいので
今回は LABEL ks として、boot-ks.cfg を読み込むエントリを追加しています。
MENU LABEL は、もともとの末尾に「Kickstart」を追記しています。
isolinux.cfg-LABEL_ks · GitHub
追記の様子です。
[root@ol74 ~]# cat << EOF >> /tmp/ESXi65u1-custom-iso/isolinux.cfg
> LABEL ks
> KERNEL mboot.c32
> APPEND -c boot-ks.cfg
> MENU LABEL ESXi-6.5.0-20170702001-standard ^Installer Kickstart
> EOF
[root@ol74 ~]#
Boot メニューのタイムアウト時に、追記した Kickstart むけのエントリ(LABEL ks)が
自動選択されるように isolinux.cfg を編集します。
[root@ol74 ~]# sed -i '/^TIMEOUT.*$/a ONTIMEOUT ks' /tmp/ESXi65u1-custom-iso/isolinux.cfg
isolinux.cfg は、結果的に下記のようになりました。
[root@ol74 ~]# cat /tmp/ESXi65u1-custom-iso/isolinux.cfg
DEFAULT menu.c32
MENU TITLE ESXi-6.5.0-20170702001-standard Boot Menu
NOHALT 1
PROMPT 0
TIMEOUT 80
ONTIMEOUT ks
LABEL install
KERNEL mboot.c32
APPEND -c boot.cfg
MENU LABEL ESXi-6.5.0-20170702001-standard ^Installer
LABEL hddboot
LOCALBOOT 0x80
MENU LABEL ^Boot from local disk
LABEL ks
KERNEL mboot.c32
APPEND -c boot-ks.cfg
MENU LABEL ESXi-6.5.0-20170702001-standard ^Installer Kickstart
ISO イメージ ファイルの作成。
/tmp/ESXi65u1-custom-iso 配下のファイルから、genisoimage コマンドで
Kickstart ファイルを含む ISO イメージファイル(/tmp/ESXi65u1-custom.iso)を作成します。
コマンドラインで指定している isolinux.bin、boot.cat、efiboot.img はオリジナルのインストーラに含まれています。
[root@ol74 ~]# genisoimage -relaxed-filenames -J -R -o /tmp/ESXi65u1-custom.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e efiboot.img -no-emul-boot /tmp/ESXi65u1-custom-iso
Warning: creating filesystem that does not conform to ISO-9660.
I: -input-charset not specified, using utf-8 (detected in locale settings)
Size of boot image is 4 sectors -> No emulation
Size of boot image is 2048 sectors -> No emulation
2.94% done, estimate finish Thu Jan 4 23:09:45 2018
5.87% done, estimate finish Thu Jan 4 23:09:45 2018
8.81% done, estimate finish Thu Jan 4 23:09:45 2018
11.73% done, estimate finish Thu Jan 4 23:09:53 2018
14.67% done, estimate finish Thu Jan 4 23:09:51 2018
17.60% done, estimate finish Thu Jan 4 23:09:50 2018
20.54% done, estimate finish Thu Jan 4 23:09:49 2018
23.47% done, estimate finish Thu Jan 4 23:09:49 2018
26.40% done, estimate finish Thu Jan 4 23:09:48 2018
29.33% done, estimate finish Thu Jan 4 23:09:48 2018
32.27% done, estimate finish Thu Jan 4 23:09:48 2018
35.20% done, estimate finish Thu Jan 4 23:09:47 2018
38.13% done, estimate finish Thu Jan 4 23:09:47 2018
41.07% done, estimate finish Thu Jan 4 23:09:47 2018
43.99% done, estimate finish Thu Jan 4 23:09:47 2018
46.93% done, estimate finish Thu Jan 4 23:09:47 2018
49.86% done, estimate finish Thu Jan 4 23:09:47 2018
52.80% done, estimate finish Thu Jan 4 23:09:46 2018
55.73% done, estimate finish Thu Jan 4 23:09:46 2018
58.66% done, estimate finish Thu Jan 4 23:09:46 2018
61.59% done, estimate finish Thu Jan 4 23:09:46 2018
64.53% done, estimate finish Thu Jan 4 23:09:46 2018
67.46% done, estimate finish Thu Jan 4 23:09:46 2018
70.39% done, estimate finish Thu Jan 4 23:09:46 2018
73.32% done, estimate finish Thu Jan 4 23:09:46 2018
76.26% done, estimate finish Thu Jan 4 23:09:46 2018
79.19% done, estimate finish Thu Jan 4 23:09:46 2018
82.13% done, estimate finish Thu Jan 4 23:09:46 2018
85.05% done, estimate finish Thu Jan 4 23:09:47 2018
87.99% done, estimate finish Thu Jan 4 23:09:47 2018
90.92% done, estimate finish Thu Jan 4 23:09:47 2018
93.85% done, estimate finish Thu Jan 4 23:09:47 2018
96.79% done, estimate finish Thu Jan 4 23:09:47 2018
99.72% done, estimate finish Thu Jan 4 23:09:47 2018
Total translation table size: 2048
Total rockridge attributes bytes: 14341
Total directory bytes: 6144
Path table size(bytes): 50
Max brk space used 25000
170483 extents written (332 MB)
[root@ol74 ~]#
ISO イメージ ファイルが作成されました。
[root@ol74 ~]# ls -l /tmp/ESXi65u1-custom.iso
-rw-r--r--. 1 root root 349149184 1月 4 23:09 /tmp/ESXi65u1-custom.iso
作成した ISO イメージの動作確認。
ESXi65u1-custom.iso を利用して ESXi のインストールを開始すると、自動的に Kickstart の処理が進みます。
今回は、VMware Workstation で ISO ブートしてみました。
作成した ISO イメージファイルでブートしてみると、
Boot メニューの 3行目に「~ Kickstart」メニューが追加されています。
このままカウントダウンが終わると、自動的に追加したメニューでインストール処理が進みます。
インストール完了時に下記のようなメッセージが表示されますが、
Kickstart スクリプトに「reboot」があるので、少し待つと自動的に再起動されます。
PXE + Kickstart の環境を用意するほどではないけれどもインストールを自動化したい場合や、
ホストプロファイルが利用できなかったり、ホストプロファイルでカバーできないカスタマイズを
したい場合などに便利かもしれません。
以上、ESXi のカスタムインストーラを作成していみる話でした。