Mac (简体中文)
在 MacBook(12 寸、Air 或 Pro 版本)或 iMac 上安装 Arch Linux 与在其他电脑上安装非常相似。然而,由于 Mac 特有的硬件配置,存在些许偏差和一些特殊的考虑,因此需要单独的指南。更多背景信息,请参见安装指南和 UEFI。本指南所包含的安装指导可用于任何受 Linux 内核支持的硬件的 Apple 电脑。请查看“相关页面”(在本页面的右上角)了解特定型号的提示和疑难解答。
概述
具体而言,在 MacBook 上安装 Arch Linux 的步骤可分为:
- 固件更新:从干净的、备好份的和最新的 OS X 安装开始总是有帮助的。
- 分区:调整 OS X 分区大小或删除其分区来为 Arch Linux 创建分区。
- 配置引导加载器:确保新分区可以引导。
- 安装 Arch Linux:真正安装 Arch Linux 的过程。
- 安装后配置:针对 MacBook 特定的配置。
固件更新
在进行 Arch Linux 安装之前,确保已为 Macbook 安装好最新的固件更新是很重要的。这步需要 OS X(macOS)来操作。在 OS X(macOS)中,打开 App Store 并检查更新。如果 Mac 找到并安装了任意更新,请确保重启您的电脑,然后再次检查更新以确保所有东西都安装好了。
保留 OS X(macOS)安装是比较明智的,因为 Macbook 的固件更新只能用 OS X(macOS)安装。但是,如果打算完全移除 OS X(macOS),请备份以下文件,在 Linux 中调整色彩配置时会有需要:
/Library/ColorSync/Profiles/Displays/*
接下来阅读#分区小节。
分区
存储磁盘的分区和其他 PC 或笔记本电脑并无二致。但是,如果打算保留 OS X(macOS)来做双系统,需要对此所有考虑。默认情况下,MacBook 的磁盘使用 GPT 分区表格式化,至少包含了 3 个分区:
- EFI:大约 200 MB 的 EFI 系统分区。
- OS X:OS X 安装主分区。使用 HFS+ 文件系统格式化。
- Recovery:恢复分区,存在于几乎所有搭载 OS X 10.7 及以上版本 MacBook 中。在 OS X 系统中通常被隐藏,但是可以使用分区工具看见它。
怎么来分区取决于想安装多少个操作系统。接下来将讲解以下选项:
- 单系统:#仅安装 Arch Linux
- 双系统:#Arch Linux 与 OS X 或其他操作系统共存(推荐,这样可以在需要时回到 OS X 系统)
- 三系统:#OS X、Windows XP 和 Arch Linux 三系统共存
仅安装 Arch Linux
这种情况最好办。分区操作就和其他可以安装 Arch Linux 的硬件一样。请参考标准安装指南了解详情。
如果想要配置系统以获得全盘加密,请参见 Dm-crypt/Encrypting an entire system 了解更多详情。
不考虑单独 /home
分区、加密或 LVM 分区方案,一个非常基本的分区示例如下所示:
(分区) (挂载点) (大小) (类型) (标签) partition mountpoint size type label /dev/sda1 /boot 200MiB vfat EFI /dev/sda2 /swap adjust swap swap /dev/sda3 / remain ext4 root
完成后,就可以继续阅读#安装小节了。
Arch Linux 与 OS X 或其他操作系统共存
你需要对硬盘进行分区,同时保留用于 OS X 或 Windows 的分区。如果希望保留 OS X,最简单的方法是使用 OS X 的分区工具进行调整,然后使用 Arch Linux 的工具完善。
步骤:
- 在 OS X 中,运行 Disk Utility.app(磁盘工具,位于
/Applications/Utilities
) - 在左侧栏选择要进行分区的硬盘(注意不是选择分区!)。点击分区标签页。
- 点击 + 号按钮添加新分区,并选择要给 OS X 和新分区各留存多少空间。请记得新分区会在 Arch Linux 里进行格式化,所以这里可以选择随意设置任意分区类型。
- 如果上述步骤都顺利完成,那么就可以接着往下走了。如果没有完成,你或许需要在 OS X 里先修好分区问题。
-
在启动时按住
Alt
键引导至 Arch 安装媒介或 LiveUSB。之后按照#安装小节进行操作。
在 Arch 安装媒介中,可以重新调整已创建的分区的大小,或者删除分区以对其他分区们进行创建(比如交换分区(swap))。
选项一:EFI
- 运行 cgdisk
- 删除在 OS X 中用 Disk Utility.app 创建的分区,并为 Arch Linux 创建必要的分区。OS X 喜欢看看分区后面有没有 128 MiB 大小的空隙,因此在 OS X 的分区后创建第一个分区时,当 cgdisk 询问分区的第一个扇区大小时输入 +128M。了解更多关于 Apple 分区策略的信息可阅读这里。下面举一个简单的例子(没有 LVM 和加密):
- 交换分区在 4GB 或以上内存的机器上可有可无。可以之后创建交换文件 。
- 最简单的双系统引导选项是从 OS X 内部安装 rEFInd 到其根目录 (
install.sh
脚本的默认设置)。接着,从安装压缩包中复制 driver(驱动)文件夹到新的 rEFInd 位置,并在refind.conf
配置文件中取消对 "scan_all_linux_kernels" 行和 "also_scan_dirs" 选项的注释。之后,可以通过 Arch 的/boot
目录下放置refind_linux.conf
文件来配置启动选项。 - 如果想能从 Apple 引导加载器中引导 GRUB,可以创建一个小的 hfs+ 格式分区(为了方便,请稍后用 OS X 在 Disk Utility.app 中对其格式化)。按照 GRUB EFI 安装步骤操作,并将创建的 hfs+ 分区挂载到
/efi
目录。最后,让分区在祝福声中在 OS X 中完成配置。这会将 GRUB 设为默认引导选项(仍然需要在启动时按住Alt
键来转入 Mac 引导选项屏。参见 https://mjg59.dreamwidth.org/7468.html)。 - OS X 的 EFI 分区可与 Arch Linux 共享,因此可以不用为 Arch 专门创建一个额外的 EFI 分区。
(分区) (挂载点) (大小) (类型) (标签) partition mountpoint size type label /dev/sda1 /efi 200MiB vfat EFI /dev/sda2 - ? hfs+ OS X /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
完成后,就可以继续阅读#安装小节了。
选项二:BIOS 兼容
- 以 root 身份运行 parted。
- 删除空分区,并按照自己的想法为其他要安装的操作系统重新分区空间。请注意,主引导记录(MBR)限制了主分区数量不能超过 4 个(包括 EFI 分区)。这样的话也就两个主分区留给 Arch 了。一种分区策略是分配一个系统(根)分区和一个家(home)分区,并使用交换文件(笔者没有尝试过使用逻辑分区)。另一种策略就是专门分配一个分区用于共享(参见下文)。
- 下一步,为需要的那些分区创建新的文件系统,尤其是要包含
/boot
的那个分区。如果不确定怎么使用mkfs.ext2
(或别的什么命令),请运行/arch/setup
来逐步解决前面的问题,直到来到 Prepare Hard Drive(准备硬盘)这一步,并使用"Manually configure block devices ..."(手动配置块设备)选项,然后退出安装器。这很必要,会便于 rEFIt 在下一步在主引导记录(MBR)中设置分区类型(没有文件系统的话,rEFIt 似乎会忽略由 parted 设置的分区类型),没有这一步的话 GRUB 会拒绝安装到相应的分区上。
- 此时,应当重启电脑,让 rEFIt 来修复磁盘上的分区表(如果不这样做,那或许稍后你需要重新安装 GRUB 来让 Mac 认出 Linux 分区)。当进入到 rEFIt 菜单后,选择 update partition table(更新分区表),然后按
y
。重启。
- 完成了,可以继续按照#安装小节操作。
配置引导加载器
搭配 systemd-boot 使用 Apple 原生引导加载器(建议)
Apple 原生的 EFI 引导加载器会读取位于 /EFI/BOOT/BOOTX64.EFI
的 EFI 系统分区下的 .efi
文件。幸运的是,这也是 systemd-boot 二进制文件的默认安装位置。这意味着,使用 systemd-boot 来引导 Linux 会非常简单。
- 首先,确保已经将 EFI 系统分区挂载到
/boot
- 正常进行#安装过程
- 进入到 chroot 环境后,输入以下命令安装 systemd-boot:
# bootctl --path=/boot install
上述命令会将 systemd-boot 二进制文件复制到 /boot/EFI/BOOT/BOOTX64.EFI
,并添加 systemd-boot 自身作为由 EFI 引导管理器加载的默认 EFI 应用(默认引导条目)。
- 继续进行 systemd-boot#配置 以正确配置引导加载器
下次重启时,按住 Option 键显示 Apple 引导管理器,后者在启动 MacBook 时应该会显示 Arch Linux 条目(其可能会显示为 EFI Boot
引导选项)。
$ diskutil mount disk0s1
使用苹果原生的引导器,结合 GRUB 使用
尽管使用了UEFI,但Mac原生的EFI引导器 [1] 。相反,它在内部和外部驱动器的所有分区里寻找 .efi 文件,并在满足某些条件的情况斗它们显示为可能的启动选项。例如,Mac可以在根据以下检查后检测到现有的OS X安装:
- 存在 HFS+ 或 APFS 格式分区
- 该分区包括分区ID
af00
- 该分区的根目录存在
mach_kernel
文件 - 该分区
/System/Library/CoreServices
下存在boot.efi
文件
这意味着,将Arch安装配置成能被MacBook引导器自动识别的情况是可能的。此外,它只需要一个正确格式化的 /boot
分区。这种方法的好处是,它可以与OS X很好地共存,并允许避免其他启动加载器,如rEFInd。然而这需要手动配置。下面的步骤将说明如何使用GRUB进行这种配置。
- 首先,在配置新的Arch安装时,创建一个单独的
/boot
分区。Arch的ISO中提供了许多工具,例如'cgdisk。 - 确保该分区至少有250MB大小,因为它将用于存储内核以及将来要安装的任何自定义内核。此外,确保分区类型被设置为Apple HFS/HFS+(在fdisk/cgdisk中显示为
Apple HFS/HFS+
,在gdisk中显示为af00
)。 - 由于Arch安装ISO不包括hfsprogsAUR包,我们需要在安装环境中安装它,然后再继续将新分区格式化为HFS+,安装hfsprogsAUR,然后:
- modprobe hfsplus
# mkfs.hfsplus /dev/sdXp -v "Arch Linux"
注意:更换 /dev/sdXp
与适当的设备和partition编号。
- 完成之后,继续安装步骤
- 当你 chroot 到新环境之后,安装 grub 和 efibootmgr软件包。
- 另外,创建一个假的
mach_kernel
文件
# touch /boot/mach_kernel # mkdir -p /boot/EFI/arch && touch /boot/EFI/arch/mach_kernel # grub-install --target=x86_64-efi --efi-directory=/boot
在这之后,不要忘记创建一个基础的配置文件
# grub-mkconfig -o /boot/grub/grub.cfg 如你所见,boot.efi
的目录结构并不正确,因为/System/Library/CoreServices
目录不应该是/boot/EFI/
文件夹的子目录。由于这个原因,我们需要将boot.efi
存根重新定位到MacBook引导加载器能够识别的位置。 # mv /boot/EFI/arch/System/ /boot/ # rm -r /boot/EFI/ 在这之后,你需要创建下列文件
/boot/System/Library/CoreServices/SystemVersion.plist
<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> <key>ProductBuildVersion</key> <string></string> <key>ProductName</key> <string>Linux</string> <key>ProductVersion</key> <string>Arch Linux</string> </dict> </plist>
在下次重新启动时,在启动 MacBook 时按住 option 键时显示的引导器应将 Arch Linux 显示为可能的启动选项。 选择该选项将引导 GRUB。
好了!GRUB 现在已经是 MacBook 引导器了,你可以启动新安装的 Arch Linux
$ wget -O /tmp/archlinux.svg https://archlinux.org/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 $ rm /tmp/archlogo.png $ rm /tmp/archlinux.svg
显然,你可以将 Arch logo 更换为你喜欢的任何其他 logo
一种简便的方法
在安装 Arch Linux 之前,创建一个额外的分区,格式化为 FAT32 并挂载在 /mnt/efi。在安装完成后,chroot 进入 /mnt,并安装引导程序
# pacman -S grub efibootmgr
--removable 参数可以解决很多型号 Mac 的主板 NVRAM 兼容性问题。
# grub-install --target=x86_64-efi --efi-directory=/efi --removable # grub-mkconfig -o /boot/grub/grub.cfg
其他方式
。
从GRUB直接启动
在efi上直接启动GRUB2而不用rEFIt是可以的。以下的操作在MacBook7,1上是可行的。建议将GRUB安装在fat32或者HFS+分区上,ext2或者ext3应该也行。GRUB的苹果加载命令在7,1上还暂时不能使用,但可以用过下面的补丁实现补丁地址。
GRUB装上硬盘分区后,固件需要知道从哪儿启动它。这步操作可以在OS X或者OS X安装光盘。下面的命令指明了GRUB是安装在OS X系统的/efi/grub中
sudo bless --folder /efi/grub --file /efi/grub/grub.efi
编译
有些型号可能需要将EFI_ARCH设置成i386。
bzr branch --revision -2 bzr://bzr.savannah.gnu.org/grub/trunk/grub grub cd grub ./autogen.sh patch -p1 < appleloader_macbook_7_1.patch export EFI_ARCH=x86_64 ./configure --with-platform=efi --target=${EFI_ARCH} --program-prefix="" make cd grub-core ../grub-mkimage -O ${EFI_ARCH}-efi -d . -o grub.efi -p "" part_gpt part_msdos ntfs ntfscomp hfsplus fat ext2 normal chain boot configfile linux multiboot cp grub.efi *.mod *.lst yourinstalllocation
grub.cfg示例
此处应该有更好的方法来加载Windows系统。
set debug=video insmod efi_gop menuentry "Arch Linux EFI" { set root=(hd0,3) #search --set -f /boot/vmlinuz-linux-efi-physical #loadbios /boot/vbtrace_bios.bin /boot/int10.bin linux /boot/vmlinuz-linux-efi-physical root=/dev/sda3 reboot=pci resume=/dev/sda3 resume_offset=151552 initrd /boot/initramfs-linux-efi-physical.img } menuentry "MacOSX" { set root=(hd0,2) # Search the root device for Mac OS X's loader. #search --set -f /usr/standalone/i386/boot.efi # Load the loader. chainloader /usr/standalone/i386/boot.efi } menuentry "Windows 7" { appleloader HD } menuentry "Boot from CD" { appleloader CD } menuentry "Boot from USB" { appleloader USB }
安装
- 从Arch Linux安装光盘启动
boot: arch noapic irqpoll acpi=force
- 以root登陆
- 打开Arch Linux安装程序
/arch/setup
- 按照官方安装文档中说明的过程来做,但是在下面几个部分中请留意:
- 在准备磁盘部分,只要做设置磁盘挂在这步,注意要设对磁盘挂载点。
- 在安装启动器部分,编辑menu.lst文件,添加reboot=pci到kernel行的末尾,例如下面这行:
kernel /vmlinuz-linux root=/dev/sda5 ro reboot=pci
这样你的MacBook才能从Arch Linux正常重启 - 还是在安装启动器部分,将GRUB安装至
/boot
所在的分区。警告: 别把GRUB安装到/dev/sda这样的地方!!!这样做会造成系统不稳定。 - 在配置系统部分,编辑 /etc/mkinitcpio.conf,添加usbinput到HOOKS行的autodetect之后。这样才能在Arch Linux启动之前加载键盘驱动
- 安装完成之后就可以重启系统了。
# reboot
- 把Arch Linux安装光盘从光驱中退出。
安装后配置
微码
- 由于 x86_64体系的Mac使用的是Intel芯片,你还需要安装Intel微码 intel-ucode
# pacman -S intel-ucode
Xorg
按照Xorg来安装Xorg。
视频
不同的MacBook有不同型号的显卡,可以通过下面命令来查看显卡种类
$ lspci | grep VGA
- 如果返回的字符串中包含intel,那你只需要安装xf86-video-intel驱动,用如下命令:
# pacman -S xf86-video-intel
- 如果返回的是nVidia,可以参看NVIDIA
- 如果返回ATI或者AMD,参见ATI
NVIDIA注意
对于使用NVIDIA显卡的MacBook,背景亮度可以通过AUR中的nvidia-bl-dkmsAUR{包解决。
MacBook 6,2+-EFI
截至2011年4月30日,nvidia驱动在此类EFI型号的机子下不能正常工作。可以了解一下mesa-git这个包。
触摸板
触摸板应该已经有了基本的功能。可以安装AUR中的xf86-input-multitouch-gitAUR[损坏的链接:package not found]包来达到和Mac OS X类似的多点触控效果,最多支持三点触控,包含了三指水平与垂直滑动。可以从项目主页 获取更多消息。
xf86-input-multitouch-git除了编辑源代码外不支持配置。一些用户也正面临这从palm上得到错误的点击。现在有个可定制度更高的包xf86-input-mtrack-gitAUR。在其readme中能得到更多配置信息。
下面的配置在MacBook 7,1中正常工作
Option "Thumbsize" "50" Option "ScrollDistance" "100"
可能你还需要添加下面的内容
MatchDevicePath "/dev/input/event10"
在更旧的MacBook机型上,比如MacBook 2,1中,可能需要安装xf86-input-synaptics包才能正常工作。可以查看Touchpad Synaptics获取更多信息。
键盘
MacBook的键盘默认是能正常工作的。如果想切换fn键,可以查看Apple Keyboard。
可以通过xbindkeys来重新设置键,或者通过DE配置。有另一种很好的方法,安装pommedAUR[损坏的链接:package not found]
根据你MacBook的硬件来配置/etc/pommed.conf,可以以/etc/pommed.conf.mac或者/etc/pommed.conf.ppc为模板来建立这个配置。
NVIDIA配置
如果在使用 pommed 后亮度仍然不正常, 请确认你安装了 nvidia-bl-dkmsAUR 并添加以下命令:
find . -name "*" -exec sed -i 's/mbp_backlight/nvidia_backlight/' '{}' \;
到 pommed PKGBUILD build() 函数中,然后重新编译。引用自 this forum post.
另一个解决方案是修改 pommed PKGBUILD build():
find . -name "*" -exec sed -i 's/nvidia_backlight/apple_backlight/' '{}' \;
如果上面两种方法都不能解决,那么你需要尝试以下方法:
运行 nvidia-settings,编辑 '/etc/X11/xorg.conf' 添加以下代码到 Device 部分:
Option "RegistryDwords" "EnableBrightnessControl=1"
保存并重启,检查亮度调节是否正常工作。 点击查看更多信息 Ubuntu MacBookPro5,5
Wi-Fi
不同型号的MacBook使用不同的网卡模块。
使用以下命令查看你的Macbook使用的网卡型号:
# lspci | grep Network
- 如果你使用的是 Atheros,无需任何设定即可正常工作。
- 如果你使用的是 Broadcom,请在 Broadcom BCM4312 页面查看教程。
- MacBook 5.0 和 6.0 使用 BCM43xx,在 Broadcom wireless 页面查看有关 broadcom-wl 驱动的部分。 网络接口在重启后会互换,所以最好使用 udev 规则来定义它们(教程在 Broadcom wireless 页面)。
- MacBook 8.1 使用 BCM4331,即不被Linux支持 (3.0 和 3.1) ,Broadcom 也没有提供闭源驱动,直到在 Linux 3.2 中才被初步支持。如果你需要在旧的内核上使用,你需要安装这里的驱动compat-drivers
电源管理
笔记本模式工具
睡眠(内核挂起)
休眠
声音配置
蓝牙
iSight配置
温度感应
色彩配置
苹果远程控制
HFS分区共享
HFS+ 分区
Home目录共享
在OS X中
第一步:改变UID与GID
第二步:改变Home目录权限
在Arch中
避免GRUB启动前EFI长时间执行
关闭启动响铃
rEFIt
详情参考refit myths.
在OS X下,从Refit主页下载".dmg"格式的安装包,并像其他苹果软件一样安装。
手动启用rEFIt的方法:
- 打开终端:
- 执行cd /efi/refit; ./enable.sh命令
rEFIt可能会遇到的问题
如果你在安装Arch或者rEFIt后遇到了问题,特别是启动时在启动菜单中看不到启动项,或者出现下面的GRUB提示时:
GRUB>_
请您参考下 http://mac.linux.be/content/problems-refit-and-grub-after-installation
该页面将会教你如何启动的Arch系统,将有问题的Arch系统挂载上去,然后chroot进入该系统,通过gptsyc重新安装GRUB。文中提到的那些用于debian系统的命令基本上都可以在Arch上工作。不过注意不要将GRUB安装错地方了(wrong spot怎么翻译?)
你可从 https://packages.debian.org/sid/gptsync 获取到gptsync。 或者通过下面两个命令之一分别下载32/64位版本的:
wget http://ftp.us.debian.org/debian/pool/main/r/refit/gptsync_0.14-2_i386.deb[失效链接 2021-05-17 ⓘ] wget http://ftp.us.debian.org/debian/pool/main/r/refit/gptsync_0.14-2_amd64.deb[失效链接 2021-05-17 ⓘ]
由于是.deb包,所以你可能需要先安装deb2targz
pacman -S deb2targz
参考资料
- http://www.netsoc.tcd.ie/~theorie/interblag/2010/01/30/installing-arch-linux-on-a-mac-pro/[失效链接 2021-11-13 ⓘ]
- http://allanmcrae.com/2010/04/installing-arch-on-a-macbook-pro-5-5/
- https://web.archive.org/web/20130917192747/https://blog.abhijeetr.com/2011/08/triple-boot-archlinux-windows-7-and-mac.html
MacBook Air (4,2) 内核补丁
Linus的内核树中的当前版本(Linux 3.0.7)中,包含几个问题。我(telmich)已经搜集了下面几个问题的修复补丁:
- 分辨率是1280x800而非正确的1440x900
- 触摸板不能正常工作或被检测为Synaptics
- FN + F1~F12组合键不工作(例如:fn啥都干不了)
- FN+F5~F12等多媒体键映射错误
- 网络处理的驱动/brcmsmac驱动(Hanging network applications / brcmsmac driver)
您可以从 http://git.schottelius.org/?p=foreign/linux-macbook-air;a=summary[失效链接 2020-08-04 ⓘ] 获取到打好补丁的内核,其中包括如下分支:
- keith-jiri: Keith Packard提供的显卡驱动补丁、Jiri Kosina提供的FN功能键补丁
- keith-jiri-brcmsmac: 上面提到的补丁加上网络处理的驱动
- jiri-kbdmapping: FN功能键和映射关系修复补丁
- keith-jiri-kbdmapping: 第一个分支加上多媒体键补丁
- keith-jiri-kbdmapping-brcmsmac: 以上所有的集合 (不确定的情况下,推荐使用这个分支)
你可以很简单的用当前ArchLinux的配置文件来编译内核:
# 请先通过git检出对应分支的源代码! cd linux-macbook-air # 使用当前的配置作为基础 zcat /proc/config.gz > .config # 编译内核时,可能会询问几个未配置的选项 make -j5