跳转至内容

Mac

来自 ArchWiki
(重定向自 MacOS)

本页面补充了 安装指南 中针对 Apple Macs 的特定说明。Arch 安装映像支持 Intel 处理器的 Apple Macs,但不支持 PowerPC 或 Apple Silicon 处理器。

概述

总而言之,在 Mac 上安装 Arch Linux 的步骤是:

  1. 安装前准备:分区前的杂项步骤。
  2. 分区:调整 macOS 分区大小或删除以创建 Arch Linux 分区。
  3. 安装:实际安装。
  4. 设置引导加载程序:确保新分区可引导。
  5. 安装后:设备特定配置。

安装前准备

在继续安装 Arch Linux 之前,请按照以下步骤操作。

  1. 安装 macOS 并安装其更新。macOS 是安装固件更新的唯一已知方法,即使在安装 Arch 后不需要该操作系统。请参阅 Apple 的 说明
  2. 打开 ColorSync Utility,找到当前的 .icc 色彩配置文件,并将文件另存为其他位置。该配置文件以后可用于正确设置显示器颜色。请参阅 色彩配置文件
  3. 在 macOS 中设置启动声音的音量。如果音量被静音,则启动声音也会被静音。请参阅 静音启动声音

分区

如果只需要 Arch Linux,请按照 安装指南#分区磁盘 对整个磁盘进行格式化。要设置双引导,请按照以下步骤操作。完成后,请转至 #安装

Arch Linux 与 macOS 或其他操作系统

Mac 通常具有以下分区表。在使用 Apple Fusion Drive 的 Mac 中,分区方案可能有所不同。

  • EFI:约 200 MB 的 EFI 系统分区
  • macOS:包含 macOS 安装的主要分区,可以是 HFS+ 或 APFS。
  • Recovery:如果未使用 APFS,则存在恢复分区。如果使用 APFS,则不存在此分区。

要安装带 macOS 的 Arch,请保留这些分区,然后按照以下步骤操作。

  1. 您可能需要关闭 FileVault 才能调整 macOS 分区大小。请参阅 Apple 的 说明
  2. 运行磁盘工具,在左侧栏中选择要分区的驱动器,然后单击分区。请勿创建容器。
  3. 通过按+按钮添加新分区,并选择为 macOS 和新分区预留多少空间。新分区将以 Arch Linux 格式化,因此您可以选择任何您想要的分区类型。
  4. 可选地,创建设置所需的任何其他分区。请参阅 分区#分区方案 以获取更多信息。

这是一个包含五个独立分区的示例设置

partition  mountpoint  size          type  label
/dev/sda1  /efi        200MiB        vfat  EFI
/dev/sda2  -           ?             hfs+  macOS
/dev/sda3  -           ?             hfs+  Recovery
/dev/sda4  -           100MiB        hfs+  Boot Arch Linux from the Apple boot loader (optional)
/dev/sda5  /boot       100MiB        boot  boot
/dev/sda6  -           ?             swap  swap (optional)
/dev/sda7  /           15-20GiB      ext4  root
/dev/sda8  /home       remaining     ext4  home

安装

这些步骤假设 #安装前准备#分区 已完成。

  1. 在启动时按住 Alt (Apple 键盘上为 Option) 来 引导 live 环境
  2. 如果键盘有长延迟或字符重复,请使用以下 内核参数 重启:arch noapic irqpoll acpi=force。请注意,noapic 将禁用 SPI,SPI 用于某些 MacBook 型号(例如 MBP 2017)上的内置键盘。
  3. 如果显示屏超出屏幕边界(底部有不可读的行),请使用 内核参数nomodeset。注意:在 2017 年(及可能其他型号)的电脑上执行此操作会阻止 i915 驱动程序在 X11 中正确初始化。
  4. 按照 安装指南 中的说明进行安装,**但** 在以下区域除外:
    1. 跳过 分区磁盘 阶段,仅执行 格式化分区挂载 步骤,注意分配正确的分区。如果您按照 #分区 进行操作,则分区已创建。
    2. 当到达 安装引导加载程序 阶段时,请按照 #设置引导加载程序 进行操作。
    3. **(用于 BIOS 兼容性引导)** 将 reboot=pci 添加为 内核参数。这将使您的 Mac 从 Arch 正确重启。
  5. 安装过程完成后,重启您的计算机。
  6. 启动过程中,如果使用光盘,请按住弹出键以弹出光盘。
  7. 启动过程中,如果使用 systemd-boot 或 GRUB,请按住 Alt 键调出 Apple 启动菜单,然后选择“EFI Boot”。如果使用 rEFInd,请在不按任何键的情况下启动。

