MacBook Air 7,1: Reise zu einem bootenden Ubuntu 15.10

Notebook auf dem Frühstückstisch

Auf meinem neuen MacBook Air 7,1 schreibe ich diesen Beitrag. Binnen einer Woche habe ich es geschafft, Linux auf ihm zu installieren. Ich habe das Geräte als Nachfolger für mein MacBook Air 3,1 gekauft, weil Geschwindigkeit und Akkuleistung meines 3 bis 4 Jahren alten Geräte nicht mehr überzeugten. Die 128 Gb Festplatte reichen zwar weiterhin. Sie sind als schicke Solid Stade Disk (SSD) verbaut und laufen über den neuen Apple PCI Expresse NVME Controller. Die Festplatten werden von Linux-Kerneln, die sie erkennen als Geräte /dev/nvme0, /dev/nvme0n1 eingebunden. Die Partitionen heißen /dev/nvme0n1p1, /dev/nvme0n1p2 und so weiter … Bis ich da war habe ich eine Woche benötigt, denn es läuft nur mit dem neuesten Linux-Kernel, der noch nicht in der stabilen Endversion vorliegt. Ein Linux-Reisebericht mit dem MacBookAir 7,1.

Die Problembeschreibung ist einfach: Die Installations-CD von OpenSuSE und Ubuntu erkennen den NVMe-Controller nicht. Ich habe mich in Abkehr von der Nutzung meines vorherigen MacBook Air 3,1 für Ubuntu entschieden, weil das die notwendigen Dateien bei mir vorlagen. Zumindest lagen sie zum Teil vor, wie sich dann auf meiner Reise zum lauffähigen System zeigte.

Schritt 1: Ein lauffähiges Ubuntu 15.10

Es gelang mir nur einen USB-Stick mit Ubuntu Wily (15.10) zu installieren.

Ubuntu 15.10 kommt mit Kernel 4.2. Der NVMe-Controller ist nicht zu sehen. Zu den Ursachen zählt die von Apple verwendete ID für das Gerät (106b:2001), die auf einen Massenspeicher hinweist, aber nicht nach dem NVMe-Standard (Lektüreeinstieg in ubuntuforums.org). Einige workarounds finden sich im Netz, keines habe ich zum Laufen bekommen.

Schritt 2: Ein lauffähiges Ubuntu 15.10 mit SDD unter NVMe

Ein Wechsel des Kernels zu Version 4.3 zeigte den Controller und die Partitionen nicht. Der Linux-Kernel Version 4.4.0 rc2 (release candidate 2) zeigt das alles, aber es funktioniert nicht. Das Partitionieren mit fdisk und parted führt zu Abstürzen des NVMe-Controller-Moduls im Kernel. Mit dem Festplattendienstprogramm von Apple OS X lässt sich die Platte bedienen.

Der Durchbruch gelingt nur mit dem Kernel 4.4.0 rc4 (4.4.0-040400rc4_4.4.0-040400rc4.201512061930) – siehe zum Beispiel Linuxdaddy, Blogbeitrag vom 7. Dezember 2015 (natürlich verwende ich für alles immer amd64-Versionen).

Nachfolgend wird immer davon ausgegangen, dass auch eine Netzwerkverbindung vorhanden ist und zwar per RJ45-Netzwerkkabel. Der WLAN-Treiber wird erst später installiert.

Schritt 3: NVMe-Festplatte partitionieren

Von Ubuntu 15.10 mit Kernel 4.4.0rc4 auf dem USB-Stick habe ich dann die Festplatte partitioniert. Die EFI-Partition von Apple habe ich als Partition 1 bestehen lassen. Für UEFI-Boot mit rEFInd habe ich mir großzügige 200 MB für eine FAT-Partition gegönnt, die später auf dem gemountete Root-Verzeichnis als /boot/efi gemountet wird. Das ist wichtig. Das sieht dann so aus:

user:~$ sudo parted /dev/nvme0n1 print

Modell: Unbekannt (unknown)
Festplatte /dev/nvme0n1: 121GB
Sektorgröße (logisch/physisch): 4096B/4096B
Partitionstabelle: gpt
Disk-Flags:

Nummer Anfang Ende Größe Dateisystem Name Flags
1 24,6kB 315MB 315MB fat32 EFI System Partition boot, esp
2 316MB 4800MB 4485MB linux-swap(v1) swap
3 4800MB 5002MB 201MB boot boot, esp
4 5002MB 25,0GB 20,0GB btrfs LinuxOS
5 25,0GB 55,0GB 30,0GB btrfs LinuxData

 

