Jak skonfigurować podwójny rozruch NixOS z Mac OS X na MacBooku (U) EFI?

19

Nie mogłem znaleźć opisu konfiguracji podwójnego rozruchu NixOS i Mac OS X na (U) EFI MacBook. Jestem skłonny eksperymentować, ale chciałbym wiedzieć przynajmniej, że to, co spróbuję, powinno zadziałać i że będzie szansa, że ​​nie będę musiał ponownie instalować OS X.

Czy ktoś może mi powiedzieć główne kroki lub podać link do strony opisującej procedurę?

To, co mnie szczególnie myli, to fakt, że sekcja instalacyjna UEFI w podręczniku NixOS mówi, że muszę utworzyć partycję systemową EFI, która zostanie zamontowana w / boot; jednak mój dysk ma już partycję systemową EFI jako pierwszą partycję i obawiam się, że mogą wystąpić konflikty, jeśli pozwolę na modyfikację zarówno Mac OS, jak i NixOS. Według Wikipedii ,

Na komputerach Macintosh z architekturą Apple – Intel partycja EFI jest początkowo pusta i nie jest używana do uruchamiania. Jednak partycja EFI jest używana jako obszar przejściowy dla aktualizacji oprogramowania układowego; w szczególności umieszcza narzędzie flash oprogramowania układowego (plik binarny EFI) i plik danych (FD - „Firmware Device”) w katalogu EFI / APPLE / FIRMWARE, który jest następnie uruchamiany podczas ponownego uruchamiania systemu w trybie „flash firmware”. Jeśli zostanie usunięty, system nadal się uruchomi, a menedżer rozruchu nadal pozwoli użytkownikom wybrać, czy uruchomić partycję Boot Camp, czy domyślny system Mac OS X, ale aktualizacje oprogramowania układowego nie powiodą się.

Wyobrażam sobie, że oznacza to, że jeśli użyję tej samej partycji systemowej EFI dla NixOS, może ulec modyfikacji, jeśli dokonam aktualizacji oprogramowania układowego Apple. Nie jest również jasne, co się stanie, jeśli utworzę dwie partycje systemowe EFI. Na przykład istnieje opcja konfiguracji NixOS boot.loader.efi.efiSysMountPoint(gdzie montowana jest partycja systemowa EFI) z wartością domyślną "/boot", ale skąd będzie wiedział, którą zainstalować?

PS Jako menedżer rozruchu planowałem użyć rEFInd , ale wszelkie alternatywne sugestie są mile widziane.

Alexey
źródło

Odpowiedzi:

16

To jest zaktualizowana wersja mojej początkowej odpowiedzi, powinna działać dla NixOS 15.09. Zawiera drobne modyfikacje w porównaniu do początkowej wersji, której użyłem do instalacji NixOS 14.04 z pewną pomocą listy mailingowej nix-dev .

Początkowe ustawienia

  1. MacBook 5,1 (2008) z systemem Mac OS 10.9 i dyskiem twardym podzielonym na partycje w następujący sposób:

    a) 200 MB partycji systemowej EFI oznaczonej jako „EFI”.

    b) Dwie partycje używane przez Mac OS (10.9).

    c) Dwie puste partycje ext4 oznaczone „nixos” i „home” oraz partycja Linux Swap oznaczona „swap”.

    Użyłem następujących narzędzi:

    Oto moja tabela partycji wydrukowana przez 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. Połączenie kablowe Ethernet z Internetem.

  3. Dysk USB sformatowany jako FAT z MBR i oznaczony etykietą NIXOS_ISO, z kopią (przeciągniętą i upuszczoną) zawartości 64-bitowego obrazu ISO NixOS 15.09 (Live CD lub Minimal).

    • Etykieta napędu USB musi być NIXOS_ISO(próbowałem FLASHraz, to nie działało).

    • Wygląda na to, że obrazów ISO NixOS 15.09 nie można zamontować w systemie Mac OS. Jeśli obrazu nie można zamontować, wystarczy wyodrębnić jego zawartość. Mógłbym wyodrębnić zawartość obrazu ISO za pomocą archiwizatora plików Keka .

Instalacja

  1. Uruchom komputer z napędu USB, przytrzymując Alt/Optionklawisz podczas ponownego uruchamiania i wybierając opcję rozruchu EFI USB . Zaloguj się jako „root” (bez hasła). Upewnij się, że połączenie internetowe działa. Do instalacji konieczne jest połączenie z Internetem.

  2. Wykonać

    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. Dodaj

    nixpkgs.config.allowUnfree = true;
    

    w wygenerowanym pliku /mnt/etc/nixos/configuration.nix .

  4. Wykonać

    nixos-install
    
  5. Restart:

    reboot
    

Uruchamianie

( Takie było moje doświadczenie z 14.04. )

Po ponownym uruchomieniu komputer uruchomił się w NixOS. Zrestartowałem się ponownie, trzymając tym razem Alt/Optionklucz. Menu rozruchu zawierało dwa identycznie wyglądające elementy „EFI Boot”. Okazało się, że jednym z nich jest Mac OS, a drugim NixOS. (Dziwne - zanim nazwa systemu Mac OS została nazwana na cześć partycji Mac OS). Ok.

Z ciekawości zamontowałem i sprawdziłem zawartość partycji systemowej EFI:

§ 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

