Samstag Aug. 04, 2012

Linux und MacBook Pro Retina Display (10,1)

Nachdem ich demnächst auf mein MacBook ein vernünftiges Betriebssystem spendieren (Funtoo/Gentoo) möchte, hier schon mal ein paar Links (mehr oder weniger interessant) für Leute, die das auch vorhaben. Die Links sind erstmal eine Sammlung an Infos, die so existieren. Das MacBook mit Retina ist ja noch relativ neu und das macht die Sache mit Linux oft nicht einfacher. Das ArchLinux Wiki scheint hier mal wieder am Weitesten zu sein, aber es gibt auch ein paar andere interessante Infos. Sobald ich Linux drauf habe bzw. hoffe drauf zu bekommen, schreibe ich wieder was...

Arch Linux Forum: MacBook Pro 2012 Retina
Arch Wiki: MacBookPro Retina
2012 Retina Display Macbook Pro and openSUSE Linux
Ubuntu MactelSupportTeam/AppleIntelInstallation
How to install Ubuntu on MacBook using USB Stick
Ubuntu 12.04 dual boot on Macbook Pro
wiki-AT-ubunutuusers-DOT-de
Ubuntu Forums: ubuntu on new retina macbook : any experience
cberner.com: Installing Ubuntu 12.04 on Macbook Pro Retina (10,1) <- Relativ gute Anleitung
Und als Nicht-Mac-Jünger brauch ich das hier: Startup key combinations for Intel-based Macs
Ubuntu: How to create a bootable USB stick on OS X

Kernel Hacker Greg Kroah-Hartman mischt auch mit auf Google+: Macbook retina booting with gummiboot to Gentoo. Now I can get more work done on this box as it's easier to install a new kernel.
Dann haben wir noch das Gentoo BlueDragonX / fm-overlay mit div. Patches für Kernel 3.5 (BTW: Ubuntu 12.10 Alpha3 hat auch Kernel 3.5. Damit könnte man auch Glück haben. Kernel 3.5 scheint im Allgemeinen nicht verkehrt zu sein).

Und dann noch dieser wunderschöne Post von Greg KH: "I booted it (MacBook) the first time on OS-X, saw that the screen and wireless worked (wanted to verify that), and registered for the warranty, then wiped the disk clean. ..." ;-)

Update 20120807

Wenn man Mac OS drauf lassen will, muss man zuerst mal die Partition verkleinern bzw. besser gesagt spalten, damit wir Linux irgendwo drauf bekommen. Ich hab das im Mac Terminal gemacht mit diskutil (ja ich weiß, geht alles viel schöner mit GUI, aber ich lebe halt auf der Konsole ;-) ). Hier die Orginal-Konfiguration:

mbpro:~ user$ diskutil list

/dev/disk0

   #:                       TYPE NAME                    SIZE      IDENTIFIER

0:      GUID_partition_scheme                        *251.0 GB   disk0
1:                        EFI                         209.7 MB  disk0s1
2:                  Apple_HFS Macintosh HD            250.1 GB  disk0s2
3:                 Apple_Boot Recovery HD             650.0 MB  disk0s3

Interessant hier ist also die Partition disk0s2. Die hat 250 GB und die wollen wir spalten. Dazu müssen wir aber auch erst wissen, wie viel wir für Mac OS übrig lassen müssen, wir brauchen also die Minimale Größe in GB, also die Anzahl an GByte, die wir nicht nutzen können und das geht dann so:

mbpro:~ user$ diskutil resizevolume disk0s2 limits

For device disk0s2 Macintosh HD:
        Current size:  250.1 GB (250140434432 Bytes)
        Minimum size:  48.8 GB (48755404800 Bytes)
        Maximum size:  250.1 GB (250140434432 Bytes)

Wir haben hier also ca. 50 GB, die Mac OS benötigt und die wir nicht nutzen können. Ich habe mich entschieden, für Mac OS 100 GB zu verwenden und 150 GB für Linux. Dann spalten wir also mal ;-)

mbpro:~ user$ diskutil resizevolume disk0s2 100GB JHFS+ linux 150GB

