Skip navigation
2019

ESXi は、PXE でインストーラからブートしてインストールすることができます。

PXE 環境を用意するには、DHCP や TFTP といったサービスが必要です。

 

ドキュメントでは下記のあたりです。

ESXi インストーラの PXE ブート

 

今回は、PXE 環境を Linux と dnsmasq を利用して構築してみます。

dnsmasq は簡易的な DNS サーバとして利用されることが多いですが、

PXE に必要な DHCP サービスと TFTP サービスも提供できます。

 

今回の環境。

使用するソフトウェアは下記です。

  • OS: Oracle Linux 7
  • DHCP / TFTP サーバ: OS 標準提供の dnsmasq RPM
  • syslinux ブートローダ: OS 標準提供の syslinux-tftpboot RPM
  • PXE Boot 対象マシンのファームウェア: BIOS
  • ESXi インストール メディア: TFTP サーバに配置(PXE サーバ自身)

 

ちなみに、今回の 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 のメニューが表示されます。

esxi-pxeboot-01.png

 

メニューを選択してブートすると、

通常の ISO ブートとはファイルのパスが変更されていることがわかります。

esxi-pxeboot-02.png

 

これで、PXE Boot で ESXi のインストールが開始できるようになり、

このあとは通常どおりインストールを進めることになります。

 

以上、ESXi インストーラを PXE Boot してみる話でした。

つづく。

ESXi を PXE Boot でインストールしてみる。(HTTP 併用)

VMware Photon OS 3.0 の参照 DNS サーバの設定は、

これまでの Photon OS とは様子が変わっているようです。

今回は、Photon OS 3.0 の DNS サーバ アドレスの確認と、設定変更をしてみます。

 

Photon OS 3.0 は、GitHub の URL からダウンロードできる

「OVA with virtual hardware v13 (UEFI Secure Boot)」を利用しています。

Downloading Photon OS · vmware/photon Wiki · GitHub

root@photon-machine [ ~ ]# cat /etc/photon-release

VMware Photon OS 3.0

PHOTON_BUILD_NUMBER=26156e2

 

Photon 3.0 の /etc/resolv.conf は下記のように、

nameserver に「127.0.0.53」というアドレスが設定されています。

root@photon-machine [ ~ ]# cat /etc/resolv.conf

# This file is managed by man:systemd-resolved(8). Do not edit.

#

# This is a dynamic resolv.conf file for connecting local clients to the

# internal DNS stub resolver of systemd-resolved. This file lists all

# configured search domains.

#

# Run "resolvectl status" to see details about the uplink DNS servers

# currently in use.

#

# Third party programs must not access this file directly, but only through the

# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,

# replace this symlink by a static file or a different symlink.

#

# See man:systemd-resolved.service(8) for details about the supported modes of

# operation for /etc/resolv.conf.

 

nameserver 127.0.0.53

 

このアドレスは、DNS サーバ関連のようで、UDP 53 番ポートで待ち受けているようです。

root@photon-machine [ ~ ]# ss -an | grep 127.0.0.53

udp   UNCONN  0        0                              127.0.0.53%lo:53                                               0.0.0.0:*

 

そして 53番ポートのプロセスを確認してみると、

resolv.conf のコメントとも関係ありそうな systemd-resolve というものです。

root@photon-machine [ ~ ]# tdnf install -y lsof

root@photon-machine [ ~ ]# lsof -i:53 -P -n

COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

systemd-r 205 systemd-resolve   12u  IPv4   3644      0t0  UDP 127.0.0.53:53

root@photon-machine [ ~ ]# ps -p 205

  PID TTY          TIME CMD

  205 ?        00:00:00 systemd-resolve

 

これは、systemd 229 以降に導入された名前解決マネージャーの仕組みのようです。

https://www.freedesktop.org/wiki/Software/systemd/resolved/

 

ちなみに、Photon 3.0 は systemd 239 でした。

root@photon-machine [ ~ ]# rpm -q systemd

systemd-239-10.ph3.x86_64

 

