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

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

我找不到任何关于配置双启动的描述NixOS以及 (U)EFI MacBook 上的 Mac OS X。我愿意尝试,但我至少想知道我将尝试的是应该就可以正常工作,并且以后就不必重新安装 OS X。

有人能告诉我主要步骤或者给我一个描述该过程的页面的链接吗?

让我特别困惑的是UEFI 安装部分NixOS 手册说我需要创建一个 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 作为启动管理器,我打算使用重新索引,但欢迎任何其他建议。

答案1

这是我最初答案的更新版本,它应该适用于 NixOS 15.09。与我用来安装 NixOS 14.04 的初始版本相比,它包含了一些小的修改,我之前在nix-dev邮件列表。

初始设置

  1. MacBook 5,1(2008),搭载 Mac OS 10.9,硬盘分区如下:

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

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

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

    我使用了以下工具:

    • GPT磁盘(在 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. 有线以太网互联网连接。

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

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

    • NixOS 15.09 ISO 映像似乎无法在 Mac OS 下安装。如果无法安装映像,只需提取其内容即可。我可以使用以下命令提取 ISO 映像的内容柯卡文件归档器。

安装

  1. 重新启动时按住Alt/Option键并选择 USB,从 USB 驱动器启动EFI 启动. 以“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
    
  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/苹果并且其内容已由NixOS安装创建。

再次将 Mac OS 设为默认操作系统

这是我对 14.04 的体验。

要使 Mac OS 再次成为默认设置,并使Option-key 启动菜单中的相应项以 Mac OS 分区命名,只需转到系统偏好设置...> 启动磁盘在 Mac OS 下,选择 Mac OS 分区。奇怪的是,它要求输入两次管理员密码,并且分区仍然没有显示为已选择,但除此之外,它工作正常。

其他说明

  • 总是看到橡胶靴菜单,只需设置boot.loader.gummiboot.timeout即可配置.nix

  • 要正确配置我的英伟达显卡,我最终使用了开源司机:

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

    我对此没什么抱怨。如果我改用专有版本"nvidia",文本控制台将无法工作。

    NixOS 16.09 更新。我发现,在我的 NixOS 16.09 机器上,services.xserver.videoDrivers不需要该选项配置.nix为了让一切正常运转,事实上,根据我做的一些测试,它明显降低了图形性能glmark2OpenGL 基准测试。我还观察到,选择此选项"nvidia"会中断图形模式,但会保留文本控制台,这与我在 Nix OS 14.04 中观察到的情况相反。这一切对我来说看起来有点奇怪,但这就是我观察到的,所以我从我的配置.nix

  • 要加载苹果模块(例如,用于突然运动传感器),建议我添加以下内容配置.nix

    boot.kernelModules = [ "applesmc" ];
    

评论和观察

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

替代安装说明的链接

答案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

相关内容