PXE Configuration

Refer to PXE-Linux-Boot-Server on how to set up a PXE server before continuing.

Create a directory in your tftproot to store the pxelinux files and copy some files.

mkdir -p /tftproot/vmware/pxelinux.cfg
cp /usr/share/syslinux/pxechn.c32 /tftproot/vmware/

This needs to be added to /tftproot/pxelinux.cfg/default for an entry to show up on your main boot screen.

LABEL vmwareesxi
	MENU LABEL ^VMWare ESXi
	COM32 /vmware/pxechn.c32
	APPEND /vmware/pxelinux.0 -p /vmware/

For whatever reason, you can’t network boot VMWare ESXi with newer versions of SYSLINUX. You need an older version and chain load it. This is what the COM32 line does for you. You can download an older version of the pxelinux files here. Put all the files in your /tftproot/vmware directory. I have no idea what version of SYSLINUX it is, but it works. Just add that to your vmware directory.

Next, create the menu loaded by the second menu screen in /vmware/pxelinux.cfg/default

display menu
UI menu.c32
PROMPT 0
MENU TITLE PXE SERVER
TIMEOUT 150
TOTALTIMEOUT 900

LABEL esxi70
	MENU LABEL ^VMWare ESXi 7.0
	KERNEL esxi70/mboot.c32
	APPEND -c esxi70/boot.cfg
	IPAPPEND 2

ESXi Files

Create the destination directory.

mkdir /tftproot/vmware/esxi70

Create a temporary directory, mount the ESXi ISO on it, copy the files over, and clean up. You will have to obtain the ISO from VMware. It should be free, you just have to create an account first. https://www.vmware.com/go/get-free-esxi

mkdir vmtemp
mount VMware-VMvisor-Installer-7.0.0-15843807.x86_64.iso vmtemp
cp -r vmtemp/* esxi70/
umount vmtemp
rm -rf vmtemp

Modify the prefix= line in /tftproot/vmware/esxi70/boot.cfg file to read.

prefix=esxi70

Remove all the slashes from the file.

sed -i 's/\///g' /tftproot/vmware/esxi70/boot.cfg

References

  1. https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.esxi.upgrade.doc/GUID-2F0D4696-3681-4C13-9552-5280C6406376.html
  2. https://communities.vmware.com/thread/512714