Started partitioning on disk0s2 Macintosh HD
Verifying the disk
Checking file system
Performing live verification
Checking Journaled HFS Plus volume
Checking extents overflow file
Checking catalog file
Checking multi-linked files
Checking catalog hierarchy
Checking extended attributes file
Checking volume bitmap
Checking volume information
The volume Macintosh HD appears to be OK
Resizing
Waiting for the disks to reappear
Formatting disk0s4 as Mac OS Extended (Journaled) with name linux
Initialized /dev/rdisk0s4 as a 140 GB HFS Plus volume with a 16384k journal
Mounting disk
Finished partitioning on disk0s2 Macintosh HD

/dev/disk0

   #:                       TYPE NAME                    SIZE      IDENTIFIER

   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            100.0 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s5
   4:                  Apple_HFS linux                   150.0 GB   disk0s4

Wir haben hier jetzt also eine Partition disk0s4 bekommen und da soll dann mal Linux drauf... 

Nachdem ich ja Funtoo (ein Gentoo Derivat) draufspielen möchte und Funtoo/Gentoo man ja nicht "mal so" installiert, brauchen wir als nächstes erstmal eine Distribution, von der wir booten können. Mein erster Versuch ist die neueste Ubuntu 12.10 Quantal Quetzal (noch in der Entwicklung). Die hat Kernel 3.5 dabei, damit sollte man hoffentlich Glück beim Booten haben. Ziel Kernel für mich ist jetzt aktuell dann 3.6 (Update: Kernel 3.6-rcX funktioniert nicht zusammen mit dem Binary Nvidia Treiber. Der Treiber kompiliert nicht. Deshalb bleibe ich bei Kernel 3.5). Genommen habe ich dieses Image hier von Ubuntu 12.10 (Quantal Quetzal) Daily Build 64-bit Mac (AMD64) desktop CD . Das ISO-File kopieren wir dann erstmal auf einen USB-Stick, der größer/gleich 1 GByte sein sollte. Ich hab das mit Linux und dd probiert, aber das mag das MacBook nicht booten, deshalb so, dann geht's: USB in Mac rein und dann erscheint der bei mir als /dev/disk1:

mbpro:~ user$ diskutil list

/dev/disk0

   #:                       TYPE NAME                    SIZE      IDENTIFIER
   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            100.0 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
   4:                  Apple_HFS linux                   150.0 GB   disk0s4

/dev/disk1

   #:                       TYPE NAME                    SIZE      IDENTIFIER
   0:     FDisk_partition_scheme                        *1.0 GB     disk1
   1:                       0x17                         797.2 MB   disk1s1

Dann müssen wir das ISO-Image konvertieren:

mbpro:~ user$ hdiutil convert -format UDRW -o ubuntu.img quantal-desktop-amd64+mac.iso 

Master Boot Record (MBR : 0) lesen …
Ubuntu 12.10 amd64               (Apple_ISO : 1) lesen …
 (Windows_NTFS_Hidden : 2) lesen …

...........................................................

Dauer:  5.075s
Geschwindigkeit: 149.8M Byte/s
Ersparnis: 0.0 %
created: /Users/d790026/ubuntu.img.dmg

Und dann können wir mit dd das Image auf den Stick schreiben und wenn das fertig ist, auswerfen:

mbpro:~ user$ sudo dd if=ubuntu.img.dmg of=/dev/disk1 bs=1m
Password:

diskutil eject /dev/disk2

Dann spielt man sich erstmal rEFIt drauf (Download rEFIt-0.14.dmg). Einfach runterladen und Paket unter Mac OS installieren (einfach den Anweisungen folgen). Das macht es die Sache einfacher, später Linux zu starten. Wenn man das MacBook bootet, dann bekommt man gleich zu Beginn ein Menü, mit dem man Linux (jetzt erstmal vom USB-Stick, später taucht auch die Linux Installation auf Platte im Menü auf) starten kann. 

Dann starten wir mal das Ubuntu von Stick. Sobald der Bootscreen

boot_screen_ubuntu.png

