Installation of Debian on a MacMini

Recommended Prerequisite

Verify that your computer has the latest firmware: http://support.apple.com/kb/HT1237

The latest firmware adds a BIOS compatibility mode, including detection of BIOS-bootable disks and CDs in the built-in boot volume chooser. In addition, if you want good graphics support in Linux, you must boot it using the BIOS compatibility mode. This is because the X.org / XFree86 drivers for Intel and ATI, as well as the Linux text console, rely on the Video BIOS and Apple's firmware only provides a Video BIOS when booting in BIOS compatibility mode. Without it, you only get unaccelerated frame buffer graphics. Booting in the BIOS compatibility mode also means using either the LILO or GRUB bootloaders, and having an MBR partition table (either hybrid GPT/MBR or plain MBR).

If you are unwilling or unable to update the machine's firmware, [http://elilo.sourceforge.net/ elilo] (the EFI Linux Loader) can be used to boot the Mac mini. However, this requires a specially prepared kernel and has some drawbacks (like not having 2D/3D accelerated graphics.) James ?McKenzie published a [http://www.madingley.org/macmini/ hack to elilo] that activates the Video BIOS without activating the full BIOS compatibility mode. This actually allows the accelerated drivers to work without booting through LILO/GRUB. Unfortunately it hasn't been updated in months.

In consideration of all of the above, updating the computer's firmware is the simplest way to easily install and boot Linux and also get 2D/3D graphics acceleration.

Dual/Triple Boot

If you're not planning to dual boot OS X and Debian (or triple boot OS X, Debian and Windows), you can skip this step.

Otherwise, Mac OS X 10.4.6 and later have online resizing of HFS+ volumes and support for hybrid GPT/MBR partition tables in Disk Utility. To boot multiple operating systems, use OS X's tools to split up your drive and make room for everything. Remember that booting in the BIOS compatibility mode means having an MBR partition table (either hybrid GPT/MBR or plain MBR) so be sure to make the needed changes to your hard drive before continuing, and remember to select either the LILO or GRUB bootloaders from within the Debian installer so that you can access the BIOS compatibility mode described above.

Download The Installer

