Mac
本页面旨在补充 安装指南,提供针对 Apple Mac 的特定说明。Arch 安装镜像支持配备 Intel 处理器的 Apple Mac,但不支持 PowerPC 或 Apple Silicon 处理器。
概述
简而言之,在 Mac 上安装 Arch Linux 的流程如下:
安装前准备
在开始安装 Arch Linux 之前,请遵循以下步骤。
- 安装 macOS 并更新系统。macOS 是目前唯一已知的安装固件更新的方法,即使在安装 Arch 后不再需要该系统。请参阅 Apple 的 说明文档。
- 打开“色彩同步工具”(ColorSync Utility),找到当前的
.icc颜色配置文件并保存到其他位置。该配置文件稍后可用于正确设置显示颜色。参见 颜色配置。 - 在 macOS 中设置音量,这将作为开机提示音的音量。如果音量已静音,开机提示音也会静音。参见 静音启动提示音。
分区
如果仅安装 Arch Linux,请按照 安装指南#磁盘分区 格式化整个磁盘。若要设置双引导,请按照以下步骤操作。完成后,前往 #安装。
在 macOS 或其他操作系统共存的情况下安装 Arch Linux
Mac 通常具有以下分区表。在使用 Apple 融合硬盘 (Fusion Drive) 的 Mac 上,分区方案可能有所不同。
- EFI:约 200 MB 的 EFI 系统分区。
- macOS:包含 macOS 安装的主分区,格式为 HFS+ 或 APFS。
- 恢复分区 (Recovery):如果不使用 APFS,则存在恢复分区。如果使用 APFS,则不存在此分区。
若要与 macOS 共存安装 Arch,请保留这些分区并遵循以下步骤。
- 在调整 macOS 分区大小之前,您可能需要关闭 FileVault。请参阅 Apple 的 说明文档。
- 运行“磁盘工具”,在左侧列中选择要分区的驱动器,然后单击 “分区”。请勿创建容器。
- 通过按下 + 按钮添加新分区,并选择要为 macOS 保留的空间量,以及为新分区分配的空间量。新分区将在 Arch Linux 中进行格式化,因此您可以选择任何想要的分区类型。
- 或者,根据需要创建其他分区。有关更多信息,请参见 分区#分区方案。
以下是包含五个独立分区的配置示例
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
- 请参阅 #将引导加载程序安装到单独的 HFS+ 分区 以获取有关从 Apple 引导加载程序启动 Arch Linux 的更多信息。
- Arch Linux 可以使用现有的 EFI 系统分区,而无需创建额外的分区。
安装
在完成 #安装前准备 和 #分区 后,按以下步骤安装 Arch。
- 通过在启动时按住
Alt(Apple 键盘上的Option)键 进入实时环境。 - 如果键盘出现延迟或字符重复,请添加以下 内核参数 重启:
arch noapic irqpoll acpi=force。注意:noapic会禁用某些 MacBook 机型(例如 2017 款 MBP)内置键盘使用的 SPI。 - 如果显示内容超出了屏幕边界(底部出现乱码行),请使用 内核参数:
nomodeset。注意:在 2017 款(以及其他机型)上执行此操作会阻止 i915 驱动程序在 X11 中正常初始化。 - 按照 安装指南 的说明继续安装,但以下部分除外:
- 安装过程完成后,重启计算机。
- 如果使用光盘启动,在启动时按住弹出键以弹出光盘。
- 启动时,如果使用 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_kernels 和 also_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的文件 - 该分区内
/System/Library/CoreServices目录下有一个boot.efi文件
与使用 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 命令
在将 GRUB 置于独立分区后,可以通过所谓的“blessing”(祝福)操作,在不使用 rEFIt 的情况下直接以 EFI 模式引导 GRUB。已知这些指令在 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 中轻松加载。当前配置文件可以通过“色彩同步工具”或“系统偏好设置 > 显示器 > 颜色”查看。这些文件对应特定型号:
Color LCD-4271800.icc适用于配备 CoreDuo CPU 的 MacBook ProColor LCD-4271880.icc适用于 MacBook (Core2Duo)Color LCD-4271780.icc适用于基于 CoreDuo 或 Core2Duo 的 MacBook (非 Pro 版本)Color LCD-68FE312B-5EF0-E0A1-BCD8-8890B73C7B3A.icc适用于 MacBookPro9,2 (2012 年中)
- 上述命令仅为当前会话设置颜色配置文件,请将其设为 自动启动。
- GNOME 会还原 xcalib 设置的配置文件。建议通过设置中的颜色选项来设置配置文件。
Apple Remote 遥控器
使 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
然后可以挂载并访问其内容。
坏超级块 (Bad Superblock) 错误
本节处理挂载 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 分区的末尾。要解决此问题,您需要在挂载时指定 sizelimit=X。
确定 sizelimit 的方法如下:
- 运行
testdisk /dev/sdX并选择您的驱动器。 - 选择
EFI GPT。 - 选择
Analyze,然后选择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
再次执行信息命令以验证是否完成。
如果没有任何输出,则说明已禁用日志功能。
但是,如果无法禁用日志功能,您可以将 /etc/fstab 中的 "auto,user,rw,exec" 更改为 "auto,user,force,rw,exec" 进行挂载。
用于家目录共享的 UID 同步
如果您想从 Linux 访问 macOS 用户目录,请记下用户的 UID 和 GID。macOS 的首个用户 UID 从 501 开始,而 Arch 默认从 1000 开始。
在 macOS 中
更改 UID 和 GID
Arch Linux 用户的默认 UID 和 GID 为 1000,请根据您的设置调整以下步骤。
Leopard 之前的版本
- 打开位于
/Applications/Utilities文件夹中的 NetInfo Manager。 - 如果尚未启用,请单击窗口底部的锁图标并输入帐户密码(或 root 密码)以启用对用户帐户事务的访问权限。
- 导航至
/users/new_user_name。 - 将 UID 值更改为 1000。
- 将 GID 值更改为 1000。
- 导航至
/groups/new_user_name,自动保存之前所做的更改。
Leopard
在 Leopard 中,NetInfo Manager 应用程序不存在。UID 同步需要不同的步骤:
- 打开 系统偏好设置。
- 点击 用户与群组。
- 如果尚未解锁,请解锁该面板。
- 右键点击所需用户,选择 高级选项。
- 记下 用户 ID 字段的值,稍后需要用到。将 UID 和 GID 更改为与 Arch 中要共享的帐户的 UID 和 GID 相匹配。
更改“个人”文件夹权限
- 打开
/Applications/Utilities文件夹中的 终端。
- 输入以下命令以重置个人文件夹的权限设置:
# 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 控制。因此,可以使用以下命令(以 root 身份)将其静音:
# chattr -i /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82 # printf "\x07\x00\x00\x00\x80" > /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82 # chattr +i /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82
这将移除不可变位(参见 文件权限与属性#文件属性),将静音级别和禁用提示音位写入 EFI,然后重新设置不可变位。
注意:如果您在重置 NVRAM/PRAM 后未在 macOS 中更改系统音量,此 EFI 变量可能不存在。按上述方法创建变量即可静音。
在某些较旧的 Mac(2010 年前)上,这可能无法静音,因为当时还未受显式的禁用位控制。请尝试设置以下值:
# printf "\x07\x00\x00\x00\x00" > /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82
如果您希望恢复启动提示音,请执行:
# chattr -i /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82 # rm /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82
或者,您可以使用 macOS 安装盘来静音。从中启动,选择语言,然后点击 工具 > 终端,并输入:
# /usr/sbin/nvram SystemAudioVolume=%percentage
在引导加载程序中使用自定义图标
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 logo 替换为您喜欢的任何其他图标。
参见
- 笔记本/Apple
- MacBookPro10,x
- https://wiki.t2linux.org/
- MacBook Air
- MacBook Pro