erscheint, irgend eine Taste drücken, damit man drei Kernel-Optionen setzen kann: noapic nomodeset. Hierzu drückt man, nachdem man die Sprache ausgewählt hat, auf F6, klickt das Auswahlmenü weg mit den Kerneloptionen und gibt sie unten in der Boot Options Zeile am Besten vor den beiden "--" am Schluss ein. Dann "Try Ubuntu without installing" auswählen, Return drücken und los geht's. Je nachdem, wie schnell der Stick ist, dauerts mal länger mal weniger lang, bis dann die GUI kommt. Bei mir blieb er vorher ca. 30 Sek. auf dem Prompt stehen, bis die GUI endlich kam.

Hier dann mal der erste Screenshot (1024x768 Auflösung) nach dem ersten Booten von Ubuntu vom USB Stick:

mac_retina_ubuntu_001.jpg

Dann kann man jetzt Ubuntu installieren wenn man will. Einfach "Install Ubuntu 12.10" doppelklicken und im Laufe der Installation erkennt Ubuntu selber, das da Mac OS schon drauf ist und installiert selbstständig auf der freien Partition, die wir oben angelegt haben, Ubuntu drauf. Wenn man dann rebootet und von Disk das Ubuntu startet, darf man nicht vergessen, wieder die o.g. Kerneloptionen einzubauen, sonst kommt man nicht weit (Update 20121017: Kernel 3.6 final bootet bei mir inszwischen ganz ohne Kerneloptionen - soweit man nicht den Nvidia Orginal-Treiber installieren möchte. Ansonsten sind folgende Kernel-Optionen sinnvoll: i915.modeset=1 rdblacklist=nouveau nouveau.modeset=0). Irgendwann ist man dann wieder im Ubuntu Desktop mit er 1024x768 Auflösung. Also die Intel-Grafik konnte ich überhaupt nicht aktivieren. Da hilft auch kein Projekt Bumblebee aktuell.

Ich dann noch kurz mal die Nvidia-Treiber installiert. Wenn man das tut, sollte man vorher am besten ssh installieren und aktivieren, root ein Passwort verpassen und root-Login erlauben. Wenn nämlich der Bildschirm vom MacBook schwarz bleibt, kann man sich von einem anderen Rechner aus einloggen und noch was reparieren. Ansonsten könnte es für immer schwarz bleiben oder man muss halt wieder vom Stick booten. Man bindet am besten dieses PPA ein: ppa:ubuntu-x-swat/x-updates . Ich hatte dann einmal die Auflösung 800x600, dann 640x480 und als ich die Treiber dann einmal deinstalliert und wieder installiert hatte, hatte ich dann irgendwann 1600x1200:

mac_retina_ubuntu_nvidia_1600x1200_1.jpg

Aber das war's dann auch erstmal. Gut, ich hab jetzt nicht weiter experimentiert, weil ich will ja Funtoo drauf. Wichtig für den Nvidia-Treiber ist, das folgende Option in der xorg.conf gesetzt wird:

Option "UseDPLib" "off"

Das Touchpad reagiert auch manchmal recht sensibel, d.h. etwas eigensinnig und ich hatte jetzt auch nicht das Gefühl, das mit 3D viel läuft... Naja, das mal für alle Leute, die mit Ubuntu arbeiten wollen. Vielleicht hilft es was. Ich hab dann das MacBook mal voll aufgeladen und dann einfach mal im Batteriebetrieb laufen lassen (Monitor immer an). Der Akku hielt genau 4 Std. Mit dem Bug in Mac OS X Mountain Lion läuft das MacBook unter Mac OS X aktuell nur ca. 30 Min. länger. Bin mal gespannt, ob das mit dem versprochenen Update von Mac OS X besser wird. 7 Std. sollen das ja angeblich sein. Dann wären 4 Std. vs. 7 Std. natürlich schon ein dramatischer Abstand...

Ich habe übrigends diesen USB 2.0 Ethernet Adapter verwendet, da Thunderbolt über Ethernet in dieser Phase vermutlich noch nicht funktionert:

USB 2.0 Netzwerk Adapter auf 10,100,1000 Gigabit LAN Kabel, RJ45 Fast Ethernet

