Як налаштувати подвійний завантажувальний 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 і жорстким диском, розділеним так:

    a) Системний розділ 200MB EFI з позначкою "EFI".

    б) Два розділи, які використовує Mac OS (10.9).

    c) Два порожні розділи ext4 з написом "nixos" та "home", а розділ "Swap" для Linux з позначкою "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. Підключення до Інтернету кабельне.

  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 . Увійдіть як "корінь" (без пароля). Переконайтеся, що інтернет-з'єднання працює. Для встановлення необхідне підключення до Інтернету.

  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". Виявилося, що одна з них - 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меню завантаження -key, названий за розділом Mac OS, достатньо було перейти до System Preferences ...> Startup Disk у 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. Це все виглядає трохи дивно для мене, але це те, що я спостерігав, тому я видалив цю опцію зі свого конфігурації.nix .

  • Для того, щоб завантажити applesmc модуль (для раптового датчика руху, наприклад), було запропоновано мені додати наступне 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, коли ми говоримо :)
Альфредо Ді Наполі

Я вважаю, що я десь читав, що не рекомендується або якось не підтримується мати більше одного системного розділу.
Олексій

Удачі з налагодженням 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, вам може знадобитися налаштувати вищезазначені команди, тому не слід сліпо копіювати та вставляти.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.