Compiling Xen From Source on NetBSD

==Introduction==
The purpose of this document is to guide users through the process of installing Xen Project software from source (either from the tarball releases or from a source code repository).
This document was written targeting the Xen Project 4.2 release, which is the first release to build natively on NetBSD without any specific patches.
An assumption is made of some familiarity with the general concept of building software and with using your distributions package manager to install relevant build tools etc.
==Dependencies==
The first step is to install the dependencies needed by the Xen Project software, they can all be found in pkgsrc. Here is the list of packages that should be installed for 4.2:
 devel/mercurial
 devel/scmgit
 devel/gmake
 lang/python27
 devel/py27-curses
 devel/dev86
 devel/glib2
 devel/yajl
If you followed the pkgsrc instructions for building from source, and didn't install anything aside from the minimal selection of sets, the comp and the text sets, you also have to install:
 shell/bash
 devel/pkg-config
==Cloning==
To clone the repository with git, use:
 git clone -b <BRANCH> git://xenbits.xen.org/xen
Note: you can find a list of the available branches and how to obtain them here.
==Configuration==
From Xen Project 4.2 onwards Xen uses the commonly used autoconf tool to provide compile time configurability of the toolstack. This allows some control of what features are built into Xen Project, as well as compile time sanity checking. Since pkgsrc installs packages in /usr/pkg, we will need to instruct configure to search for the required libraries there:
 $ ./configure PYTHON=/usr/pkg/bin/python2.7 APPEND_INCLUDES=/usr/pkg/include APPEND_LIB=/usr/pkg/lib --prefix=/usr/xen42
Please note that "prefix" has been set to /usr/xen42, you can change this to install it in /usr/pkg or whatever directory that suits your needs.
==Building==
Now that the configuration has finished, let's start the building. Stubdomains are not available on NetBSD, so we will skip the build of those:
 $ gmake PYTHON=/usr/pkg/bin/python2.7 xen
 $ gmake LD_LIBRARY_PATH=/usr/pkg/lib tools
==Install==
First, we will copy the Xen Project kernel to /:
 # cp xen/xen.gz /xen.gz
Now we need to fetch a Dom0 kernel for the NetBSD version we are running, Dom0 kernels can be found at:
ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-<version>/<arch>/binary/kernel/netbsd-XEN3_DOM0.gz
Download it to /, unpack and rename it to netbsd.xen. The next step is to modify the bootloader to correctly boot the Xen Project kernel and NetBSD. The following line should be added to /boot.cfg:
 menu=NetBSD Xen:load /netbsd.xen console=pc;multiboot /xen.gz dom0_mem=512M
For a serial console boot use the following:
 menu=NetBSD Xen com0:load /netbsd.xen console=com0;multiboot /xen.gz dom0_mem=512M console=com1 com1=115200,8n1
Also, set the dom0_mem parameter to an appropriate value for your use case. More info about the Xen Project kernel boot parameters can be found at Xen Command Line and Boot Options.
Finally, we should install the tools that we compiled previously:
 # gmake install-tools
Now we can reboot into the newly installed Xen system:
 # shutdown -r now
==Basic usage==
If you have installed the hypervisor in a location different than /usr/pkg you will need to add it to your LD_LIBRARY_PATH, PATH and PYTHONPATH:
 # export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/xen42/lib"
 # export PATH="${PATH}:/usr/xen42/sbin:/usr/xen42/bin"
 # export PYTHONPATH="/usr/xen42/lib/python2.7/site-packages"
To begin using the hypervisor, xencommons has to be started:
 # /usr/xen42/etc/rc.d/xencommons onestart
If you built the hypervisor onto another system, runtime dependencies are required:
 devel/yajl
Check that xl is working:
 # xl list
Category:Users Category:Host Install Category:NetBSD Category:Fundamentals