设置引导加载程序

Mac 使用 UEFI 进行引导,因此任何 UEFI 引导加载程序 都可以工作。内置引导加载程序(启动时按住 Alt 显示)将检测到任何具有 /EFI/BOOT/BOOTX64.EFI 文件的 EFI 系统分区,并将其显示为“EFI Boot”条目。大多数 UEFI 引导加载程序支持直接安装到此位置,从而轻松实现双引导设置。

引导加载程序还提供了一种备用的分区发现方法,请参阅 #安装引导加载程序到单独的 HFS+ 分区,这是引导 macOS 使用的方法,但也可用于 Linux。

提示
  • Mac 上的 UEFI 固件也可以通过 efibootmgr 进行配置。
  • 要将某个卷设置为 Apple 引导加载程序的默认引导条目,请按住 Ctrl 键同时选择它。

安装到 EFI 系统分区

systemd-boot

请参阅 systemd-boot#安装 UEFI 引导管理器 中的说明。安装后,/EFI/BOOT/BOOTX64.EFI 将存在 systemd-boot 的副本。

rEFInd

要将 rEFInd 安装到 /EFI/BOOT/BOOTX64.EFI 位置,请运行

# refind-install --usedefault /dev/sdXY

其中 /dev/sdXY 是 EFI 系统分区。安装后,请参阅 rEFInd#配置 完成设置。

从 macOS 安装

这些步骤假定 macOS 仍安装在某个分区上,并且 安装指南 中的步骤已完成到 安装指南#引导加载程序。通过按住 Command+R 进入安全模式,然后禁用 SIP。

# csrutil disable

启动 macOS,然后运行 rEFInd 安装脚本:

# ./refind-install --alldrivers

rEFInd 将自身安装到 Apple 的引导分区,并用自己的启动菜单替换 Apple 的启动菜单。通过按住 Command+R 进入安全模式,然后启用 SIP。

# csrutil enable

在不按任何键的情况下重启。Arch 默认应被识别为 vmlinuz-linux。如果未识别,请取消注释 refind.conf 中的 scan_all_linux_kernelsalso_scan_dirs 行。有关配置,请参阅 rEFInd#refind_linux.conf。由于 rEFInd 默认将根目录挂载为只读,因此建议创建 refind-linux.conf。

GRUB

要将 GRUB 安装到 /EFI/BOOT/BOOTX64.EFI,请按照 GRUB#安装 中的说明进行操作,在运行 grub-install 时添加 --removable 选项。

安装引导加载程序到单独的 HFS+ 分区

尽管使用 UEFI,Mac 原生的 EFI 引导加载程序 不使用 EFI 系统分区引导 macOS。相反,它使用 以下条件 来查找内部和外部驱动器上所有分区中存在的 macOS 安装,并在满足这些条件时将它们显示为可能的启动选项:

  • 分区格式为 HFS+
  • 分区类型 ID 为 af00 (“Apple HFS/HFS+”)
  • 在分区的根目录下有一个名为 mach_kernel 的文件
  • 在该分区内,有一个名为 boot.efi 的文件,位于 /System/Library/CoreServices 目录下

这种引导 Arch 的方法相比于在 EFI 系统分区中使用 BOOTX64.EFI 文件,其优点在于它可以很好地与 macOS 共存,在 macOS 的“启动磁盘”设置中将分区显示为一个可引导卷。但是,此方法需要手动配置。以下步骤将演示如何使用 GRUB 执行此配置。

首先,创建一个新的 HFS+ 分区。这可以通过 macOS 磁盘工具或 hfsprogsAUR 包中的 mkfs.hfsplus 工具来完成。分区的的大小和挂载点取决于您计划如何使用它。

  • 如果您打算将其用作 /boot 目录,请为其分配至少 300 MB 的空间;
  • 如果您打算将内核保存在另一个分区中,并使用可以加载其他文件系统的引导加载程序,例如 rEFInd 或 GRUB,则分区可以更小,并且可以挂载到您想要的任何位置。

