Wie konfiguriere ich den Dual-Boot von NixOS mit Mac OS X auf einem (U)EFI MacBook?

Wie konfiguriere ich den Dual-Boot von NixOS mit Mac OS X auf einem (U)EFI MacBook?

Ich konnte keine Beschreibung zur Konfiguration des Dual-Boot finden vonNixOSund Mac OS X auf einem (U)EFI MacBook. Ich bin experimentierfreudig, aber ich möchte zumindest wissen, dass das, was ich ausprobieren werde,angeblichfunktioniert und dass die Chance besteht, dass OS X anschließend nicht neu installiert werden muss.

Kann mir bitte jemand die wichtigsten Schritte erklären oder einen Link zu einer Seite geben, auf der das Verfahren beschrieben wird?

Was mich besonders verwirrt, ist, dass dieUEFI-Installationsabschnittim NixOS-Handbuch steht, dass ich eine EFI-Systempartition erstellen muss, die unter /boot eingebunden wird. Meine Festplatte besitzt jedoch bereits als erste Partition eine EFI-Systempartition und ich befürchte, dass es zu Konflikten kommen kann, wenn ich sowohl Mac OS als auch NixOS erlaube, diese zu ändern. Laut Wikipedia,

Auf Macintosh-Computern mit Apple-Intel-Architektur ist die EFI-Partition zunächst leer und wird nicht zum Booten verwendet. Die EFI-Partition wird jedoch als Staging-Bereich für Firmware-Updates verwendet. Insbesondere werden ein Firmware-Flash-Dienstprogramm (EFI-Binärdatei) und eine Datendatei (FD – „Firmware-Gerät“) im Verzeichnis EFI/APPLE/FIRMWARE abgelegt, das dann beim Neustart des Systems im „Flash-Firmware“-Modus ausgeführt wird. Wenn diese gelöscht wird, bootet das System weiterhin und der Bootmanager ermöglicht Benutzern weiterhin die Auswahl, ob eine Boot Camp-Partition oder das Standard-Mac OS X gestartet werden soll. Firmware-Updates schlagen jedoch fehl.

Ich nehme an, das bedeutet, dass, wenn ich dieselbe EFI-Systempartition für NixOS verwende, diese möglicherweise geändert wird, wenn ich ein Apple-Firmware-Update durchführe. Es ist auch nicht klar, was passiert, wenn ich zwei EFI-Systempartitionen erstelle. Beispielsweise gibt es eine NixOS-Konfigurationsoption boot.loader.efi.efiSysMountPoint(wo die EFI-Systempartition gemountet wird) mit dem Standardwert "/boot", aber woher weiß es, welche gemountet werden soll?

PS: Als Bootmanager wollte ich verwendenrEFInd, aber jeder alternative Vorschlag ist willkommen.

Antwort1

Dies ist eine aktualisierte Version meiner ursprünglichen Antwort, sie sollte für NixOS 15.09 funktionieren. Sie enthält geringfügige Änderungen gegenüber der ursprünglichen Version, die ich zur Installation von NixOS 14.04 verwendet habe, mit etwas Hilfe vonnix-devMailingliste.

Ersteinrichtung

  1. MacBook 5.1 (2008) mit Mac OS 10.9 und Festplatte wie folgt partitioniert:

    a) 200 MB große EFI-Systempartition mit der Bezeichnung „EFI“.

    b) Zwei von Mac OS (10.9) verwendete Partitionen.

    c) Zwei leere ext4-Partitionen mit der Bezeichnung „nixos“ und „home“ und eine Linux-Swap-Partition mit der Bezeichnung „swap“.

    Ich habe folgende Tools verwendet:

    Hier ist meine Partitionstabelle, wie sie ausgedruckt wurde von gdisk:

    Number  Start (sector)    End (sector)  Size       Code  Name
       1              40          409639   200.0 MiB   EF00  EFI System Partition
       2          409640       104603575   49.7 GiB    AF00  Untitled
       3       104865720       261418767   74.7 GiB    AF00  Untitled
       4       261680912       287071535   12.1 GiB    8302  home
       5       287071536       307888927   9.9 GiB     8300  nixos
       7       307888928       312581774   2.2 GiB     8200  swap
    
  2. Kabel-Ethernet-Internetverbindung.

  3. Ein als FAT mit MBR formatiertes und mit der Bezeichnung versehenes USB-Laufwerk NIXOS_ISOmit einer (per Drag & Drop) Kopie des Inhalts des 64-Bit-ISO-Images (Live-CD oder Minimal) von NixOS 15.09.

    • Das Etikett des USB-Sticksmusssein NIXOS_ISO(ich habe es FLASHeinmal versucht, es hat nicht funktioniert).

    • Es scheint, dass NixOS 15.09 ISO-Images nicht unter Mac OS gemountet werden können. Wenn das Image nicht gemountet werden kann, reicht es aus, seinen Inhalt zu extrahieren. Ich konnte den Inhalt des ISO-Images extrahieren mitKekaDateiarchivierungsprogramm.

Installation

  1. Booten Sie vom USB-Laufwerk, indem Alt/OptionSie beim Neustart die Taste gedrückt halten und das USB-Laufwerk auswählenEFI-Boot. Melden Sie sich als „root“ an (ohne Passwort). Stellen Sie sicher, dass die Internetverbindung funktioniert. Für die Installation ist eine Internetverbindung erforderlich.

  2. Ausführen

    swapon /dev/disk/by-label/swap
    mount /dev/disk/by-label/nixos /mnt
    mkdir /mnt/boot
    mkdir /mnt/home
    mount /dev/disk/by-label/EFI  /mnt/boot
    mount /dev/disk/by-label/home /mnt/home
    nixos-generate-config --root /mnt
    
  3. Hinzufügen

    nixpkgs.config.allowUnfree = true;
    

    in der generierten/mnt/etc/nixos/configuration.nixDatei.

  4. Ausführen

    nixos-install
    
  5. Neustart:

    reboot
    

