30 Dec 2014

Mac OS 10.6.8 ‘Virtual Dual Boot' Migration using VMWare Fusion

Apple, for reasons known only to it, killed Rosetta – its PowerPC compatibility layer – starting with versions of Mac OS after 10.6.8. They also, for reasons that are similarly opaque but seem related to discontinuing Rosetta, make it intentionally difficult to virtualize non-server versions of OS X prior to 10.7.

My read on this is that it’s all part of the Great Apple Upgrade Treadmill, which is their process of intentionally making the entire Apple hardware/software ecosystem obsolete every few years, forcing everyone to buy new stuff. It sucks, and I hate it.

As a way around this, and because I have a fair bit of old hardware hanging around that’s dependent on software that will only run on PowerPC Macs (of which I don’t have any, anymore) or in Rosetta, I needed a way to run OS 10.6.8 in a virtual machine, while allowing my machine’s ‘bare metal’ OS to be upgraded.

It’s a bit of a challenge and not for the faint of heart, although it can be done.

Start state: Mac Pro running OS 10.6.8 (Snow Leopard), which is the last version of Mac OS that has Rosetta installed for compatibility with PowerPC applications. This is a capability we want to preserve.

End state: Mac Pro running OS 10.9 or later on the bare metal, with 10.6.8 running inside a VMWare Fusion container. Machine can also boot up directly into 10.6.8 on the bare metal, for full utilization of the hardware (games, 3D accel., etc.) if required.

Process:

  1. The first step is simple: Install OS 10.9 to a separate hard drive, preserving the hard drive that has 10.6.8 on it. When I upgraded, I installed a new hard drive for the new OS, making this pretty easy (in general, if you replace boot drives at the same time as major OS upgrades, you won’t have to deal with failing boot volumes in your primary machine—a small expense for a lot of avoided pain).

  2. Install VMWare Fusion 6.0.3. (That’s the version I used; other versions may also work but you’ll need some different hacks.)

  3. Make sure VMWare Fusion isn’t running, and install/run the “VMWare Unlocker” from InsanelyMac.com. This is required to run a 10.6.8 non-Server guest. This is sort of the key to the process, and it patches your copy of VMWare to remove the asinine checks that Apple apparently mandated that VMWare put in to enforce their obsolesence-suicide-pact EULA.

  4. Don’t update Fusion. If you do, you’ll have to re-install the Unlocker.

  5. Open Fusion, create a new VM. (You can save the files wherever you want; it defaults to ~/Documents/Virtual Machines/ which I think is an obnoxious place to put them, but whatever.) Choose “Mac OS 10.6 Server (64 bit)” as the guest OS type. Or 32-bit, if you’re on a 32-bit machine or trying to boot a 32-bit guest image, although I haven’t tried this. Close the VM and quit Fusion.

  6. Following the instructions here, determine the disk identifier of the hard drive containing 10.6.8. E.g. “disk2” or “disk0” or something similar. Make sure the 10.6.8 volume is unmounted!

  7. From a terminal, run:

    /Applications/VMware\ Fusion.app/Contents/Library/vmware-rawdiskCreator \
    create /dev/disk1 fullDevice ~/external-hdd ide
    

    You will need to change the disk1 part as needed. Basically, what this does is it creates a VMDK file (external-hdd.vmdk) that points to the specified block device; it doesn’t actually copy any data over. I have it creating the vmdk file in the current user’s home directory, but you can put it wherever.

  8. Locate the virtual machine file (in ~/Documents/Virtual Machines/ or wherever) that you created earlier in Fusion. Right click on it, do ‘Show Package Contents’, and move the external-hdd.vmdk file created with the last command into it.

  9. Using a text editor, modify the .vmx file, also inside the package for the virtual machine, and add the following two lines onto the end:

    ide1:0.present = "TRUE"
    ide1:0.fileName = "external-hdd.vmdk"
    

    Note that this differs from the “techrem” instructions linked above; its procedure specifies the drive ID as ide1:1 which is bus 1, slave. That causes an error when I tried it in Fusion; it wants the drive to be bus 1, master instead. YMMV.

    Also, if you changed the name of the vmdk file created using vmware-rawdiskCreator to something besides external-hdd, then you need to change the name of the vmdk appropriately.

  10. Now, you should be able to fire up Fusion and boot the VM. It will prompt you to authenticate as an administrator, saying that it needs privileges to access a Boot Camp volume (that is apparently what Fusion thinks the raw device vmdk is).

    The first time I booted, it took a long time to actually start up at a grey screen with the Apple logo, but then it did boot. Be patient. If you get a message saying that the “operating system is not supported and will now shut down”, or something to that effect, then it means the Unlocker modification didn’t take, and you need to retry that step (make sure the unlocker version you’re using supports the version of VMWare you’re trying to patch; they are pretty sensitive to particulars).

    As soon as you get booted up, you will probably want to change the virtual machine’s Machine Name (in System Settings, Sharing), and perhaps also the machine’s IP address if it’s statically configured. I set mine to Bridged networking and let my DHCP server sort it out.

At this point, you have a 10.9 machine, running 10.6.8 in a VM, giving you the ability to run PowerPC applications via Rosetta. It’ll be slower than molasses, but it does work, after a fashion. And because the VM references a physical drive that’s still installed in your computer, you also have the option of booting directly from that disk and running 10.6.8 on the bare metal.

Further Reading:

This entry was converted from an older version of the site; if desired, it can be viewed in its original format.