挂载分区,然后创建 mach_kernel 文件。

# touch /mountpoint/mach_kernel

创建引导加载程序的目录结构。

# mkdir -p /mountpoint/System/Library/CoreServices

现在您可以安装任何您想要的 UEFI 引导加载程序。例如,手动安装 rEFInd:

# cp -r /usr/share/refind/* /mountpoint/System/Library/CoreServices/
# mv /mountpoint/System/Library/CoreServices/refind_x64.efi /mountpoint/System/Library/CoreServices/boot.efi

最后,您可以 创建 一个可选的 /mountpoint/System/Library/CoreServices/SystemVersion.plist 文件,该文件将在 macOS 启动磁盘设置中显示有关该卷的一些信息。

/mountpoint/System/Library/CoreServices/SystemVersion.plist
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
       <key>ProductBuildVersion</key>
       <string>rolling</string>
       <key>ProductName</key>
       <string>Arch Linux</string>
       <key>ProductUserVisibleVersion</key>
       <string></string>
       <key>ProductVersion</key>
       <string></string>
</dict>
</plist>

遵循这些说明后,当在启动时按住 Alt 键时,新卷将出现在 Mac 引导加载程序中,并且它还将作为可引导卷出现在 macOS 启动磁盘选项中。

使用 blessing

在不使用 rEFIt 的情况下,可以直接从 EFI 模式下的 GRUB 启动,通过在**单独的分区**上放置 GRUB 来实现所谓的“blessing”。这些说明已知可以在 MacBook7,1 上正常工作。建议将 GRUB 托管在 FAT32 或 HFS+ 分区上,ext2 或 ext3 也可能有效。

GRUB 安装到所需位置后,就需要指示固件从此位置启动。这可以通过现有的 macOS 安装或 macOS 安装磁盘来完成。以下命令假定 GRUB 安装在现有 macOS 分区上的 /efi/grub/ 目录中。

# bless --folder /efi/grub --file /efi/grub/grub.efi

技巧与提示

色彩配置文件

Mac 使用 ICC 配置文件,这些配置文件可以轻松地在 Arch 中加载。当前配置文件可以使用 ColorSync Utility 或“系统偏好设置”>“显示器”>“颜色”来显示。这些文件对应于特定的型号:

  • Color LCD-4271800.icc 用于 CoreDuo CPU 的 MacBook Pro
  • Color LCD-4271880.icc 用于 Core2Duo 的 MacBook
  • Color LCD-4271780.icc 用于基于 CoreDuo 或 Core2Duo 的 MacBook(非 Pro)。
  • Color LCD-68FE312B-5EF0-E0A1-BCD8-8890B73C7B3A.icc 用于 MacBookPro9,2 (2012 年中期)
  • 前面的命令仅为当前会话设置色彩配置文件。请 自动启动 它。
  • GNOME 会还原由 xcalib 设置的配置文件。最好使用设置中的颜色来设置配置文件。

Apple Remote

安装并配置 lirc。请参阅 LIRC

让 LIRC 使用 /dev/usb/hiddev0/dev/hiddev0

/etc/conf.d/lircd
#
# Parameters for lirc daemon
#
LIRC_DEVICE="/dev/usb/hiddev0"
LIRC_DRIVER="macmini"
LIRC_EXTRAOPTS=""
LIRC_CONFIGFILE="/etc/lirc/lircd.conf"

使用 irrecord 创建一个与您的遥控器信号匹配的配置文件。

# irrecord -d /dev/usb/hiddev0 -H macmini output_conf_file

启动 lircd.service 并使用 irw 检查是否正常工作。

或者,使用以下方法:

/etc/lirc/lircd.conf
begin remote

  name  lircd.conf.macbook
  bits            8
  eps            30
  aeps          100

  one             0     0
  zero            0     0
  pre_data_bits   24
  pre_data       0x87EEFD
  gap          211994
  toggle_bit_mask 0x87EEFD01

      begin codes
          Repeat                   0x01
          Menu                     0x03
          Play                     0x05
          Prev                     0x09
          Next                     0x06
          Up                       0x0A
          Down                     0x0C
      end codes

