Mac
本页面补充了 安装指南 中针对 Apple Macs 的特定说明。Arch 安装映像支持 Intel 处理器的 Apple Macs,但不支持 PowerPC 或 Apple Silicon 处理器。
概述
总而言之,在 Mac 上安装 Arch Linux 的步骤是:
安装前准备
在继续安装 Arch Linux 之前,请按照以下步骤操作。
- 安装 macOS 并安装其更新。macOS 是安装固件更新的唯一已知方法,即使在安装 Arch 后不需要该操作系统。请参阅 Apple 的 说明。
- 打开 ColorSync Utility,找到当前的
.icc色彩配置文件,并将文件另存为其他位置。该配置文件以后可用于正确设置显示器颜色。请参阅 色彩配置文件。 - 在 macOS 中设置启动声音的音量。如果音量被静音,则启动声音也会被静音。请参阅 静音启动声音。
分区
如果只需要 Arch Linux,请按照 安装指南#分区磁盘 对整个磁盘进行格式化。要设置双引导,请按照以下步骤操作。完成后,请转至 #安装。
Arch Linux 与 macOS 或其他操作系统
Mac 通常具有以下分区表。在使用 Apple Fusion Drive 的 Mac 中,分区方案可能有所不同。
- EFI:约 200 MB 的 EFI 系统分区。
- macOS:包含 macOS 安装的主要分区,可以是 HFS+ 或 APFS。
- Recovery:如果未使用 APFS,则存在恢复分区。如果使用 APFS,则不存在此分区。
要安装带 macOS 的 Arch,请保留这些分区,然后按照以下步骤操作。
- 您可能需要关闭 FileVault 才能调整 macOS 分区大小。请参阅 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
- 有关通过 Apple 引导加载程序引导 Arch Linux 的更多信息,请参阅 #安装引导加载程序到单独的 HFS+ 分区。
- Arch Linux 可以使用现有的 EFI 系统分区,而无需创建额外的分区。
安装
- 在启动时按住
Alt(Apple 键盘上为Option) 来 引导 live 环境。 - 如果键盘有长延迟或字符重复,请使用以下 内核参数 重启:
arch noapic irqpoll acpi=force。请注意,noapic将禁用 SPI,SPI 用于某些 MacBook 型号(例如 MBP 2017)上的内置键盘。 - 如果显示屏超出屏幕边界(底部有不可读的行),请使用 内核参数:
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 引导管理器 中的说明。安装后,/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_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的文件 - 在该分区内,有一个名为
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 ProColor LCD-4271880.icc用于 Core2Duo 的 MacBookColor 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
然后可以挂载它,并访问其内容。
坏超级块错误
本节解决挂载 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,请执行以下操作:
- 运行
testdisk /dev/sdX并选择您的驱动器。 - 选择
EFI GPT。 - 选择
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。
在 macOS 中
更改 UID 和 GID(s)
Arch Linux 中用户的默认 UID 和 GID 为 1000,请根据您的设置调整以下步骤。
Leopard 之前
- 打开位于
/Applications/Utilities文件夹中的NetInfo Manager。 - 如果尚未为您启用,请通过单击窗口底部的锁图标(如果锁是关闭的)并输入您的帐户密码或 root 密码(如果您创建了 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 控制。因此,可以使用以下命令静音:
# 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
引导加载程序中的自定义图标
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 替换为您喜欢的任何其他图标。
参见
- 笔记本/Apple
- MacBookPro10,x
- MacBookPro11,x
- https://wiki.t2linux.org/
- MacBook Air
- MacBook Pro