VMware Fusion is a great piece of software from one of the world leaders in virtualisation technology, VMware. There are other alternatives for virtualisation on the Mac platform, Parallels Desktop is a very well known product and they were actually first to support Mac OS X as a host operating system. A free and open source alternative from Sun is VirtualBox. My personal preference is for VMware, I’ve been running it on my Mac since the beta and use it pretty heavily.
One of the major benefits of both Parallels Desktop and VMware is that they support virtualisation of Mac OS X when running on Apple hardware. Apple’s licensing currently doesn’t allow virtualisation of Mac OS X Client, so if you want to keep it all above-board, you need to use Mac OS X Server as the guest operating system.
I am currently building a Mac OS X 10.5 SOE for a client and being able to use VMware as my test deployment is saving a vast amount of time as I don’t need to either hook up another machine to my network (and find the physical space for it near my desk) or hook it up in Target Disk Mode, or use another partition or drive on my computer and have to reboot it all the time.
As you may have guessed, I’m not making my SOE using Mac OS X Server, and there are a couple of ways to trick VMware into booting Mac OS X Client.
The first method is to create a file called ServerVersion.plist that half tricks Mac OS X into thinking that it’s Mac OS X Server. This works, and is pretty easy to accomplish. It’s not perfect however as Mac OS X, via it’s about box, still thinks it’s Mac OS X, but other software, such as Software Update, gets terribly confused and won’t find any software updates available.
The second method is to modify some of the Application Support files that VMware uses to look for the ServerVersion.plist file. I’ve got a script that’s I’ve been using that is based on information posted to a few other blogs that will do this for you:
cd "/Library/Application Support/VMware Fusion/isoimages"
mv darwin.iso tools-key.pub *.sig original
perl -n -p -e 's/ServerVersion.plist/SystemVersion.plist/g' < original/darwin.iso > darwin.iso
openssl genrsa -out tools-priv.pem 2048
openssl rsa -in tools-priv.pem -pubout -out tools-key.pub
openssl dgst -sha1 -sign tools-priv.pem < darwin.iso > darwin.iso.sig
for A in *.iso ; do openssl dgst -sha1 -sign tools-priv.pem < $A > $A.sig ; done
What this does is modify the iso images in VMware’s Application Support folder and change one string – ServerVersion.plist to SystemVersion.plist (and as luck would have it, the two strings are exactly the same length) it then digitally signs the iso image as VMware expects it to be and then you’re up and running.
Copy the script, save it as something like vmwarefix.sh, chmod +x it and run it. It only takes a second or so. If you update your version of VMware you’ll most likely need to re-run it to enable you to boot non Server versions of OS X.
This then enables you to simulate a full client/server network environment, all virtually on one physical machine.