end remote

HFS+ 分区

HFS 分区共享

安装 hfsprogsAUR 并使用 fdisk 列出分区。

# fdisk -l /dev/sda
   Device  Boot     Start         End      Blocks   Id  Type
/dev/sda1               1          26      204819   ee  GPT
/dev/sda2              26       13602   109051903+  af  Unknown
/dev/sda3   *       13602       14478     7031250   83  Linux
/dev/sda4           14478       14594      932832+  82  Linux swap / Solaris

“未知”分区是我们的 macOS 分区,位于 /dev/sda2。我们可以在 fstab 中使用它。

/etc/fstab
/dev/sda2    /path/to/shared/hfs_partition     hfsplus auto,user,rw,exec   0 0

然后可以挂载它,并访问其内容。

坏超级块错误

本节解决挂载 hfsplus 分区时出现的错误消息。

# mount -t hfsplus dev/sdX force,ro
wrong fs type, bad option, bad superblock on /dev/sdX, missing codepage or helper program, or other error.

自 Yosemite 起,HFS+ 分区现在被 CoreStorage 卷封装。请验证您是否有一个 CoreStorage 卷。

# fdisk -l /dev/sdX
Disk /dev/sdX: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1* 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Device      Start      End         Sectors    Size     Type
/dev/sdX1   40         409639      409600     200M     EFI System
/dev/sdX2   409640     623872871   623463232  297.3G   Apple Core storage
/dev/sdX3   623872872  625142407   1269536    916.0M   Apple boot

HFS+ 使用两个卷头,一个在设备偏移 1024 字节处,一个在设备末尾偏移 1024 字节处。当 HFS+ 分区被 CoreStorage 卷封装时,分区的末尾实际上并不在 /dev/sdX2 分区末尾偏移 1024 字节处。要解决此问题,您需要在挂载时指定 sizelimit=X

要确定 sizelimit,请执行以下操作:

  1. 运行 testdisk /dev/sdX 并选择您的驱动器。
  2. 选择 EFI GPT
  3. 选择 Analyse,然后选择 Quick Search

示例输出:

TestDisk 7.0, Data Recovery Utility, April 2015
Christophe GRENIER <grenier@cgsecurity.org>
https://www.cgsecurity.org

Disk /dev/sdX  - 320 GB / 298 GiB - CHS 38913 255 63
    Partition     Start      End        Size in sectors
P  EFI System     40         409639     409600  [EFI]
P  Mac HFS        409640     623147815  622738176
P  Mac HFS        623872872  625142407  1269536

现在看到的是 HFS 分区本身的输出,不包含 CoreStorage 卷。取扇区大小(此示例中为 622738176),并乘以逻辑扇区大小的字节数(此示例中为 512)。

622738176 * 512 = 318841946112

最后,使用 sizelimit=X 选项挂载您的磁盘。

 mount /dev/sdX -t hfsplus -o ro,sizelimit=318841946112

禁用日志

Linux 对 HFS+ 分区的支持不完整,默认情况下以只读方式挂载。要写入 HFS+ 分区,安全的方法是禁用日志。这可以使用 macOS 磁盘工具来完成。有关更多信息,请参阅 Apple 的 支持页面,或尝试从命令行操作:

找到您的分区。

# diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *750.2 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS macOS                   149.5 GB   disk0s2
   3:                  Apple_HFS Macintosh HD            599.2 GB   disk0s3
   4:                 Apple_Boot Recovery HD             650.0 MB   disk0s4

在本例中,我们将使用名为“Macintosh HD”的 disk0s3 分区。要了解日志记录是否已激活,您可以执行:

# diskutil info /dev/disk0s3 | grep -i journal
    File System Personality:  Journaled HFS+
    Name (User Visible):      Mac OS Extended (Journaled)
    Journal:                  Journal size 49152 KB at offset 0x1176000

如您所见,日志记录已激活。要关闭日志记录,您可以执行:

# diskutil disableJournal disk0s3

再次执行 info 命令以验证操作是否完成。

如果没有任何输出,则表示日志已禁用。

但是,如果禁用日志失败,您可以将 /etc/fstab 中的“auto,user,rw,exec”更改为“auto,user,force,rw,exec”并进行挂载。

用于主目录共享的 UID 同步

