Browsing articles in "Linux"

VirtualBox Guest Additions with Shared Folders on Mac OS X

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…

Install DKMS

This part is relatively straightforward.

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

How to mount the image

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, 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

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!

WordPress 3.2 upgrade, WYSIWYG editor no longer loads? Now requires JSON extension

An issue I encountered recently doing a WordPress upgrade from 3.1 to 3.2, is that afterwards everything appeared to work with the exception of the editor for Posts and Pages. After working through the checklist for the manual install and checking each plugin individually, I took a look at the PHP error log and noticed that PHP didn’t have the JSON extension bundled.

If you get an error mentioning that json_encode() is missing, it will be because PHP wasn’t compiled with it and WordPress now uses it. If you use SuSE (which this particular server is) you need to install the php5_json package using a command similar to:

zypper install php5_json

Otherwise you will need to see if your distro has a JSON-specific package for PHP, or you may have to compile it from source.

NOTE: PHP usually has the JSON extension compiled into it by default since 5.2, so this is an unusual case