Booten

(Dies war meine Erfahrung mit 14.04.)

Nach dem Neustart bootete der Computer in NixOS. Ich startete erneut und hielt diesmal die Alt/OptionTaste gedrückt. Das Boot-Menü zeigte zwei identisch aussehende „EFI Boot“-Elemente. Es stellte sich heraus, dass eines davon Mac OS und das andere NixOS ist. (Seltsam – vorher wurde das mit Mac OS nach der Mac OS-Partition benannt.) Ok.

Aus Neugier habe ich den Inhalt der EFI-Systempartition gemountet und überprüft:

§ tree /Volumes/EFI/
.
├── EFI
│   ├── APPLE
│   │   ├── EXTENSIONS
│   │   │   └── Firmware.scap
│   │   └── FIRMWARE
│   │       └── MB51_007D_03B_LOCKED.scap
│   ├── Boot
│   │   └── BOOTX64.EFI
│   ├── gummiboot
│   │   └── gummibootx64.efi
│   └── nixos
│       ├── 5683z247xmsrh4lyr2hgpxwlb9gg5wyl-linux-3.12.20-bzImage.efi
│       └── mmjxbf6vwp5mwb384yfd6c8vkhd19gx8-initrd-initrd.efi
└── loader
    ├── entries
    │   └── nixos-generation-1.conf
    └── loader.conf

Alles da, aber/EFI/APPLEund sein Inhalt wurde durch die NixOS-Installation erstellt.

Mac OS wieder als Standard festlegen

(Dies war meine Erfahrung mit 14.04.)

Um Mac OS wieder als Standard festzulegen und das entsprechende Element im Option-Tasten-Bootmenü nach der Mac OS-Partition zu benennen, genügte es, zuSystemeinstellungen... > Startvolumeunter Mac OS und wähle die Partition mit Mac OS aus. Komischerweise musste ich das Admin-Passwort zweimal eingeben und die Partition wurde trotzdem nicht als ausgewählt angezeigt, aber ansonsten hat es funktioniert.

Weitere Anweisungen

  • Um immer zu sehenGummistiefelMenü, es reicht aus, boot.loader.gummiboot.timeoutinkonfiguration.nix.

  • Um meinenVidiaGrafikkarte, ich habe schließlich die Open-Source-JugendstilTreiber:

    services.xserver.videoDrivers = [ "nouveau" ];
    

    Ich habe keine Beschwerden darüber. Wenn ich "nvidia"stattdessen die proprietäre Version verwende, funktionieren Textkonsolen nicht.

    Update für NixOS 16.09. Ich habe festgestellt, dass auf meinem Rechner mit NixOS 16.09 die Option services.xserver.videoDriversnicht benötigt wird inkonfiguration.nixdamit alles gut funktioniert, und dass es tatsächlich die grafische Leistung merklich verschlechtert, wie einige Tests gezeigt haben, die ich mitglmark2OpenGL-Benchmark. Ich habe auch beobachtet, dass die Auswahl "nvidia"den Grafikmodus unterbricht, aber Textkonsolen übrig lässt, im Gegensatz zu dem, was ich bei Nix OS 14.04 beobachtet habe. Das sieht für mich alles ein bisschen seltsam aus, aber das ist, was ich beobachtet habe, also habe ich diese Option aus meinem entferntkonfiguration.nix.

  • Zum Laden derApfelsmcModul (für den plötzlichen Bewegungssensor zum Beispiel) wurde mir vorgeschlagen, Folgendes hinzuzufügenkonfiguration.nix:

    boot.kernelModules = [ "applesmc" ];
    

Bemerkungen und Beobachtungen

Das einzige "Problem" mit NixOS auf meinem MacBook, das ich bisher beobachtet habe, ist, dass mein Laptop unter NixOS normalerweise 5-10 °C wärmer wird als unter Mac OS 10.9. Dies könnte ein häufiges Problem sein fürLinux auf einem Mac.

Links zu alternativen Installationsanleitungen

Antwort2

Einige zusätzliche Tipps:

Wenn Sie die Hintergrundbeleuchtung Ihres Laptops zum Laufen bringen und verhindern möchten, dass dieser bei geschlossenem Deckel spontan wieder hochfährt, können Sie Folgendes verwenden configuration.nix:

  # Enable the backlight control on rMBP 
  # Disable USB-based wakeup
  # see: https://wiki.archlinux.org/index.php/MacBookPro11,x
  powerManagement.powerUpCommands = ''
    if [[ "$(cat /sys/class/dmi/id/product_name)" == "MacBookPro11,3" ]]; then
      ${pkgs.pciutils}/bin/setpci -v -H1 -s 00:01.00 BRIDGE_CONTROL=0

      if cat /proc/acpi/wakeup | grep XHC1 | grep -q enabled; then
        echo XHC1 > /proc/acpi/wakeup
      fi
    fi
  '';

Abhängig von Ihrer MacBook-Version müssen Sie die obigen Befehle möglicherweise anpassen. Kopieren und fügen Sie sie daher nicht blind ein.

Antwort3

Im Master-Zweig des Repository gibt es einige leicht aktualisierte Anweisungen:installing-uefi.xml

verwandte Informationen