¿Cómo configurar el arranque dual NixOS con Mac OS X en una (U) EFI MacBook?

19

No pude encontrar ninguna descripción de la configuración de arranque dual de NixOS y Mac OS X en una (U) EFI MacBook. Estoy dispuesto a experimentar, pero me gustaría saber al menos que lo que intentaré se supone que funciona, y que habrá una oportunidad de no tener que reinstalar OS X después.

¿Alguien puede decirme los pasos principales o dar un enlace a una página que describa el procedimiento?

Lo que me confunde en particular es que la sección de instalación de UEFI del manual de NixOS dice que necesito hacer una partición del sistema EFI que se montará en / boot; sin embargo, mi disco ya tiene una partición del sistema EFI como primera partición, y me temo que puede haber conflictos si permito que tanto Mac OS como NixOS lo modifiquen. De acuerdo con Wikipedia ,

En las computadoras Macintosh con arquitectura Apple – Intel, la partición EFI está inicialmente en blanco y no se utiliza para el arranque. Sin embargo, la partición EFI se usa como área de preparación para actualizaciones de firmware; específicamente, coloca una utilidad flash de firmware (binario EFI) y un archivo de datos (FD - "Dispositivo de firmware") en el directorio EFI / APPLE / FIRMWARE que luego se ejecuta al reiniciar el sistema en modo "firmware flash". Si se elimina, el sistema aún se iniciará y el administrador de inicio aún permitirá a los usuarios elegir si iniciar una partición Boot Camp o la Mac OS X predeterminada, pero las actualizaciones de firmware fallarán.

Me imagino que esto significa que si uso la misma partición del sistema EFI para NixOS, puede modificarse si realizo una actualización de firmware de Apple. Tampoco está claro qué sucederá si creo dos particiones del sistema EFI. Por ejemplo, hay una opción de configuración de NixOS boot.loader.efi.efiSysMountPoint(donde se monta la partición del sistema EFI) con el valor predeterminado "/boot", pero ¿cómo sabrá cuál montar?

PD Como administrador de arranque, estaba planeando usar rEFInd , pero cualquier sugerencia alternativa es bienvenida.

Alexey
fuente

Respuestas:

16

Esta es una versión actualizada de mi respuesta inicial, debería funcionar para NixOS 15.09. Contiene modificaciones menores en comparación con la versión inicial que utilicé para instalar NixOS 14.04 con alguna ayuda de la lista de correo nix-dev .

Configuración inicial

  1. MacBook 5,1 (2008) con Mac OS 10.9 y disco duro particionado de la siguiente manera:

    a) Partición del sistema EFI de 200 MB con la etiqueta "EFI".

    b) Dos particiones utilizadas por Mac OS (10.9).

    c) Dos particiones ext4 vacías con la etiqueta "nixos" y "home", y una partición de intercambio de Linux con la etiqueta "swap".

    Usé las siguientes herramientas:

    • GPT fdisk (desde debajo de Mac OS),

    • mkfs.ext4 (desde debajo de NixOS en una unidad USB de arranque),

    • mkswap.

    Aquí está mi tabla de particiones impresa por 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. Conexión a internet por cable Ethernet.

  3. Una unidad USB formateada como FAT con MBR y etiquetada NIXOS_ISO, con una copia (arrastrada y soltada) del contenido de la imagen ISO NixOS 15.09 de 64 bits (Live CD o Minimal).

    • La etiqueta de la unidad USB debe ser NIXOS_ISO(lo intenté FLASHuna vez, no funcionó).

    • Parece que las imágenes ISO de NixOS 15.09 no se pueden montar en Mac OS. Si la imagen no se puede montar, es suficiente extraer su contenido. Podría extraer el contenido de la imagen ISO con el archivador de archivos Keka .

Instalación

  1. Arranque desde la unidad USB manteniendo presionada la Alt/Optiontecla al reiniciar y seleccionando USB EFI Boot . Inicie sesión como "root" (sin contraseña). Asegúrese de que la conexión a Internet esté funcionando. La conexión a Internet es necesaria para la instalación.

  2. Ejecutar

    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. Añadir

    nixpkgs.config.allowUnfree = true;
    

    en el archivo /mnt/etc/nixos/configuration.nix generado .

  4. Ejecutar

    nixos-install
    
  5. Reiniciar:

    reboot
    

Arranque

( Esta fue mi experiencia con 14.04. )

Después de reiniciar, la computadora se inició en NixOS. Reinicié de nuevo, sosteniendo esta vez la Alt/Optionllave. El menú de arranque mostraba dos elementos de "arranque EFI" idénticos. Resultó que uno de ellos es Mac OS, y el otro es NixOS. (Extraño: antes de que el que tenía Mac OS lleva el nombre de la partición de Mac OS). Ok.

