[VMware] Kickstart を使用した ESXi の自動インストール

今回は Kickstart を使用して ESXi の自動インストールを行います。

なお、今回は以下記事の続きで同じ環境を使用して、PXE ブート + Kickstart の実行を行います。

・iPXE + PXE ブート環境 が既に構築済み (dnsmasq + httpd + ipxe.efi + menu.ipxe)
・Kickstart 用の ks.cfg を HTTP で取得し、インストールを自動化
・Nested ESXi 8.0 (UEFI PXE) のインストールが完了し、ネットワーク設定や SSH の
 有効化などの初期設定を済ませた状態を作る

<大まかな処理の流れ>
1. PXE ブート → iPXE → menu.ipxe
  -> ネットワーク経由で iPXE が起動し、メニュー (menu.ipxe) が表示される。
2. ESXi ローダー (bootx64.efi) の読み込み
  -> 選択した ESXi のローダー (bootx64.efi) がロードされ、起動に必要な boot.cfg
    が読み込まれる。
3. Kickstart スクリプト (ks.cfg) の読み込み・自動インストール
  -> boot.cfg に指定されたカーネルオプション (kernelopt=) により、ESXi の
   起動過程で ks.cfg を取得し、自動インストールが実行される。

# ks.cfg

# ライセンスに同意
vmaccepteula

# root パスワード (プレーンテキスト (暗号化も可))
rootpw "VMware1!"

# インストール先指定: --firstdisk は最初のディスクを使用
# --overwritevmfs は既存のVMFSがあっても上書きする
install --firstdisk --overwritevmfs

# キーボードタイプ
keyboard Japanese

# DHCP の場合
network --bootproto=dhcp --device=vmnic0

# インストール後、自動で再起動
reboot

# %firstboot セクション: インストール完了直後に実行するスクリプト (BusyBox)
%firstboot --interpreter=busybox

# SSH 有効化
vim-cmd hostsvc/enable_ssh
vim-cmd hostsvc/start_ssh

# Shell 有効化
vim-cmd hostsvc/enable_esx_shell
vim-cmd hostsvc/start_esx_shell

# DNS サフィックスの追加
esxcli network ip dns search add --domain home.com

スクリプトの内容については、以下の公式ドキュメントを参考にして下さい。

Kickstart スクリプト ks.cfg を配布するために、HTTP サーバー上にファイルを配置します。
今回は httpd を使用し、/var/www/html/ks ディレクトリを作成してスクリプトを格納します。

mkdir -p /var/www/html/ks
vi /var/www/html/ks/ks.cfg

/var/www/html/esxi80u3/boot.cfg を例に修正

ESXi ローダーが起動する際に読み込む boot.cfg に、Kickstart スクリプトのパス
(ks=http://…) をカーネルオプションとして追記する必要があります。

そのため、boot.cfg の kernelopt= 行に ks=http://192.168.1.70/ks/ks.cfg を追記
します。

bootstate=0
title=Loading ESXi installer
timeout=5
prefix=http://192.168.1.70/esxi80u3/
kernel=b.b00
kernelopt=runweasel cdromBoot ks=http://192.168.1.70/ks/ks.cfg
modules=jumpstrt.gz --- useropts.gz --- features.gz --- k.b00 ............
build=8.0.3-0.0.24022510
updated=0

複数バージョンの boot.cfg を一括修正する方法

iPXE 環境で複数バージョンの ESXi を同居させている場合、ディレクトリごとに存在する
boot.cfg をすべて手動で修正するのは面倒です。
今回の環境では複数バージョン ESXi を用意しているため以下のような構造となっています。

/var/www/html
├── esxi80ga
│   ├── boot.cfg
│   └── ...
├── esxi80u1
│   ├── boot.cfg
│   └── ...
├── esxi80u2
│   ├── boot.cfg
│   └── ...
└── esxi80u3
    ├── boot.cfg
    └── ...

上記構造においては、以下コマンドを実行することで一括で変更することが可能です。

cd /var/www/html

# esxi80u3/esxi80u2/esxi80u2/esxi80ga ディレクトリ配下の boot.cfg に追記
for d in esxi80u3 esxi80u2 esxi80u2 esxi80ga; do
  sed -i '/^kernelopt=/ s/$/ ks=http:\/\/192.168.1.70\/ks\/ks.cfg/' "$d/boot.cfg"
done

PXE ブート実行後に Kickstart スクリプトが読み込まれてる様子が確認できます。

警告メッセージが出たとしても、放っておけば勝手に進んでくれます。

以下のメッセージが表示されるが、勝手に再起動もしてくれます。
(特に Enter 押さなくても良い)

再起動後、スクリプトの記載した設定が反映されていれば OK です。

タイトルとURLをコピーしました