Comment configurer NixOS à double démarrage avec Mac OS X sur un MacBook (U) EFI?


19

Je n'ai trouvé aucune description de la configuration du double démarrage de NixOS et Mac OS X sur un MacBook (U) EFI. Je suis prêt à expérimenter, mais je voudrais au moins savoir que ce que j'essaierai est censé fonctionner et qu'il y aura une chance de ne pas avoir à réinstaller OS X par la suite.

Quelqu'un peut-il me dire s'il vous plaît les principales étapes ou donner un lien vers une page qui décrit la procédure?

Ce qui m'embrouille en particulier, c'est que la section d'installation UEFI du manuel NixOS dit que j'ai besoin de faire une partition système EFI qui sera montée à / boot; cependant, mon disque a déjà une partition système EFI comme première partition, et j'ai peur qu'il puisse y avoir des conflits si j'autorise Mac OS et NixOS à la modifier. Selon Wikipedia ,

Sur les ordinateurs Macintosh à architecture Apple – Intel, la partition EFI est initialement vierge et n'est pas utilisée pour le démarrage. Cependant, la partition EFI est utilisée comme zone intermédiaire pour les mises à jour du micrologiciel; en particulier, il place un utilitaire flash du firmware (binaire EFI) et un fichier de données (FD - "Firmware Device") dans le répertoire EFI / APPLE / FIRMWARE qui est ensuite exécuté lors du redémarrage du système en mode "flash firmware". S'il est supprimé, le système continuera de démarrer et le gestionnaire de démarrage permettra toujours aux utilisateurs de choisir de démarrer une partition Boot Camp ou Mac OS X par défaut, mais les mises à jour du micrologiciel échoueront.

J'imagine que cela signifie que si j'utilise la même partition système EFI pour NixOS, elle peut être modifiée si je fais une mise à jour du firmware Apple. On ne sait pas non plus ce qui se passera si je crée deux partitions système EFI. Par exemple, il existe une option de configuration NixOS boot.loader.efi.efiSysMountPoint(où la partition système EFI est montée) avec la valeur par défaut "/boot", mais comment saura-t-elle laquelle monter?

PS En tant que gestionnaire de démarrage, je prévoyais d'utiliser rEFInd , mais toute suggestion alternative est la bienvenue.

Réponses:


16

Ceci est une version mise à jour de ma réponse initiale, cela devrait fonctionner pour NixOS 15.09. Il contient des modifications mineures par rapport à la version initiale que j'ai utilisée pour installer NixOS 14.04 avec l'aide de la liste de diffusion nix-dev .

La configuration initiale

  1. MacBook 5,1 (2008) avec Mac OS 10.9 et disque dur partitionné comme suit:

    a) Partition de système EFI 200 Mo étiquetée «EFI».

    b) Deux partitions utilisées par Mac OS (10.9).

    c) Deux partitions ext4 vides intitulées "nixos" et "home", et une partition Linux Swap intitulée "swap".

    J'ai utilisé les outils suivants:

    Voici ma table de partition imprimée par 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. Connexion Internet par câble Ethernet.

  3. Un lecteur USB formaté en FAT avec MBR et étiqueté NIXOS_ISO, avec une copie (glissé-déposé) du contenu de l'image ISO 64 bits NixOS 15.09 (Live CD ou Minimal).

    • L'étiquette de la clé USB doit être NIXOS_ISO(j'ai essayé FLASHune fois, cela n'a pas fonctionné).

    • Il semble que les images ISO NixOS 15.09 ne puissent pas être montées sous Mac OS. Si l'image ne peut pas être montée, il suffit d'extraire son contenu. J'ai pu extraire le contenu de l'image ISO avec l' archiveur de fichiers Keka .

Installation

  1. Démarrez à partir du lecteur USB en maintenant la Alt/Optiontouche enfoncée lors du redémarrage et en sélectionnant le démarrage USB EFI . Connectez-vous en tant que "root" (sans mot de passe). Assurez-vous que la connexion Internet fonctionne. Une connexion Internet est nécessaire pour l'installation.

  2. Exécuter

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

    nixpkgs.config.allowUnfree = true;
    

    dans le fichier /mnt/etc/nixos/configuration.nix généré .

  4. Exécuter

    nixos-install
    
  5. Redémarrer:

    reboot
    

Amorçage

( Ce fut mon expérience avec 14.04. )

