Как настроить двойную загрузку NixOS с Mac OS X на (U)EFI MacBook?

Как настроить двойную загрузку NixOS с Mac OS X на (U)EFI MacBook?

Я не смог найти описания настройки двойной загрузкиNixOSи Mac OS X на (U)EFI MacBook. Я готов экспериментировать, но я хотел бы знать, по крайней мере, что то, что я попробую,предполагаемыйработать, и что будет шанс не переустанавливать OS X впоследствии.

Может ли кто-нибудь рассказать мне основные шаги или дать ссылку на страницу, описывающую процедуру?

Что меня особенно смущает, так это то, чтоРаздел установки UEFIв руководстве NixOS говорится, что мне нужно создать системный раздел EFI, который будет смонтирован в /boot; однако на моем диске уже есть системный раздел EFI в качестве первого раздела, и я боюсь, что могут возникнуть конфликты, если я разрешу и Mac OS, и NixOS изменять его. Согласно Википедии,

На компьютерах Macintosh с архитектурой Apple–Intel раздел EFI изначально пуст и не используется для загрузки. Однако раздел EFI используется в качестве промежуточной области для обновлений прошивки; в частности, он помещает утилиту прошивки (двоичный файл EFI) и файл данных (FD – «Firmware Device») в каталог EFI/APPLE/FIRMWARE, который затем запускается при перезагрузке системы в режиме «прошивки». Если удалить, система все равно будет загружаться, а менеджер загрузки все равно позволит пользователям выбирать, запускать ли раздел Boot Camp или Mac OS X по умолчанию, но обновления прошивки не будут выполнены.

Я полагаю, это означает, что если я использую тот же системный раздел EFI для NixOS, он может быть изменен, если я сделаю обновление прошивки Apple. Также неясно, что произойдет, если я создам два системных раздела EFI. Например, есть параметр конфигурации NixOS boot.loader.efi.efiSysMountPoint(где монтируется системный раздел EFI) со значением по умолчанию "/boot", но как он узнает, какой из них монтировать?

P.S. В качестве менеджера загрузки я планировал использоватьпересмотреть, но любые альтернативные предложения приветствуются.

решение1

Это обновленная версия моего первоначального ответа, она должна работать для NixOS 15.09. Она содержит незначительные изменения по сравнению с первоначальной версией, которую я использовал для установки NixOS 14.04 с некоторой помощью отnix-devсписок рассылки.

Начальная настройка

  1. MacBook 5,1 (2008) с Mac OS 10.9 и жестким диском, разбитым следующим образом:

    а) Системный раздел EFI объемом 200 МБ с маркировкой «EFI».

    б) Два раздела, используемые Mac OS (10.9).

    в) Два пустых раздела ext4 с метками «nixos» и «home», а также раздел подкачки Linux с меткой «swap».

    Я использовал следующие инструменты:

    • GPT-диск(из-под Mac OS),

    • mkfs.ext4(из-под NixOS на загрузочном USB-накопителе),

    • mkswap.

    Вот моя таблица разделов, напечатанная 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. Кабельное Ethernet-подключение к Интернету.

  3. USB-накопитель, отформатированный как FAT с MBR и помеченный как NIXOS_ISO, с копией (перетащенной) содержимого 64-битного ISO-образа NixOS 15.09 (Live CD или Minimal).

    • Этикетка USB-накопителядолженбыть NIXOS_ISO(я пробовал FLASHодин раз, не получилось).

    • Похоже, что образы NixOS 15.09 ISO не могут быть смонтированы под Mac OS. Если образ не может быть смонтирован, достаточно извлечь его содержимое. Я мог бы извлечь содержимое образа ISO с помощьюКекаархиватор файлов.

Монтаж

  1. Загрузитесь с USB-накопителя, удерживая Alt/Optionклавишу при перезагрузке и выбрав USBЗагрузка EFI. Войдите как "root" (без пароля). Убедитесь, что подключение к Интернету работает. Для установки необходимо подключение к Интернету.

  2. Выполнять

    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. Добавлять

    nixpkgs.config.allowUnfree = true;
    

    в сгенерированном/mnt/etc/nixos/configuration.nixфайл.

  4. Выполнять

    nixos-install
    
  5. Перезагрузить:

    reboot
    

Загрузка

(Вот такой у меня был опыт с 14.04.)

После перезагрузки компьютер загрузился в NixOS. Я перезагрузился снова, на этот раз удерживая клавишу Alt/Option. В меню загрузки появились два одинаково выглядящих пункта "EFI Boot". Оказалось, что один из них - Mac OS, а другой - NixOS. (Странно - раньше тот, что с Mac OS, назывался по разделу Mac OS.) Хорошо.

Из любопытства я смонтировал и проверил содержимое системного раздела 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

Все там, кроме/ЭФИ/ЯБЛОКОи его содержимое было создано установкой NixOS.

Снова делаем Mac OS по умолчанию

(Вот такой у меня был опыт с 14.04.)

Чтобы снова сделать Mac OS системой по умолчанию и сделать соответствующий пункт в Optionменю загрузки -key названным в честь раздела Mac OS, достаточно было зайти вСистемные настройки... > Загрузочный дискпод Mac OS и выберите раздел с Mac OS. Странно, но для этого потребовалось дважды ввести пароль администратора, и раздел все еще не был показан как выбранный, но в остальном это сработало.

Другие инструкции

  • Чтобы всегда видетьрезиновый сапогменю, достаточно установить boot.loader.gummiboot.timeoutвконфигурация.nix.

  • Чтобы правильно настроить мойnVidiaвидеокарту, я в итоге использовал версию с открытым исходным кодоммодернВодитель:

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

    У меня нет никаких жалоб на него. Если я использую фирменный "nvidia", текстовые консоли не работают.

    Обновление для NixOS 16.09. Я заметил, что на моей машине с NixOS 16.09 эта опция services.xserver.videoDriversне нужна.конфигурация.nixчтобы все работало хорошо, и что на самом деле это заметно ухудшает графическую производительность, согласно нескольким тестам, которые я провел сglmark2OpenGL benchmark. Я также заметил, что выбор "nvidia"прерывает графический режим, но оставляет текстовые консоли, в отличие от того, что я наблюдал с Nix OS 14.04. Все это выглядит немного странно для меня, но это то, что я наблюдал, поэтому я удалил эту опцию из своегоконфигурация.nix.

  • Чтобы загрузитьapplesmcмодуль (например, для датчика внезапного движения) мне было предложено добавить следующееконфигурация.nix:

    boot.kernelModules = [ "applesmc" ];
    

Замечания и наблюдения

Единственная "проблема" с NixOS на моем MacBook, которую я заметил до сих пор, заключается в том, что при работе NixOS мой ноутбук обычно нагревается на 5-10 °C больше, чем под Mac OS 10.9. Это может быть обычной проблемой дляLinux на Mac.

Ссылки на альтернативные инструкции по установке

решение2

Несколько дополнительных советов:

Если вы хотите, чтобы подсветка работала и ноутбук не включался самопроизвольно при закрытой крышке, вы можете использовать что-то вроде следующего 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
  '';

В зависимости от версии вашего MacBook вам, возможно, придется подправить приведенные выше команды, поэтому, пожалуйста, не копируйте и не вставляйте их бездумно.

решение3

В основной ветке репозитория есть несколько слегка обновленных инструкций:установка-uefi.xml

Связанный контент