Installing ESXi in a QEMU-KVM virtual machine
Posted on Fri 20 November 2015 in blog
For a test setup, it may be useful to install VMware ESXi in a
QEMU-KVM guest. If, like me, you're using libvirt
(using virt-manager) to manage your VMs, here's some
information to get this set up. I'm using Fedora 22, and ESXi 5.5.0.
There are other posts explaining how to set this up, but I wanted to share my
experience, which is specific to [virt-manager], and the newer QEMU.
Procedure
Here's a step-by-step procedure for getting this working.
Add required KVM kernel module parameters
- Edit (or create) /etc/modprobe.d/kvm-intel.confto look like this:
options kvm ignore_msrs=1
options kvm-intel nested=y ept=y
- Remove the KVM module and re-load it with the new parameters:
# modprobe -r kvm-intel kvm; modprobe kvm kvm-intel
Setup ESXi VM guest configuration
- Create your ESXi VM using virt-manager.
- Change the NIC to vmxnet3. You'll have to manually type this in; it won't be in the drop-down.
- You'll need at least 2 GiB of RAM. (During install it actually came back
   with:
 <MEMORY_SIZE ERROR: This host has 2.00 GiB of RAM. 3.97 GiB are needed>
- Edit the config for this VM (named esxi-testhere):
 # virsh -c 'qemu:///system' edit esxi-test
- Edit the first line of the XML file to be:
 <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
- Change the CPU type:
 <cpu mode='host-passthrough'/>
- Add this block anywhere inside of <domain>...</domain>:
  <qemu:commandline>
    <qemu:arg value='-machine'/>
    <qemu:arg value='vmport=off'/>
  </qemu:commandline>
Save and quit.
Go!
Boot into the ESXi installer, and enjoy!
In dmesg, I see kvm spewing these messages, which probably have to do with
ignore_msrs:
kvm [3864]: vcpu0 ignored rdmsr: 0x34
kvm [3864]: vcpu0 ignored rdmsr: 0x34
ESXi 6.0.0 Notes
I tried to use ESXi 6.0.0, but it didn't seem to find a network card, even
though I specified vmnet3. These notes apply to 6.0.0:
- The installer appears to hang at "user loaded successfully." for about 110
  seconds. Running nfcd start also takes a while. I have no idea why.
Resources
- Notes on getting VMware ESXi to run under KVM (rwmj.wordpress.com)- The patch to QEMU is no longer necessary; as of at least 2.3.1, QEMU
  accepts the option: -machine vmport=offto accomplish the same. (Here's the patch adding the option).
 
- The patch to QEMU is no longer necessary; as of at least 2.3.1, QEMU
  accepts the option: 
- ESXi inside KVM (communities.vmware.com)- This is the original thread where people managed to figure this out.
 
- Install and run a full functional VMware ESX Hypervisor within a KVM virtual
  machine (mattinaction.blogspot.com)- Another blog post explaining the same
 
- How to pass QEMU command-line options through libvirt (blog.vmsplice.net)
- Enabling Virtual Machine Control Structure Shadowing On A Nested Virtual Machine
  (software.intel.com)- Even though my CPU doesn't support nested VMCS, this was still useful,
  and provided the clue to use cpu mode='host-passthrough'
 
- Even though my CPU doesn't support nested VMCS, this was still useful,
  and provided the clue to use