# VirtualBox※

VirtualBox is an Open Source virtualization solution similar to Parallels and Fusion that I’ve started using as my primary VM solution simply because a) it is available on pretty much all OSes I deal with and b) it is easier to install than Fusion (simply because VMware took a while to understand that their downloads section was a hassle).

To be honest I don’t like it much, but it works - plus it’s quite popular, and you can’t beat free.

## Useful Resources

phpVirtualBox is a great, nearly full-featured web interface for remote management. It allows you to do just about everything you need to remote VMs, including reconfiguring storage and network (as well as basic cloning).

macos-virtualbox automates the process of setting up a macOS VM on Windows and Linux.

## Making the console faster

On Ubuntu VMs, edit /etc/modprobe.d/blacklist-framebuffer.conf and add:

blacklist vga16fb

(tip via Quentin)

## Command-line management of VMs

I keep using (and forgetting about) this, so here goes:

VBoxManage startvm "chewie" --type headless
VBoxManage controlvm "chewie" poweroff


I usually run Ubuntu or Debian servers like this, with SSH mapped to a host port (set in the config, so I don’t need to specify it on the command line). If you need something more sophisticated, you can always use Vagrant.

## init.d script

I eventually cobbled together from other examples the following init script for Debian environments, which I have repeatedly failed to convert to an upstart script.

It assumes that there is a single user and multiple VMs to be run under that user:

#!/bin/bash
#VirtualBox

VBOX_USER="user"
VMS="c3p0 r2d2 tarkin lando"

SU="su $VBOX_USER -c" VBOXMANAGE="VBoxManage -nologo" VBOXHEADLESS="VBoxHeadless" # Send the ACPI powerbutton event to the virtual machine vbox_powerbutton() {$SU "$VBOXMANAGE controlvm \"$1\" acpipowerbutton"
}

# Poweroff the machine
vbox_poweroff() {
$SU "$VBOXMANAGE controlvm \"$1\" poweroff" } # Start the virtual machine vbox_start() {$SU "$VBOXHEADLESS -s \"$1\" > /dev/null &"
}

# List all running VMs
vbox_list() {
$SU "$VBOXMANAGE list runningvms"
}

start() {
echo "Starting VirtualBox..."
for machine in $VMS; do vbox_start$machine
if [ $? -gt 0 ]; then echo "WARNING: FAILED STARTING$machine"
fi
done
}

stop() {
echo "Stopping VirtualBox..."
tries=0
while [ $tries -lt$VBOX_RETRY ]; do
for machine in vbox_list; do
vbox_powerbutton $machine sleep$VBOX_WAIT
done;
tries=$((tries + 1)) done for machine in vbox_list; do echo "WARNING: UNCLEAN SHUTDOWN$machine"
vbox_poweroff $machine done } status() { vbox_list } case "$1" in

start)
start
;;

stop)
stop
;;

stop
start
;;

status)
status
;;

*)