FreeBSD 10 changed the supported Xen configurations, notably providing Xen support by default in GENERIC using PVHVM mode. Previously, I’d been using FreeBSD 9 (i386) using a XEN kernel and PV mode, which is deprecated in FreeBSD 10. (If you need a refresher on Xen modes, I highly recommend the article Xen Modes: What Color Is Your Xen.)
There is a fairly established procedure
that I tend to follow when setting up FreeBSD PV domUs, but it was difficult to
find a guide on setting up PVHVM domUs on my current stack of open-source Xen
(4.1) on Debian old-stable (7) using the
xm toolchain. Well, here it is.
Since I manage my Xen stuff remotely (and I didn’t want to add a dependency on
VNC), I decided to have my FreeBSD domU use serial for the
xm console. The
FreeBSD installer iso doesn’t support headless/serial install by default, but
there are instructions
for modifying the iso to boot into a serial console. Should that page become
unavailable, the gist is that you extract the iso, append
to the iso’s
/boot/loader.conf, and then recreate the iso.
Configuring the domU
I’ll assume you already have Xen set up, and have created some sort of disk for
your domU to live in. Since I’m using LVM, I created a logical volume for the
new domU (which I named “eagle”) with
sudo lvcreate -L 10G -n eagle-disk
solid-state. To clarify, the new LV is called
eagle-disk, and I created it on
solid-state volume group.
Here’s the config file I used, which I put in
memory = 1024 name = "eagle" # PVHVM stuff builder = "hvm" kernel = "hvmloader" boot = "dc" vif = [ 'mac=00:16:3E:01:AB:23' ] disk = [ 'phy:/dev/solid-state/eagle-disk,hda,w', 'file:/virt/iso/FreeBSD-10.1-RELEASE-amd64-headless.iso,hdb:cdrom,r' ] # Necessary for getting the serial console in `xm console` serial = "pty"
/virt/iso/FreeBSD-10.1-RELEASE-amd64-headless.iso is where I put my
mangled iso. Modify this (and the other options) according to your setup.
Once your configuration is all set, boot the domU (I did
sudo xm create -c
After the pretty bootloader, you’ll probably be greeted with the
prompt, which can’t figure out what to boot from. Use the
? command to
enumerate your options — since you’re installing, you want to boot from your
mangled iso. When I recreated the iso, one of my
mkisofs parameters was
-V Headless_install, so the
mountroot prompt presented my iso option as
iso9660/Headless_install. Thanks to my config file, the iso also appeared as
cd0. Whichever one you use, tell
mountroot to boot from
You’ll also get a prompt for your system’s console type — I chose the default (vt100).
After that, install FreeBSD as normal. The page up and page down keys probably
won’t work as expected, but the arrow keys should. I recommend giving yourself a non-root
user (with the
wheel group) when you get the option, and enabling the ssh
daemon: in case the serial console gets weird on reboot (like it did for me),
ssh’ing in as a regular user is much easier than using
ed to set
PermitRootLogin yes in
/etc/ssh/sshd_config and then doing
At the very end, before rebooting, take the option to open a shell in the newly
installed system. The iso knows to use a serial console, but your new install
doesn’t, so you’ll need to put
If you reboot right now, your domU will still want to boot from the iso. This is
because of the
boot = "dc" line in the Xen configuration file — the letters
are Windows-style disk letters indicating that the second “disk” (hdb, the iso)
has boot priority over the first (hda). Change this line to just
boot = "c",
remove the iso’s disk entry, and destroy (shutdown) and re-create the domU.
If you get a
mountroot prompt again on reboot looking for the install cd,
you’re probably still booting from the iso.
Lo and behold
At this point, you should be able to treat your shiny new domU like any other. Have fun!