Como configurar o NixOS de inicialização dupla com o Mac OS X em um (U) EFI MacBook?

19

Não foi possível encontrar nenhuma descrição da configuração da inicialização dupla do NixOS e do Mac OS X em um (U) EFI MacBook. Estou disposto a experimentar, mas gostaria de saber pelo menos que o que vou tentar deve funcionar e que haverá uma chance de não precisar reinstalar o OS X posteriormente.

Alguém pode me dizer as etapas principais ou fornecer um link para uma página que descreve o procedimento?

O que me confunde em particular é que a seção de instalação UEFI do manual NixOS diz que eu preciso criar uma Partição de Sistema EFI que será montada em / boot; no entanto, meu disco já possui uma partição do sistema EFI como a primeira partição e receio que possa haver conflitos se eu permitir que o Mac OS e o NixOS a modifiquem. Segundo a Wikipedia ,

Nos computadores Macintosh com arquitetura Apple – Intel, a partição EFI fica inicialmente em branco e não é usada para inicializar. No entanto, a partição EFI é usada como uma área de preparação para atualizações de firmware; especificamente, ele coloca um utilitário flash de firmware (binário EFI) e um arquivo de dados (FD - "Dispositivo de firmware") no diretório EFI / APPLE / FIRMWARE, que é executado ao reiniciar o sistema no modo "flash firmware". Se excluído, o sistema ainda será inicializado e o gerenciador de inicialização ainda permitirá aos usuários escolher se deseja iniciar uma partição do Boot Camp ou o Mac OS X padrão, mas as atualizações de firmware falharão.

Imagino que isso significa que, se eu usar a mesma EFI System Partition para NixOS, ela poderá ser modificada se eu fizer uma atualização de firmware da Apple. Também não está claro o que acontecerá se eu criar duas Partições de Sistema EFI. Por exemplo, existe uma opção de configuração do NixOS boot.loader.efi.efiSysMountPoint(onde a Partição do sistema EFI está montada) com o valor padrão "/boot", mas como ele saberá qual montar?

PS Como um gerenciador de inicialização, eu estava planejando usar o rEFInd , mas qualquer sugestão alternativa é bem-vinda.

Alexey
fonte

Respostas:

16

Esta é uma versão atualizada da minha resposta inicial, deve funcionar no NixOS 15.09. Ele contém pequenas modificações em comparação com a versão inicial que eu usei para instalar o NixOS 14.04 com alguma ajuda da lista de discussão nix-dev .

Configuração inicial

  1. MacBook 5,1 (2008) com Mac OS 10.9 e disco rígido particionados da seguinte maneira:

    a) Partição do sistema EFI de 200 MB rotulada "EFI".

    b) Duas partições usadas pelo Mac OS (10.9).

    c) Duas partições ext4 vazias denominadas "nixos" e "home" e uma partição Swap do Linux denominada "swap".

    Eu usei as seguintes ferramentas:

    • GPT fdisk (no Mac OS),

    • mkfs.ext4 (a partir do NixOS em uma unidade USB inicializável),

    • mkswap.

    Aqui está minha tabela de partições impressa 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. Conexão à Internet por cabo Ethernet.

  3. Uma unidade USB formatada como FAT com MBR e rotulada NIXOS_ISOcom uma cópia (arrastada e solta) do conteúdo da imagem ISO do NixOS 15.09 de 64 bits (Live CD ou Minimal).

    • A etiqueta da unidade USB deve estar NIXOS_ISO(tentei FLASHuma vez, não funcionou).

    • Parece que as imagens ISO do NixOS 15.09 não podem ser montadas no Mac OS. Se a imagem não puder ser montada, basta extrair seu conteúdo. Eu poderia extrair o conteúdo da imagem ISO com o arquivo Keka .

Instalação

  1. Inicialize a partir da unidade USB mantendo pressionada a Alt/Optiontecla ao reiniciar e selecionando a Inicialização EFI USB . Faça o login como "root" (sem senha). Verifique se a conexão com a Internet está funcionando. É necessária uma conexão com a Internet para a instalação.

  2. Executar

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

    nixpkgs.config.allowUnfree = true;
    

    no arquivo /mnt/etc/nixos/configuration.nix gerado .

  4. Executar

    nixos-install
    
  5. Reinicialização:

    reboot
    

Inicializando

( Esta foi a minha experiência com o 14.04. )

Após a reinicialização, o computador inicializou no NixOS. Eu reiniciei novamente, desta vez segurando a Alt/Optiontecla. O menu de inicialização mostrou dois itens de "EFI Boot" com aparência idêntica. Descobriu-se que um deles é o Mac OS e o outro é o NixOS. (Estranho - antes do nome do Mac OS ter o nome da partição do Mac OS).

