Installing Ubuntu Linux on a MacBook Pro

codeThis article describes how to install Ubuntu Linux on a MacBook Pro laptop. Although I chose Ubuntu Linux as the Linux distribution, you can easily replace that for whatever distro you like the most. It’s only a matter of choice and freedom.

Download Ubuntu Linux

Download the latest desktop ISO image from Ubuntu’s web site and burn it down onto a blank CD. I will use this CD to install Ubuntu Linux on the MacBook Pro and also for recovery purpouses in case anything goes wrong.

Install Apple Boot Camp

Boot Camp is some sort of BIOS emulation to allow some legacy operating systems that don’t support EFI to work on MacBooks. Although Linux does support EFI, it seems it only works reliably when used on Itanium-based machines and in combination with the ELILO bootloader. Anyways, I will use plain LILO and BIOS emulation provided by Boot Camp.

Download Boot Camp from Apple’s Web site and install it. After installation, go to Applications -> Utilities and launch Boot Camp.

The first time you run it, Boot Camp will offer to burn some Windows drivers onto a blank CD. We can skip this step since we are not going to install Windows. Next, we need to shrink the Mac OS X HFS+ volume in order to leave space for the Linux volume. I chose to assign 23GB of disk space to Linux, but your mileage may vary.

Install rEFIt

rEFIt is an extremely powerful GUI EFI bootloader. It allows you to boot up Mac OS X, Linux and even Winblows, graphically, while also allows one to peek inside EFI (using the built-in EFI shell).

Download rEFIt from here. You can choose whatever format you like — Mac disk image, ISO image or tar.gz. The latest version, at the time of this writing, was this.

Extract the /efi directory from the file you downloaded and place it into the root directory of your Mac OS X boot volume. For the tar.gz file you can run:

# tar -C /tmp -zxvf refit-bin-0.7.tar.gz
# mv /tmp/refit-bin-0.7/efi /

Install rEFIt:

# cd /efi/refit
# sh ./enable-always.sh

Install Ubuntu Linux

Once Boot Camp has been installed, the Mac OS X volume shrinked to leave space for the Linux partition, and rEFIt installed into your Mac OS X boot volume, we will start the Ubuntu Linux installation.

Insert the Ubuntu Linux CD into the CD-ROM, reboot while holding down the C key — boot from the CD-ROM — and wait for Ubuntu Linux to finish starting up. You should be dropped into a brown-coloured beautiful desktop.

Before installing Ubuntu Linux, make sure you have network connectivity. For wired Ethernet it’s usually as easy as plugging in an Ethernet cable and waiting for a DHCP lease. For Wireless it depends on whether you can get associated with a public/open Wireless Access Point. Fortunately, the MacBook Pro uses an Atheros-based wireless card, so it will just work out of the box, even when using WEP, WPA or WPA2.

To configure for wired Ethernet and DHCP:

# ifconfig eth0 up
# dhclient eth0

To configure for wireless Ethernet, via a public hot spot and DHCP:

# ifconfig ath0 up
# iwconfig ath0 essid GoogleWifi
# dhclient ath0

Check you have network connectivity, usually by pinging a well know host. I tend to use W.X.Y.Z as a check — don’t think it’s a good idea to tell the whole world the machine I use for ping purposes as it system administrator won’t like it much:

# ping -c W.X.Y.Z
PING W.X.Y.Z (W.X.Y.Z) 56(84) bytes of data.
64 bytes from W.X.Y.Z: icmp_seq=1 ttl=235 time=179 ms
64 bytes from W.X.Y.Z: icmp_seq=2 ttl=235 time=179 ms
64 bytes from W.X.Y.Z: icmp_seq=3 ttl=235 time=178 ms

— W.X.Y.Z ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2007ms
rtt min/avg/max/mdev = 178.278/178.993/179.612/0.734 ms

Now, double click the Installer icon you will find on the desktop. This will start the Install Wizard that will guide you during the installation process.

