如何在(U)EFI MacBook上使用Mac OS X配置双启动NixOS?


19

我找不到在(U)EFI MacBook上配置NixOS和Mac OS X 双重引导的任何描述。我很愿意尝试,但我想知道至少这是我会尝试是应该工作,这将有机会不必重新安装OS X之后。

有人可以告诉我主要步骤,还是可以链接到描述该过程的页面?

特别让我感到困惑的是,NixOS手册的UEFI安装部分说我需要制作一个EFI系统分区,该分区将安装在/ boot中。但是,我的磁盘已经有一个EFI系统分区作为第一个分区,如果我同时允许Mac OS和NixOS修改它,恐怕会发生冲突。 根据维基百科

在Apple-Intel体系结构Macintosh计算机上,EFI分区最初是空白的,不用于启动。但是,EFI分区用作固件更新的暂存区。具体来说,它将固件闪存实用程序(EFI二进制文件)和数据文件(FD –“固件设备”)放在目录EFI / APPLE / FIRMWARE中,然后在以“闪存固件”模式重新启动系统时运行。如果删除,系统仍将启动,并且启动管理器仍将允许用户选择启动Boot Camp分区还是默认的Mac OS X,但是固件更新将失败。

我想这意味着如果我为NixOS使用相同的EFI系统分区,则如果我进行Apple固件更新,它可能会被修改。还不清楚如果创建两个EFI系统分区会发生什么。例如,有一个NixOS配置选项boot.loader.efi.efiSysMountPoint(在其中安装了EFI系统分区)具有默认值"/boot",但是它将如何知道要安装哪个?

PS作为启动管理器,我打算使用rEFInd,但是欢迎任何其他建议。

Answers:


16

这是我最初回答的更新版本,应该适用于NixOS 15.09。与初始版本相比,它包含一些细微的修改,而我最初使用nix-dev邮件列表中的一些帮助来安装NixOS 14.04 。

初始设置

  1. 具有Mac OS 10.9和硬盘驱动器的MacBook 5,1(2008)分区如下:

    a)标有“ EFI”的200MB EFI系统分区。

    b)Mac OS(10.9)使用的两个分区。

    c)两个标有“ nixos”和“ home”的空ext4分区,以及一个标有“ swap”的Linux Swap分区。

    我使用了以下工具:

    • GPT fdisk(在Mac OS下),

    • mkfs.ext4 (从可启动USB驱动器上的NixOS下),

    • 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. 电缆以太网Internet连接。

  3. 一个USB驱动器,格式为FAT,带有MBR,并标记为NIXOS_ISO,带有(拖放和删除)NixOS 15.09 64位ISO映像内容的副本(Live CD或Minimal)。

    • USB驱动器的标签必须NIXOS_ISO(我尝试过FLASH一次,但是没有用)。

    • 看来NixOS 15.09 ISO映像无法在Mac OS下挂载。如果无法挂载映像,则足以提取其内容。我可以使用Keka文件归档程序提取ISO映像的内容。

安装

  1. 从USB驱动器引导,方法是Alt/Option在重新引导时按住键并选择USB EFI Boot。以“ root”身份登录(无需密码)。确保Internet连接正常。安装需要互联网连接。

  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在以Mac OS分区命名的-key引导菜单中设置相应的项目,只需在Mac OS下进入“ 系统偏好设置...”>“启动磁盘”,然后选择具有Mac OS的分区即可。奇怪的是,它需要两次输入管理员密码,并且该分区仍未显示为选中状态,但可以正常工作。

其他说明

  • 要始终看到gummiboot菜单,只需boot.loader.gummiboot.timeoutconfiguration.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中删除了此选项。

  • 要加载applesmc模块(例如,用于突然运动传感器),建议我在configuration.nix中添加以下内容:

    boot.kernelModules = [ "applesmc" ];
    

言论与观察

到目前为止,我发现MacBook上唯一的NixOS问题是,在笔记本电脑上运行NixOS时,其温度通常比Mac OS 10.9下高5-10°C。对于Mac上的Linux,这可能是一个常见问题。

链接到替代安装说明


感谢@Alexey的精彩文章!我只有一个疑问。如果最终使用了预先存在的EFI分区(由Apple创建),或者创建了另一个分区,则模棱两可。我尝试了后者,但是安装失败并显示“ ...文件系统不是有效的EFI”,因此我怀疑我只需要使用Mac的EFI分区。你确认吗?谢谢!
2014年

Alfredo,您是对的,我没有解释我如何进行初始设置。我已经有了Apple EFI System Partition,我相信所有的计算机都已经预装了。但是,如果该分区的创建方式很重要,我会感到惊讶。您确定设置了正确的分区代码EF00吗?我使用 gdisk来管理新分区。我进行了编辑以显示分区表。
阿列克谢2014年

嗨@Alexey,感谢您的回复。同时,我足够大胆,可以简单地重用预装的EFI分区,这显然是我们应该如何进行的。可能可以创建两个分区(并且我确实使用EF00创建了一个分区),但最终重新使用Apple预先安装的分区才有效。我正在从NixOS打字:)
Alfredo Di Napoli

我相信我读过某处不建议或不支持具有多个EFI系统分区的地方。
阿列克谢2014年

在MacBook上调试NixOS祝您好运:)。如果您没有SSD,并且想知道如何配置突然运动传感器,请告诉我。(我刚才在回答中对此做了评论。)我似乎在配置CPU频率方面也有困难:即使使用powersave调速器,它也变得很热,没有明显的原因。
阿列克谢2014年

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版本,您可能需要调整以上命令,因此请不要盲目复制和粘贴。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.