Montei e inspecionei o conteúdo da partição do sistema EFI por curiosidade:

§ 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

Tudo lá, exceto / EFI / APPLE e seu conteúdo, foi criado pela instalação do NixOS.

Tornando o Mac OS novamente padrão

( Esta foi a minha experiência com o 14.04. )

Para tornar o Mac OS novamente padrão e tornar o item correspondente no Optionmenu de inicialização com o nome da partição do Mac OS, basta acessar Preferências do Sistema ...> Disco de Inicialização no Mac OS e selecionar a partição no Mac OS. Estranhamente, era necessário digitar a senha de administrador duas vezes e a partição ainda não era mostrada como selecionada, mas, caso contrário, funcionava.

Outras instruções

  • Para sempre ver o menu gummiboot , basta definir boot.loader.gummiboot.timeoutem configuration.nix .

  • Para configurar corretamente minha placa de vídeo nVidia , acabei usando o driver nouveau de código aberto :

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

    Não tenho queixas sobre isso. Se eu usar o proprietário "nvidia", os consoles de texto não funcionarão.

    Atualização para o NixOS 16.09 . Observei que na minha máquina com o NixOS 16.09, a opção services.xserver.videoDriversnão é necessária no configuration.nix para que tudo funcione bem e que, de fato, prejudica visivelmente o desempenho gráfico de acordo com alguns testes que fiz com o benchmark glmark2 OpenGL. Também observei que a seleção "nvidia"quebra o modo gráfico, mas deixa os consoles de texto, ao contrário do que observei no Nix OS 14.04. Tudo isso me parece um pouco estranho, mas foi o que observei, então removi essa opção do meu configuration.nix .

  • Para carregar o módulo applesmc (para o sensor de movimento repentino, por exemplo), sugeriu-me adicionar o seguinte ao configuration.nix :

    boot.kernelModules = [ "applesmc" ];
    

Observações e observações

O único "problema" com o NixOS no meu MacBook que eu observei até agora é que rodar o NixOS no meu laptop geralmente fica 5-10 ° C mais quente do que no Mac OS 10.9. Este pode ser um problema comum para Linux em um Mac .

Links para instruções de instalação alternativas

Alexey
fonte
Obrigado @Alexey pela boa redação! Eu tenho apenas uma dúvida. É ambíguo se você acabou usando a partição EFI preexistente (criada pela Apple) ou se você criou uma partição adicional. Eu tentei o último, mas a instalação está falhando com "... o sistema de arquivos não é um EFI válido", então suspeito que precise usar apenas a partição EFI do Mac. Você confirma? Obrigado!
Alfredo Di Napoli
Alfredo, você está certo, eu não expliquei como consegui a configuração inicial. Eu já tinha o Apple EFI System Partition, que, acredito, todos os computadores como o meu pré-instalaram. Ficarei surpreso, no entanto, se importa como essa partição é criada. Tem certeza de que definiu o código de partição correto EF00? Eu usei o gdisk para gerenciar minhas novas partições. Fiz uma edição para mostrar minha tabela de partições.
Alexey #
Olá @Alexey, obrigado pela resposta. Enquanto isso, tive a coragem de simplesmente reutilizar a partição EFI pré-instalada que, aparentemente, é como devemos proceder. Provavelmente é possível criar duas partições (e eu realmente usei o EF00 para a que eu criei), mas eventualmente a reutilização da Apple pré-instalada funcionou. Estou digitando no NixOS enquanto falamos :) #
Alfredo Di Napoli
Acredito que li em algum lugar que não é recomendado ou, de alguma forma, não há suporte para ter mais de uma partição de sistema EFI.
Alexey #
Boa sorte com a depuração do NixOS no MacBook :). Se você não tiver SSD e descobrir como configurar o sensor de movimento repentino, informe-me, por favor. (Acabei de adicionar um comentário sobre isso à minha resposta.) Também pareço ter dificuldade em configurar a frequência da CPU: mesmo com o powersavegovernador, ele fica muito quente sem motivo aparente.
Alexey
2

Algumas dicas adicionais:

Se você deseja que a luz de fundo funcione e evite que seu laptop seja retomado espontaneamente enquanto a tampa estiver fechada, use algo como o seguinte 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
  '';

Dependendo da versão do seu MacBook, você pode precisar ajustar os comandos acima; portanto, não copie e cole cegamente.

Charles
fonte
1

Existem algumas instruções ligeiramente atualizadas na ramificação principal do repositório: installation-uefi.xml

Damien Cassou
fonte
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
DanteTheEgregore