お首が長いのよお首が長いのよ

チラシの裏よりお届けするソフトウェアエンジニアとして成長したい人のためのブログ

2018-05-14

ESXi6.5 PXE boot and Kickstart install on UEFI boot.

ESXi6.5を大量構築する必要があったので、いや工数を削減する為に用意した環境のメモです。 (実際の現場では以下の様な手順とチェックシートを書き記して投げつけただけで作業は後輩にやらせた)

目指す環境

  • ESXi6.5をUEFIブート環境のマシンにインストールする。
  • いくつかあるNICのうち、1つをインストール用に使う。割り当てられたMACアドレスとクライアントを紐づけて、管理IPアドレスを採番する

前提条件

PXEサーバ

自動インストールを行うためには以下機能を持つサーバ(PXEサーバ)が必要。

OS情報

インストールする機能

  • DHCPサーバ(dhcpd)
  • TFTPサーバ(tftpd(xinetd))
  • WEBサーバ(httpd)

その他必要なもの

  • ESXi6.5のISOイメージ(カスタムバンドル版を利用する場合はそちらを用意する)

クライアント(ESXiのインストール対象)

確認事項は以下の通り

  • PXEBootが有効になっていること
  • 管理セグメントに接続するポートのMACアドレスを確認すること(ESXiのインストール時、物理マシンとホスト名を紐づける際に必要)

ネットワーク

PXEサーバとインストールするサーバに対して接続可能なネットワークが必要

処理フロー

