DeskMini A300にESXi6.7.0をインストールする

#はじめに
自宅vSphere環境にESXiホストを増設するついでに、せっかくなのでDeskMiniとESXiというニッチな組み合わせを紹介しようと思い書きました。
普通のWindowsPCとして使ってよし、FreeNASとか入れてNASを構築するもよし、仮想基盤に使ってよし。
一家に一台DeskMini！

本記事ではASRockから販売されているベアボーンキットDeskMini A300にVMware ESXiをインストールしてハイパーバイザ型の仮想基盤を構築することを目的とします。
DeskMini A300向けのカスタムISO作成をメインとし、Webクライアント画面へアクセス可能な状態にするところまでを取り扱います。
自宅で省スペースなESXiホストが欲しい人やDeskMiniでESXiを動かそうとしている人の参考になれば幸いです。
※本記事で構築するハードウェア環境はASRockとVMware、どちらも公式にサポートされていない環境になる点はご了承ください。

#目次
- DeskMini A300について/HW構成
- インストールメディア作成
    - 前提環境/使用ファイル
    - カスタムISOイメージ作成
    - 【補足】オフラインバンドルを入手せずにカスタムISOイメージを作成する方法
- インストール
- (おまけ)USB NIC用ドライバの組み込み
- まとめ

#DeskMini A300について/HW構成
DeskMini A300は小型PCのベアボーンキットで、小型でありながら通常のデスクトップ用CPUを搭載することが可能です。
現在Intel製のCPUに対応したDeskMini 310とAMD製のAPU(CPU)に対応したDeskMini A300が販売されています。

Intel製CPUを使用するとなるとIntel NUCの方がより小型であるため、DeskMiniを使用する利点が少ない点と、
搭載可能なCPUのコア/スレッド数と価格を考慮した場合、AMD製のAPUの方がコストパフォーマンスに優れる点から、
今回はDeskMini A300とRyzen 5 3400Gの組み合わせで構築します。
メモリ・ストレージ等の時価にもよりますが、新品で調達する場合の価格はトータルで約5万円前後です。
以下、今回ESXiホストとして構築するハードウェアの情報

ケース・M/B:ASRock DeskMini A300 (UEFI Ver:P3.50)[^1]
CPU:AMD Ryzen 5 3400G (4C/8T)
RAM:DDR4-2933 8GB (8GB*1)
2.5インチSSD:256GB

[^1]: Ryzen 5 3400G等のRyzen 5 3000番台を使用する場合、UEFIのVerがP3.50以上でないと認識しない点に注意。

#インストールメディア作成

通常のインストールメディア作成の場合、VMwareのサイトからESXi 6.7.0のISOイメージをダウンロード後にDVD-Rに焼くなどしてインストールを行いますが、
そのままDeskMini A300へインストールしようとすると以下のようにDeskMini A300のオンボードNIC(Realtek RTL8111H)が認識されずインストールが進みません。
そのため、ISOファイルにNICのドライバを組み込んだうえでメディアに焼く必要があります。

![20200104_5_掲載サイズ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561546/eb254cd0-eab4-cda3-623b-ede7bc870baf.jpeg)

###前提環境/使用ツール

