Running rumprun under Xen isn’t hard, but it’s less documented than running it under KVM. This page is similar to Rumprun’s guide to building rumprun unikernels with a few Xen-specific changes.

Build the rumprun platform

Install prerequisite xen headers and build tools:

sudo apt-get install build-essential libxen-dev

Clone their repo, cd, build:

git clone http://repo.rumpkernel.org/rumprun
cd rumprun
git submodule update --init
CC=cc ./build-rr.sh xen

Add binaries to PATH

You’ve now build rumprun and the binaries necessary for building, baking, running are located in rumprun/bin. You’ll want to these to your PATH variable for convenient access:

export PATH="${PATH}:$(pwd)/rumprun/bin"

You can also add this to your ~/.bashrc to make these changes permanent.

vim ~/.bashrc

Append the following, where [location of rumprun] represents the directory containing rumprun:

export PATH="$PATH:[location of rumprun]/rumprun/bin"

Building applications

Get some source code and use rumprun’s version of gcc to compile it. (Follow the rumprun tutorial for a more thorough explanation…)

Here, helloer.c is our source code and helloer-rumprun is the output binary.

x86_64-rumprun-netbsd-gcc -o helloer-rumprun helloer.c

Baking applications

I was going to make a joke here but I can’t think of anything clever right now. You need to bake it. That means running a command to add in all the kernel-y bits that makes rumprun ready for it.

Here, helloer-rumprun is the binary we just built and helloer-rumprun.bin is the the binary with the necessary rumprun pieces.

rumprun-bake xen_pv helloer-rumprun.bin helloer-rumprun

Running applications

Here’s the hard part. The rumprun command is a script that will create a Xen configuration file in /tmp and start up a Xen PV guest. For xen, it will look like this:

rumprun -S xen -id -g [Xen config options] -I [network interface] -W [more network options]

The -I and -W commands can be omitted if there is no need for networking. I have networking set up using a NAT, in which there exists a subnet local to the machine. Look at my article on Xen networking to see how I set up networking within rumprun.