Setting up an OS to work with xhyve can be a bit tricky, but it's not impossible. These intructions should be generally applicable to most versions of Linux.
Create a disk image file
Xhyve will use a file as a logical disk. Be sure you have the filesize you need, because growing the file later is tricky to impossible (you could try to use
qcow or similar to get around this, but qcow volumes can be tricky to mount).
dd if=/dev/zero of=hdd.img bs=1g count=32 # Create a 32 gig disk. Raise 'count' as desired
Grab required kernel files
Xhyve loads the kernel and initrd images from the local filesystem -- you'll need to get these from a mounted iso in order to boot an install cd. First download an iso. You probably want to use the mini.iso.
Once downloaded, you'll need mount the iso and copy off the kernel files. But these isos are not directly mountable in osx. To make them mountable, you'll need to make a compatible copy (which just means that the first 2k block is empty) and then mount this copy:
dd if=/dev/zero bs=2k count=1 of=tmp.iso dd if=mini.iso bs=2k skip=1 >> tmp.iso hdiutil attach tmp.iso
Next copy the kernel files from the mounted volume
cp /Volumes/CDROM/linux . cp /Volumes/CDROM/initrd.gz .
You can delete tmp.iso now -- you wont need it again.
You can now boot into an installer. Run the attached
install.sh script. Follow the prompts. However, once the installation is complete -- do not reboot. Select
Go Back and then
Execute a shell. We are going to use nc to copy off the system initrd and linux kernel that were just installed. These are the latest, non-installer versions of these files. We can't use the versions we copied earlier, because they will simply boot us back in to the installer.
At the shell prompt:
cd /target sbin/ifconfig tar c boot | nc -l -p 1234
Make note of the ip returned from ifconfig. On your osx host:
nc <IP from above> 1234 | tar x
This should drop the latest boot images (kernel, initrd) into the
Exit the shell, and let the installation complete.
You should be able to boot up the new machine using the
run.sh script below. Note that you will probably need to replace the exact filenames used for LINUX and INITRD with whatever you downloaded in
boot/ in the previous step. The console is a little wonky -- in general, I install openssh when I am setting up an xhyve instance, and use that to finish setting up the new vm after booting it up.
The VM can lose connectivity to any VPNs running on the host after those vpns have been restarted, or after sleeping. Use the attached
masq.sh to restore connectivity when this happens.