## Description
This HowTo describes the setup of an UEFI HTTP server to network boot from.
## ✅Requirements
- Debian OS
- DHCP Server
## 📃Instructions
### Installing Nginx
```bash
sudo apt install nginx
```
### Setting up Nginx
Create a folder structure where you want to host the installation files
```bash
mkdir -p /srv/http/boot
```
Edit nginx config
```bash
vim /etc/nginx/sites-available/default
```
create some locations
```bash
server {
listen 80;
server_name _;
location / {
root /srv/http/;
index index.html;
}
location /boot/ {
alias /srv/http/boot/;
}
location /test/ {
alias /srv/http/test/;
}
}
```
restart nginx service
```bash
sudo systemctl restart nginx
```
### Adding the ESXi ISO
copy the ESXi iso to the nginx boot directory and extract it
> [!warning] Warning
> the iso must have the .iso extension, otherwise the files will be all upper case.
```bash
cp /tmp/download-4.ISO /srv/http/boot/
```
```bash
7z x /srv/http/boot/download-4.ISO
```
remove all `/` characters inside the `kernel=` and `module=` part inside `/srv/http/boot/efi/boot/boot.cfg`
and add the http base url of the boot directory to the prefix
```bash
vim /srv/http/boot/efi/boot/boot.cfg
```
The config should then look like this:
```bash
# /srv/http/boot/efi/boot/boot.cfg
bootstate=0
title=Loading ESXi installer
timeout=5
prefix=http://192.168.99.10/boot
kernel=b.b00
kernelopt=runweasel cdromBoot
modules=jumpstrt.gz --- useropts.gz --- features.gz --- k.b00 --- uc_intel.b00 --- uc_amd.b00 --- uc_hygon.b00 --- procfs.b00 --- vmx.v00 --- vim.v00 --- tpm.v00 --- sb.v00 --- s.v00 --- atlantic.v00 --- bcm_mpi3.v00 --- bnxtnet.v00 --- bnxtroce.v00 --- brcmfcoe.v00 --- cndi_igc.v00 --- dwi2c.v00 --- elxiscsi.v00 --- elxnet.v00 --- i40en.v00 --- iavmd.v00 --- icen.v00 --- igbn.v00 --- intelgpi.v00 --- ionic_cl.v00 --- ionic_en.v00 --- irdman.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 --- nipmi.v00 --- nmlx5_cc.v00 --- nmlx5_co.v00 --- nmlx5_rd.v00 --- ntg3.v00 --- nvme_pci.v00 --- nvmerdma.v00 --- nvmetcp.v00 --- nvmxnet3.v00 --- nvmxnet3.v01 --- pvscsi.v00 --- qcnic.v00 --- qedentv.v00 --- qedrntv.v00 --- qfle3.v00 --- qfle3f.v00 --- qfle3i.v00 --- qflge.v00 --- rdmahl.v00 --- rshim_ne.v00 --- rshim.v00 --- rste.v00 --- sfvmk.v00 --- smartpqi.v00 --- vmkata.v00 --- vmksdhci.v00 --- vmkusb.v00 --- vmw_ahci.v00 --- bmcal.v00 --- clusters.v00 --- crx.v00 --- drivervm.v00 --- elx_esx_.v00 --- btldr.v00 --- dvfilter.v00 --- esx_ui.v00 --- esxupdt.v00 --- tpmesxup.v00 --- weaselin.v00 --- esxio_co.v00 --- infravis.v00 --- loadesx.v00 --- lsuv2_hp.v00 --- lsuv2_in.v00 --- lsuv2_ls.v00 --- lsuv2_nv.v00 --- lsuv2_oe.v00 --- lsuv2_oe.v01 --- lsuv2_sm.v00 --- native_m.v00 --- qlnative.v00 --- trx.v00 --- vcls_pod.v00 --- vdfs.v00 --- vds_vsip.v00 --- vmware_e.v00 --- hbrsrv.v00 --- vsan.v00 --- vsanheal.v00 --- vsanmgmt.v00 --- tools.t00 --- xorg.v00 --- gc.v00 --- imgdb.tgz --- basemisc.tgz --- resvibs.tgz --- esxiodpt.tgz --- imgpayld.tgz
build=8.0.3-0.60.24585383
updated=0
```
Add permissions for the folder so that nginx can read them
```bash
sudo chmod 655 -R /srv/http
```
### Adding a kickstart file
edit the boot cfg to add the ks file to`kernelopt` path
```bash
vim /srv/http/boot/efi/boot/boot.cfg
```
The config should then look like this:
```bash
# /srv/http/boot/efi/boot/boot.cfg
bootstate=0
title=Loading ESXi installer
timeout=5
prefix=http://192.168.99.10/boot
kernel=b.b00
kernelopt=ks=http://192.168.99.10/kickstart/ks.cfg
modules=jumpstrt.gz --- useropts.gz --- features.gz --- k.b00 --- uc_intel.b00 --- uc_amd.b00 --- uc_hygon.b00 --- procfs.b00 --- vmx.v00 --- vim.v00 --- tpm.v00 --- sb.v00 --- s.v00 --- atlantic.v00 --- bcm_mpi3.v00 --- bnxtnet.v00 --- bnxtroce.v00 --- brcmfcoe.v00 --- cndi_igc.v00 --- dwi2c.v00 --- elxiscsi.v00 --- elxnet.v00 --- i40en.v00 --- iavmd.v00 --- icen.v00 --- igbn.v00 --- intelgpi.v00 --- ionic_cl.v00 --- ionic_en.v00 --- irdman.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 --- nipmi.v00 --- nmlx5_cc.v00 --- nmlx5_co.v00 --- nmlx5_rd.v00 --- ntg3.v00 --- nvme_pci.v00 --- nvmerdma.v00 --- nvmetcp.v00 --- nvmxnet3.v00 --- nvmxnet3.v01 --- pvscsi.v00 --- qcnic.v00 --- qedentv.v00 --- qedrntv.v00 --- qfle3.v00 --- qfle3f.v00 --- qfle3i.v00 --- qflge.v00 --- rdmahl.v00 --- rshim_ne.v00 --- rshim.v00 --- rste.v00 --- sfvmk.v00 --- smartpqi.v00 --- vmkata.v00 --- vmksdhci.v00 --- vmkusb.v00 --- vmw_ahci.v00 --- bmcal.v00 --- clusters.v00 --- crx.v00 --- drivervm.v00 --- elx_esx_.v00 --- btldr.v00 --- dvfilter.v00 --- esx_ui.v00 --- esxupdt.v00 --- tpmesxup.v00 --- weaselin.v00 --- esxio_co.v00 --- infravis.v00 --- loadesx.v00 --- lsuv2_hp.v00 --- lsuv2_in.v00 --- lsuv2_ls.v00 --- lsuv2_nv.v00 --- lsuv2_oe.v00 --- lsuv2_oe.v01 --- lsuv2_sm.v00 --- native_m.v00 --- qlnative.v00 --- trx.v00 --- vcls_pod.v00 --- vdfs.v00 --- vds_vsip.v00 --- vmware_e.v00 --- hbrsrv.v00 --- vsan.v00 --- vsanheal.v00 --- vsanmgmt.v00 --- tools.t00 --- xorg.v00 --- gc.v00 --- imgdb.tgz --- basemisc.tgz --- resvibs.tgz --- esxiodpt.tgz --- imgpayld.tgz
build=8.0.3-0.60.24585383
updated=0
```
Create the kickstart file
```bash
sudo vim /srv/http/kickstart/ks.cfg
```
Example kickstart file:
```cfg
# Accept EULA
vmaccepteula
# Set root password
rootpw Start123$
# Install on first disk
install --firstdisk --overwritevmfs
# Configure network
network --bootproto=static --ip=192.168.99.100 --netmask=255.255.255.0 --gateway=192.168.99.1 --hostname=esx11.lab.sponar.de --nameserver=192.168.99.1 --addvmportgroup=1
reboot
```
## 🔗Resources
### Network boot resources
- https://williamlam.com/2021/03/simplified-nested-esxi-installation-in-esxi-7-0-update-2-using-http-boot-over-virtualefi.html
- https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/esxi-installation-and-setup-8-0/installing-and-setting-up-esxi-install/installing-esxi-install/installing-esxi-by-using-a-script-install/scripted-esxi-installation-install.html#GUID-4DFAA5D6-D1E8-41C9-BCB4-8633551CD8BC-en
- https://vtam.nl/2024/01/14/unattended-esxi-deployment-with-go-via/