Mac

出自 ArchWiki
(重定向自 MacOS)

本页面补充了 安装指南,提供了针对 Apple Mac 的特定说明。Arch 安装镜像支持使用 Intel 处理器的 Apple Mac,但不支持 PowerPC 或 Apple Silicon 处理器。

概述

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

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

预安装

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

  1. 安装 macOS 并安装其更新。macOS 是安装固件更新的唯一已知方法,即使在安装 Arch 后操作系统不是必需的。请参阅 Apple 的说明
  2. 打开 ColorSync 实用工具,找到当前的 .icc 颜色配置文件,并将文件保存到其他位置。该配置文件稍后可用于正确设置显示颜色。请参阅颜色配置文件
  3. 在 macOS 上设置音量,这将是启动声音的音量。如果音量静音,启动声音也将静音。请参阅静音启动声音

分区

如果只需要 Arch Linux,则按照安装指南#磁盘分区格式化整个磁盘。要设置双启动,请按照以下步骤操作。完成后,转到#安装

Arch Linux 与 macOS 或其他操作系统共存

Mac 通常具有以下分区表。在使用 Apple 混合硬盘 的 Mac 中,分区方案可能不同。

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

要将 Arch 与 macOS 一起安装,请保留这些分区,并按照以下步骤操作。

  1. 您可能需要在调整 macOS 分区大小之前关闭 FileVault。请参阅 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
注意

安装

这些步骤安装 Arch,假设已经完成#预安装#分区

  1. 按住 Alt 键(Apple 键盘上的 Option 键)启动时引导进入 live 环境
  2. 如果键盘出现长时间延迟或字符重复,请使用以下内核参数重启:arch noapic irqpoll acpi=force
  3. 如果显示超出屏幕边界(底部出现无法读取的行),请使用内核参数nomodeset
  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 引导管理器 中的说明操作。安装后,systemd-boot 的副本将位于 /EFI/BOOT/BOOTX64.EFI

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 默认情况下将 root 挂载为 ro,因此建议创建 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 的文件
  • 在该分区内,/System/Library/CoreServices 目录下有一个 boot.efi 文件

与在 EFI 系统分区中使用 BOOTX64.EFI 文件来引导 Arch 相比,此方法的优势在于它可以与 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

最后,您可以创建一个可选的 /挂载点/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

通过所谓的 “blessing”,在将 GRUB 放置在单独的分区后,可以在 EFI 模式下直接从 GRUB 启动,而无需使用 rEFIt。已知这些说明在 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 实用工具或“系统偏好设置”>“显示器”>“颜色”来显示当前配置文件。这些文件对应于特定型号,

  • 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 (Mid-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

“Unknown” 分区是我们的 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 HDdisk0s3 分区。要了解日志是否已激活,您可以执行

# 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” 并挂载它。

用于 home 共享的 UID 同步

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

警告: 永远不要从 Linux 更改 macOS 分区中的任何文件权限。

在 macOS 中

注意: 强烈建议在创建新用户帐户后立即在 macOS 和 Arch Linux 中执行 UID/GID 操作。如果您从头开始安装 macOS,则在首次登录您的帐户后,此操作保证有效。
更改 UID 和 GID

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

Pre-Leopard
  1. 打开位于 /Applications/Utilities 文件夹中的NetInfo 管理器
  2. 如果尚未完成,请单击窗口底部的闭锁图标,并输入您的帐户密码,或者如果您已创建 root 帐户,则输入 root 密码,以启用对用户帐户事务的访问。
  3. 导航到 /users/新用户名
  4. UID 值更改为 1000
  5. GID 值更改为 1000
  6. 导航到 /groups/新用户名,自动保存您到目前为止所做的更改。
注意: 如果您收到事务不允许的错误消息,请注销并重新登录。
Leopard

在 Leopard 中,NetInfo 管理器应用程序不存在。UID 同步需要一组不同的步骤

  1. 打开系统偏好设置
  2. 单击用户与群组
  3. 如果尚未解锁,请解锁面板。
  4. 右键单击所需用户,然后选择高级选项
  5. 写下用户 ID 字段的值,您稍后将需要它。更改 UID 和 GID 以匹配要在 Arch 中共享的帐户的 UID 和 GID。
更改 “Home” 权限
  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]

现在您必须用 macOS 的 home 替换 Arch 的 home,方法是修改 /etc/fstab 的条目。为了能够访问 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

请记住,该文件可能默认设置了 immutable 位,这将阻止甚至 root 用户覆盖该文件。请参阅文件权限和属性#文件属性。要删除它,请执行以下操作

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

之后,运行 printf 命令,它应该正确覆盖该文件。验证文件的内容,然后在满意后使用 chattr +i 再次设置 immutable 位。

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

# /usr/sbin/nvram SystemAudioVolume=%percentage
注意: 密钥 SystemAudioVolume 所提供值的所需格式可能因型号以及 macOS 安装介质的版本而异。如果上述命令不起作用,请尝试用双引号括起该值。

引导加载器中的自定义图标

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

以下示例使用 wget 下载 Arch 徽标 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 徽标替换为您喜欢的任何其他图标。

参见