Skip to content

Instantly share code, notes, and snippets.

@oliverkurth
Last active May 3, 2022 11:03
Show Gist options
  • Save oliverkurth/9978946c99b0505f2dfa47eed616e6be to your computer and use it in GitHub Desktop.
Save oliverkurth/9978946c99b0505f2dfa47eed616e6be to your computer and use it in GitHub Desktop.
VMware ESXi on Raspberry Pi

downloads

update eeprom

Source: https://www.virtuallyghetto.com/2020/11/stateless-esxi-arm-with-raspberry-pi.html

PI_EEPROM_VERSION=pieeprom-2020-09-03
wget https://github.com/raspberrypi/rpi-eeprom/raw/master/firmware/beta/${PI_EEPROM_VERSION}.bin
sudo rpi-eeprom-config ${PI_EEPROM_VERSION}.bin > bootconf.txt
sed -i 's/BOOT_ORDER=.*/BOOT_ORDER=0xf241/g' bootconf.txt
sudo rpi-eeprom-config --out ${PI_EEPROM_VERSION}-netboot.bin --config bootconf.txt ${PI_EEPROM_VERSION}.bin
sudo rpi-eeprom-update -d -f ./${PI_EEPROM_VERSION}-netboot.bin

then reboot.

create UEFI sd card

  • use an sd card with FAT32, 4GB card will do.
  • (name of partition needs to be UEFI?)
  • copy all files from firmware-master.zip to root of first partition
  • copy all files from RPi4_UEFI_Firmware_v1.24.zip
  • remove all kernel* files

prepare tftboot server

Most guides use a USB thumb drive, but that wasn't working. TFTP worked fine, with a few hurdles.

Source: https://www.virtuallyghetto.com/2020/10/automated-network-scripted-installation-of-esxi-arm-without-sd-card.html (describes how to do the install with a ks server too, but we left that out here)

Using dnsmasq:

sudo mkdir /mnt/tmp
sudo mount -o loop ./VMware-VMvisor-Installer-7.0.0-17068872.aarch64.iso /mnt/tmp/
sudo mkdir -p /srv/tftpboot/
sudo mkdir -p /srv/tftpboot/rpi-uefi-1.20/
sudo cp -rf /mnt/tmp/ /srv/tftpboot/esxi-arm
sudo umount /mnt/tmp/
sudo vi /etc/dnsmasq.conf # see below
sudo systemctl restart dnsmasq

Relevant section in dnsmasq.conf:

enable-tftp
tftp-root=/srv/tftpboot
 
pxe-prompt="Booting PXE Client", 1
 
# ESXi AARCH64
dhcp-match=set:aarch64,60,PXEClient:Arch:00011:UNDI:003000
dhcp-boot=tag:aarch64,esxi-arm/efi/boot/bootaa64.efi
 
# rPI AARCH64
pxe-service=0,"Raspberry Pi Boot"

boot.cfg seems to be in the wrong place (revealed from dnsmasq logs: sudo journalctl -u dnsmasq), move and edit it:

sudo cp /srv/tftpboot/esxi-arm/boot.cfg  /srv/tftpboot/boot.cfg 
sudo vi /srv/tftpboot/boot.cfg # add prefix
sudo sed -i 's#/##g' /srv/tftpboot/boot.cfg

Should look like:

bootstate=0
title=Loading ESXi installer
timeout=5
prefix=esxi-arm
kernel=b.b00
kernelopt=runweasel cdromBoot
modules=jumpstrt.gz --- useropts.gz --- features.gz --- k.b00 --- procfs.b00 --- vmx.v00 --- vim.v00 --- tpm.v00 --- sb.v00 --- s.v00 --- ena.v00 --- bnxtnet.v00 --- bnxtroce.v00 --- brcmfcoe.v00 --- brcmnvme.v00 --- elxiscsi.v00 --- elxnet.v00 --- i40en.v00 --- i40iwn.v00 --- iavmd.v00 --- igbn.v00 --- iser.v00 --- ixgben.v00 --- lpfc.v00 --- lpnic.v00 --- lsi_mr3.v00 --- lsi_msgp.v00 --- lsi_msgp.v01 --- lsi_msgp.v02 --- mtip32xx.v00 --- ne1000.v00 --- nenic.v00 --- nfnic.v00 --- nhpsa.v00 --- nmlx4_co.v00 --- nmlx4_en.v00 --- nmlx4_rd.v00 --- nmlx5_co.v00 --- nmlx5_rd.v00 --- ntg3.v00 --- nvme_pci.v00 --- nvmerdma.v00 --- nvmxnet3.v00 --- nvmxnet3.v01 --- pvscsi.v00 --- qcnic.v00 --- qedentv.v00 --- qedrntv.v00 --- qfle3.v00 --- qfle3f.v00 --- qfle3i.v00 --- qflge.v00 --- rste.v00 --- sfvmk.v00 --- smartpqi.v00 --- vmkata.v00 --- vmkfcoe.v00 --- vmkusb.v00 --- vmw_ahci.v00 --- elx_esx_.v00 --- btldr.v00 --- esx_dvfi.v00 --- esx_ui.v00 --- esxupdt.v00 --- tpmesxup.v00 --- weaselin.v00 --- loadesx.v00 --- lsuv2_hp.v00 --- lsuv2_in.v00 --- lsuv2_ls.v00 --- lsuv2_nv.v00 --- lsuv2_oe.v00 --- lsuv2_oe.v01 --- lsuv2_oe.v02 --- lsuv2_sm.v00 --- native_m.v00 --- qlnative.v00 --- vmware_e.v00 --- vsan.v00 --- vsanheal.v00 --- vsanmgmt.v00 --- tools.t00 --- imgdb.tgz --- imgpayld.tgz
build=7.0.0-1.0.17068872
updated=0

Final install

  • connect network and (large) USB drive to the Pi
  • boot with the prepared UEFI card
  • press esc when prompted to get into UEFI menu
  • disable 3GB limit, reboot
  • press esc when prompted to get into UEFI menu, then boot from TFTP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment