DragonFly BSD

vKernelSetup

Setup a virtual kernel environment

A couple of steps are necessary in order to prepare the system to build and run a virtual kernel.

Setting up the filesystem

The vkernel architecture needs a number of files which reside in /var/vkernel. Since these files tend to get rather big and the /var partition is usually of limited size, we recommend the directory to be created in the /home partition with a link to it in /var:

mkdir /home/var.vkernel
ln -s /home/var.vkernel /var/vkernel

Next, a filesystem image to be used by the virtual kernel has to be created and populated (assuming world has been built previously):

dd if=/dev/zero of=/var/vkernel/rootimg.01 bs=1m count=2048
vnconfig -c -s labels vn0 /var/vkernel/rootimg.01
disklabel -r -w vn0s0 auto
disklabel -e vn0s0      # add 'a' partition with fstype `4.2BSD' size could be '*'
newfs /dev/vn0s0a
mount /dev/vn0s0a /mnt

Assuming that you build your world before, you can populate the image now. If you didn't build your world see chapter 21.

cd /usr/src
make installworld DESTDIR=/mnt
cd etc
make distribution DESTDIR=/mnt

Create a fstab file to let the vkernel find your image file.

echo '/dev/vkd0s0a      /       ufs     rw      1  1' >/mnt/etc/fstab
echo 'proc              /proc   procfs  rw      0  0' >>/mnt/etc/fstab

Edit /mnt/etc/ttys and replace the console entry with the following line and turn off all other gettys.

console "/usr/libexec/getty Pc"         cons25  on  secure

Then, unmount the disk.

umount /mnt
vnconfig -u vn0

Compiling the virtual kernel

In order to compile a virtual kernel use the VKERNEL kernel configuration file residing in /usr/src/sys/config (or a configuration file derived thereof):

cd /usr/src
make -DNO_MODULES buildkernel KERNCONF=VKERNEL
make -DNO_MODULES installkernel KERNCONF=VKERNEL DESTDIR=/var/vkernel

Enabling virtual kernel operation

A special sysctl(8), vm.vkernel_enable, must be set to enable vkernel operation:

sysctl vm.vkernel_enable=1

To make this change permanent, edit /etc/sysctl.conf