Der Adapter arbeitet einwandfrei und wird sofort erkannt. DHCP klappt auch gleich. Nur GBit über USB2.0 darf man jetzt nicht erwarten. Wie viel letztendlich drüber geht, habe ich noch nicht getestet. (Update 20121018: Mit Kernel 3.6.2 funktioniert der von Apple angebotene Thunderbolt/Ethernet-Adapter, wenn man ihn schon eingesteckt hat, bevor Linux startet. Ob Hotplug funktioniert und der Adapter nach dem Suspend wieder funktioniert, hab ich noch nicht getestet.)

Und jetzt probieren wir es mal mit Funtoo :-) Mal schauen, wie weit wir damit kommen. Bevor ich Ubuntu wieder gelöscht habe, habe ich mir die Kernel-Config unter /boot von Ubuntu geklaut ;-) Das ist ein 3.5er Kernel. Die .config könnt ihr euch hier runterladen: config-3.5.0-8-generic.gz . Alternativ: Hier die Kernel 3.5 .config von Sabayon (auch ein Gentoo Derivat). Update 20121017: Ganz unten findet ihr eine Kernel .config für Kernel 3.6.2. Der sollte komplett ohne Patches und Kernel-Parameter laufen (tut er bei mir zumindest).

Nachdem Ubuntu ja die Partitionen eingerichtet hat im vorhergehenden Schritt, übernehme ich das gleich so. In gparted sieht das dann so aus:

mac_partition_ubuntu_final.jpg

Ich werde jetzt mal die Funtoo Linux Installation Anleitung wie gewohnt abarbeiten und dann sehen wir schon, ob was bootet nachher. Hier jetzt ohne große Erklärung eine Auflistung der ausgeführten Kommandos:

mkfs.ext4 /dev/sda5
mkdir /mnt/funtoo
mount /dev/sda5 /mnt/funtoo
cd /mnt/funtoo
mkdir tmp
chmod 1777 /mnt/funtoo/tmp
date 080922352012
wget http://ftp.osuosl.org/pub/funtoo/funtoo-current/x86-64bit/corei7/stage3-latest.tar.xz
tar xJpf funtoo.stage3-latest.tar.xz
cd /mnt/funtoo
mount --bind /proc proc
mount --bind /dev dev
cp /etc/resolv.conf etc/
env -i; HOME=/root; TERM=$TERM; chroot . bash -l
export PS1="(chroot) $PS1"
emerge --sync

vi /etc/fstab
/dev/sda6               none            swap            sw              0 0
/dev/sda5               /               ext4            noatime         0 1

rm /etc/localtime
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime

vi /etc/make.conf
MAKEOPTS="-j9"

LINGUAS="en de"

rc-update add dhcpcd default

emerge -av genkernel gentoo-sources # Kernel 3.6.x verwenden, 3.7-rc1 tut aktuell auch
cd /usr/src/linux
wget http://www.tauceti.net/kernel-config-x86_64-3.6.2-gentoo.gz
gunzip kernel-config-x86_64-3.6.2-gentoo.gz
mv kernel-config-x86_64-3.6.2-gentoo .config
genkernel --menuconfig --lvm --oldconfig all
passwd # root Passwort setzen nicht vergessen!
emerge -av boot-update

vi /etc/boot.conf
boot {
        generate grub
        default "Funtoo Linux genkernel"
        timeout 3 
}

"Funtoo Linux" {
        kernel bzImage[-v]
        # params += nomodeset
}