enter image description here

  1. サーバの電源をONにすると、PXEbootによってDHCPクライアントが起動する
  2. DHCPサーバからIPアドレスとmboot.efiファイルが送信される。(mboot.efiファイルのパスはxinetd/tftp内に記載されたchrootディレクトリに従う。)
  3. PXEサーバは、PXEクライアントのMACアドレスに対応するboot.cfgファイルをmbboot.cfgファイルが格納されたディレクトリから探す。(/var/lib/tftpboot/images/ESXiv6.5/01-{MACアドレス}/boot.cfgというフォルダを探し、なければ /var/lib/tftpboot/images/ESXiv6.5/boot.cfgを探す)
  4. `boot.cfgファイルに記載されたクライアント固有のURLより、キックスタートファイルを読み込む
  5. キックスタートファイルに従ってESXiインストーラは自動でインストール及び設定を行い、完了する

PXEサーバ構成

  • WEBサーバ設定ファイル /etc/httpd/conf/httpd.conf > 基本はデフォルトのまま編集しない

  • TFTPサーバ設定ファイル /etc/tftp/tftpd.config

  • DHCPサーバ設定ファイル /etc/dhcp/dhcpd.conf

  • PXEインストール用関連ディレクトリ /var/lib/tftpboot/

  • ESXi6.5のイメージ /var/lib/tftpboot/images/ESXiv6.5/

  • PXE設定ファイル格納先 /var/lib/tftpboot/pxeboot.cfg/01-{クライアントのMACアドレス} ※クライアント毎に設定ファイルを作成する

  • bootファイル格納先 /var/lib/tftpboot/images/ESXiv6.5/01-{クライアントのMACアドレス}/boot.cfg

  • キックスタートファイル格納先ディレクトリ /var/www/html/01-{クライアントのMACアドレス}.cfg > httpdのデフォルトドキュメントルート内に格納する

PXEサーバ構築手順

パッケージのインストール

yum -y install httpd syslinux tftp-server tftp dhcp

TFTPサーバの設定

  1. 設定ファイルを編集する。

disable = yes から disable = no に変更する server_args の値は重要なので確認しておくこと。

 vi /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer 
#       protocol.  The tftp protocol is often used to boot diskless 
#       workstations, download configuration files to network-aware printers, 
#       and to start the installation process for some operating systems.
service tftp
{
      socket_type             = dgram
      protocol                = udp
      wait                    = yes
      user                    = root
      server                  = /usr/sbin/in.tftpd
      server_args             = -v -s /var/lib/tftpboot
      disable                 = no
      per_source              = 11
      cps                     = 100 2
      flags                   = IPv4
}
  1. tftpサーバをxinetd経由で起動させる。(再起動してリロード)

    systemctl restart xinetd

WEBサーバの設定

  1. ホスト名を変更する

    hostnamectl set-hostname {hostname}

  2. 設定ファイルを編集する

 vi /etc/httpd/conf/httpd.conf

ServerName {hostname}

#AddDefaultCharset UTF-8 ←コメントアウト
  1. サービスを再起動する

    systemctl restart httpd

###DHCPサーバの設定 ※予め払い出すIPアドレスのレンジを確認しておくこと。

  1. 設定ファイルの編集
  • option domain-name
  • subnetディレクティブ
  • rangeディレクティブ内のIPアドレスレンジ
  • routers デフォルトゲートウェイがある場合は記入
 vi /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
option domain-name "nuage2dev.local";
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
    range dynamic-bootp 192.168.0.100 192.168.0.128;
    option broadcast-address 192.168.0.255;
    option routers 192.168.0.1;
    option subnet-mask 255.255.255.0;
    filename    "images/ESXiv6.5/mboot.efi";  #後の手順で作成&配置
}

ESXiサーバイメージコピー

ESXiのisoメディアをOSにマウント

sudo mount -o ro -t iso9660 /dev/cdrom /mnt

メディアイメージの配置場所を作成

mkdir -p /var/lib/tftpboot/images/ESXiv6.5

メディアをコピー

cp -R /mnt/* /var/lib/tftpboot/images/ESXiv6.5

メディアをアンマウント

umount /dev/cdrom

ESXiサーバ イメージ設定

bootx64.efiファイルをESXiメディアイメージのルートディレクトリにコピー ※mboot.efiに名前を変更

cp /var/lib/tftpboot/images/ESXiv6.5/efi/boot/bootx64.efi /var/lib/tftpboot/images/ESXi6.5/mboot.efi

サーバ固有の設定 #### boot.cfgファイル配置用ディレクトリ作成

インストール対象ESXiサーバのMACアドレスを確認しておく。 MACアドレスに対応するディレクトリを作成する。 例えば、MACアドレスが aa:bb:cc:00:11:22だった場合、01-aa-bb-cc-00-11-22 と、頭に 01- を付加。

mkdir images/ESXiv6.5/01-aa-bb-cc-00-11-22

boot.cfgファイルの作成

作成したディレクトリ配下にboot.cfgファイルをコピー。

cp images/ESXiv6.5/efi/boot/boot.cfg images/ESXiv6.5/01-aa-bb-cc-00-11-22/boot.cfg

boot.cfgファイルは以下の様に編集。

vi images/ESXiv6.5/01-aa-bb-cc-00-11-22/boot.cfg
bootstate=0
title=Loading ESXi installer(for 01-00-50-56-a5-2e-e5) #タイトルにどのファイルから起動しているか記載してみた
timeout=5
kernel=tboot.b00
#kernelopt=runweasel コメントアsウト
kernelopt=ks=http://10.247.6.17/01-aa-bb-cc-00-11-22.cfg #キックスタートファイルの場所(今回は自分がhttpサーバなので自ホストのIPアドレスを記載 
modules=b.b00 --- #***省略***
build=
updated=0

キックスタートファイルの作成

httpサーバの公開ディレクトリ内にキックスタートファイルを指定したので、ファイルを作成する。

vi /var/www/html/.cfg
vmaccepteula  # EULAの承諾
install --firstdisk --overwritevmfs #インストールディスクの指定(最初に見つかったディスク)
rootpw password #rootパスワードの指定
keyboard Japanese #キーボードマップの設定

network --bootproto=static --ip=192.168.0.10 --gateway=192.168.0.1 --nameserver=8.8.8.8 --netmask=255.255.255.0 --hostname=testserver --addvmportgroup=1 --vlanid=0 #ネットワーク設定。値は適宜変更してください

reboot

%firstboot --interpreter=busybox

vim-cmd hostsvc/enable_ssh #ssh有効
vim-cmd hostsvc/start_ssh #sshdサーバの開始
vim-cmd hostsvc/enable_esx_shell #ESXiシェルの有効化
vim-cmd hostsvc/start_esx_shell #ESXiシェルの開始
esxcli system module parameters set -m tcpip4 -p ipv6=0 

reboot

上記で構築は完了です。 ノードを起動して、PXEboot & kickstartが完了する事を確認してください。

/以上

よかったらシェアしてください!