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

19

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

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

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

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

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

PS Как менеджер загрузки я планировал использовать rEFInd , но любые альтернативные предложения приветствуются.

Алексей
источник

Ответы:

16

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

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

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

    а) Системный раздел EFI 200 МБ с надписью "EFI".

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

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

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

    • GPT fdisk (из-под 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-образа с помощью файлового архиватора Keka .

Установка

  1. Загрузитесь с USB-накопителя, удерживая нажатой Alt/Optionклавишу при перезагрузке и выбрав USB EFI Boot . Войдите в систему как «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

Все, кроме / EFI / APPLE и его содержимого, было создано установкой NixOS.

Повторная установка Mac OS по умолчанию

( Это был мой опыт с 14.04. )

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

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

  • Чтобы всегда видеть меню gummiboot , достаточно установить boot.loader.gummiboot.timeoutв файле configuration.nix .

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

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

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

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

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

    boot.kernelModules = [ "applesmc" ];
    

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

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

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

Алексей
источник
Спасибо @Alexey за хорошую рецензию! У меня только одно сомнение. Это неоднозначно, если вы в конечном итоге использовали уже существующий раздел EFI (созданный Apple) или создали дополнительный. Я попробовал последнее, но установка не удалась с "... файловая система не является действительным EFI", поэтому я подозреваю, что мне нужно просто использовать раздел EFI для Mac. Вы подтверждаете? Благодарность!
Альфредо Ди Наполи
Альфредо, ты прав, я не объяснил, как я получил начальную настройку. У меня уже был системный раздел Apple EFI, на котором, я полагаю, все компьютеры, подобные моему, уже предустановлены. Я буду удивлен, однако, если это имеет значение, как этот раздел создается. Вы уверены, что установили правильный код раздела EF00? Я использовал gdisk для управления моими новыми разделами. Я внес изменения, чтобы показать мою таблицу разделов.
Алексей
Привет @ Алексей, спасибо за ответ. В то же время я был достаточно смел, чтобы просто повторно использовать предустановленный раздел EFI, что, по-видимому, так и должно быть. Вероятно, возможно создать два раздела (и я действительно использовал EF00 для того, который я создал), но в конечном итоге повторное использование предустановленного Apple просто сработало. Я набираю текст из NixOS, как мы говорим :)
Альфредо Ди Наполи
Мне кажется, я где-то читал, что не рекомендуется или как-то не поддерживается иметь более одного системного раздела EFI.
Алексей
Удачи в отладке NixOS на MacBook :). Если у вас нет SSD и вы разберетесь, как настроить датчик внезапного движения, дайте мне знать, пожалуйста. (Я только что добавил замечание по этому поводу в свой ответ.) Мне также кажется, что у меня возникают трудности с настройкой частоты процессора: даже с powersaveрегулятором температура становится довольно горячей без видимой причины.
Алексей
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 вам может потребоваться настроить вышеприведенные команды, поэтому, пожалуйста, не копируйте и не вставляйте вслепую.

Чарльз
источник
1

В ветке master хранилища есть несколько обновленных инструкций: installation-uefi.xml

Дэмиен Кассу
источник
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
DanteTheEgregore