Mit parted habe ich auf die Flag esp/boot für Partition 3 gesetzt. Swap-Partition ist vorhanden mit 4+ GB, um später den gesamten Arbeitsspeicher bei suspend zwischenzuspeichern, zum Beispiel beim Zuklappen des Macbook Airs (prüfe Ausgabe von swapon). Die Partition 4 wurde mit btrfs formatiert für das Betriebssystem, Partition 5 entsprechend für das /home Verzeichnis, um Nutzerdaten vom System zu trennen. Hier kann natürlich viel feiner vorgegangen werden, als ich das hier mit meiner Reise zu einem ersten lauffähigen System gemacht habe. Beim MacBook Air 7,1 verbleibt mir mit diese Partitionen noch mehr als 60 GB freier Speicher auf der SSD.

Bildschirmfoto von gparted mit Partitionen auf dem MacBook Air 7,1

Partitionen für die Installation von Ubuntu 15.10 auf einem MacBook Air 7,1 mit Apple NVMe PCI Express-Controller

Schritt 4: Partitionen mounten

Ich habe per mkdir eine Verzeichnis /mnt/ubuntu angelegt und dort die Partition 4 eingehängt: sudo mount /dev/nvme0n1p4 /mnt/ubuntu.
Dort habe ich /home erstellt, um Partition 5 einzuhängen, und /boot sowie /boot/efi erstellt, um Partition 3 als /boot/efi einhängen zu können.

Schritt 5: Ubunutu 15.10 installieren per debootstrap

Hilfreich ist die Anleitung, wie Ubuntu von einem laufenden Linux-OS aus installiert werden kann: D.4. Installing Ubuntu from a Unix/Linux System. Die ersten Schritte davon sind erledigt, wie das Formatieren der Festplatten.
Auch diese deutsche Anleitung zur Installation mit debootstrap ist hilfreich.

Prinzipiell muss mit chroot das Verzeichnis /mnt/ubuntu in dem das Wurzelverzeichnis des späteren Systems eingehängt wurde zum temporären Wurzelverzeichnis bestimmt werden, damit apt-get die notwendigen Installationen dort durchführ und nicht im gebooteten Betriebssystem, auf dem gerade gearbeitet wird. Dafür müssen auch einigen Geräte-Controller unter /dev zweitweise verändert werden. Repositories für die Ubuntu-Pakete sind anzugeben. Schließlich kann irgendwann dann sudo apt-get install ubunutu-standard oder auch sudo apt-get install ubuntu-gnome-desktop ausgeführt werden.

Das dauert jetzt eine Weile, denn die Pakete werden aus dem Internet gelanden und installiert.

Schritt 6: Installieren des Kernels 4.4.0rc4 auf dem neuen System

Jetzt wurde Ubuntu 15.10 Wily als neues System installiert. Das kommt mit Kernel 4.2. Die Dateien mit denen der Kernel 4.4rc4 (oder später) installiert wurde werden jetzt benötigt – oder neu geladen. Sie werden installiert, damit das System dann später auch mit dem NVMe-Controller von Apple arbeiten kann. Das System unterscheidet sich nicht von dem auf dem USB Stick. Es kann (noch) nicht gebootet werden.

Schritt 7: rEFInd als BootManager

Ich hab manuell auf Partition 3 die Daten vom USB-Stick übertragen, um von dort mit rEFInd zu booten. Anleitung zu rEFInd lesen!
Das geht auch mit grub2. Für rEFInd müssen die Kernelparameter in der Datei refind_linux.con im Verzeichnis des jeweiligen Kernels abgelegt werden. Hier liegt der Kernel in /boot.

"Boot with normal options" "ro root=UUID=53079581-35a7-4275-ace7-6660efcdbd0d initrd=boot\initrd.img-4.4.0-040400rc4-generic resume=\dev\nvme0n1p2 acpi_backlight=vendor quiet splash"

Die Option splash zeigt nicht Meldungen des bootenden Kernels an, sondern ein Bild. Die Option acpi_backlight=vendor ist notwendig, damit die Helligkeit des Bildschirms vom Betriebssystem, aber gerade auch über die Fn-Tasten F1 und F2 verändert werden kann. Die Angaben zu resume sind für das Laden des Arbeitsspeichers aus dem SWAP-Bereich erforderlich.

rEFInd Boot Manager auf MacBook Air 7,1

rEFInd Boot Manager auf MacBook Air 7,1

Schritt 8: Boot-Kernel mit NVMe-Modul

Wenn jetzt das System gebootet wird, landet man in der BusyBox. Der Kernel 4.4.0 rc4 sieht die Festplatten des NVMe-Controllers erst, wenn das NVMe-Kerne-Modul geladen ist. Folglich muss das Modul mit in den Kernel, den der Computer als erstes für den Boot-Prozess lädt. Der Bootloader rEFInd sieht die Platte übrigens.

In der Datei /etc/initramfs-tools/modules wird als letzte Zeile „nvme“ eingefügt. Die dort genannten Module werden dann per sudo initramfs -u in die RAM-Disk (initrd) eingefügt, so dass der Kernel sie beim Booten gleich hinzufügen kann.

