Quantcast
Channel: VMware Communities : Blog List - All Communities
Viewing all articles
Browse latest Browse all 3135

ESXi のカスタム インストール ISO イメージを作成してみる。(Kickstart)

$
0
0

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 アドレスを設定することもできます。

ESXi Kickstart サンプル。 · GitHub

 

今回の 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)を下記のように編集します。

  1. Kickstart むけのエントリ追記。
  2. 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」メニューが追加されています。

このままカウントダウンが終わると、自動的に追加したメニューでインストール処理が進みます。

 

esxi-custom-iso-01.png

 

インストール完了時に下記のようなメッセージが表示されますが、

Kickstart スクリプトに「reboot」があるので、少し待つと自動的に再起動されます。

 

esxi-custom-iso-02.png

 

PXE + Kickstart の環境を用意するほどではないけれどもインストールを自動化したい場合や、

ホストプロファイルが利用できなかったり、ホストプロファイルでカバーできないカスタマイズを

したい場合などに便利かもしれません。

 

以上、ESXi のカスタムインストーラを作成していみる話でした。


Viewing all articles
Browse latest Browse all 3135

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>