ESXi は、PXE でインストーラからブートしてインストールすることができます。
PXE 環境を用意するには、DHCP や TFTP といったサービスが必要です。
今回は、PXE 環境を Linux と dnsmasq を利用して構築してみます。
dnsmasq は簡易的な DNS サーバとして利用されることが多いですが、
PXE に必要な DHCP サービスと TFTP サービスも提供できます。
今回の環境。
使用するソフトウェアは下記です。
- OS: Oracle Linux 7
- DHCP / TFTP サーバ: OS 標準提供の dnsmasq RPM
- syslinux ブートローダ: OS 標準提供の syslinux-tftpboot RPM
ちなみに、今回の PXE サーバとインストール対象サーバは
VMware Workstation Pro 15 に VM で作成しています。
PXE サーバにする OS の準備。
Linux は、Oracle Linux 7.6 を利用しています。
※ちなみに RHEL や CentOS でも同様の手順で構築可能なはずです。
[root@pxe01 ~]# cat /etc/oracle-release
Oracle Linux Server release 7.6
わかりやすく、ホスト名を変更しておきます。
そして OS にログインしなおしてプロンプトの文字列を変更しておきます。
[root@localhost ~]# hostnamectl set-hostname pxe01
手順を簡略化するため、firewalld は停止しています。
[root@pxe01 ~]# systemctl stop firewalld
[root@pxe01 ~]# systemctl disable firewalld
DHCP / TFTP サーバの構築。
dnsmasq をインストールします。
[root@pxe01 ~]# yum install -y dnsmasq
[root@pxe01 ~]# yum list dnsmasq
読み込んだプラグイン:ulninfo
インストール済みパッケージ
dnsmasq.x86_64 2.76-7.el7 @ol7_latest
あわせて、TFTP Boot むけ syslinux ブートローダの RPM(syslinux-tftpboot)も
インストールしておきます。
[root@pxe01 ~]# yum install -y syslinux-tftpboot
[root@pxe01 ~]# yum list syslinux-tftpboot
読み込んだプラグイン:ulninfo
インストール済みパッケージ
syslinux-tftpboot.noarch 4.05-15.el7 @ol7_latest
ちなみに、syslinux-tftpboot をインストールすると、下記のように
/var/lib/tftpboot/ ディレクトリ配下にブートローダ関連のファイルが配置されます。
[root@pxe01 ~]# rpm -ql syslinux-tftpboot
/var/lib/tftpboot
/var/lib/tftpboot/cat.c32
/var/lib/tftpboot/chain.c32
/var/lib/tftpboot/cmd.c32
/var/lib/tftpboot/config.c32
/var/lib/tftpboot/cpuid.c32
/var/lib/tftpboot/cpuidtest.c32
/var/lib/tftpboot/disk.c32
/var/lib/tftpboot/dmitest.c32
/var/lib/tftpboot/elf.c32
/var/lib/tftpboot/ethersel.c32
/var/lib/tftpboot/gfxboot.c32
/var/lib/tftpboot/gpxecmd.c32
/var/lib/tftpboot/gpxelinux.0
/var/lib/tftpboot/hdt.c32
/var/lib/tftpboot/host.c32
/var/lib/tftpboot/ifcpu.c32
/var/lib/tftpboot/ifcpu64.c32
/var/lib/tftpboot/ifplop.c32
/var/lib/tftpboot/int18.com
/var/lib/tftpboot/kbdmap.c32
/var/lib/tftpboot/linux.c32
/var/lib/tftpboot/ls.c32
/var/lib/tftpboot/lua.c32
/var/lib/tftpboot/mboot.c32
/var/lib/tftpboot/memdisk
/var/lib/tftpboot/memdump.com
/var/lib/tftpboot/meminfo.c32
/var/lib/tftpboot/menu.c32
/var/lib/tftpboot/pcitest.c32
/var/lib/tftpboot/pmload.c32
/var/lib/tftpboot/poweroff.com
/var/lib/tftpboot/pwd.c32
/var/lib/tftpboot/pxechain.com
/var/lib/tftpboot/pxelinux.0
/var/lib/tftpboot/reboot.c32
/var/lib/tftpboot/rosh.c32
/var/lib/tftpboot/sanboot.c32
/var/lib/tftpboot/sdi.c32
/var/lib/tftpboot/sysdump.c32
/var/lib/tftpboot/ver.com
/var/lib/tftpboot/vesainfo.c32
/var/lib/tftpboot/vesamenu.c32
/var/lib/tftpboot/vpdtest.c32
/var/lib/tftpboot/whichsys.c32
/var/lib/tftpboot/zzjson.c32
dnsmasq に DHCP / TFTP サービス関連の設定をします。vi エディタなどで、
/etc/dnsmasq.conf ファイルの末尾に下記を追記します。
- interface は ens33 としていますが、環境によって eth0 や ens192 といった名前になります。
- dhcp-range は、ESXi インストール対象のマシンが PXE サーバにアクセスする際に利用する IP アドレス レンジを指定します。
interface=ens33
dhcp-range=192.168.163.200,192.168.163.209,6h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/lib/tftpboot
dnsmasq のサービスを起動しておきます。
[root@pxe01 ~]# systemctl start dnsmasq
[root@pxe01 ~]# systemctl enable dnsmasq
syslinux での PXE 設定ファイルの用意。
pxelinux.cfg ディレクトリを作成します。
[root@pxe01 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
/var/lib/tftpboot/pxelinux.cfg/default ファイルを、下記のような内容で作成します。
- 「LABEL ESXi67u2」以降には、今回インストールで利用する ESXi 6.7 U2 のメニューを追加しています。
- (必須ではありませんが)メニュー画面の見栄えをよくするために「MENU INCLUDE pxelinux.cfg/pxe.conf」といった設定をしています。
DEFAULT vesamenu.c32
TIMEOUT 800
ONTIMEOUT 1
PROMPT 0
MENU INCLUDE pxelinux.cfg/pxe.conf
NOESCAPE 1
LABEL 1
MENU LABEL Local Boot
localboot 0
TEXT HELP
Boot to local hard disk
ENDTEXT
LABEL ESXi67u2
KERNEL /ESXi67u2/mboot.c32
APPEND -c /ESXi67u2/boot.cfg
MENU LABEL ESXi67 Update 2 ^Installer
MENU INCLUDE で指定している pxe.conf ファイルは、下記の内容で作成しています。
/var/lib/tftpboot/pxelinux.cfg/pxe.conf
MENU TITLE PXE Server pxe01
NOESCAPE 1
ALLOWOPTIONS 1
PROMPT 0
menu width 80
menu rows 14
MENU TABMSGROW 24
MENU MARGIN 10
menu color title 1;36;44 #ff008080 #00000000 std
PXE サーバへの ESXi インストーラの配置。
今回は、ESXi 6.7 U2 のインストーラを利用します。
My VMware サイトから、下記のファイルを入手しておきます。
VMware-VMvisor-Installer-6.7.0.update02-13006603.x86_64.iso
PXE サーバに ISO ファイルを転送ずみです。
[root@pxe01 ~]# ls -1
VMware-VMvisor-Installer-6.7.0.update02-13006603.x86_64.iso
anaconda-ks.cfg
インストーラを /mnt ディレクトリにマウントします。
[root@pxe01 ~]# mount -o loop ./VMware-VMvisor-Installer-6.7.0.update02-13006603.x86_64.iso /mnt
mount: /dev/loop0 is write-protected, mounting read-only
TFTP サーバが公開しているディレクトリの配下にディレクトリを作成して、
ISOファイルからファイルをコピーします。
[root@pxe01 ~]# mkdir /var/lib/tftpboot/ESXi67u2
[root@pxe01 ~]# cp -pr /mnt/* /var/lib/tftpboot/ESXi67u2/
通常の CD ブートから PXE ブートに変更するため、boot.cfg ファイルを編集します。
- boot.cfg で指定されているファイル名から、先頭の「/」を削除。
- それらのファイル名の先頭に、TFTP のディレクトリ名をつける。(prefix=ESXi67u2)
編集箇所が多いため、sed コマンドで置換をしています。
[root@pxe02 ~]# sed -i 's|/||g' /var/lib/tftpboot/ESXi67u2/boot.cfg
[root@pxe02 ~]# sed -i 's|prefix=|prefix=ESXi67u2|' /var/lib/tftpboot/ESXi67u2/boot.cfg
インストール対象マシンのパワーオン。
インストール対象となるマシン(VM でも可)をパワーオンすると、
ここまでで設定した PXE Boot のメニューが表示されます。
メニューを選択してブートすると、
通常の ISO ブートとはファイルのパスが変更されていることがわかります。
これで、PXE Boot で ESXi のインストールが開始できるようになり、
このあとは通常どおりインストールを進めることになります。
以上、ESXi を PXE Boot してみる話でした。