If you have the [http://support.apple.com/kb/SP34 early] or [http://support.apple.com/kb/SP29 late] 2006 Mac mini models, go to http://debian.org/CD and download the installer for i386. If you have the [http://support.apple.com/kb/SP7 mid 2007] model, you can use either the i386 or AMD64 installer.

Once the download is complete, you can use Disk Utility to burn the installer to CD or DVD and (thanks to the BIOS compatibility mode in later firmware versions), directly boot the CD by holding down the C button on your keyboard when the computer starts.

Once you've booted into the installer, you can proceed with installation. See the [http://debian.org/releases/stable/installmanual installation guide] for information on how to use the installer. Remember to select either the LILO or GRUB bootloaders from within the Debian installer so that you can access the BIOS compatibility mode described above.

A useful note is that, after the installation is complete, it is normal for your computer to boot up to a folder icon with a question mark. Assuming that the GRUB bootloader and everything was installed successfully, the computer will sit there for approximately 15 seconds and then being to boot.

For dual or triple boot situations, hold down the Option key on your keyboard and the built-in boot volume chooser will let you select what you'd like to boot from.

The rest of this document remains purely for historical purposes for installation without the latest firmware and the BIOS compatibility mode that it provides.

Legacy Installation Instructions

I've tried several howtos to install Linux on my mini. None of them worked perfectly. So I decided to document my installation procedure here.

I decided to install Debian to an external USB disk. You need the following for this howto:

Install EFI boot loader

First boot MacOS. You need to download the precompiled Mac disk image from the [http://refit.sourceforge.net/#download rEFIt] project. Open the dmg and start rEFIt.mpkg which will install the EFI boot loader.

Compile Kernel

Now you need your working Debian machine. I am using the latest git tree and the intel mac [http://cvs.sourceforge.net/viewcvs.py/mactel-linux/misc/misc/ patches] from [http://www.mactel-linux.org/ Mactel-Linux].

mkdir MacMini && cd MacMini
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6
cvs -z3 -d:pserver:anonymous@mactel-linux.cvs.sourceforge.net:/cvsroot/mactel-linux co -P misc
mv misc mactel
cd linux-2.6
patch -p1 < ../mactel/misc/imac-2.6.16-rc6.patch
make mrproper
cp ../mactel/misc/config-2.6.16-rc5 .config
make menuconfig
make

Set up hard disk

Connect the hard disk and create some partitions. The first primary partition should be a vfat partition. It is needed to boot elilo from the EFI bootloader. Because my mini has a lot of RAM I left out the swap partition. But it might be a good idea to create one. Here my partition table:

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          30       30704    c  W95 FAT32 (LBA)
/dev/sdb4              31       38204    39090176    5  Extended
/dev/sdb5              31       14336    14649328   83  Linux
/dev/sdb6           14337       38204    24440816   83  Linux

The next step is to format the partitions:

mkfs.vfat -n Debian /dev/sdb1
mkfs.ext3 /dev/sdb5
mkfs.ext3 /dev/sdb6

The volume label of the vfat partition is diplayed late in the EFI bootloader.

Set up kernel and elilo

For booting the Linux kernel you need the EFI aware version of lilo called [http://elilo.sourceforge.net elilo]. You can get a working binary from the mactel guys [http://svn.sourceforge.net/viewcvs.cgi/mactel-linux/trunk/misc/boot/ here]. You need the the e.efi (elilo itself) and the configuration file elilo.conf. Copy them and the build kernel into the root of the vfat partition. As last step you need to adjust the elilo config file. I had to change the root device to /dev/sdb5 and the framebuffer type to mini (instead if i17 or i20).

mount /dev/sdb1 /mnt
cp mactel/boot/e.efi mactel/boot/elilo.conf /mnt
cp linux-2.6/arch/i386/boot/bzImage /mnt/vmlinuz
vim /mnt/elilo.conf
umount /mnt

Bootstrapping Debian

The next step is to bootstrap Debian. The man page of debootstrap provides some useful examples. After bootstrapping you need to setup the fstab, hosts and hostname files.

mount /dev/sdb5 /mnt
debootstrap sid /mnt http://ftp.de.debian.org/debian/
vim /mnt/fstab
vim /mnt/hosts
vim /mnt/hostname

In my setup they contain the following things:

$ more /etc/fstab /etc/hostname /etc/hosts
::::::::::::::
/etc/fstab
::::::::::::::
/dev/sdb5       /       ext3    defaults        0       1
tmpfs           /tmp    tmpfs   defaults        0       0
proc            /proc   proc    defaults        0       0
/dev/sda1       /boot   vfat    defaults        0       0
/dev/sdb6       /home   ext3    defaults        0       1
::::::::::::::
/etc/hostname
::::::::::::::
Rincewind
::::::::::::::
/etc/hosts
::::::::::::::
127.0.0.1       localhost

After mounting the proc filesystem, you can chroot into your new installation an install some additional software with dselect.

mount proc /mnt/proc -t proc
chroot /mnt /bin/bash
dselect
exit
umount /mnt/proc
umount /mnt

If the umount fails because the filesystem is busy you must terminate the daemons that were started during package installation.

Boot into the new system

Now plug your usb disk into your mini and boot it. After the chime sound the rEFIt bootloader should appear. In my setup it displays among other menu entries the possibility to boot e.efi and the installed MacOS. If you select e.efi than elilo gets loaded and stops at its prompt. Just press return to load the default kernel image. If everything is set up right, you should see the framebuffer console with the two penguin logos. The default resolution with a mini is 1024x786. If you own a bigger display, you could specify the resolution at the kernel parameter line in elilo.conf. Or if you are as lazy as me, change the imac patch to use your resolution.

Setting up X11

The integrated intel video controller is not supported by Sid yet. You must use the fbdev driver to get a working X11.

apt-get install xserver-xorg x-window-system xterm
dpkg-reconfigure xserver-xorg

During the xserver configuration select the fbdev driver and let the driver use the kernel frambuffer interface. Select 24bit as default depth. Ather finished the configuration you must tweak it a little bit to tell the driver that the framebuffer uses 32 bits per pixel. Add the Line "?DefaultFbBpp 32" after the ?DefaultDepth entry in the Screen section of the xorg.conf file.

vim /etc/X11/xorg.conf
Section "Screen"
        ...
        DefaultDepth    24
        DefaultFbBpp    32
        ...
EndSection

Installation on the internal hard disk using DebianInstaller (daily build 2007-03-16)

Only the most important parts (which probably also apply to Etch once released)