The next screens are rather easy to go through: choose your language, keyboard layout, username and password, time zone, etc. The important steps begin once you are prompted about the partition layout. Choose to manually edit the partition table and click on Forward. The next screen allows making changes to the partition layout. I strongly recommend on not making any changes and click on Forward again.

On the next screen, make sure the EFI GPT partition is not mounted — click into the dropdown list and select the blank entry. Mount the Linux partition, usually /dev/sda3 as / and then click on Forward.

  • NOTE:I didn’t create a swap partition, so the installer complained at a later point. If your computer has enough RAM (>192MB), you can go on with the installation and create a swap file once the system is installed and ready.

At the end of the installation, GRUB will fail to install. That’s totally normal. Instead, we will use and install LILO as the boot loader. Open a terminal and run the following commands:

# mount -t proc none /target/proc
# mount -o bind /dev /target/dev
# chroot /target

The last command places ourselves into the Linux filesystem of the newly installed Ubuntu Linux.

Next, install LILO and the SMP kernel — since MacBooks have an Intel Core Duo:

# apt-get install lilo lilo-doc linux-686-smp
# cat > /etc/lilo.conf << EOF
> boot=/dev/sda3
> default=Ubuntu
>
> map=/boot/map
> delay=20
> image=/vmlinuz initrd=/initrd.img
> root=/dev/sda3
> append=noapic
> label=Ubuntu
> read-only
> EOF
# lilo -b /dev/sda
# exit

  • NOTE: I had to append the noapic option to the kernel command line due to a sporadic kernel panic while booting related to the APIC stuff. Since these MacBook laptops are SMP systems, APIC is expected to replace the aging ISA-compatible way of assigning IRQs. However, it doesn’t seem to work reliably, at least on my laptop.

Exit the chroot jail — usually by running “exit” or typing ^D — and double check you are not inside the chroot jail anymore:

# parted
(parted) print

Disk geometry for /dev/sda: 0kB - 100GB
Disk label type: gpt
Number  Start   End     Size    File system  Name                  Flags
1       200kB   210MB   210MB   fat32        EFI system partition  boot
2       210MB   76GB    76GB    hfs+         Merged_untitled
3       77GB    100GB   23GB    fat32        Untitled

(parted) set 3
Flag to change? boot/hidden/raid/lvm/hp-service/msftres? boot
New state? on/[off]? on
(parted) quit

Parted understands the new EFI GPT partition table format, while fdisk does not. I think that’s the reason why, after the Ubuntu installer formats the partition and starts copying files onto it, all partitions except sda1 vanish from fdisk‘s listing.

Since EFI boot support is still experimental, we will use standard LILO (it seems GRUB uses certain BIOS calls which are still not supported by Boot Camp BIOS emulation). However, this requires syncing the EFI GPT partition table with the old-fashioned, BIOS-compatible MBR partition table or else Linux won’t boot. We will do this syncing from the rEFIt main menu at a later point.

Check that LILO got installed by running:

# hexdump -C /dev/sda | less

Look for the string LILO at the beginning of the listing. If it’s missing, try reinstalling LILO again.

Before rebooting, we need to unmount all the partitions that we mounted before:

# umount /target/proc
# umount /target/dev
# umount /target

I’ve seen the last command failing to unmount the root filesystem a couple of times. It seems some process has opened files on it, but I’ve been unable to catch it up by using fuser or lsof.

# reboot

Enter the rEFIt Partition editor and make sure the MBR/GPT maps are in sync.
Now, we are ready to boot into Linux, although there are some rough small things we need to get fixed, like the video resolution and aspect ratio.

Resources:

14 thoughts on “Installing Ubuntu Linux on a MacBook Pro

  1. Perfect instructions! I just used followed your procedures this morning to install Ubuntu on my new MacBook (2GHz Intel Core Duo/120GB 5400RPM SATA/2GB DDR2). I would suggest adding instructions for becoming root to do the chroot work installing LILO (# sudo su). I’m a fairly savvy Linux Ubuntu user but had forgotten how to do this on the Live CD.

    Thanks,
    Carl H.

  2. Pingback: » Re: installing Ubuntu on Mac - ubuntu.sitebolt.net

  3. I just spent a frustrating few hours trying to resolve a boot issue with Ubuntu on a MacBook Pro. Everything appeared to be fine after following your instructions EXECPT the boot would fail with a “Cannot open /dev/root” error. After much fiddling with lilo.conf and even trying grub, I eventually worked out that the problem was the BIOS parameters for accessing the hard drive.

    To solve the problem and get the installed kernel to boot, I had to append “root=/dev/sda3″ to the kernel boot options. You can do this by updating your lilo.conf to say:

    append=”noapic root=/dev/sda3”

  4. Just got Xubuntu working on my shiny new MacBook Pro. This worked perfectly, although it’s worth noting that I needed Greg’s workaround as mentioned above – with your default lilo.conf I got a “ignoring entry ‘boot'” message along with “Added entry ‘Ubuntu'”. On rebooting, then choosing Linux from HD in rEFIt, the boot process (as far as I can tell) just hung. I may have gotten the same error as Greg, but rEFIt has a splash screen which I’m fairly sure would have hidden any error messages.

    I rebooted into the liveCD, opened a terminal and sudo -s’d, and then ran:

    mount /dev/sda3 /mnt
    mount –bind /proc /mnt/proc
    mount –bind /dev /mnt/dev
    mount –bind /sys /mnt/sys
    chroot /mnt
    vim /etc/lilo.conf (changed the ‘append’ line to say append=”noapic root=/dev/sda3″)
    lilo

    exited out of the chrooted session, and then umounted it all again before rebooting. Perfection 🙂
    Thanks again!

  5. Hi mate! Appending the kernel option “root=…” in addition to lilo’s own “root=…” saved NOT JUST the day, but finally put an end to a week of frantic searching for buggy behaviour that started occuring on my macbook after months of normal booting. Finally I can get to work on my thesis again. Thanks a million for your in-depth explanation!

    Best regards,
    Erik

  6. Ok, so I go through all of the above steps, I get out of chroot. run parted. When I try the ‘print’ command, I get the following error: “Error: Unable to open /dev/hda – unrecognised disk label.”

    What do I do?

  7. Just one thing, to install Ubuntu on an external disc, do I still follow these instructions?

  8. I have a series of questions about how to install Ubuntu 6.06 LTS on a 17 inch Mac Book Pro with a Intel Core Duo Processor

    1. Will diskutil force me to reinstalled Mac OS X?

    2. What are the commands in Refit to sink GPT with MasterBootRecord?

    3. When should sinking take place?

    4. What is a chrooted jail?

    5. Can Ubuntu still boot If Windows becomes damage?

    6. How and what point do I install lilo?

    7. How do I make the swap file and tell if it is active?

    8. Why is SMP kernal needed?
    Can I use the standard x86 install for a PC?

  9. Hi, thanks for your manual. I just tried to install grub in /dev/sda3 (My linux root partition), and it seems that rEFIt boots fine from the partition boot record. I don’t know about the MBR, maybe it works as well.

  10. Pingback: Free Linux Guides: Links

  11. Pingback: Free Linux Guides: Install Linux Without Damaging Windows

  12. I have to express some appreciation to you just for bailing me out of this particular circumstance. Just after surfing through the the net and getting proposals that were not powerful, I was thinking my life was well over. Living minus the answers to the issues you have resolved through your good site is a critical case, as well as those which may have adversely affected my entire career if I hadn’t noticed your site. Your primary skills and kindness in playing with a lot of things was priceless. I am not sure what I would’ve done if I had not encountered such a subject like this. I am able to at this time relish my future. Thank you so much for this skilled and results-oriented guide. I will not think twice to propose the blog to anybody who should get guide on this subject matter.

  13. Felipe Alfaro Solana » Blog Archive » Installing Ubuntu Linux on a MacBook Pro This web site can be a walk-by for all of the info you wished about this and didn’t know who to ask. Glimpse here, and also you’ll positively uncover it. Regards, Indonesia Furniture

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s