如果您想从 Linux 访问您的 macOS 用户目录,请记下用户的 UID 和 GID。macOS 的第一个用户的 UID 从 501 开始,而 Arch 默认为 1000。

**警告** 切勿从 Linux 修改 macOS 分区上的任何文件权限。

在 macOS 中

**注意** 强烈建议在创建新用户帐户后立即进行 UID/GID 操作,无论是 macOS 还是 Arch Linux。如果您是从头开始安装 macOS,那么在首次登录您的帐户后,此操作将保证有效。
更改 UID 和 GID(s)

Arch Linux 中用户的默认 UID 和 GID 为 1000,请根据您的设置调整以下步骤。

Leopard 之前
  1. 打开位于 /Applications/Utilities 文件夹中的NetInfo Manager
  2. 如果尚未为您启用,请通过单击窗口底部的锁图标(如果锁是关闭的)并输入您的帐户密码或 root 密码(如果您创建了 root 帐户)来启用对用户帐户事务的访问。
  3. 导航到 /users/new_user_name
  4. 将 **UID** 值更改为 1000。
  5. 将 **GID** 值更改为 1000。
  6. 导航到 /groups/new_user_name,此时会自动保存您迄今为止所做的更改。
**注意** 如果您收到事务不允许的错误消息,请注销然后重新登录。
Leopard

在 Leopard 中,**NetInfo Manager** 应用程序不存在。UID 同步需要一套不同的步骤:

  1. 打开系统偏好设置
  2. 单击用户与群组
  3. 如果尚未解锁,请解锁该窗格。
  4. 右键单击所需用户,然后选择高级选项
  5. 记下用户 ID 字段的值,稍后需要用到。将 UID 和 GID 都更改为与 Arch 中要共享的帐户的 UID 和 GID 匹配。
更改“主目录”权限
  1. 打开位于 /Applications/Utilities 文件夹中的终端
  1. 输入以下命令来重新获得主文件夹的权限设置:
# find /User/your_user_name -user your_old_UID -exec chown your_user_name:your_user_group {} \;

在 Arch 中

要在 Arch Linux 中同步您的 UID,建议在**创建新用户帐户时**执行此操作。因此,建议您在安装 Arch Linux 后立即执行此操作。

# useradd -m -u [uid] -g [gid] -G [additional_groups] -s [login_shell] [username]

现在您必须通过修改 /etc/fstab 条目来用 macOS 的主目录替换 Arch 的主目录。为了能够访问 macOS 用户的目录,只需要 UID 和 GID 匹配(用户名可以不同)。

静音启动声音

启动声音的音量由 EFI 变量 SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82 控制。因此,可以使用以下命令静音:

# printf "\x07\x00\x00\x00\x00" > /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82

请记住,该文件默认可能设置了不可修改位,即使 root 用户也无法覆盖该文件。请参阅 文件权限和属性#文件属性。要删除它,请执行以下操作:

# chattr -i /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82

之后,运行 printf 命令,它应该可以正确覆盖文件。验证文件内容,满意后,再次使用 chattr +i 设置不可修改位。

或者,您可以使用 macOS 安装磁盘静音启动声音。从中启动,选择语言,然后单击实用工具 > 终端,然后输入:

# /usr/sbin/nvram SystemAudioVolume=%percentage
**注意** 键 SystemAudioVolume 的值格式可能因型号和 macOS 安装介质版本而异。如果上述命令失败,请尝试将该值括在双引号中。

引导加载程序中的自定义图标

Mac 引导加载程序支持为它检测到的每个卷加载自定义图标。自定义图标必须是 .icns 格式,并且位于包含引导加载程序的卷的根目录下,文件名为 .VolumeIcon.icns

以下示例使用 wget 下载 Arch Logo SVG,使用 librsvg 将其转换为 PNG,然后使用 libicns 将其转换为 .icns 文件。

$ wget -O /tmp/archlinux.svg https://archlinux.org.cn/logos/archlinux-icon-crystal-64.svg
$ rsvg-convert -w 128 -h 128 -o /tmp/archlogo.png /tmp/archlinux.svg
# png2icns /boot/.VolumeIcon.icns /tmp/archlogo.png

显然,您可以将 Arch logo 替换为您喜欢的任何其他图标。

参见