目次
数年前の VMworld で参考展示がされていた ESXi on ARM ですが、Flings からついに ESXi Arm Edition としてリリースされました。
現段階ではバージョンは 7.0.0(ビルド 16966451)で、機能上は 7.0 の GA 版準拠のようです。
Supported ESXi-Arm Hardware として Raspberry Pi 4 Model B も挙げられていて、家に 4 GB の子が遊んでいた ので、入れてみました。
期待以上に素直に動きましたが、vCLS のエージェント VM が ARM だと動かないため、vCenter Server のバージョンが 7.0 update 1 の場合はクラスタに入れられなくなる(入れられはするがエラーが出続ける)点には注意が必要です。
必要なモノ
インストールの過程を含めて、以下が必要です。
- Raspberry Pi 4 本体(メモリは 4 GB または 8 GB のみサポート)
- SD カード(UEFI ブート用)
- USB ストレージまたは iSCSI の LUN(ESXi のインストール先)
- USB メモリ(ESXi のインストーラの ISO を書き込んだもの。インストール作業にのみ必要)
最終的には、SD カード中の UEFI ファームウェアを使ってブートシーケンスが開始されるものの、ESXi そのものは USB ストレージか iSCSI の LUN からブートする ようになります。
つまり、SD カードだけでなく、何らかの形で外部ストレージが必要ということですね。今回は、余っていた SSD を USB で接続して使っています。
また、インストール時のみ、インストーラの ISO を起動させるための USB メモリが必要です。インストーラの画面はシリアルコンソールでも取れるようですが、HDMI で素直にディスプレイをつなぐほうがシンプルですね。
手順
大まかな流れ
Flings の ESXi Arm Edition のページ で詳細なドキュメントがダウンロードできるので、基本はそちらに従います。

大まかには、以下の流れです。
- Raspberry Pi 4 の EEPROM の最新化
- SD カードの UEFI ブート用のセットアップ
- UEFI ファームウェアの設定
- インストーラの USB メモリへの書き込み
- インストーラの起動とインストール
Raspberry Pi 4 の EEPROM の最新化
Raspberry Pi Imager を使って、Raspberry Pi OS を SD カードに書き込み、

その SD カードでブートして、適当に初期設定をしてネットワークにつながるようにしたら、EEPROM のアップデートを確認します。
$ sudo rpi-eeprom-update

OS 起動直後の初期セットアップウィザードの中でネットワーク設定とアップデートを実行した場合は、その段階で最新化されるようです。ネットワークを後から設定した場合など、最新化されていなければ、手動でアップデートをします。
$ sudo rpi-eeprom-update -a
$ sudo reboot
最新化されたら、シャットダウンします。一瞬でしたが、ここまでで Raspberry Pi OS の出番は終了です。
$ sudo shutdown -h now
SD カードの UEFI ブート用のセットアップ
SD カードを FAT32
でフォーマットして、次のモノを突っ込みます。
- Raspberry Pi Firmware
master
ブランチを丸ごと ZIP でダウンロード して- 解凍した
boot
フォルダ内の、kernel*.img
以外 のすべてのファイルとフォルダを - SD カードの直下にコピー
- Raspberry Pi 4 UEFI Firmware
v1.20
をダウンロード して- 解凍したすべてのファイルとフォルダを
- SD カードの直下にコピー(同名ファイルは 上書き)
さらに、使う RPi 4 のメモリが 4 GB の場合は、SD カード直下の config.txt
に次の一行を追記します。
gpu_mem=16
最終的にこんな感じになります。この例では、U:\
が SD カードです。

UEFI ファームウェアの設定
できた SD カードで Raspberry Pi を起動し、Raspberry Pi のロゴが出たら ESC
キーで UEFI の設定画面に入ります。


UEFI の設定画面が出たら、[Device Manager]
> [Raspberry Pi Configuration]
> [Advanced Configuration]
> [Limit RAM to 3GB]
を [Disabled]
に設定し、F10
で保存します。
最低限はこれだけですが、これ以外にも、画面の解像度を変えたい場合や、シリアルコンソールを使う場合などは追加で設定が必要です。ガイドに書いてあるので適宜参照して修正します。
終わったら、ESC で最初の画面まで戻り、[Continue] して Enter
キーで設定を確定します。
インストーラの USB メモリへの書き込み
インストーラを用意します。Etcher でも Rufus でもお好みのモノで ESXi Arm Edition の ISO ファイルを USB メモリに書き込むだけです。