"Funtoo Linux genkernel" {
        kernel kernel[-v]
        initrd initramfs[-v]
        params += real_root=auto
        params += nomodeset
        params += noapic

Hier fehlt jetzt noch die Sache mit dem Bootloader. Das hat mich etwas genervt, da der installierte Ubuntu Grub nicht mit den Dateien, die grub-install von Funtoo unter /boot/grub/ installiert hatte, zusammenarbeiten wollte (Ubuntu hat grub2 und Funtoo ist noch auf 1.98... Aber mehr dazu weiter unten, deshalb mit der Installation vom Grub vielleicht noch warten bzw. hier lesen, wie's richtig geht - nach dieser Anleitung habe ich es gemacht: Grub with EFI support installation). Aber ich hab das erstmal falsch gemacht, weil man, wenn man nicht gleich den Grub mit EFI-Support installiert, im Bios Kompatibiltätsmodus startet und dann is nix mit der Installation vom Nvidia Orginal-Treiber z.B. ;-) Ich war mir aber zu dem Zeitpunkt nicht ganz sicher, ob ich Grub auf sda4 oder sda5 installieren soll. sda4 ging nicht, aber sda5 schien zu tun:

grub-install --no-floppy --force /dev/sda5
boot-update

Der grup-install meckert zwar, das das eine schlechte Idee ist, wenn man den MBR auf eine Partition schreibt, aber das tut wohl nichts zur Sache. Eine ganz schlecht Idee dürfte sein, wenn man Grub auf /dev/sda installiert. Ich vermute, dann bootet Mac OS X auf jeden Fall nicht mehr. Den Grub auf /dev/sda5 erkennt rEFIt aber.

cd /
umount /mnt/funtoo/boot /mnt/funtoo/dev /mnt/funtoo/proc /mnt/funtoo
reboot

Jetzt aber: Funtoo First Light!!! :-)

macbook_pro_retina_funtoo_first_light_1.jpg

Und damit man mal eine Grundbasis für das grafische Zeuch hat:

emerge -av xorg-x11 

Update 20120810

Ja spinn ich! Welcher Oberwahnsinnige hat denn (U)EFI erfunden? So etwas Krankes hab ich schon lange nicht mehr gesehen... Also Grafikkarte lief deshalb nicht, weil ich im BIOS Kompatibiltätsmodus gebootet hatte und nicht im neuen (U)EFI Modus. Ich hatte zuerst nicht gecheckt, das man für (U)EFI noch eine ganze Reihe weiterer Schritte notwendig sind, damit das funktioniert. Da braucht man Grub 2.0 (bzw. ich habe einen gepatch'ten Grub 1.99 von flow-Overlay: layman -a flow). Die Installation ist hier ganz gut beschrieben.

Derweilen habe ich jetzt twm in 2880er Auflösung am Laufen (aber noch ohne Touchpad, nur die Tasten funken) ;-) Hier die Screens:

mac_retina_kms_1.jpg mac_retina_twm_1.jpg

KDE 4.9 ist am Kompilieren! :-) Mal morgen wieder guggen... Das kann ja heiter werden, wenn sich die UEFI PC's mal weiter verkaufen. Da muss man ja fast eine fertige Distribution nehmen, das blickt ja kein normaler Mensch mit dem BIOS-Nachfolger (U)EFI. Einfach krank, mehr fällt mir da nicht ein...

Update 20120819
Also KDE 4.9 läuft wunderbar:

kde49_macbook_retina.png

Ich hab noch ein paar kleinere Probleme mit dem Touchpad, den Tastenbelegungen und bei manchen Programmen mit den Fonts (sind einfach zu klein ;-) ). Aber an sich läuft KDE gut. :-) Man muss aber in den System Settings ziemlich spielen, das man die Fonts im Allgemeinen annehmbar hinbekommt. U.a. habe ich folgende Datei erstellt:

echo "Xft.dpi 75.0" >> $HOME/.Xdefaults 

Die Intel-Grafik habe ich noch nicht zum Laufen bekommen. Aktuell benutze ich die Nvidia Binary Driver und damit natürlich auch den Nvidia Chip. Das kostet aber unnötig Strom. Mal weiter schauen...

Update 20120826:
Ich verwende als Treiber für das Touchpad nicht xf86-input-synaptics sondern xf86-input-mtrack. Das funktioniert wesentlich besser. Damit das Ganze nicht zu empfindlich reagiert, hier meine Einstellungen für den Treiber in der xorg.conf:

Section "InputClass"
    MatchIsTouchpad "true"
    MatchDevicePath "/dev/input/event*"

    Identifier      "Touchpads"
    Driver          "mtrack"
    Option "ThumbSize" "35"
    Option "PalmSize" "55"
    Option "ClickTime" "25"
    Option "ScrollDistance" "300"
    Option "TapButton1" "0"
    Option "Sensitivity" "0.85"
    Option "TapButton2" "0"
    Option "TapButton3" "0"
    Option "ScrollDistance" "175"
    Option "FingerHigh" "10"
    Option "FingerLow" "10"
    Option "IgnorePalm" "true"
