IntroductionInstalling ESXi on multiple hosts at the same time over the network is achieved through PXE booting. Unfortunately many of the guides I found online take a long route to setup PXE booting on Linux and install multiple programs, each with its own config file which complicates the matter.
I chose to use DNSmasq because it provides DHCP, DNS, PXE & TFTP services all in one program. In addition, thanks to Simon, he added a feature where you could assign IPs sequentially rather than based on the Mac address. Read here for details.
This mini-guide assumes the use of Linux. If you're a Windows user, I suggest you use 3C Daemon tool from 3Com which offers DHCP, FTP, TFTP & PXE services for Windows.
I have setup a virtual machine dedicated to PXE booting & installation to make it portable & share it with others. Feel free to run your tests on a VM or a physical box.
- Linux OS. My choice was Debian.
- VMware ESXi Hypervisor ISO file.
- Internet connection.
- pxelinux.0 file from syslinux version 3.
- Chocolate chip cookies. mmmmm.
Installation & Configuration0] Install the operating system (Debian) and setup a static IP on the NIC.
1] Edit the file: /etc/network/interfaces -- My editor of choice is nano.
auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet static address 10.172.0.250 netmask 255.255.255.0 gateway 10.172.0.254
2] Run the command: service networking restart
Note: In the initial setup, put the IP above to match your network to be able to download then change it once you're done with this guide to the above to avoid conflicts with any network.
3] Install apache and dnsmasq: apt-get install apache2 dnsmasq
4] Edit: /etc/dnsmasq.conf
dhcp-range=10.172.0.1,188.8.131.52,255.255.255.0,infinite dhcp-option=66,10.172.0.250 dhcp-option=67,"pxelinux.0" dhcp-boot=/srv/tftp/pxelinux.0 enable-tftp tftp-root=/srv/tftp
Note 0: The IPs above do not need to match your network.
Note 1: "infinite" is the lease time. The ESXi installer invokes a lease-release token which will cause the IP to be used by another host. I did not want that to happen because I have scripts assigning hosts their IPs sequentially.
5] Create the directory structure: mkdir -p /srv/tftp/pxelinux.cfg
6] Download syslinux v3, extract pxelinux.0 & put it in /srv/tftp: wget <URL>
7] Extract the files: tar -xf <File name>
8] Copy pxelinux.0: cp ./syslinux-3.86/core/pxelinux.0 /srv/tftp/
9] Create PXE boot file: nano /srv/tftp/pxelinux.cfg/default and edit it:
default esxi_scripted label esxi_scripted kernel vmware/esxi411/mboot.c32 append vmware/esxi411/vmkboot.gz ks=http://10.172.0.250/ks.php --- vmware/esxi411/vmkernel.gz --- vmware/esxi411/sys.vgz --- vmware/esxi411/cim.vgz --- vmware/esxi411/ienviron.vgz --- vmware/esxi411/install.vgz prompt 0 timeout 10
Note: Make sure all of the append parameters are on one line. It may pan out here due to little page width.
A] Edit: /var/www/ks.php
accepteula rootpw password autopart --firstdisk --overwritevmfs install url http://10.172.0.250/vmware/esxi411 network --bootproto=dhcp --device=vmnic0 reboot
The above is a kickstart script which the ESXi installer will execute. These are the defaults that are found in the PXE Guide by VMware.
Note: This will install to the first disk detected by the BIOS and will overwrite existing VMFS filesystems.
File PreparationB] mkdir -p /srv/tftp/vmware/esxi411
C] Copy the contents of the ISO file to the directory above. You can mount an ISO by: mount -o loop /path/to/isofile /mnt. The files will be in /mnt: cp -Rv /mnt/* /srv/tftp/vmware/esxi411/
D] Link to vmware directory: ln -s /srv/tftp/vmware /var/www/vmware
E] service dnsmasq restart
By now, things should be good to go!
- If you set this in a VM, keep the NIC disabled by default to avoid wiping systems by mistake and broadcasting DHCP over the LAN.
- If using a VM, the physical adapter must have a static IP not set on DHCP
- To reset the list of leases: echo "" > /var/lib/misc/dnsmasq.leases
This shows a very basic and default setup of installing ESXi over multiple boxes. Hopefully I'll have the time to post my custom scripts that integrate into the kickstart script to auto-assign IPs, VLANs, and a few more tasks to streamline the installation.