I prefer PXELINUX’s menu system and config, though the TFTP installs can be slow because of using TFTP vs HTTP. We can get the best of both worlds by chainloading iPXE (which supports HTTP) from PXELINUX.
First, download the iPXE kernel to your tftproot
$ wget http://boot.ipxe.org/ipxe.lkrn
Next, place what will be the iPXE config file (or menu) on a local HTTP server
#!ipxe # defaults set boot-url http://192.168.88.82/tftproot set menu-timeout 60000 set submenu-timeout ${menu-timeout} isset ${menu-default} || set menu-default exit :start menu iPXE ${version} Boot Menu (ip ${net0/ip}, mac ${net0/mac}) item --gap -- ------------------------- Installers ------------------------------------- item centos7 Install CentOS 7 x86-64 item ubuntu1604 Install Ubuntu 16.04 LTS amd64 (Xenial Xerus) item ubuntu1804 Install Ubuntu 18.04 LTS amd64 (Bionic Beaver) item --gap -- ------------------------- Advanced Options ------------------------------- item shell Drop to iPXE shell item reboot Reboot computer choose --timeout ${menu-timeout} --default ${menu-default} selected || goto cancel set menu-timeout 0 goto ${selected} :cancel echo You cancelled the menu, dropping you to a shell :shell echo Type 'exit' to get the back to the menu shell set menu-timeout 0 set submenu-timeout 0 goto start :failed echo Booting failed, dropping to shell goto shell :reboot reboot :exit exit :centos7 echo Starting CentOS 7 installer set base-url ${boot-url}/pxelinux.cfg/installer/centos-7/repo kernel ${base-url}/isolinux/vmlinuz ksdevice= inst.repo=${base-url}/ initrd ${base-url}/isolinux/initrd.img boot || goto failed goto start :ubuntu1604 echo Starting Ubuntu 16.04 installer set base-url ${boot-url}/pxelinux.cfg/installer/ubuntu-16.04/amd64 kernel ${base-url}/linux vga=768 initrd ${base-url}/initrd.gz boot || goto failed goto start :ubuntu1804 echo Starting Ubuntu 18.04 installer set base-url ${boot-url}/pxelinux.cfg/installer/ubuntu-18.04/amd64 kernel ${base-url}/linux vga=768 initrd ${base-url}/initrd.gz boot || goto failed goto start
Finally, we configure a PXELINUX menu item for chainloading iPXE
LABEL - MENU LABEL Load iPXE (for faster HTTP installs) KERNEL ipxe.lkrn APPEND dhcp && chain http://192.168.88.82/tftproot/ipxeboot.pxe