インストーラの起動とインストール
インストーラを書き込んだ USB メモリと、インストール先になる USB ストレージを Raspberry Pi に接続します。
起動させたら、Raspberry Pi のロゴ画面で ESC
を押下して、再度 UEFI の設定画面に入ります。デフォルトのブートオーダでは、USB デバイスの優先順位は最下位なので、この段階で修正します(ガイドだと後回しですが……)。
[Boot Maintenance Manager]
> [Boot Order]
で、第一位をインストーラの USB メモリ、第二位をインストール先の USB ストレージにして Commit Changes and Exit
で保存し、ESC
で画面を戻って [Continue] から再起動します。
今回は、ESXi のインストーラが起動してきたら、Shift + O
を押下して、autoPartitionOSDataSize=8192
を起動オプションに追記しました。

これは、なるべく USB ストレージ内に作れるデータストアのサイズを大きくしたいからです。説明は割愛しますが、ESXi のインストール先のストレージに作成されるパーティションのレイアウトが 7.0 から大きく変わっており、デフォルトではストレージのサイズ次第では最大で 138 GB が ESXi 用に取られる設計になっています(つまり、データストアサイズはその残り)。
関連ドキュメントは以下あたりです。
今回は家で余っていた 240 GB の SSD にインストールしようとしており、そうするとローカルデータストアのサイズがけっこうちんまりしてしまうので、先述のオプションを足すことにしました。
このあとは、普通の ESXi のインストールと同じです。


完了後、インストーラの USB メモリを抜いて再起動すれば、素直に ESXi が上がってきます。通常通りネットワークやホスト名などを設定して、完成です。

観察
Host Client につないでみます。

ちゃんと Raspberry Pi だし、ARM ですね。4 GB の子に突っ込んだので、空きメモリが 2.8 GB と大変心もとない感じになっていますが……。
vCenter Server にも登録できました。時刻がズレすぎていると証明書のいろいろで失敗することがある(Unable to push signed certificate to host なエラーが出る)ので、そこだけ登録前に Host Client で直したほうがよさそうです。

なお、vCenter Server のバージョンが 7.0 update 1 の場合、現時点ではホストクラスタには追加しない ほうが良さそうです。7.0 update 1 からホストクラスタ内のホストに自動で vCLS のエージェント VM がデプロイされますが、これが ARM に対応していない ためです。
実際、ホストクラスタに ARM な ESXi を追加すると、vCLS が存在しないエラーが上がり続け、内部的にデプロイし続けるからか、ファイルの削除タスクが繰り返される 状態になります。

仮想マシンの動作
仮想マシンも、スペックが許す範囲で通常通り動作します。注意点は、
- ゲスト OS も ARM 版を入れる必要がある点
- VMware Tools(Open VM Tools)に ARM 版がない場合はソースコードからのコンパイルが必要になる点
あたりです。
なお、VMware Tools は、Photon OS の 3.0 であればリポジトリから降ってくるモノが ARM でも動作するようで、普通に tdnf install open-vm-tools
するだけでよいようです(ただし systemd
が古い場合は最新化しないと設定をいじる必要あり)。
というわけで素の Photon を入れて tdnf
で Open VM Tools を入れたところ、すんなりうごきました。

シリアルコンソール
GND
と TXD
(GPIO14
)と RXD
(GPIO15
)をつなぐと DCUI がシリアルで取れます。ターミナル側は 115200
の 8N1
です。

ルックアンドフィールはほぼそのままです。おなじみの画面ではありますが、シリアルで触れることそれ自体がなかなか新鮮でおもしろいですね。


ESXi Shell も Troubleshooting Options から有効化すると取れますが、切り替えはいつもの Alt + F1
や Alt + F2
ではなく、Ctrl + G > Ctrl + B > 3
や Ctrl + G > Ctrl + B > 2 > Enter
など、専用の操作が必要なようです。ガイドに記載があります。

まとめ
今回は Raspberry Pi というミニマムなモノに載せましたが、RPi で動くというより、本質的には ARM アーキテクチャで動作することそれ自体 がキモなわけです。
現時点では Flings でのリリースなので本番利用ができるものではありませんが、最近では Ampere eMAG をはじめサーバ向けのプロセッサでも ARM は盛り上がってきているようですし、ESXi Arm Edition のサポートハードウェア でもサーバ製品は挙げられており、将来的な用途の拡大は充分に見込めそうですね。
商用目的でなくても、すでに Raspberry Pi 上の ESXi を 2 ノードの vSAN クラスタの Witness ノード として使う例 や オートメーション用の環境として使う例 も見られ、NUC よりもさらに手軽なラボ環境としていろいろな可能性がありそうです。
あるいは、将来的に vCLS の役割が増えて、かつそれが ARM でも動くようになれば、vSphere で必要なエージェント類を動作させる廉価なプラットフォームとして使えるようになる可能性もありますし、高可用性の担保が難しかった IoT のエッジ環境でも vSphere HA などでの可用性向上が見込めるのかもしれません。
そんな感じです。