Après le redémarrage, l'ordinateur a démarré dans NixOS. J'ai redémarré à nouveau, en tenant cette fois la Alt/Optionclé. Le menu de démarrage a montré deux éléments "EFI Boot" identiques. Il s'est avéré que l'un d'eux est Mac OS, et l'autre est NixOS. (Étrange - avant celui avec Mac OS a été nommé d'après la partition Mac OS.) Ok.

J'ai monté et inspecté le contenu de la partition du système EFI par curiosité:

§ 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

Tout, sauf / EFI / APPLE et son contenu, a été créé par l'installation de NixOS.

Rendre Mac OS par défaut à nouveau

( Ce fut mon expérience avec 14.04. )

Pour redéfinir Mac OS par défaut et pour faire l'élément correspondant dans le Optionmenu de démarrage -key nommé d'après la partition Mac OS, il suffisait d'aller dans Préférences Système ...> Disque de démarrage sous Mac OS et sélectionnez la partition avec Mac OS. Étrangement, cela nécessitait d'entrer deux fois le mot de passe administrateur, et la partition n'était toujours pas affichée comme sélectionnée, mais sinon cela fonctionnait.

Autres instructions

  • Pour toujours voir le menu gummiboot , il suffit de définir boot.loader.gummiboot.timeoutdans configuration.nix .

  • Pour configurer correctement ma carte graphique nVidia , j'ai fini par utiliser le nouveau pilote open-source :

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

    Je n'ai rien à redire à ce sujet. Si j'utilise le propriétaire à la "nvidia"place, les consoles de texte ne fonctionnent pas.

    Mise à jour pour NixOS 16.09 . J'ai observé que sur ma machine avec NixOS 16.09, l'option services.xserver.videoDriversn'est pas nécessaire dans configuration.nix pour que tout fonctionne bien, et qu'en fait elle dégrade sensiblement les performances graphiques selon quelques tests que j'ai faits avec le benchmark glmark2 OpenGL. J'ai également observé que la sélection "nvidia"rompt le mode graphique mais laisse des consoles de texte, contrairement à ce que j'ai observé avec Nix OS 14.04. Tout cela me semble un peu étrange, mais c'est ce que j'ai observé, j'ai donc supprimé cette option de ma configuration.nix .

  • Pour charger le module applesmc (pour le capteur de mouvement soudain, par exemple), il m'a été suggéré d'ajouter ce qui suit à configuration.nix :

    boot.kernelModules = [ "applesmc" ];
    

Remarques et observations

Le seul "problème" avec NixOS sur mon MacBook que j'ai observé jusqu'à présent est que l'exécution de NixOS sur mon ordinateur portable est généralement de 5 à 10 ° C plus chaude que sous Mac OS 10.9. Cela pourrait être un problème habituel pour Linux sur Mac .

Liens vers des instructions d'installation alternatives


Merci @Alexey pour la belle rédaction! Je n'ai qu'un seul doute. C'est ambigu si vous avez fini par utiliser la partition EFI préexistante (créée par Apple) ou si vous en avez créé une supplémentaire. J'ai essayé ce dernier, mais l'installation échoue avec "... le système de fichiers n'est pas un EFI valide", donc je pense que je dois simplement utiliser la partition EFI du Mac. Confirmez-vous? Merci!
Alfredo Di Napoli

Alfredo, tu as raison, je n'ai pas expliqué comment j'ai obtenu la configuration initiale. J'avais déjà Apple EFI System Partition, qui, je crois, tous les ordinateurs comme le mien sont préinstallés. Je serai cependant surpris si la façon dont cette partition est créée est importante. Êtes-vous sûr d'avoir défini le bon code de partition EF00? J'ai utilisé gdisk pour gérer mes nouvelles partitions. J'ai effectué une modification pour afficher ma table de partition.
Alexey

Salut @Alexey, merci pour la réponse. Entre-temps, j'ai eu l'audace de simplement réutiliser la partition EFI préinstallée qui, apparemment, est la façon de procéder. Il est probablement possible de créer deux partitions (et j'ai en effet utilisé EF00 pour celle que j'ai créée), mais la réutilisation d'Apple préinstallée a finalement fonctionné. Je tape de NixOS en ce moment :)
Alfredo Di Napoli

Je crois avoir lu quelque part qu'il n'est pas recommandé ou en quelque sorte non pris en charge d'avoir plus d'une partition système EFI.
Alexey

Bonne chance avec le débogage de NixOS sur MacBook :). Si vous ne possédez pas de SSD et découvrez comment configurer le capteur de mouvement soudain, faites-le moi savoir, s'il vous plaît. (Je viens d'ajouter une remarque à ce sujet à ma réponse.) Il me semble également avoir des difficultés à configurer la fréquence du processeur: même avec le powersavegouverneur, il fait assez chaud sans raison apparente.
Alexey

2

Quelques conseils supplémentaires:

Si vous souhaitez que votre rétroéclairage fonctionne et empêcher votre ordinateur portable de reprendre spontanément lorsque le couvercle est fermé, vous pouvez utiliser quelque chose comme ce qui suit dans votre 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
  '';

En fonction de votre version de MacBook, vous devrez peut-être modifier les commandes ci-dessus, alors ne copiez-collez pas aveuglément.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.