Headless VirtualBox on Ubuntu Server 20.04

As expected, first we need to install VirtualBox.

Terminal
sudo wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
echo "deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian focal contrib" \
| sudo tee /etc/apt/sources.list.d/virtualbox.list
sudo apt update
sudo apt-get install --yes virtualbox-6.1
sudo systemctl status vboxdrv

sudo usermod -aG vboxusers $USER

Since our server is headless, we will need a remote acces. This means installing Oracle’s extension pack with RDP support. You should be good installing this on your home system but you will need license for production deployments.

Terminal
VBOXVER=`vboxmanage -v | cut -dr -f1`
wget -P /tmp \
https://download.virtualbox.org/virtualbox/$VBOXVER/Oracle_VM_VirtualBox_Extension_Pack-$VBOXVER.vbox-extpack
vboxmanage extpack install /tmp/Oracle_VM_VirtualBox_Extension_Pack-$VBOXVER.vbox-extpack

With installation ready, we can approach creating VM. I’ll give an example of the Ubuntu Desktop but really anything goes.

Terminal
mkdir -p /srv/virtualbox

vboxmanage createvm \
--ostype Ubuntu_64 \
--basefolder "/srv/virtualbox" \
--register \
--name "Test"

vboxmanage modifyvm "Test" \
--memory 1024 \
--nic1 nat \
--vrde on --vrdeport 33890

vboxmanage createhd \
--filename "/srv/virtualbox/Test/Test.vdi" \
--format VDI --size 10240

vboxmanage storagectl "Test" \
--name "SATA" \
--add sata

vboxmanage storageattach "Test" \
--storagectl SATA --port 0 --type hdd \
--medium "/srv/virtualbox/Test/Test.vdi"

vboxmanage storageattach "Test" \
--storagectl SATA --port 15 --type dvddrive \
--medium /tmp/ubuntu-20.04-desktop-amd64.iso

If you are using firewall, make sure to allow port through. For example, iptables would need the following adjustment.

Terminal
iptables -A INPUT -p tcp --dport 33890 -j ACCEPT

With this, we’re finally ready to start the virtual machine.

Terminal
vboxmanage startvm "Test" --type headless

To connect to it just use any Remote Desktop application.


PS: Authentication for RDP is highly recommended and you should probably check documentation to see what works best for you.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.