Xen Dom0 on USB or SD

From Alpine Linux
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This guide will show you how to perform a Xen Dom0 install on a USB device or SD card, so you can have your Dom0 running from tmpfs. This has some benefits, but you will need a place to store your guests (virtual machines) and a syslog server to redirect the logs to.

The first step is to set up a basic usb or SD install. To do that, boot from the Alpine install CD (minimal is fine) and follow one of the following guides:
Create a Bootable USB or Create a Bootable Compact Flash.

Once you finish installing Alpine Linux on your device, boot from it and configure your newly installed system:

Set up the network interfaces:

# setup-interfaces
# ifup eth0
Note: you may need to change eth0 to the name of your interface

Continue by setting up the apk repositories:

# setup-apkrepos
[...]
# apk update
Note: you may need to edit /etc/apk/repositories and change the first line so it points to /media/usb/apks.

Now that you have your system properly configured, it's time to install Xen:

# Should this not be apk add xen xen-hypervisor ?
# apk add xen

Now that we have Xen installed, we need to modify the usb bootloader in order to load the Xen kernel. The first step is to remount /media/usb with write permissions:

# mount -o remount,rw /media/usb

Then, copy the Xen kernel and mboot.c32 to the usb boot partition:

# cp /boot/xen.gz /media/usb/boot/
# cp /boot/mboot.c32 /media/usb/boot/

Now that we have the necessary files to boot Xen from the usb device, it's time to change the bootloader and add a Xen entry.
To do so, open /media/usb/syslinux.cfg with your favorite editor and add one of the following entries:

Normal boot:

LABEL xen
  KERNEL /boot/mboot.c32
  APPEND /boot/xen.gz --- /boot/vmlinuz-hardened alpine_dev=usbdisk:vfat modules=loop,squashfs,sd-mod,usb-storage modloop=/boot/modloop-hardened --- /boot/initramfs-hardened
Note: you might have to use alpine_dev=UUID=XXXX-XXXX:vfat. UUID can be read using blkid.
Note: alternatively, to use /media/UUID=XXX-XXXX instead of /media/usb, see /proc/mounts to detect where your usb/cf card is mounted.

Serial console boot:

LABEL xen
  KERNEL /boot/mboot.c32
  APPEND /boot/xen.gz com1=115200,8n1 console=com1 --- /boot/vmlinuz-hardened alpine_dev=usbdisk:vfat modules=loop,squashfs,sd-mod,usb-storage modloop=/boot/modloop-hardened --- /boot/initramfs-hardened

Change the UUID to the correct one, and add the necessary modules for your system.
It's also a good idea to check Xen Boot options and set, dom0_mem, dom0_vcpus_pin and dom0_max_vcpus.

The next step is to load the necessary kernel modules for Xen. We will add them to /etc/modules so they will be loaded automatically at boot time:

# echo "xen_netback" >> /etc/modules
# echo "xen_blkback" >> /etc/modules
# echo "tun" >> /etc/modules

The last step is to configure startup services. We will need udev and xencommons to start at boot time:

# rc-update add udev sysinit
# rc-update add udev-postmount
# rc-update add xenstored
# rc-update add xenconsoled

Now you have a fully functional Xen install. It's time to save your changes and boot into it.

# lbu commit
# reboot

Remember to configure at least one network bridge. Follow the Bridge guide.

See also