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

Ale*_*xey 21 linux macbook multi-boot uefi macos

我找不到在 (U)EFI MacBook 上配置NixOS和 Mac OS X双启动的任何描述。我愿意尝试,但我想至少知道我将尝试的东西是假设的有效,并且之后有机会不必重新安装 OS X。

谁能告诉我主要步骤或提供描述该程序的页面的链接?

特别让我困惑的是 NixOS 手册的UEFI 安装部分说我需要制作一个将安装在 /boot 的 EFI 系统分区;但是,我的磁盘已经有一个 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,但欢迎任何其他建议。

Ale*_*xey 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) 两个空的 ext4 分区标记为“nixos”和“home”,以及一个标记为“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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 电缆以太网互联网连接。

  3. 一个 U 盘格式化为 FAT 并带有 MBR 并标记为NIXOS_ISO,带有 NixOS 15.09 64 位 ISO 映像(Live CD 或最小)内容的副本(拖放)。

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

    • Mac OS 下似乎无法挂载 NixOS 15.09 ISO 映像。如果镜像无法挂载,提取其内容就足够了。我可以使用Keka文件归档程序提取 ISO 映像的内容。

安装

  1. 通过Alt/Option在重新启动时按住该键并选择 USB EFI Boot从 USB 驱动器启动。以“root”身份登录(无密码)。确保 Internet 连接正常工作。安装需要 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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加

    nixpkgs.config.allowUnfree = true;
    
    Run Code Online (Sandbox Code Playgroud)

    在生成的/mnt/etc/nixos/configuration.nix文件中。

  4. 执行

    nixos-install
    
    Run Code Online (Sandbox Code Playgroud)
  5. 重启:

    reboot
    
    Run Code Online (Sandbox Code Playgroud)

开机

这是我在 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
Run Code Online (Sandbox Code Playgroud)

除了/EFI/APPLE及其内容之外的所有内容都是由 NixOS 安装创建的。

再次将 Mac OS 设为默认值

这是我在 14.04 的经验。

要使Mac OS 再次默认并在Option-key 启动菜单中以Mac OS 分区命名相应项,只需转到Mac OS 下的System Preferences...> Startup Disk并选择Mac OS 的分区即可。奇怪的是,它需要输入两次管理员密码,而且分区仍然没有显示为选中状态,但除此之外它还能工作。

其他说明

  • 要始终看到gummiboot菜单,boot.loader.gummiboot.timeoutconfiguration.nix 中设置就足够了。

  • 为了正确配置我的nVidia显卡,我最终使用了开源nouveau驱动程序:

    services.xserver.videoDrivers = [ "nouveau" ];
    
    Run Code Online (Sandbox Code Playgroud)

    我对此没有任何抱怨。如果我改用专有"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" ];
    
    Run Code Online (Sandbox Code Playgroud)

备注和意见

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

替代安装说明的链接