Monté e inspeccioné el contenido de la partición del sistema EFI por curiosidad:

§ 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

Todo lo que hay excepto / EFI / APPLE y su contenido ha sido creado por la instalación de NixOS.

Hacer que Mac OS vuelva a ser predeterminado

( Esta fue mi experiencia con 14.04. )

Para que Mac OS vuelva a ser predeterminado y para que el elemento correspondiente en el Optionmenú de arranque de la tecla con el nombre de la partición de Mac OS, sea suficiente para ir a Preferencias del sistema ...> Disco de inicio en Mac OS y seleccionar la partición con Mac OS. Curiosamente, requirió ingresar la contraseña de administrador dos veces, y la partición aún no se mostraba como seleccionada, pero de lo contrario funcionó.

Otras instrucciones

  • Para ver siempre el menú gummiboot , es suficiente configurarlo boot.loader.gummiboot.timeouten configuration.nix .

  • Para configurar correctamente mi tarjeta gráfica nVidia , terminé usando el controlador nouveau de código abierto :

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

    No tengo quejas al respecto. Si uso el propietario "nvidia", las consolas de texto no funcionan.

    Actualización para NixOS 16.09 . Observé que en mi máquina con NixOS 16.09, la opción services.xserver.videoDriversno es necesaria en configuration.nix para que todo funcione bien, y que de hecho degrada notablemente el rendimiento gráfico de acuerdo con algunas pruebas que hice con el benchmark glmark2 OpenGL. También observé que la selección "nvidia"interrumpe el modo gráfico pero deja las consolas de texto, al contrario de lo que observé con Nix OS 14.04. Todo esto me parece un poco extraño, pero esto es lo que observé, así que eliminé esta opción de mi configuration.nix .

  • Para cargar el módulo applesmc (para el sensor de movimiento repentino, por ejemplo), me sugirieron agregar lo siguiente a configuration.nix :

    boot.kernelModules = [ "applesmc" ];
    

Observaciones y observaciones

El único "problema" con NixOS en mi MacBook que he observado hasta ahora es que al ejecutar NixOS, mi computadora portátil generalmente se calienta entre 5 y 10 ° C en comparación con Mac OS 10.9. Este podría ser un problema habitual para Linux en una Mac .

Enlaces a instrucciones de instalación alternativas

Alexey
fuente
¡Gracias @Alexey por el buen artículo! Solo tengo una duda. Es ambiguo si terminaste usando la partición EFI preexistente (creada por Apple) o si creaste una adicional. Intenté lo último, pero la instalación falla con "... el sistema de archivos no es un EFI válido", por lo que sospecho que solo necesito usar la partición EFI de la Mac. ¿Confirmas? ¡Gracias!
Alfredo Di Napoli
Alfredo, tienes razón, no expliqué cómo obtuve la configuración inicial. Ya tenía Apple EFI System Partition, que, creo, todas las computadoras como la mía tienen preinstaladas. Sin embargo, me sorprenderá si importa cómo se crea esa partición. ¿Está seguro de haber configurado el código de partición correcto EF00? Solía gdisk para gestionar mis nuevas particiones. He realizado una edición para mostrar mi tabla de particiones.
Alexey
Hola @Alexey, gracias por la respuesta. Mientras tanto, fui lo suficientemente valiente como para simplemente reutilizar la partición EFI preinstalada que, aparentemente, es cómo debemos proceder. Probablemente sea posible crear dos particiones (y de hecho he usado EF00 para la que creé), pero finalmente reutilizar Apple preinstalado simplemente funcionó. Estoy escribiendo desde NixOS mientras hablamos :)
Alfredo Di Napoli
Creo que he leído en alguna parte que no es recomendable o de alguna manera no es compatible tener más de una partición del sistema EFI.
Alexey
Buena suerte con la depuración de NixOS en MacBook :). Si no tiene SSD y descubre cómo configurar el sensor de movimiento repentino, avíseme, por favor. (Acabo de agregar un comentario sobre esto a mi respuesta.) También parece que tengo dificultades para configurar la frecuencia de la CPU: incluso con el powersaveregulador se calienta bastante sin razón aparente.
Alexey
2

Algunos consejos adicionales:

Si desea que su luz de fondo funcione y evitar que su computadora portátil se reanude espontáneamente mientras la tapa está cerrada, puede usar algo como lo siguiente en su 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
  '';

Dependiendo de su versión de MacBook, es posible que necesite modificar los comandos anteriores, así que no copie y pegue ciegamente.

Charles
fuente
1

Hay algunas instrucciones ligeramente actualizadas en la rama maestra del repositorio: installation-uefi.xml

Damien Cassou
fuente
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
DanteTheEgregore