Jetzt muss wie in den Parametern für den Kernel auch in /etc/fstab angeben werden, was wo eingehängt werden soll. Das geht über die UUID der Laufwerke bzw. Partitionen. Diese können über parted ausgelsen werden, oder auch so:

ls /dev/disk/by-uuid/
0475-A4C5 5F66-17ED
3755eef8-7408-42cc-b20c-ffc888d29f85 a31141ab-ed69-4078-8da8-c76525e75297
53079581-35a7-4275-ace7-6660efcdbd0d

So kann /etc/fstab aussehen

UUID=3755eef8-7408-42cc-b20c-ffc888d29f85 swap swap default 0 0
UUID=0475-A4C5 /boot/efi vfat defaults 0 1
UUID=53079581-35a7-4275-ace7-6660efcdbd0d / btrfs defaults 0 1
UUID=a31141ab-ed69-4078-8da8-c76525e75297 /home btrfs defaults 0 1

Schritt 9: Booten auf dem MacBook Air 7,1 und Sprache einstellen

Jetzt kann das System gebootet werden. Es gibt einige Probleme, wenn es sich nicht um ein englisches oder us-amerikanisches System handelt. Ich habe locales angepasst, language-pack-de installiert und unter Einstellung auf dem Desktop die Sprache angepasst. Leider gibt es mit Apple-Tasturen einige Besonderheiten, auch wenn eine Macintosh-Tastur eingestellt ist.

Dauerhaft habe ich keine Veränderung hingebkommen, aber den Wechsel zw. ^ und <, wenn im Terminal xmodmap .Xmodmap aufgerufen wird.

cat .Xmodmap
keycode 49 = less greater less greater bar brokenbar bar
keycode 94 = dead_circumflex degree dead_circumflex degree U2032 U2033 U2032
keycode 24 = q Q q Q at Greek_OMEGA at
keycode 46 = l L l L at Lstroke lstroke
pointer = 1 2 3 5 4 7 6
Macintosh-Tastatur einstellen

Macintosh-Tastatur einstellen

Die richtige Einstellung für die Tastatur zu finden, ist nicht trivial.

Schritt 10: Anpassen an Notebookbetrieb – WLAN

Ich habe dann powertop und tlp angepasst. Das sind Programme, um mit dem Akku umzugehen.

Für das WLAN musste das Paket firmware-b43-installer hinzugefügt werden, das die Software für Broadcom ‚BCM43600‘ liefert. Die Kamera ist nicht mehr Apple iSight-spezifisch, sondern auch von Broadcom. Ein Gerätetreiber ist derzeit in Arbeit: bcwc_pcie.

Fazit

Es ist langwierig, derzeit Linux auf einem MacBook 7,1 zu installieren, aber es geht. Die hohe Verbreitung der Apple-Hardware lässt erwarten, dass es für alle Geräte der Serien irgendwann ein Lösung gibt. Nur hinkt bei neuer Hardware die Linux-Entwicklung oder Begleitung etwas hinterher.

Mein System kann jetzt so laufen, bis es eine Linux Distribution gibt, die einen 4.4er Kernel hat und bei dem ich einfach angeben muss, dass beim Booten noch der NVMe-Controller benötigt wird. Das wird voraussichtlich im Frühjahr 2016 der Fall sein. Die nächste Ubuntu-Version wird Ubuntu 16.04 Xenial Xeru sein. Diese soll mit Kernel 4.4. laufen und am 21. April 2016 erscheinen.

Vor diesem Datum gibt es noch Anlass, den Kernel meines System zu tauschen. Er hat noch Fehler, was ein gelegentlicher writeback ... 2546.c im Log zeigt.

Alternative

Eine Alternative zum Installieren von einem USB-Stick auf das MacBook Air wäre es, wenn eine Installations-CD bzw. ein USB-Stick mit einem Installations-Sytem erstellt werden würde, die bereits mit dem Kernel 4.4 läuft und das Modul für NVMe beim Booten lädt. Der Kernel des Systems, der Kernel für das Booten, der Kernel, der ins neue System installiert wird, wären auszutauschen – auch die Header-Dateien. Das NVMe-Modul müsste ergänzt werden. So müsste es möglich sein, Ubuntu von einem USB-Stick oder eine CD direkt zu installieren.

Diese Anleitung hier kann auch für andere Apple-Geräte hilfreich sein, die den Apple NVMe PCI Express-Controller enthalten, z.B. das MacBook 8,1.

Dezember 12, 2015

Schlagwörter: , , , , , ,
  • Im RC 8 (release candidate) soll LightNVM für SSD enthalten sein. Das könnte Schritt 8 entbehrlich machen.

  • Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.