Installation of Debian on a MacMini

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)