It happened – someone on Twitter was trying to run ESXi-Arm in QEMU. Is this actually possible?
The answer is, of course, YES. But, there are a few details. ESXi-Arm is a hypervisor, and so it requires the virtualization or emulation layer to model EL2 privilege level. This means either running on a hypervisor and Arm CPU that supports nested virtualization, or simply emulating the Arm CPU with EL2 entirely. This post will focus on the later, in case you want to give ESXi-Arm a try, but all you’ve got is a standard PC…
DISCLAIMER: Running ESXi-Arm in QEMU is not a supported configuration. Because you’re emulating a full system, this will be very slow…much slower than with a $75 Raspberry Pi.
These instructions assume Linux, so YMMV. Also, I’m not going to delve into the arcane art of configuring bridged networking, as this is extremely OS distro specific.
Getting and building QEMU
- git clone https://github.com/qemu/qemu.git
- cd qemu
- git checkout 5ececc3a0b0086c6168e12f4d032809477b30fe5
- wget https://raw.githubusercontent.com/andreiw/andreiw-wip/master/qemu/esxi-arm/0001-Work-arounds-for-running-ESXi-Arm-at-EL2-without-TF-.patch
- git am 0001-Work-arounds-for-running-ESXi-Arm-at-EL2-without-TF-.patch
- [ install prerequisites that ./configure below will complain about, such as ninja-build ]
- ./configure –target-list=aarch64-softmmu
- make
Getting UEFI
- cd qemu
- wget https://github.com/andreiw/andreiw-wip/blob/master/qemu/esxi-arm/get_latest_uefi.sh
- chmod +x get_latest_uefi.sh
- ./get_latest_uefi.sh
Preparing for ESXi-Arm
- cd qemu
- wget https://github.com/andreiw/andreiw-wip/blob/master/qemu/esxi-arm/runme
- chmod +x runme
- build/qemu-img create -f qcow2 /path/to/disk.img 256G
- [ adjust runme to match DISK and ISO paths, configure tap0 for bridged networking to work ]
Some notes:
- ESXi-Arm supports USB mass storage, NVMe and SATA
- QEMU UEFI does not support booting from SATA
- QEMU UEFI does support USB
- ESXi-Arm has an issue with the QEMU xHCI (USB3) controller, use EHCI.
- ESXi-Arm needs 2 CPUs for the installer to allow installation.
- ESXi-Arm needs 4GiB RAM minimum.
Let’s install
- ./runme
- [ Connect VNC to localhost ]
- This is going to take some time…
- Installation is pretty mundane. Just pick the right disk…
- Wait forever… then press ENTER to reboot when prompted.
- System will reboot into ESXi. Booting will take a long time.
- Connect to ESXUI and run a VM. It’s pretty usable, but YMMV.