I recently bought a Macbook Air, wanting to expand my repertoire with iOS applications. (Despite how much I speak out against Apple, they have two things going for them: build quality and platform awareness; two things which are very hard to pass up as a developer.) However, having used Ubuntu for my schoolwork and also wanting Windows for a future job at Microsoft, I knew that I would struggle to be able to use a Mac without my trusty developers' operating systems.

That left me with one choice: multiple operating systems in a dual- or triple-boot fashion. But I'm ambitious with technology, so I was going all-in on this. I found this LifeHacker tutorial and planned to follow it to the tee, with the addition of a shared partition to transfer files easily between operating systems.

Mac OS X

Mac OS was obviously the easiest install. I never had any problems with it, nor booting to it, during the entire process. If only the other two had played so nicely...

Windows 8

Windows was a fairly simple start; I wanted to use a CD but the Air has no CD tray and I didn't want to lay down a bunch of bucks on an external optical drive. Instead I used the Windows USB tool to make the bootable USB stick. Once I had rEFIt working, I installed Windows with basically no problem, until I got to the Windows 8 "personalize" screen, where I had no keyboard or mouse input (which were required to continue). I reinstalled the OS, but that had no effect; I then tried making the Windows boot USB with Boot Camp Assistant; this fixed an issue with the screen resolution of the Windows 8 install, but I still had no keyboard input.

After hours (literally) of attempting to work around it, and trying to determine whether my USB sticks were 2.0 or 3.0 (as a result of this article), I found one person in some forum somewhere that suggested booting to Mac OS, shutting down, then booting to Windows 8 again. Boom, worked, Windows 8 was done! But we're just getting started.

Ubuntu

Ah, the shining star at the end of the path. Or so I thought. So at first, since I had the Ubuntu 12.04 ISO around (and was using that on my previous laptop), I went for it. The first time I had it installed, it worked perfectly, except for the network driver, which I was able to download from the Ubuntu site and transfer to my Mac and install. Boom, done. Until I rebooted to a solid purple screen. Lovely.

Not just that, but when booting to either Ubuntu or Windows (not Mac OS, somehow!), I got the Ubuntu boot menu (GRUB) and had to select my OS a second time from that. This was half my own mistake and half not; I should have specified the bootloader drive as the Ubuntu drive (and not made a separate partition for it), but the tutorial was for a pre-12.04 installer which had the option in a different place, so I never got the chance to do so.

So I did what any moron would do: I uninstalled Ubuntu and wiped the GRUB bootloader out. Stupid mistake, as I could no longer boot to Windows. Luckily, I was able to Google-fu this issue and find out that BootRec could fix it with ease. It worked like a charm, and Windows 8 was booting again. At some point, to get the booting proper, I had to create an hMBR (hybrid Master Boot Record), though this was pretty easy once I found a thorough blog on it. (Will link this later if I find the blog; my history is so polluted with help files on these issues that it's a needle-meet-haystack problem.)

I proceeded with Ubuntu; at this point, I upgraded to 13.10 (since the Ubuntu site does not list 12.04 troubleshooting for an Air 6,2, which I have). More problems: I couldn't even get into the OS to begin with; same purple screen. So, I tried in recovery mode, and got this lovely message as the last output before it hung:

smpboot: Booting Node 0, Processors #1

And that was it for me. I couldn't get past it, nor input anything. I read dozens of pages (including a very technical-ish bug report) about adding boot flags to GRUB, and after (literally) a half-dozen hours of searching, I found the nosmp flag which disables multi-core processing and allowed me to boot.

FINALLY.

Except... I wanted both cores. I told myself that, if there was no way to get it booting properly, nosmp would suffice. But I had to try.

Big mistake.

The only solution to this is to make Ubuntu boot via EFI, not through Legacy boot mode, which GRUB does by default. This process sucks. It sucked even more as I could not get the Boot Repair Disk utility (necessary for setting up EFI) to be bootable; I didn't realize until much later that I could download a standalone version to a non-bootable USB and run it from there. D'oh.

But the process itself was so, so shady: it asked me to do several weird boot organization commands, and eventually failed with an error (as had many of the commands I entered, such as trying to force grub to install, despite errors, using --force; DON'T DO THIS), but I hit "Forward" anyway; I was all-in.

And it worked. Seriously! Magically, somehow, despite all the errors and crap, it finally worked. WIth a small hitch:

On my rEFIt boot screen, I have a dozen partitions listed:

  • Windows Boot Screen
  • bootx64.efi
  • grubx64.efi *
  • MokManager.efi
  • shimx64.efi
  • Mac OS *
  • Mac OS recovery
  • Linux
  • Windows *

The items starred above are the three operating system boot options (Linux, Mac, Windows, respectively). I managed to get rid of the other three .efi options by renaming them to .efi.bkp in the /boot partition. The others remain, but it's a small price.

More problems

The only big problem beyond OS installation is getting a shared partition installed. You can enjoy that lovely chronicled mess of garbage on SuperUser. The other being that I now have three browser histories to manage, but heck, that's the price I must pay.

Conclusion

A very brief conclusion for you: triple-booting has a huge pay-off if you're willing to invest the time tweaking, fiddling, and yelling to get it set up. That's all I have to say.

Good luck to anyone out there; I hope that at least one person (aside from me, obviously) can benefit from my struggles.

Next Post Previous Post