DNS サーバのアドレスは、/etc/systemd/network/*.network ファイルの

「DNS=」で設定したものが反映されます。

 

Photon OS 3.0 では、デフォルトでは DHCP 設定のファイルが配置されています。

root@photon-machine [ ~ ]# cat /etc/systemd/network/99-dhcp-en.network

[Match]

Name=e*

 

[Network]

DHCP=yes

IPv6AcceptRA=no

 

現時点では、DHCP 設定により自宅ラボの  DNS サーバ 2台が設定されています。

root@photon-machine [ ~ ]# resolvectl dns

Global:

Link 2 (eth0): 192.168.1.101 192.168.1.102

 

resolvectl では、より詳細な情報も確認できます。

(デフォルトだとページャが作用しますが、とりあえず cat で全体表示しています)

root@photon-machine [ ~ ]# resolvectl | cat

Global

       LLMNR setting: no

MulticastDNS setting: yes

  DNSOverTLS setting: no

      DNSSEC setting: no

    DNSSEC supported: no

Fallback DNS Servers: 8.8.8.8

                      8.8.4.4

                      2001:4860:4860::8888

                      2001:4860:4860::8844

          DNSSEC NTA: 10.in-addr.arpa

                      16.172.in-addr.arpa

                      168.192.in-addr.arpa

                      17.172.in-addr.arpa

                      18.172.in-addr.arpa

                      19.172.in-addr.arpa

                      20.172.in-addr.arpa

                      21.172.in-addr.arpa

                      22.172.in-addr.arpa

                      23.172.in-addr.arpa

                      24.172.in-addr.arpa

                      25.172.in-addr.arpa

                      26.172.in-addr.arpa

                      27.172.in-addr.arpa

                      28.172.in-addr.arpa

                      29.172.in-addr.arpa

                      30.172.in-addr.arpa

                      31.172.in-addr.arpa

                      corp

                      d.f.ip6.arpa

                      home

                      internal

                      intranet

                      lan

                      local

                      private

                      test

 

Link 2 (eth0)

      Current Scopes: DNS

       LLMNR setting: yes

MulticastDNS setting: no

  DNSOverTLS setting: no

      DNSSEC setting: no

    DNSSEC supported: no

  Current DNS Server: 192.168.1.101

         DNS Servers: 192.168.1.101

                      192.168.1.102

 

ためしに、DNS サーバのアドレスを変更してみます。

設定ファイルを vi エディタで編集します。

root@photon-machine [ ~ ]# vi /etc/systemd/network/99-dhcp-en.network

 

今回は、下記の赤字部分を追記します。

[Match]

Name=e*

 

[Network]

DHCP=yes

IPv6AcceptRA=no

Domains=go-lab.jp

DNS=192.168.1.1

DNS=192.168.1.2

 

ネットワークを再起動します。

root@photon-machine [ ~ ]# systemctl restart systemd-networkd

 

DNS サーバアドレスが追加登録されました。

DHCP サーバによる DNS サーバのアドレスよりも高優先度で

ファイルに追記した DNS サーバが追加されました。

root@photon-machine [ ~ ]# resolvectl dns

Global:

Link 2 (eth0): 192.168.1.1 192.168.1.2 192.168.1.101 192.168.1.102

 

resolvectl コマンドの末尾 10行だけ表示してみると、

「Domains」のドメインも追加されています。

root@photon-machine [ ~ ]# resolvectl | tail -n 10

       LLMNR setting: yes

MulticastDNS setting: no

  DNSOverTLS setting: no

      DNSSEC setting: no

    DNSSEC supported: no

         DNS Servers: 192.168.1.1

                      192.168.1.2

                      192.168.1.101

                      192.168.1.102

          DNS Domain: go-lab.jp

 

実際に名前解決が発生すると、利用されている DNS サーバ(Current DNS Server)がわかります。

root@photon-machine [ ~ ]# resolvectl | tail -n 10

MulticastDNS setting: no

  DNSOverTLS setting: no

      DNSSEC setting: no

    DNSSEC supported: no

  Current DNS Server: 192.168.1.1

         DNS Servers: 192.168.1.1

                      192.168.1.2

                      192.168.1.101

                      192.168.1.102

          DNS Domain: go-lab.jp

 

DNS サーバ のアドレスが変更されても、/etc/resolv.conf のアドレスは

127.0.0.53 のままですが、サーチドメインは追加されます。

root@photon-machine [ ~ ]# grep -v '#' /etc/resolv.conf

 

nameserver 127.0.0.53

search go-lab.jp

 

以上。Photon OS 3.0 の DNS サーバ アドレス設定の様子でした。

VMware Photon OS 3.0 で、簡易的な DNS サーバを構築してみます。

今回は、Photon OS の RPM リポジトリに登録されている dnsmasq を利用します。

 

Photon OS の準備。

VMware から提供されている、Photon OS の OVA をデプロイします。

今回は、「OVA with virtual hardware v13 (UEFI Secure Boot)」を利用しました。

Downloading Photon OS · vmware/photon Wiki · GitHub

 

OVA ファイルをデプロイ→パワーオンします。

そして、root / changeme で初期パスワードを変更してログインします。

root@photon-machine [ ~ ]# cat /etc/photon-release

VMware Photon OS 3.0

PHOTON_BUILD_NUMBER=26156e2

 

ホスト名を、わかりやすいもの(今回は lab-dns-01)に変更しておきます。

ログインしなおすと、bash のプロンプトにもホスト名が反映されます。

root@photon-machine [ ~ ]# hostnamectl set-hostname lab-dns-01

 

ネットワーク設定は、DHCP を利用しています。

 

DNS サーバの構築。(dnsmasq)

まず、dnsmasq をインストールします。

root@lab-dns-01 [ ~ ]# tdnf install -y dnsmasq

root@lab-dns-01 [ ~ ]# rpm -q dnsmasq

dnsmasq-2.79-2.ph3.x86_64

 

dnsmasq では、hosts ファイルのエントリを DNS レコードとして利用できます。

/etc/hosts ファイルに、DNS レコードの情報を記入します。

root@lab-dns-01 [ ~ ]# echo '192.168.1.20 base-esxi-01.go-lab.jp' >> /etc/hosts

root@lab-dns-01 [ ~ ]# echo '192.168.1.30 lab-vcsa-01.go-lab.jp' >> /etc/hosts

root@lab-dns-01 [ ~ ]# tail -n 2 /etc/hosts

192.168.1.20 base-esxi-01.go-lab.jp

192.168.1.30 lab-vcsa-01.go-lab.jp

 

dnsmasq を起動します。

root@lab-dns-01 [ ~ ]# systemctl start dnsmasq

root@lab-dns-01 [ ~ ]# systemctl is-active dnsmasq

active

root@lab-dns-01 [ ~ ]# systemctl enable dnsmasq

Created symlink /etc/systemd/system/multi-user.target.wants/dnsmasq.service → /lib/systemd/system/dnsmasq.service.

 

hosts ファイルを編集した場合は、dnsmasq サービスを再起動しておきます。

root@lab-dns-01 [ ~ ]# systemctl restart dnsmasq

 

iptables で、DNS のポートを開放しておきます。

iptables-save コマンドを利用するかわりに、/etc/systemd/scripts/ip4save ファイルへの

「-A INPUT -p udp -m udp --dport 53 -j ACCEPT」直接追記でも、同様に iptables の設定を永続化できます。

root@lab-dns-01 [ ~ ]# iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT

root@lab-dns-01 [ ~ ]# iptables-save > /etc/systemd/scripts/ip4save

root@lab-dns-01 [ ~ ]# systemctl restart iptables

 

名前解決の確認。

別の Photon OS 3.0 に、bindutils をインストールします。

root@photon-machine [ ~ ]# tdnf install -y bindutils

 

bindutils には、nslookup や dig コマンドが含まれます。

root@photon-machine [ ~ ]# rpm -ql bindutils

/etc/named.conf

/usr/bin/dig

/usr/bin/host

/usr/bin/nslookup

/usr/lib/tmpfiles.d/named.conf

/usr/share/man/man1/dig.1.gz

/usr/share/man/man1/host.1.gz

/usr/share/man/man1/nslookup.1.gz

 

登録したレコードの名前解決ができることを確認します。

ここでは、「lab-vcsa-01.go-lab.jp」と「192.168.1.30」を正引き / 逆引きで確認してみます。

「192.168.1.15」は、dnsmasq をインストールした DNS サーバのアドレスです。

root@photon-machine [ ~ ]# nslookup lab-vcsa-01.go-lab.jp 192.168.1.15

Server:         192.168.1.15

Address:        192.168.1.15#53

 

Name:   lab-vcsa-01.go-lab.jp

Address: 192.168.1.30

 

root@photon-machine [ ~ ]# nslookup 192.168.1.30 192.168.1.15

30.1.168.192.in-addr.arpa       name = lab-vcsa-01.go-lab.jp.

 

 

これで、ラボなどで利用する DNS サーバが用意できます。

 

以上、Photon OS 3.0 を DNS サーバにしてみる話でした。