Installation Guide for Ubuntu/Linux Mint/Debian on a Mac mini

Drobo

Explains about how to install Linux on an Apple Mac Mini late 2012 hardware, configuration of device drivers such as built-in Broadcom B43 wifi controller.

Installing Ubuntu/Linux Mint on Macmini is easy, but getting it to work the way you normally want a PC to run is a bit difficult (meaning, run smoothly and making all peripherals work) Smile | :) I am trying to cover all the issues I had with linux installation process and getting Apple hardware to run happily with Linux.

Few things before we start,

  • I assume that you have a reasonable knowledge in *nix based OSes and commands.
  • You need a stable power supply Wink | ;)
  • A Mac mini late 2012 with OSX in a perfect state (if not you can reinstall OSX to start with, I did that)
  • A keyboard and mice
  • A monitor or two so you can see whats going on Smile | :)

NOTE: I reinstalled macosx before installing Linux and recreated the partitions table with two (using apple disk utility), since I had a 1TB drive, I split it into two equal partitions and reinstalled mac on the first (512GB was used).
I left the second partition untouched, meaning unformatted. I dont think this is a must but just saying what my configuration was…

Intro
Macmini comes with an UEFI bootloader, the easiest way to get multiple OSs to run with the machine is through rEFInd, you can download it from the link below.
As far as I can see rEFInd is a software layer for UEFI based computers so that you can esily run multiple OSes with a nice menu driven interface so that users can switch between them easily.
Download the “Binary zip file” from the link below.

After downloading, extract the zip, ‘cd’ into the folder and run “sudo ./install.sh”
it will show some messages and install the complete installation.

Reboot, if rEFInd is installed correcty you will see the menu at the time of booting…

(ver 0.7.4 as of 05-Sep-2013, Binary zip archive)
https://www.rodsbooks.com/refind/getting.html
https://sourceforge.net/projects/refind/files/0.7.4/refind-bin-0.7.4.zip/download

Installation process
The installation should be straightforward until you get to the point where you choose the paritions setup. You need to choose “Something else” from the harddisk setup/partition section, then in the partition editor
chose the 2nd partition you left blank in the mac disk partitioning utility (check the note above), use the blank partition to setup your favourite partition table.

A video clip explaining manual disk partitioning in Mint.

https://www.youtube.com/watch?v=eWXtVkA-S6g

In the “Device for bootloader installation” dropdown please select the root partition or /boot/ partition you created in the partition table. Never use any of the block devices used by the Mac OSX, in mine they were the device itself /dev/sda and /dev/sda1, /dev/sda2

Once the partitions are confirmed and the bootloader installation device is set, proceed with the installation.

Low colour depth in the second monitor

If you have a dual monitor setup, they you will notice that sometimes one of the monitors display less colours than the other one. I read somewhere that this issue happens in EFI based machines with Intel HD xxxx video cards, but I am not exactly sure the reason behind it.

The permanent fix for this would be to alter a configuration register for the Intel HD video card. The way I prefer for this is through the /etc/profile file.

sudo gedit /etc/profile

Add the following line 

intel_reg_write 0x70008 0xC4002000

Save the file and exit. In the next boot colours will be normal on monitors.

Broadcom wireless BCM4331 chipset

Broadcom chips are not supported well with linux, if you need more information about why the Arch linux documentation provides a good inside (https://wiki.archlinux.org/index.php/Broadcom_wireless).

Lets get the wifi driver installed,

You need to make sure that repository sources are set to download and compile drivers from the source package itself, inorder to enable source code repositories refer to https://help.ubuntu.com/community/Repositories/Ubuntu#Adding_Ubuntu_Software_Repositories, usually in linux mint/ubuntu in “Software sources” application should have a option to enable “source code” option.

After enabling source packages open up a terminal and run following commands, in order to compile a package from the source, you need kernel headers and debian package developer tools.

sudo apt-get update
sudo apt-get install linux-headers-generic linux-headers-`uname -r`
sudo apt-get install dpkg-dev debhelper dh-modaliases
sudo apt-get install --reinstall bcmwl-kernel-source

And make sure the opensource drivers are disabled, in order to disable them edit the kernel modules config file and make required changes as follows

sudo gedit /etc/modprobe.d/blacklist.conf

add following lines to the bottom of the file

blacklist bcm43xx
blacklist b43
blacklist bcma

Reboot the machine and wireless should be up and running..! Wink | ;)

