Short answer: an ESX PXE boot server that netboots the ESX 9 installer needs three things on one Linux box: a DHCP answer that names the boot file (proxyDHCP next to your existing server, or dnsmasq as the authoritative server), mboot.efi plus crypto64.efi and a boot.cfg served over TFTP or HTTP, and the installer modules plus kickstarts over HTTP. This generator builds the whole box: a one-shot install.sh that copies your ESX ISO, derives boot.cfg with the documented edits, writes per-host kickstarts selected by MAC (01-<mac>/boot.cfg), configures nginx or Apache and dnsmasq, and installs a vcf-boot host manager with a status dashboard. Everything is generated in your browser; the ESX root password never leaves your boot server, which stores only a SHA-512 hash.
Prefer a full window? Open the generator full screen →
The ESX PXE boot server chain it builds
- The host firmware sends a DHCP request with its client architecture (option 93): 7 or 9 for x86-64 UEFI PXE, 16 for UEFI HTTP boot.
- dnsmasq (proxyDHCP or full DHCP), your ISC dhcpd or Windows DHCP answers with the boot file:
mboot.efiover TFTP, anhttp://URL for UEFI HTTP boot, orsnponly.efifor the iPXE chainload. mboot.efilooks for01-<mac-with-dashes>/boot.cfgnext to itself and falls back to the defaultboot.cfg.boot.cfgcarriesprefix=(the installer directory, relative to the TFTP root or an HTTP URL) andkernelopt=runweasel ks=http://.../ks-<host>.cfg.- The kickstart installs ESX on the chosen disk without a local VMFS, sets the static management IP, hostname, DNS and VLAN, then
%firstbootadds the DNS search domain, NTP, SSH and the ESXi Shell for VCF commissioning.
What the generated files do
| File | Purpose |
|---|---|
| install.sh | Idempotent installer: packages, loop-mounts and copies the ISO, extracts mboot.efi and crypto64.efi, derives boot.cfg from the ISO (prefix, no leading slashes, no cdromBoot, ks=), writes the kickstart template and host list, installs vcf-boot, the web vhost, dnsmasq, firewall rules and the dashboard timer. |
| dnsmasq.conf / dhcp-options.txt | proxyDHCP or authoritative DHCP with architecture tags, or ISC dhcpd class blocks and Windows DHCP PowerShell for an existing server. |
| ks-template.cfg, ks.cfg, ks-<host>.cfg | Per-host static kickstarts and a DHCP default; the root password is filled in on the server from a hash. |
| vcf-boot.sh | Host manager: vcf-boot add esx05 00:50:56:aa:bb:05 10.10.60.15 writes the kickstart, the 01-MAC boot.cfg and (full DHCP) a fixed lease; status shows planned, booted, kickstart fetched, management IP answers; the dashboard refreshes every minute. |
| verify.sh | Services, ports, the files mboot.efi needs, boot.cfg edits, TFTP and HTTP fetches as a host would do them, DNS records per host. |
| prep.sh | Offline mode: builds deps.tar.gz on an internet-connected box with the same OS. |
Three things that bite
- Secure Boot off during install. With UEFI Secure Boot enabled, ESX does not run the unsigned
%firstbootsection, so NTP, SSH and the DNS search domain would be missing. Install with Secure Boot disabled, finish the VCF bring-up, then enable it. - crypto64.efi next to mboot.efi. Since ESXi 7.0 U3 the loader needs
efi/boot/crypto64.efifrom the ISO in the same directory; install.sh copies it and verify.sh checks it. - Legacy BIOS is for ESXi 8.x only. ESXi 8.0 dropped BIOS support for new platforms and ESX 9 hosts boot UEFI (Broadcom KB 313152). The BIOS option exists for mixed labs and needs SYSLINUX 3.86, because the mboot.c32 on the ISO does not work with newer SYSLINUX.
Sources
- Broadcom TechDocs: Boot the ESX Installer by Using PXE and TFTP and by Using iPXE and HTTP (ESX 9.0)
- Broadcom TechDocs: Boot the ESXi Installer by Using Native UEFI HTTP and Sample DHCP Configurations (vSphere 8.0)
- Broadcom TechDocs: About the Default ks.cfg Installation Script (ESX 9.0) and the installation script command reference
- Broadcom KB 313152: Deprecation of legacy BIOS support in vSphere