this is obsolete doc -- see http://doc.nethence.com/ instead

Configuring a NetBSD/XEN dom0 

Update: now with NetBSD 6.0.1 

 

Introduction 

Install a standard NetBSD system, preferably the 64-bit version (amd64). 

 

Requirements 

Make sure those packages are installed (I choose the older XEN3 tools to get the HVM package), 

export PKG_PATH=ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/6.0/All
pkg_add e2fsprogs
pkg_add xenkernel41
pkg_add xentools3
useradd -s /sbin/nologin pbulk
pkg_add xentools3-hvm
#chown pbulk:users /usr/pkg/etc/xen/scripts/qemu-ifup
#chmod 755 /usr/pkg/etc/xen/scripts/qemu-ifup
pkg_add xenvstat
pkg_info | grep xen
#pkg_add xauth xclock
#pkg_info | egrep 'xauth|xclock'

Note. The other available binary packages are, 

#pkg_add xenstoretools
#pkg_add xenkernel33
#pkg_add xentools33

 

Install the rc scripts, 

cd /etc/rc.d/
cp /usr/pkg/share/examples/rc.d/xendomains .
cp /usr/pkg/share/examples/rc.d/xend .
cp /usr/pkg/share/examples/rc.d/xenbackendd .
ls -l xen*

enable the daemons, 

cd /etc/
cat >> rc.conf <<EOF9
xend=yes
xenbackendd=yes
xendomains=yes
EOF9

 

Make sure the drvctl device exists, 

ls -l /dev/drvctl

 

Make sure /proc/ is mounted by default, 

mount | grep proc
grep proc /etc/fstab

 

Create the XEN device file, 

cd /dev/
ls -l xen
./MAKEDEV xen

 

Building the hypervisor 

Install the XEN microkernel, 

cd /
cp /usr/pkg/xen41-kernel/xen.gz .

 

Install the NetBSD dom0 kernel, 

cd /
ftp -a ftp://ftp.fr.netbsd.org/pub/NetBSD/NetBSD-6.0.1/amd64/binary/kernel/netbsd-XEN3_DOM0.gz
gunzip netbsd-XEN3_DOM0.gz
mv netbsd-XEN3_DOM0 netbsd.xen
chmod +x netbsd.xen
ls -l netbsd*
file netbsd*

 

Configuring the boot loader 

Prepare the NetBSD boot loader, 

cd /
vi boot.cfg

add, 

menu=XEN:load /netbsd.xen;multiboot /xen.gz dom0_mem=256M
#menu=XEN:load /netbsd.xen console=com0;multiboot /xen.gz dom0_mem=256M console=com1 com1=9600,8n1

Note. 'com0' for netbsd, 'com1' (DOS style) for xen.gz ! 

 

Find out if your root file system is FFSv1 or v2, 

cd ~/
dd if=/dev/rwd0a of=rwd0a.pwet bs=1024k count=1
grep -ai FFS rwd0a.pwet
rm -f rwd0a.pwet

 

Reinstall the boot loader to apply (change ffsv1/v2 accordingly), 

  installboot -v -o timeout=3 /dev/rwd0a /usr/mdec/bootxx_ffsv2 

  #installboot -v -o timeout=3 -o console=com0 /dev/rwd0a /usr/mdec/bootxx_ffsv2 

 

Networking 

Identify the network interface you want to use for management on the dom0 system, 

ifconfig -a

 

Configure the default bridge, 

cd /etc/
vi ifconfig.bridge0

like, 

create
!brconfig $int add alc0 up

Note. "xenbr0" or "br0" bridge names won't work. Use "bridge0". 

 

Configuration 

Eventually create a more accessible symbolic link for later use, 

cd /etc/
ln -s ../usr/pkg/etc/xen
ls -l xen

 

Ready to go 

Restart the system, 

shutdown -r now

 

Troubbleshooting 

Check the currenly used vnode disks once some domU are running, 

vnconfig -l

also, to manually mount a domU filesystem, it's not loop nor losetup you may use on NetBSD, but vnconfig, 

vnconfig vnd0 slackware.11-0.img
mkdir lala
mount_ext2fs /dev/vnd0a lala

Note. "vnconfig -r" for read-only 

 

Show bridges, 

ifconfig -a
brconfig bridge0

 

Tips & Tricks 

As for multiboot, to know wheter you're inside XEN or not, even at boot time, 

sysctl machdep.xen_timepush_ticks

so you can enable xend depending on that. Otherwise test for, 

ls -l /kern/xen

but this only works once the system has almost completely booted (mount -a). 

 

References 

NetBSD/xen Howto : http://www.netbsd.org/ports/xen/howto.html 

Xen on NetBSD : http://www.gutch.de/NetBSD/docs/xen.html 

How to set up a guest OS using xen3 : http://wiki.netbsd.se/How_to_set_up_a_guest_OS_using_xen3#Updating_.2Fboot.cfg 

Bootstrapping a Linux domU from scratch in a NetBSD dom0 : http://mail-index.netbsd.org/port-xen/2007/04/05/0000.html 

Re: linux domU's and partitioning : http://mail-index.netbsd.org/port-xen/2006/12/04/0007.html