For the internal Git at 42on we use Gitlab and I wanted to use Gitlab’s CI to build my Virtual Machines automatically.
As we don’t have any physical hardware at 42on (everything runs in the cloud) I wanted to see if I could run VirtualBox Headless inside a VM with Nested KVM enabled.
The first thing I checked was if my KVM Virtual Machine actually supported Nested KVM. This can be verified with the kvm-ok command under Ubuntu:
root@glrun01:~# kvm-ok INFO: /dev/kvm exists KVM acceleration can be used root@glrun01:~#
Now that’s verified I tried to install VirtualBox.
Installing VirtualBox is straight forward. Just add the repository and install the packages. Don’t forget to reboot afterwards to make sure all kernel modules are loaded and properly installed.
apt-get install virtualbox
VirtualBox Extension Pack
The trick to get everything working properly is to install Oracle’s VirtualBox Extension Pack. It took me a while to figure out that I need to install it manually. It wasn’t done by default after install.
You need to download the pack and install it using the VBoxManage command.
wget http://download.virtualbox.org/virtualbox/5.0.24/Oracle_VM_VirtualBox_Extension_Pack-5.0.24.vbox-extpack vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.0.24.vbox-extpack vboxmanage list extpacks vboxmanage setproperty vrdeextpack "Oracle VM VirtualBox Extension Pack"
With that installed and configured I rebooted the machine again just to be sure.
With that it actually worked. The VirtualBox VMs can now be built inside a Nested KVM machine controlled by Gitlab’s CI 🙂