Wszystko tam oprócz / EFI / APPLE i jego zawartości zostało utworzone przez instalację NixOS.

Ponowne ustawianie Mac OS jako domyślnego

( Takie było moje doświadczenie z 14.04. )

Aby ponownie Optionustawić Mac OS jako domyślny i aby odpowiedni element w menu rozruchowym -key nazwany na cześć partycji Mac OS, wystarczył przejść do Preferencji systemowych ...> Dysk startowy w Mac OS i wybrać partycję w Mac OS. O dziwo wymagało to dwukrotnego wprowadzenia hasła administratora, a partycja nadal nie była wyświetlana jako wybrana, ale w przeciwnym razie działała.

Inne instrukcje

  • Aby zawsze widzieć menu Gummiboot , wystarczy ustawić boot.loader.gummiboot.timeoutw pliku configuration.nix .

  • Aby poprawnie skonfigurować moją kartę graficzną nVidia , skończyłem z użyciem sterownika nouveau typu open source :

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

    Nie mam na to żadnych skarg. Jeśli "nvidia"zamiast tego użyję własności , konsole tekstowe nie działają.

    Aktualizacja dla NixOS 16.09 . Zauważyłem, że na moim komputerze z NixOS 16.09 opcja services.xserver.videoDriversnie jest potrzebna w pliku configuration.nix, aby wszystko działało dobrze, i że w rzeczywistości zauważalnie obniża wydajność graficzną zgodnie z kilkoma testami, które przeprowadziłem z testem glmark2 OpenGL. Zauważyłem również, że wybranie "nvidia"przerywa tryb graficzny, ale pozostawia konsole tekstowe, w przeciwieństwie do tego, co zaobserwowałem w Nix OS 14.04. To wszystko wydaje mi się trochę dziwne, ale to właśnie zaobserwowałem, więc usunąłem tę opcję z pliku configuration.nix .

  • Aby załadować moduł applesmc (na przykład czujnik nagłego ruchu) zasugerowano mi dodanie następujących elementów do pliku configuration.nix :

    boot.kernelModules = [ "applesmc" ];
    

Uwagi i obserwacje

Jedynym „problemem” z NixOS na moim MacBooku, który zaobserwowałem do tej pory, jest to, że z systemem NixOS mój laptop zwykle robi się o 5-10 ° C gorętszy niż w Mac OS 10.9. Może to być zwykły problem w systemie Linux na komputerze Mac .

Linki do alternatywnych instrukcji instalacji

Alexey
źródło
Dzięki @Alexey za miły napis! Mam tylko jedną wątpliwość. To niejednoznaczne, jeśli użyłeś wcześniej istniejącej partycji EFI (utworzonej przez Apple) lub jeśli utworzyłeś dodatkową. Próbowałem tego drugiego, ale instalacja kończy się niepowodzeniem, gdy „... system plików nie jest prawidłowym EFI”, więc podejrzewam, że muszę po prostu użyć partycji EFI na komputerze Mac. Czy potwierdzasz Dzięki!
Alfredo Di Napoli
Alfredo, masz rację, nie wyjaśniłem, skąd mam wstępną konfigurację. Miałem już partycję systemową EFI firmy Apple, która, jak sądzę, ma zainstalowane wszystkie komputery, takie jak mój. Będę jednak zaskoczony, jeśli ma to znaczenie, jak ta partycja jest tworzona. Czy na pewno ustawiłeś prawidłowy kod partycji EF00? Użyłem gdisk do zarządzania moimi nowymi partycjami. Dokonałem edycji, aby wyświetlić moją tabelę partycji.
Alexey
Cześć @Alexey, dzięki za odpowiedź. W międzyczasie byłem wystarczająco odważny, aby po prostu ponownie użyć wstępnie zainstalowanej partycji EFI, co najwyraźniej tak właśnie powinniśmy postępować. Prawdopodobnie możliwe jest utworzenie dwóch partycji (i rzeczywiście użyłem EF00 dla tej, którą utworzyłem), ale w końcu ponowne użycie zainstalowanego fabrycznie Apple właśnie działało. Piszę z NixOS podczas rozmowy :)
Alfredo Di Napoli
Wydaje mi się, że przeczytałem gdzieś, że nie jest zalecane ani w jakiś sposób nieobsługiwane posiadanie więcej niż jednej partycji systemowej EFI.
Alexey
Powodzenia w debugowaniu NixOS na MacBooku :). Jeśli nie masz dysku SSD i nie wiesz, jak skonfigurować czujnik nagłego ruchu, daj mi znać. (Właśnie dodałem uwagę na ten temat do mojej odpowiedzi.) Wydaje mi się również, że mam trudności z konfiguracją częstotliwości procesora: nawet w przypadku powersaveregulatora robi się dość gorąco bez wyraźnego powodu.
Alexey
2

Kilka dodatkowych wskazówek:

Jeśli chcesz, aby podświetlenie działało i nie dopuściło do spontanicznego wznawiania pracy laptopa, gdy pokrywa jest zamknięta, możesz użyć następujących opcji w swoim 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
  '';

W zależności od wersji MacBooka może być konieczne dostosowanie powyższych poleceń, więc nie kopiuj i wklej na ślepo.

Charles
źródło
1

W gałęzi master repozytorium znajduje się kilka nieznacznie zaktualizowanych instrukcji: install-uefi.xml

Damien Cassou
źródło
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
DanteTheEgregore,