1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Linux auf 2016er MacBook 12-Zoll (MacBook9,1)

Dieses Thema im Forum "Linux auf dem Mac" wurde erstellt von thrillseeker, 05.03.17.

Schlagworte:
  1. thrillseeker

    thrillseeker Weißer Winterkalvill

    Dabei seit:
    06.10.04
    Beiträge:
    3.503
    Hallo, Gemeinde!

    Zu den aktuellen MacBooks ist bekannt, dass Linux nicht ohne Weiteres darauf läuft. Die internen SSDs werden nicht erkannt und Tastatur/Trackpad funktionieren auch nicht. Die neueste Pro-Serie (2016er Modelle mit USB-C-Ports) ist wohl ebenfalls betroffen.

    Es gibt nun seit einiger Zeit Patches für die beiden Probleme,[1][2] allerdings habe ich als Noob keinen Schimmer, wie man die anwendet. Hat irgendjemand schon geschafft, das Ganze zum Laufen zu bringen? Wenn ja: Wie?

    Grüße,
    Stefan

    (PS: Ja, ich habe gute Gründe für Linux auf dem Mac. Ja, ich weiß, dass OS X "auch UNIX" ist, will aber trotzdem ein Linux nutzen. Nein, VM ist keine Lösung für mich, und nein, ich will keine andere Hardware. Auch kein Thinkpad.)

    ----
    [1] Patch zur Erkennung der SSD, http://lists.infradead.org/pipermail/linux-nvme/2016-May/004694.html
    [2] Patch zur Benutzung von Tastatur und Trackpad, https://github.com/cb22/macbook12-spi-driver
     
  2. weberknechtmann

    weberknechtmann Erdapfel

    Dabei seit:
    15.03.17
    Beiträge:
    4
    Die Patches sind alles Terminal bzw. Kommandozeilenkommandos,welche du vor der Installation eingeben musst, um die Systemdateien wie Treiber etc. richtig zu installieren/zu editieren.
     
  3. thrillseeker

    thrillseeker Weißer Winterkalvill

    Dabei seit:
    06.10.04
    Beiträge:
    3.503
    Danke, aber so einfach ist es leider nicht. :D

    Der Kernelpatch (1) kann in eine ASCII-Datei kopiert werden und muss vor dem Kompilieren des Kernels mit dem Befehl 'patch' aufgespielt werden:

    Code:
    patch -p1 < /pfad/zum/patch/dateiname.patch
    Anschliessend gibt es dann aber das Problem, dass das Kompilieren mit einem Schwung Fehlermeldungen endet:

    Code:
    make[3]: Leaving directory '/media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+'
    (cd /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+;         rm -f stamp-building )
    (cd /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+;                                                          \
             [ ! -d scripts/cramfs ]   || make -C scripts/cramfs distclean ; )
    sed -e 's/=V/4.10.1+patched+/g' -e 's/=A/amd64/g'           \
                 -e 's/=ST/linux/g'  -e 's/=B/x86_64/g'               \
                     ./debian/pkg/source/README >  /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+/README.Debian ;
    if test -f README.Debian ; then                                         \
               install -p    -o root -g root  -m  644 README.Debian        /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/share/doc/linux-source-4.10.1+patched+/README.Debian.1st;    \
       gzip -9qf                            /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/share/doc/linux-source-4.10.1+patched+/README.Debian.1st;    \
    fi
    test -d /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+/debian || mkdir /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+/debian
    for file in ChangeLog  Control  Control.bin86 config templates.in rules control changelog; do                    \
                cp -f  ./debian/$file /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+/debian/;                       \
            done
    cp: cannot stat './debian/ChangeLog': No such file or directory
    for dir  in Config docs examples ruleset scripts pkg po;  do                                      \
              cp -af ./debian/$dir  /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+/debian/;                         \
            done
    (cd /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+; find . -type d -name .arch-ids -print0  | xargs -0r rm -rf {} \; )
    (cd /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+; find . -type d -name .git -print0       | xargs -0r rm -rf {} \; )
    (cd /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+; find . -type f -name .gitmodule -print0 | xargs -0r rm -f  {} \; )
    (cd /media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0/debian/linux-source-4.10.1+patched+/usr/src/linux-source-4.10.1+patched+ && cd .. &&                                            \
               tar --bzip2 -cf linux-source-4.10.1+patched+.tar.bz2 linux-source-4.10.1+patched+ && \
                 rm -rf linux-source-4.10.1+patched+;)
    make[2]: Leaving directory '/media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0'
    debian/ruleset/common/targets.mk:357: recipe for target 'debian/stamp/do-install-indep' failed
    make[1]: *** [debian/stamp/do-install-indep] Error 2
    make[1]: Leaving directory '/media/kubuntu/3ccc8b0a-e764-40ff-b4cd-1b38a437ba10/boot/patch/linux-source-4.10.0'
    dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2
    debian/ruleset/targets/common.mk:401: recipe for target 'debian/stamp/build/buildpackage
    
     
  4. thrillseeker

    thrillseeker Weißer Winterkalvill

    Dabei seit:
    06.10.04
    Beiträge:
    3.503
    SOLVED

    Die Kurzform, die vermutlich nur für fortgeschrittene Nutzer verständlich ist, ist folgende:
    • Mit dem Festplattendienstprogramm unter macOS Sierra eine freie Partition für GNU/Linux erstellen (idealerweise als FAT, damit sie unter GNU/Linux problemlos erkannt wird)
    • GNU/Linux runterladen (hier verwendet: die Beta von Ubuntu 17 Zesty Zapus)
    • Unter macOS mit dd einen bootfähigen Live-USB-Stick erstellen (hier steht ausführlich, wie's geht)
    • Neustarten, beim Startsound die Taste 'alt' drücken und halten, im Auswahlmenü den Live-Stick auswählen. Das MacBook bootet in die Live-Umgebung
    • Die interne Tatstatur und das Trackpad des MacBooks werden nicht erkannt, man braucht also eine USB-Tastatur und USB-Maus sowie zwei freie USB-Ports (dran denken, dass in einem Port bereits der Live-Stick steckt). Hier war eine USB-Tastatur vom Ur-iMac hilfreich, die selbst zwei freie USB-Steckplätze hat.
    • Ein Terminal öffnen und mit folgenden drei Befehlen den Zugriff auf die lokale Festplatte des MacBooks ermöglichen:
    Code:
    $ sudo modprobe nvme
    $ sudo chmod -R a=rwx /sys/bus/pci/drivers
    $ sudo echo 106b 2003 > /sys/bus/pci/drivers/nvme/new_id
    • Jetzt GNU/Linux installieren. Der Installer ist selbsterklärend, man muss lediglich bei der Auswahl der Partition aufpassen, dass man GNU/Linux auf die dafür vorbereitete Partition installiert und die anderen unangetastet lässt, insbesondere die EFI-Partition des Macs (ich habe ext-4 als Dateisystem gewählt, nur eine Rootpartition erstellt und auf separate Home-, Bootloader- und Swap-Partitionen verzichtet)
    • Den Bootloader (GRUB) bei der Installation auf die Rootpartition (/) installieren, NICHT auf die EFI-Partition des MacBooks!
    • Nach der Installation NICHT neustarten, sondern in der Live-Umgebung bleiben!
    • In der Live-Umgebung einen neuen Kernel runterladen und entpacken (hierzu gibt es ausführliche Anleitungen im Netz; ich bin dieser hier gefolgt und habe den Kernel 4.10.0-13-generic verwendet).
    • Den Kernel patchen. Hierzu den Inhalt dieses Forenbeitrags in eine Textdatei namens nvme.patch kopieren und die Datei eine Verzeichnisebene über dem Ordner mit dem entpackten Kernel ablegen. Dann in den Ordner mit dem Kernel wechseln und folgenden Befehl ausführen:
    Code:
    $ patch -p1 < ../nvme.patch
    (Aufpassen: nach dem 'p' kommt die Ziffer Eins, kein 'L')
    • Kernel nach Anleitung kompilieren (geduldig sein, das kann drei Stunden oder länger dauern)
    • Den kompilierten Kernel mithilfe von chroot auf die Partition mit dem installieren GNU/Linux installieren (hier steht, wie's geht)
    • Bei mir ergaben sich Warnmeldungen zu einigen nicht erfüllten Abhängigkeiten (dependency problems), die sich durch ein anschließendes Ausführen der Befehle sudo apt update und sudo apt --fix-broken install beheben ließen
    • Das Programm dkms installieren
    • Kernelmodule mit dem Befehl dkms autoinstall erstellen
    • Bootloader (GRUB) entfernen (durch Löschen des Ordners /boot/grub)
    • Die alten Kernels aus /boot entfernen (sodass nur der neu kompilierte Kernel und das zugehörige Initram verbleiben)
    • Eine Datei mit Namen refind_linux.conf mit folgendem Inhalt erstellen und in den Ordner /boot legen:
    Code:
    "Boot with standard options"  "ro root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX nointremap"
    (Die XXXX durch die tatsächliche UUID der Festplatte ersetzen. Man findet sie beispielsweise in der Live-Umgebung mithilfe des Programms 'KDE Partition Manager' heraus.)
    • Jetzt endlich: ein Neustart (in macOS booten)
    • rEFInd runterladen und entpacken
    • Neustart in den Recovery-Modus des macOS (mittels 'command + R' beim Startsound)
    • Im Recovery-Modus ein Terminal öffnen, in den Ordner mit dem entpackten rEFInd wechseln und von dort das Install-Script von rEFInd ausführen
    • Neustart
    • Jetzt sollte man unter rEFInd das GNU/Linux auswählen und booten können.
    Spannung ... und ... Voilà:

    [​IMG]

    Was funktioniert:
    • der Bildschirm in voller Auflösung
    • WiFi
    • Batterie- und Ladeanzeige
    Was (noch) nicht funktioniert:

    --
    Text und Foto: kernpanik, Lizenz CC BY-NC-SA 4.0
    https://creativecommons.org/licenses/by-nc-sa/4.0/
     
    #4 thrillseeker, 24.03.17
    Zuletzt bearbeitet: 24.03.17
    Butterfinger gefällt das.
  5. thrillseeker

    thrillseeker Weißer Winterkalvill

    Dabei seit:
    06.10.04
    Beiträge:
    3.503
    PS: Die Holzhammer-Lösung, sowohl GRUB als auch die älteren Kernels zu entfernen, ist nicht besonders elegant, hat jedoch Gründe:
    1. Die älteren, ungepatchten Kernels funktionieren auf dem MacBook nicht, da sie die Festplatte, auf der sie liegen, selbst nicht erkennen. Das "weiß" rEFInd aber nicht, weshalb es diese Kernels als "ordentliche" Bootmöglichkeiten erkennt und beim Systemstart anbietet. Da es vom Kernel 4.10.0-13 zwei Versionen gab (eine gepatchte und eine ungepatchte), wurde ausgerechnet die richtige Version erst angezeigt, nachdem die falsche entfernt war.
    2. Das auf Macs schon immer problemanfällige GRUB braucht man als Nutzer von rEFInd nicht, denn rEFInd sucht bei jedem Start des Rechners automatisch an bestimmten Orten nach bootbaren Kernels und bietet diese im Bootmenü an. Anders als GRUB braucht rEFInd dafür keine Aktualisierung nach Kernelupdates. Tolles Ding!
     
  6. marcwimmer1980

    marcwimmer1980 Erdapfel

    Dabei seit:
    11.06.17
    Beiträge:
    2
    hi

    es fuer nvme noch eine moeglichkeit ohne mit den kernelpatches rum zu machen (was mit jedem kernel update dann der fall waere):

    folgende datei anlegen:

    /etc/initramfs-tools/scripts/init-premount/setup_macbooknvme

    #!/bin/sh
    echo 106b 2003 > /sys/bus/pci/drivers/nvme/new_id

    und in /etc/initramfs-tools/modules "nvme" hinzufuegen

    danach
    update-initramfs -u -k all
    und der patch geht fuer alle kernels

    im workflow waere es dann so:
    1. von live cd installieren (haendisch in konsole modprobe nvme und das echo 106b 2003 > ... von oben machen)
    2. dann booten - busy box kommt - nochmal das modprobe und echo machen dann exit und linux bootet
    3. dann die aenderungen in /etc/initramfs uebernehmen

    gruss,
    marc
     
  7. marcwimmer1980

    marcwimmer1980 Erdapfel

    Dabei seit:
    11.06.17
    Beiträge:
    2
    hat eigentlich jemand keyboard backlight, bluetooth und soundkarte wiedergabe laufen??
     
  8. thrillseeker

    thrillseeker Weißer Winterkalvill

    Dabei seit:
    06.10.04
    Beiträge:
    3.503
    Soweit ich weiß, hat das bisher niemand geschafft. Ich habe das Projekt auch auf Eis gelegt, weil ich in erster Linie einen funktionierenden Rechner brauche, was mit der Kombination aus MacBook und GNU/Linux derzeit nicht gegeben ist. Stattdessen läuft hier nun ein macOS Sierra mit ganz viel OpenSource (sowohl native Anwendungen als auch solche, die unter Fink/X11 laufen). Via LittleSnitch habe ich außerdem zahlreiche Verbindungen geblockt, um Apples Datenhunger zu zügeln. Es ist unglaublich, wie oft sich ein "nacktes" macOS selbst bei typischen Offline-Anwendungen mit Apples Servern verbinden will.
     

Diese Seite empfehlen