# Creating a Headless VirtualBox VM Host on Ubuntu Server

## Installation and Configuration

1. Log into the Ubuntu Server host
2. Run the following commands
   # update software repositories
   sudo apt update
   # install available software updates
   sudo apt upgrade -y
   # install virtualbox
   sudo apt install virtualbox -y
   # verify virtualbox installed by outputting the version
   vboxmanage -version
   # install virtualbox extension pack
   sudo apt install virtualbox-ext-pack -y
   # disable default vboxweb service
   sudo systemctl disable vboxweb
   # create vboxadmin user and set a password
   sudo useradd vboxadmin
   # set the vboxadmin password
   sudo passwd vboxadmin
   # add vboxadmin to the vboxuser group
   sudo usermod -aG vboxusers vboxadmin
   # create vboxadmin home directory
   sudo mkdir /home/vboxadmin -p
   # make vboxadmin the owner of the home directory
   sudo chown -R vboxadmin /home/vboxadmin
   # edit the default virtualbox configuration
   sudo nano /etc/default/virtualbox
3. Add the following line to the bottom of the file, changing the username if necessary

   VBOXWEB_USER=vboxadmin
   VBOXWEB_HOST=127.0.0.1

4. Press CTRL+O, Enter, CTRL+X to write the changes
5. Continue with the following commands, changing the username if necessary
   # create vboxweb.sh
   sudo nano /home/vboxadmin/vboxweb.sh
6. Paste the following into vboxweb.sh

   #!/bin/bash
   /usr/bin/vboxwebsrv -H 127.0.0.1 > /dev/null 2>&1

7. Press CTRL+O, Enter, CTRL+X to write the changes
8. Continue with the following commands, changing the username if necessary
   # make vboxweb.sh executable
   sudo chmod +x /home/vboxadmin/vboxweb.sh
   # create phpvirtualbox.service
   sudo nano /etc/systemd/system/phpvirtualbox.service
9. Paste the following service configuration, changing the username if necessary

   [Unit]
   Description=VirtualBox Web Service
   After=network.target

   [Service]
   Type=simple
   RemainAfterExit=yes
   User=vboxadmin
   Group=vboxusers
   WorkingDirectory=/home/vboxadmin
   ExecStart=/home/vboxadmin/vboxweb.sh
   Restart=on-failure

   [Install]
   WantedBy=default.target

10. Continue with the following commands
    # enable phpvirtualbox.service
    sudo systemctl enable phpvirtualbox.service
    # start phpvirtualbox.service
    sudo systemctl start phpvirtualbox.service
    # install apache2 web server and php
    sudo apt install apache2 php libapache2-mod-php php-curl php-intl php-json php-gd php-mbstring php-xml php-zip php-soap -y
    # empty the apache2 web root
    sudo rm /var/www/html/*
    # install git
    sudo apt install git -y
    # clone phpVirtualBox git repository
    sudo git clone https://github.com/phpvirtualbox/phpvirtualbox.git /var/www/html
    # copy phpVirtualBox example config
    sudo cp /var/www/html/config.php-example /var/www/html/config.php
    # edit the config file
    sudo nano /var/www/html/config.php
11. Update the $username and $password variables to vboxadmin and the password set for the vboxadmin user
12. Press CTRL+O, Enter, CTRL+X to write the changes to config.php
13. Open a web browser from another machine and navigate to https://DNSorIP of the VirtualBox host
14. Log into phpVirtualBox with username admin and password admin

## Creating a Test VM

1. Run the following command on the VirtualBox host to download the TinyCore Linux .iso
   sudo wget -O /home/vboxadmin/TinyCore-12.0.iso http://tinycorelinux.net/12.x/x86/release/TinyCore-12.0.iso
2. In the phpVirtualBox web UI, click New
3. Set the Name to TinyCore Linux, Type to Linux and Version to Other Linux (32-bit) > Click Next
4. Leave the memory at 256 MB > Click Next
5. Select Do not add a virtual hard disk > Click Create
6. Click Continue to confirm creating the VM with no virtual hard disk
7. Right click the TinyCore Linux VM > Settings...
8. Select Storage from the left navigation menu
9. Click on the empty optical drive
10. Click the choose disk image dropdown > Choose a virtual disk file...
11. Navigate to /home/vboxadmin/TinyCore-12.0.iso and select it
12. Click OK to all open dialog windows
13. Right click the TinyCore Linux VM > Start
14. If everything is working as expected TinyCore Linux should be booting to the live environment
15. Look at the Display details to find the remote port (starts at 9000 by default)
16. To view the VM directly, remote desktop to the VirtualBox host IP:9000