Installing ESXi over serial console (headless, no video card)

I ran into a unique scenario where I had a server to install ESXi on that had no video card (maybe open compute style?). That being said, I figured that PXE installation would be the easiest method.

First lets look at the PXE installation method of installing ESXi…

  1. Server boots, grabs DHCP address then downloads and executes the PXE Linux kernel.
  2. PXE linux kernel then loads /tftpboot/pxelinux.cfg/default – this is the menu system for PXE linux.
  3. ESXi install is selected, at which a linux kernel runs and begins installing the ESXi kernel
  4. The linux boot kernel, calls weasel to start installing the ESXi system
  5. The system reboots and starts loading ESXi

That being said, I needed to make sure the that not only did I pass the correct redirect output to serial switches, but that I was setting the correct baud rate at all four steps.

Step 1:

I first made sure the BIOS Serial and Serial over LAN baud rate was 115200

Step 2:

Configure the /tftpboot/pxelinux.cfg/default menu to use serial at the 115200 baud rate:

default menu.c32
serial 0 115200
prompt 0
Timeout 1000

Step 3:

Pass the correct kernel parameters to the ESXi installer menu option:

LABEL esxi50
KERNEL images/esx/mboot.c32
APPEND -c images/esx/boot.cfg text gdbPort=none logPort=none tty2Port=com1

Step 4:

Pass the correct kernel parameters to /tftpboot/images/esxi/boot.cfg for the ESXi installer to work correctly:

title=Loading ESXi installer
kernelopt=runweasel text nofb com1_baud=115200 com1_Port=0x3f8 tty2Port=com1 gdbPort=none logPort=none
modules=b.b00 --- useropts.gz --- k.b00 --- chardevs.b00 --- a.b00 --- user.b00 --- s.v00 --- ata_pata.v00 --- ata_pata.v01 --- ata_pata.v02 --- ata_pata.v03 --- ata_pata.v04 --- ata_pata.v05 --- ata_pata.v06 --- ata_pata.v07 --- block_cc.v00 --- ehci_ehc.v00 --- weaselin.t00 --- esx_dvfi.v00 --- xlibs.v00 --- ima_qla4.v00 --- ipmi_ipm.v00 --- ipmi_ipm.v01 --- ipmi_ipm.v02 --- misc_cni.v00 --- misc_dri.v00 --- net_be2n.v00 --- net_bnx2.v00 --- net_bnx2.v01 --- net_cnic.v00 --- net_e100.v00 --- net_e100.v01 --- net_enic.v00 --- net_forc.v00 --- net_igb.v00 --- net_ixgb.v00 --- net_nx_n.v00 --- net_r816.v00 --- net_r816.v01 --- net_s2io.v00 --- net_sky2.v00 --- net_tg3.v00 --- net_vmxn.v00 --- ohci_usb.v00 --- sata_ahc.v00 --- sata_ata.v00 --- sata_sat.v00 --- sata_sat.v01 --- sata_sat.v02 --- sata_sat.v03 --- sata_sat.v04 --- scsi_aac.v00 --- scsi_adp.v00 --- scsi_aic.v00 --- scsi_bnx.v00 --- scsi_fni.v00 --- scsi_hps.v00 --- scsi_ips.v00 --- scsi_lpf.v00 --- scsi_meg.v00 --- scsi_meg.v01 --- scsi_meg.v02 --- scsi_mpt.v00 --- scsi_mpt.v01 --- scsi_mpt.v02 --- scsi_qla.v00 --- scsi_qla.v01 --- scsi_rst.v00 --- uhci_usb.v00 --- tools.t00 --- xorg.v00 --- imgdb.tgz --- imgpayld.tgz

Step 5:

Modify /bootbank/boot.cfg so that when the system reboots, the installed boot.cfg is passing the correct kernel parameters. I did this with a line in my Kickstart file:

sed -i '/no-auto-partition/ s/$/ text nofb com1_baud=115200 com1_Port=0x3f8 tty2Port=com1 gdbPort=none logPort=none/' /bootbank/boot.cfg


Author: Eric Sarakaitis

I'm Eric, I love to cook, sing, garden and enjoy cold beverages!