前回の投稿では、ESXi のインストールメディアの転送に TFTP を利用しました。
ESXi を PXE Boot でインストールしてみる。(dnsmasq)
https://communities.vmware.com/people/gowatana/blog/2019/05/30/esxi-pxe-tftp
今回は、ESXi のインストーラの転送を HTTP に変更してみます。
ドキュメントでは、下記のあたりです。
Web サーバを使用した ESXi インストーラの PXE ブート
今回の環境。
今回は、前回の投稿で作成した環境を構成変更します。
おもな差分は、赤字の部分です。
- OS: Oracle Linux 7
- DHCP / TFTP サーバ: OS 標準提供の dnsmasq RPM
- syslinux ブートローダ: OS 標準提供の syslinux-tftpboot RPM
- PXE Boot 対象マシンのファームウェア: BIOS
- ESXi インストール メディア: HTTP サーバに配置。Apache HTTP Server(httpd)を利用
PXE 環境の構成変更。
前回の構成では、ブートローダファイル pxelinux.0 を使用していました。
一方 HTTP でのインストールイメージ転送では、HTTP に対応している gpxelinux.0 を利用します。
そこで、DHCP オプションで指定してるファイル名を変更します。
ちなみに、前回利用した pxelinux.0 のままだと、
下記のように URL を指定した HTTP によるファイルの読み込みができないようです。
今回は dnsmasq の DHCP 機能を利用しているので、/etc/dnsmasq.conf ファイルを編集します。
- 赤字部分が前回からの差分です。
- gpxelinux.0 は、syslinux-tftpboot RPM に含まれています。
- PXE のプロセスでは TFTP を利用するので、TFTP 関連の設定はそのまま残します。
(省略)
interface=ens33
dhcp-range=192.168.163.200,192.168.163.209,6h
dhcp-boot=gpxelinux.0
enable-tftp
tftp-root=/var/lib/tftpboot
dnsmasq のサービスを再起動しておきます。
[root@pxe01 ~]# systemctl restart dnsmasq
前回 ESXi の ISO イメージ ファイルの内容をコピーした
TFTP サーバの公開ディレクトリ /var/lib/tftpboot/ESXi67u2/ には、
ブートで必要な下記のファイル(boot.cfg と mboot.c32)を残します。
[root@pxe01 ~]# ls -l /var/lib/tftpboot/ESXi67u2/
合計 96
-r-xr-xr-x. 1 root root 2713 5月 31 07:34 boot.cfg
-r-xr-xr-x. 1 root root 93288 3月 27 13:47 mboot.c32
そして boot.cfg の prefix を編集します。
編集前(前回のファイル)
[root@pxe01 ~]# cat /var/lib/tftpboot/ESXi67u2/boot.cfg | head -n 4
bootstate=0
title=Loading ESXi installer
timeout=5
prefix=ESXi67u2
編集後
※「192.168.163.149」はESXi のインストーラを配置する HTTP サーバのアドレスです。
[root@pxe01 ~]# cat /var/lib/tftpboot/ESXi67u2/boot.cfg | head -n 4
bootstate=0
title=Loading ESXi installer
timeout=5
prefix=http://192.168.163.149/ESXi67u2
HTTP サーバの用意。
OS 標準提供の Apache HTTP Server の RPM をインストールして、起動します。
[root@pxe01 ~]# yum install -y httpd
[root@pxe01 ~]# systemctl start httpd
[root@pxe01 ~]# systemctl enable httpd
HTTP サーバが起動して、Test Page が参照(HTTP でダウンロード)できるようになります。
※Test Page は Web ブラウザからでも確認できます。
[root@pxe01 ~]# curl -s http://192.168.163.149/ | head -n 3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<head>
<title>Apache HTTP Server Test Page powered by Linux</title>
ESXi インストールメディアの配置。
HTTP サーバの公開ディレクトリ(デフォルトの /var/www/html)配下に
「ESXi67u2」というディレクトリを作成して、そこに ESXi の ISO ファイルの内容をコピーします。
[root@pxe01 ~]# mkdir /var/www/html/ESXi67u2
[root@pxe01 ~]# mount -o loop VMware-VMvisor-Installer-6.7.0.update02-13006603.x86_64.iso /mnt
[root@pxe01 ~]# cp -pr /mnt/* /var/www/html/ESXi67u2/
配置したファイルに HTTP 経由でアクセスできることを確認しておきます。
※Web ブラウザからでも確認できます。
[root@pxe01 ~]# curl -s http://192.168.163.149/ESXi67u2/ | head -n 5
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Index of /ESXi67u2</title>
</head>
PXE Boot での ESXi インストーラ起動の様子。
PXE Boot のメニューで、ESXi インストーラを選択すると・・・
boot.cfg の prefix で指定したアドレスの HTTP サーバから
ファイルが読み込まれていることがわかります。
PXE Boot を利用するような環境では、RPM などの OS パッケージを配置したリポジトリ
(YUM サーバなど)を用意しているケースがあるかなと思います。
ESXi インストーラも HTTP サーバに配置することで、
PXE 環境と、OS & ESXi のリポジトリを分離して管理できそうです。
以上、ESXi インストーラを HTTP サーバに配置してみる話でした。