大元になるESXiのオフラインバンドル版を[VMwareのサイト](https://my.vmware.com/ja/group/vmware/patch#search)からダウンロード。
任意の作業ディレクトリに配置しておきます。(ファイル例:ESXi670-201911001.zip)
 #VMwareアカウント必須

カスタムISOイメージを作成するため[ESXi-Customizer-PS](https://www.v-front.de/p/esxi-customizer-ps.html)を使用します。[^2]
リンク先サイトの[Download]より「ESXi-Customizer-PS-v2.6.0.ps1」をダウンロードして任意の作業ディレクトリに配置しておきます。

また、「ESXi-Customizer-PS」の動作要件としてVMware PowerCLIの導入が必須です。
PowerCLIはwindows PowerShellから以下のコマンドを実行することで導入できます。

`Install-Module -Name VMware.PowerCLI`

[^2]: [vSphere ESXi Image Builder](https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.install.doc/GUID-C84C5113-3111-4A27-9096-D61EED29EF45.html)を利用してカスタムISOを作ることも可能。

###カスタムISOイメージ作成

以下のコマンドを実行します。
 #cdコマンドで指定しているパスはESXi-Customizer-PS-v2.6.0.ps1を配置した作業ディレクトリ

`cd E:\ESXi-Custom`
`.\ESXi-Customizer-PS-v2.6.0.ps1 -izip .\ESXi670-201911001.zip -vft -load net55-r8168`

PowerShellのセキュリティポリシー設定によって実行時にエラーになる場合、以下のコマンドでセキュリティポリシーを変更してください。
`Set-ExecutionPolicy Unrestricted`

問題なく[All done.]の表示が出ていれば作業ディレクトリ内に
『ESXi-6.7.0-20191104001-standard-customized.iso』のような名前でカスタムISOイメージが出力されています。
出力されたISOイメージをDVD-Rに焼く等してインストールメディアを作成します。

(補足)
パラメーターとして`-vft -load net55-r8168`を指定することで、
[V-Front Online Depot](https://vibsdepot.v-front.de/wiki/index.php/Welcome)からRealtek RTL8111Hに対応したドライバを自動的に組み込んでいます。
`net55-r8168`の部分を他のドライバに変更したり","で区切って組み込むドライバセットを複数指定することも可能です。
指定可能な他のパラメーターはESXi-Customizer-PSのサイトを参照。

以下実行時の例

```実行結果
PS C:\WINDOWS\system32> cd E:\ESXi-Custom
PS E:\ESXi-Custom>
PS E:\ESXi-Custom> .\ESXi-Customizer-PS-v2.6.0.ps1 -izip .\ESXi670-201911001.zip -vft -load net55-r8168
This is ESXi-Customizer-PS Version 2.6.0 (visit https://ESXi-Customizer-PS.v-front.de for more information!)
(Call with -help for instructions)

Logging to C:\Users\[ユーザー名]\AppData\Local\Temp\ESXi-Customizer-PS-13752.log ...

Running with PowerShell version 5.1 and VMware PowerCLI version 11.5.0.14899560

Adding base Offline bundle .\ESXi670-201911001.zip ... [OK]

Connecting the V-Front Online depot ... [OK]

Getting Imageprofiles, please wait ... [OK]

Using Imageprofile ESXi-6.7.0-20191104001-standard ...
(dated 11/06/2019 07:26:28, AcceptanceLevel: PartnerSupported,
Updates ESXi 6.7 Image Profile-ESXi-6.7.0-20191103001-standard)

Load additional VIBs from Online depots ...
   Add VIB net55-r8168 8.045a-napi [New AcceptanceLevel: CommunitySupported] [OK, added]

Exporting the Imageprofile to 'E:\ESXi-Custom\ESXi-6.7.0-20191104001-standard-customized.iso'. Please be patient ...

All done.

PS E:\ESXi-Custom>
PS E:\ESXi-Custom> ls
    ディレクトリ: E:\ESXi-Custom
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2020/01/07     21:59      329449472 ESXi-6.7.0-20191104001-standard-customized.iso
-a----       2018/10/25     15:26          21003 ESXi-Customizer-PS-v2.6.0.ps1
-a----       2020/01/07     20:31      317659686 ESXi670-201911001.zip

PS E:\ESXi-Custom>
```


###【補足】オフラインバンドル版を入手せずにカスタムISOイメージを作成する方法
以下のコマンド実行でオフラインバンドル版をダウンロードすることなく自動でESXi 6.7.0の最新版からカスタムISOイメージ作成してくれますが、
環境によっては"[WinError 10054]????????????"なるエラーが発生し正常に作成されません。
今回は手順として再現性があることと、任意のビルドのESXiで作成できることから、
自分でオフラインバンドル版をダウンロードする手法を採用しています。

`[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12 ` [^3]
`cd E:\ESXi-Custom`
`.\ESXi-Customizer-PS-v2.6.0.ps1 -v67 -vft -load net55-r8168` [^4]

[^3]: TLS1.2の有効化。これを実行しないとISOイメージ作成中にエラーが発生し正常に作成されない。
 参考:https://blog.hitsujin.jp/entry/2018/09/20/214222
 筆者の環境の場合同コマンドを実行した場合でもエラーになる。
[^4]: `.\ESXi-Customizer-PS-v2.6.0.ps1 -vft -load net55-r8168`とした場合でも自動的に最新のESXiバージョンで作成されるが、 `-v67`で明示的にESXi 6.7.0を指定。

###インストール

作成したインストールメディアからBootしてインストールします。
NICのドライバを組み込んだので今度は問題なくインストールが進みます。
構築したい環境に合わせてIPアドレスやDNSなど設定してあげてください。

![2020010723154118.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561546/c6466fea-9e87-e666-8058-08077fe278d0.png)
![2020010723200891.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561546/1ca7b654-35a9-b22e-1de5-4c2026a952b0.png)
![2020010723270140.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561546/1177bc0d-a54a-09e7-9f52-dd53e31a8a24.png)
![20200107_6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561546/69a51caa-6e09-66cd-3167-fc44c4ce1ef9.jpeg)

3枚目のDCUIのスクリーンショットからもわかる通り、RAM8GBの構成にもかかわらず約5.9GBとしか認識されていません。
この構成の他にRyzen 5 2400G + RAM32GBのホストも稼働していますが、こちらも約30GBとしか認識されていません。
しかし、Core i3 8100 + RAM16GBのホストはちゃんと約16GB認識されるためCPUベンダーに依存した問題かもしれません。
色々調査はしましたが諸々サポートされていない環境なのでこの問題については諦めています。
 #回避策あれば教えてください！

**ESXi 6.7.0のカスタムISOの作成及びインストールについては以上となります。**

#(おまけ)USB接続LANアダプターの使用について

DeskMiniを利用したESXiホストでNWに有線接続する場合、オンボードNICのポート1個しかありません。
また小型である代わりにMini-ITX規格以上のマザーボードにあるようなNICを増設できるPCIの拡張スロットがありません。
vSphere環境ではvMotionやiSCSIでのデータストア接続をする場合、それぞれNICを分けることをベストプラクティスとして推奨しています。
DeskMiniでこれを実現するために、USB接続のLANアダプターを使用します。

[USB Network Native Driver for ESXi](https://flings.vmware.com/usb-network-native-driver-for-esxi)からUSB接続のLANアダプター用vibを入手できます。
適用方法などは配布サイトの[Instructions]ページを参照してください。

増設する際の注意点として、このドライバで動く製品と動かない製品があるという点です。
筆者はTP-Linkの『B00V4BGDKU』とBuffaloの『LUA4-U3-AGTE-BK』を購入して検証してみましたが、
『LUA4-U3-AGTE-BK』のみ動作を確認できました。他にも動くものがあるかもしれませんが、
今のところ『LUA4-U3-AGTE-BK』を各ESXiホストに2個ずつ追加して以下のような環境で
マネジメント用ポート、iSCSI用ポート、vMotion用ポートとしています。

![20200107_11.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561546/39c31626-9831-c28b-91a5-9e1e6ef55d33.jpeg)

#まとめ

- DeskMini A300を使用することで、安価に省スペースなESXiホストを構築可能。
- ノーマルのISOイメージではオンボードNIC(Realtek RTL8111H)のドライバがないためインストール不可。
- ESXi-Customizer-PSを使用してカスタムISOイメージを作成することでインストールが可能。
- ホストのNICが足りない場合はUSB接続のLANアダプターを使用して増設が可能。