In order to access certain aspects of a virtual machine in VirtualBox, you will need to install Guest Additions (similar to VMWare Tools I guess)

There is a manual page for installing Guest Additions but not all of it is self-explanatory…

First you need to log into your Linux virtual machine (VM) and install/configure x, y and z.

Install DKMS

This part is relatively straightforward, just install using whatever package manager your Linux distribution has. The below example uses APT that comes with Debian-based distros:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install dkms

Where to find VBoxGuestAdditions.iso

Usefully Oracle don’t tell you in their guide, but it is available with the rest of the downloads at http://download.virtualbox.org/virtualbox/

So for example for version 4.1.6 the VBoxGuestAdditions_4.1.6.iso is located at http://download.virtualbox.org/virtualbox/4.1.6/VBoxGuestAdditions_4.1.6.iso

You need this image to install the VirtualBox Guest Additions themselves onto your VM, so you can either download it to your Linux VM and mount it there, or (which is what I did) download it to your Mac OS X host and mount it in the DVD drive using the VirtualBox Manager.

How to mount the image

You need to mount the image on the Linux VM, so that you can install VirtualBox Guest Additions from it. If you have mounted it in the VirtualBox Manager in the DVD drive then you will still need to mount it in the Linux VM; Since I can’t remember the last time I had to mount something in *nix from the command-line, here’s a quick way.

sudo mkdir /dev/dvd
sudo mount /dev/dvd1 /mnt/dvd/
cd /mnt/dvd

Then you should see VBoxLinuxAdditions in that directory, which you need to run as per the manual. If the above doesn’t work it might be because your DVD drive in VirtualBox is called something else, like dvd (instead of dvd1) which probably differs depending on which distro you’re using.

Then you need to run the installer.

sudo sh ./VBoxLinuxAdditions.run

Once that’s done you can restart.

sudo reboot now

Everything should be finished now installation/configuration-wise, but you might encounter some problems… (otherwise skip to Mount the host folder)

Kernel header problems

I got some missing kernel header problems when trying to install Guest Additions, which if building the main Guest Additions module fails will be logged.

cat /var/log/vboxadd-install.log

If you see something like this…

Error! Your kernel headers for kernel 2.6.35-28-generic cannot be found at
/lib/modules/2.6.35-28-generic/build or 
/lib/modules/2.6.35-28-generic/source.
You can use the --kernelsourcedir option to tell DKMS where it's located,
or you could install the linux-headers-2.6.35-28-generic package.

So you can do just that!

sudo apt-get install linux-headers-2.6.35-28-generic
sudo ./VBoxLinuxAdditions.run

Hopefully this should install now (although the XFree86 bit will fail, assuming you’re using the command-line) and you may need to restart the VM, although I’m not sure.

Mount the host folder

You can create the host folder in the VirtualBox Manager in the Shared Folders tab on the Settings for that VM. If you add it on the command-line it’ll appear under the machine folders anyways. If you want to type it though, here’s what you’d type into the Mac OS X terminal (note this is the only thing that you’d type into the host itself)

VBoxManage sharedfolder add "my-ubuntu-vm" \
--name "websites" --hostpath "/Users/andrew/pizza"

To mount the Shared Folder from within the guest, the instructions from Ubuntu (as my guest is Ubuntu, although I think this is a better way to mount it anyways) were very useful.

sharename="whatever.you.want.to.call.it";
sudo mkdir /mnt/$sharename \
sudo chmod 777 /mnt/$sharename \
sudo mount -t vboxsf -o uid=1000,gid=1000 $sharename /mnt/$sharename \
ln -s /mnt/$sharename $HOME/Desktop/$sharename

Just change the target to be wherever you want the Shared Folder to be mounted in the guest. Now in theory if you go to that path in the guest, it should be the same as the directory you shared from the host!