This is a semi-blogpost semi-tutorial on performing a triple boot on my 2006 iMac with my three favorite operating systems.
If you would like to skip to the step-by-step, click here.
I received my 2006 iMac, along with a 2006 Mac Pro for free from a family member in the summer of 2023. I didn't really care for polycarbonate intel macs at first but now I've grown a bit of a soft spot for my iMac and since then I have the urge to use it as much as I can.
To be honest, I don't really remember when I first wanted to set up a triple boot. I had played around with different operating systems on it, and at some point in the past year I wanted to try a modern linux distribution on it. My linux distribution of choice is Debian, and I tried installing it on a partition I made. Unfortunately, for reasons I would not know until later, I had no success in getting it to boot. I gave up and just installed a Snow Leopard + Windows XP dualboot for a while until I could figure out a solution later.
As of today, I have finally figured out and finished installing Debian 12.8 on my 2006 iMac, with fully functioning graphics drivers, alongside Mac OS X 10.6.8 Snow Leopard and Windows XP SP3.
All early intel macs have one well known quirk that complicates Linux installations: A 32-bit EFI. When booting off a USB drive, these macs can only detect 32-bit EFI bootloaders, which most linux distributions don't include. Additionally, booting off the disc drive to take advantage of the BIOS emulation has its own set of issues. For most common Linux distributions, the guide by Matt Gradient has steps to resolve the BIOS emulation issues to get the operating system installed.
However, it turns out that the Debian net installer includes a 32-bit EFI bootloader (as of Debian 12), which completely negates this issue. Huge thanks to this video by ctrl-alt-rees that made me aware of this.
Before finding this out, I was experimeting with the debian multi-arch iso that this git repo guide by jmstriegel (we will be revisiting this guide later) mentions. Unfortunately, it was never updated for Debian 12 so I would have either needed to settle with Debian 11 or do a distro upgrade.
Alternatively, a 32-bit distribution would work. But I have a 64-bit CPU so I would rather not use it if possible.
My real issue with installing linux on this iMac was getting the graphics to work. Debian would successfully install, but then when booting it for the first time the screen would not show anything. By adding the nomodeset
parameter to grub, it would at least boot. Of course, disabling modesetting means no graphics acceleration, which means the computer is not very fun to use. Therefore, I spent a long time searching the internet to try to solve the issue.
The git repo guide I had previously mentioned solved this issue by doing a BIOS install of Debian. It appears the issue only happens on an EFI boot, and thus a BIOS boot works normally. Unfortunately, a BIOS install either involves formatting the drive as MBR (no MacOS dualbooting, which is a bit of a dealbreaker for me), or figuring out how to do a hybrid MBR. I had considered this route multiple times but I always ended up going back to figuring out how to get EFI booting working.
Upon enough research, I figured the issue had to do with the vbios not being exposed when booting in EFI mode. Basically, the iMac only reveals the vbios for a short period of time when booting up, and when it comes time for linux to look for it in memory it is not there. The graphics drivers need information in the vbios to work, so the screen will be blank. Supposedly, when booting using the debug
kernel parameter, the message [drm:radeon_init] *ERROR* No UMS support in radeon module!
could be found in dmesg. And through using SSH, I confirmed this was exactly what was happening. As to why it mentions "No UMS support", I am pretty sure it is trying to fall back on user modesetting which isn't really a thing in modern Linux. I could be wrong though.
The way that I tried to resolve this issue at first was by installing refind. Supposedly, refind can "extend" the visibility of the vbios so that linux is able to read it to boot properly. However, this would require booting using an EFI stub. Despite all my best efforts, I could not figure out how to get this working, and my refind boot picker would only ever show GRUB. I would be interested to know if anybody can figure out how to get it to work for old macs such as mine.
The initially daunting option that I tried next was to recompile linux with a change to the driver. And thankfully, with the right guide this did work for me. Debian 12 was able to boot with graphics acceleration. I have to give a big thanks to this guide for helping me get this working. At this point, I wiped my hard drive and set up the triple boot.
I highly reccomend ~512gb or more if you want to do this yourself. I used the 250gb hard drive that came with my iMac, and I find 80gb per partition is usable but not ideal. If you have a 160gb model, you may not have enough room for three operating systems.
- Do an install of Mac OS X Snow Leopard, and install all updates
- Use Boot Camp Assistant to create a Windows Partition
- You might need to download boot camp drivers. Since I have a Snow Leopard disc, I did not need to
- Give Windows however much of the drive you want it to have
- Do not install Windows yet, choose "install later"
- Using Disk Utility, split the Mac OS partition into a third "linux" partition.
- With the net installer flashed to a USB drive, install Debian onto the iMac.
- When partitioning, I deleted the third partion I made for linux. Then, I set up a 1GB partition for /boot, an 8GB partition for swap, and the remainder for the root partition.
- I chose XFCE as my desktop environment
- Once installed, Debian will not appear in the boot picker.
- Now install Windows XP to the computer
- In case you don't know, hold down the option key to choose the installation CD
- Make sure to format the bootcamp partition as NTFS, I always have issues keeping FAT or upgrading to NTFS
- In case you don't remember, Install the bootcamp drivers
- (Optional) Add Debian to the boot picker
- Boot into Mac OS, run
mkdir /Volumes/efi
and thensudo mount -t msdos /dev/disk0s1 /Volumes/efi
to mount the EFI partition - Create a
Boot
folder in the EFI folder and moveEFI/debian/grubia32.efi
there - Rename this file to
bootia32.efi
- You should now see
EFI Boot
in the boot picker
- Make sure all three operating systems are bootable. Mac OS and Windows should be fully working. Debian shouldn't work yet, but Grub should appear.
- Follow this guide Basically,
- When GRUB appears, press E, and add
nomodeset
on the linux line afterro quiet
. Then press F10 to boot - Download the linux kernel and save it to your home folder. I chose 6.1.128 as of writing this, mostly because it was the closest to what Debian has. I don't believe the choice should matter that much
- Extract the kernel with
tar xvf linux-[linux version].tar.xz
- Install depenencies with
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
- I also found that I needed to install another depencency with
sudo apt-get install dwarves
- Download the modified radeon_bios.c file and place it in `drivers/gpu/drm/radeon/'. Replace the file already there
- cd into the extracted folder, and run
cp -v /boot/config-$(uname -r) .config
to copy your current config file - run
make menuconfig
to make any other changes you want. Select Save and then Exit when you are done.- I personally disabled CPU mitigations because I heard it increaces performance. However, it is not reccomended for security. You can also do this as a kernel arguement if you prefer
- Run
make
to buld the kernel. This takes ~10-12 hours on the computer itself. You can also try moving it to a faster computer if you want to cut this time down - Run
sudo make modules_install
, and thensudo make install
to install the kernel - Run
sudo su
to execute the next commands as root - Download this script, Copy it as root by going
cp [path to script] /usr/share/initramfs-tools/hooks/radeon
- Run as root
chmod +rwx /usr/share/initramfs-tools/hooks/radeon
- Run as root
mkdir -p /lib/firmware/radeon
- Download the vbios and then put it in the folder you just created by going
cp [path to vbios] /lib/firmware/radeon/vbios.bin
- I used my own vbios I had dumped previously. I won't include a tutorial on doing this yourself, but you can search for it. This also means I can't confirm if the above vbios works or not.
- (Optional) I found my initramfs was really big, so I edited
/etc/initramfs-tools/initramfs.conf
and set MODULES=dep. I then ranupdate-initramfs -u -k [linux version]
- If you did not do the above step, run
update-initramfs -u
- Follow the github repo guide from after installing Debian. The important parts are:
- Since I used XFCE, I didn't need to disable Wayland. But if you are using GNOME, edit
/etc/gmd3/daemon.conf
to add the lineWaylandEnable=false
- Edit
/etc/apt/sources.list
and addcontrib non-free
to the end of the first line withmain
, such that it ismain contrib non-free
. - Run
sudo apt update
thensudo apt install firmware-amd-graphics
andapt-get install firmware-b43-installer
- Edit
/etc/default/grub
and addradeon.dpm=1 radeon.modeset=1 radeon.pcie_gen2=0
to theGRUB_CMDLINE_LINUX_DEFAULT
line. - Run
sudo update-grub
(The guide calls it grub-update, which I don't think is correct) - (Optional, if you want iSight) Run
sudo apt-get install isight-firmware-tools
, and choose the iSight graphics when prompted. Since you should have Mac OS dualbooted, replace the/MacOSX/
part of the path with/Media/[user]/Macintosh HD/
. In case that doesn't work, you can run
sudo ift-extract -a /media/[user]/Macintosh\ HD/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport
- Reboot, and check to see if Debian boots without
nomodeset
. If so, you should now have a working triple boot.
From testing, performance is fine under Debian but not perfect. Of course, I am not using an SSD so performance for me is not as good as it can be. When using Firefox, heavier social media sites have a tendancy to feel slow but still usable. Youtube seems to only play back videos at full speed when set to 340p without going into fullscreen. There is likely ways to tweak performance to make this work better. I tried h264ify and found no difference in Youtube Playback.
Chromium on the other hand works a lot better. Heavier social media sites work better than in Firefox. Youtube is also able to play at 720p at full speed. However, lots of graphical issues are present, particularly on Youtube and in Settings. I am looking into if there is any way to fix these glitches.
(Edit) I have now tried a third web browser, Sea Monkey. It is a modern(ish) browser based off of firefox with other built in features like an email client. It has neither of the issues of Firefox and Chromium, with Youtube videos playing back at 720p no problem. Unfortunately it seems to be either too old or slightly broken on some modern websites. I guess its a bit like the saying. Fast, stable, modern. Pick two.
Outside of internet browsing, the computer is nice to use. Things such as file management and Libre Office work really well. I also made sure to try some games. I first attempted to run Minecraft, but the old OpenGL available didn't seem to work. However, I was able to run Half Life, which on the lowest resolution was able to hit 60fps most of the time. It seems that light games that work with old OpenGL drivers run fine.
(Edit) I noticed an odd issue with the webcam where sometimes it isn't recognised. It turns out that you can't restart the computer from MacOS into Linux, or else the webcam will not work. Instead, you have to fully shut down the computer and then boot it into linux.
I hope this helped you get Debian working on your old iMac. Thanks to all the guides I have mentioned for helping me get it to work. Getting the triple boot working was very fun and I hope it helps you get as much use out of my old iMac as possible.