Suspend to ram (S3)

If you really don’t care about suspending your mac mini reliably so that you can save trees Wink | ;) and got wireless working perfectly, you can skip this section. If you need to get both suspend and wifi working, continue.

In latest ubuntu release the kernel 3.8.xx does not reliably able to put Mac mini to sleep, I couldn’t figure out the exact reason but, after lot of trial and error I figured out that kernel-3.11.xx can reliable suspend Mac mini.

But the drawback with installing the latest kernel is that wifi driver stops compiling as per the kernel header changes in the kernel-3.10.0.

If you follow the guide to the letter you should be able to apply the patch I have submitted to the bcm-kernel-source package and get it to compile and install correctly.

Step 1: Create a temp directory to get download and run kernel updates.

mkdir /tmp/kernel-3.11.0
cd /tmp/kernel-3.11.0

Step 2: Get the kernel packages as per your processor architecture from the link below. You should download THREE packages from the link linux-headers-generic, linux-headers, linux-image. Since all latest mac mini run Core iX processors you can safely download 64bit packages.

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-saucy/linux-headers-3.11.0-031100-generic_3.11.0-031100.201309021735_amd64.deb https://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-saucy/linux-headers-3.11.0-031100_3.11.0-031100.201309021735_all.deb https://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-saucy/linux-image-3.11.0-031100-generic_3.11.0-031100.201309021735_amd64.deb
sudo dpkg -i *.deb

Step 3: Error messages and the fix

At the time of writing bcmwl-kernel-source didn’t compile using kernel-hearders 3.11.0 and get the error mentioned in the below paragraph, and I have submitted a patch in the ubuntu launchpad. You can check the status of the package in the URL at the end of the document, if it says the package is updated, you don’t have to worry about running any of the below commands.

After running dpkg command you may see an error which says check make.log for debug information, that means the wireless driver failed to compile and install correctly. But dont worry just restart your computer so that the next time computer will boot up with the latest kernel we just installed. Please note that the wireless will not work after the reboot (this is due to the wl.ko kernel module error we got), so make sure you got another device with this tutorial open so you can continue reading.

After restarting, download the patch I have attached in the launchpad bug report and copy it to the bcmwl-kernel-source directory as follows and recompile the code.

cd /usr/src/bcmwl-6.20.155.1+bdcom/patches
wget https://bugs.launchpad.net/ubuntu/+source/bcmwl/+bug/1197586/+attachment/3808355/+files/0008-add-support-to-linux-3.9.0-3.11.0.patch
cd /usr/src/bcmwl-6.20.155.1+bdcom/
sudo gedit dkms.conf

After editing dkms.conf you will see 10-15 lines as follows and add the line into the file and save.

PACKAGE_NAME="bcmwl"
PACKAGE_VERSION="6.20.155.1+bdcom"
CLEAN="rm -f *.*o"
BUILT_MODULE_NAME[0]="wl"
MAKE[0]="make -C $kernel_source_dir M=$dkms_tree/$PACKAGE_NAME/$PACKAGE_VERSION/build"
DEST_MODULE_LOCATION[0]="/updates"
PATCH[0]="0001-MODULE_LICENSE.patch"
PATCH[1]="0002-Makefile.patch"
PATCH[2]="0003-Make-up-for-missing-init_MUTEX.patch"
PATCH[3]="0004-Add-support-for-Linux-3.2.patch"
PATCH[4]="0005-add-support-for-linux-3.4.0.patch"
PATCH[5]="0006-add-support-for-linux-3.8.0.patch"
PATCH[6]="0007-nl80211-move-scan-API-to-wdev.patch"
PATCH[7]="0008-add-support-to-linux-3.9.0-3.11.0.patch" <-- Line we need to add
#PATCH_MATCH[3]="^3.[23456]"
#PATCH_MATCH[4]="^3.[56]"
AUTOINSTALL="yes"

Step 4: Reconfigure bcmwl-kernel-source

If you have done all the above steps correctly, you should be able to run the following command and recompile the bcmwl driver without compile time errors.

sudo dpkg-reconfigure bcmwl-kernel-source

Step 5: Check if the driver is installed

cd /lib/modules/3.11.0-031100-generic/kernel/drivers/net/wireless
ls -l

You should see a file called wl.ko and thats it!

Reboot your machine and wireless should come up. You can try to load the kernel module by running “sudo modprobe wl” in the terminal as well without getting module not found errors.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.