EndSection

Update 20121017: Inzwischen hab ich noch eine bessere Konfiguration gefunden (hat nur einen Hacken: Die rechte Maustaste zu emulieren, ist etwas umständlich):

Section "InputClass"
    MatchIsTouchpad "on"
    Identifier      "Touchpads"
    Driver          "mtrack"
    Option          "Sensitivity" "0.35"
    Option          "IgnoreThumb" "true"
    Option          "IgnorePalm" "true"
    Option          "TapButton1" "0"  
    Option          "TapButton2" "0"
    Option          "TapButton3" "0"
    Option          "TapButton4" "0"
    Option          "ClickFinger1" "0"
    Option          "ClickFinger2" "3"
    Option          "ClickFinger3" "2"
    Option          "ButtonMoveEmulate" "false"
    Option          "ClickTime" "25"
    Option          "BottomEdge" "25"
EndSection

Damit Suspend to RAM (Sleep) mit dem Nvidia Binary Treiber funktioniert, erstellt man noch eine Datei /etc/pm/config.d/99local mit folgenden Inhalt (Update 20121017: Soll angeblich nicht mehr notwendig sein mit Kernel >=3.6, noch nicht probiert):

DISPLAY_QUIRK_DPMS_ON="true"
QUIRKOPTS="true"

Update 20121017: Also mit Kernel 3.6 bzw. 3.7-rc1 hab ich den Intel- und Nvidia-Chip im Prinzip jetzt soweit, das es funktionieren sollte, ohne den Nvidia-Binary Treiber. Bevor man hier experimentiert, unbedingt den Orginal Nvidia-Treiber deinstallieren! Dann den Kernel ohne weitere Parameter booten (also den Treiber "nouveau" für den Nvidia-Chip nicht mehr blacklisten). Ich musste dann den "nouveau"-Treiber mit modprobe laden, nachdem der Kernel gestartet ist. Das System wechselt dann auf den Nvidia-Chip. Das funktoniert noch und man sieht mit "dmesg", das er vgaswitcheroo aktiviert hat (also damit kann man theoretisch dann zwischen Intel- und Nvidia Chip hin- und herschalten). Wenn vgaswitcheroo aktiv ist, sieht man das auch daran, das es jetzt folgenden Eintrag gibt:

cat /sys/kernel/debug/vgaswitcheroo/switch

Und nun sollte eigentlich Folgendes möglich sein:

# Nvidia Chip aktivieren
echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch
# Intel Chip aktivieren
echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch
# Den deaktivierten Chip ausschalten (spart Strom)
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
Den deaktivierten Chip einschalten
echo ON > /sys/kernel/debug/vgaswitcheroo/switch

Leider verabschiedet sich das System dann mit einem schwarzen Bildschirm... Reboot über Ctrl+Alt+Del is aber noch möglich. Deshalb gehe ich da von aus, das nur der Bildschirm schwarz ist, aber das Betriebssystem noch da ist... Das ist wirklich zum Haare raufen. Falls jemand eine Idee hat, warum das so ist, immer her damit :-)

Falls jemand noch eine Kernel .config braucht, hier ist meine für Kernel 3.6.2 (ist so ziemlich alles aktiviert ;-) ): kernel-config-x86_64-3.6.2-gentoo.gz

Will man den Nvidia Orginal-Treiber benutzen, nimmt man den nouveau-Treiber am Besten auf die Blacklist. Folgende 3.6er Kernel-Parameter benutze ich zusammen mit den Nvidia Original-Treiber:

i915.modeset=1 rdblacklist=nouveau nouveau.modeset=0

Wie schon erwähnt, wenn man den Nvidia Orignal-Treiber nicht mehr verwenden möchte und mit vgaswitcheroo spielen will, dann nimmt man diese Kernelparameter alle wieder raus.

Kommentare:

Senden Sie einen Kommentar:
  • HTML Syntax: Ausgeschaltet