zzxworld

一台 Intel NUC 的黑苹果之旅

前两天网上闲逛,无意中看到一篇在 Intel NUC 上安装 macOS 的文章。按作者的说法,NUC 的硬件基本兼容 macOS,安装过程看起来也并不复杂。刚好我手头就有一台 NUC,于是开始了为期两天的折腾之旅。

悸动

这台 NUC 目前是我的主力开发机器,一直以来都是安装的 Linux 系统。最早使用的是 Ubuntu,去年的时候换成了 Arch。

Linux 系统作为程序开发用途非常舒服,特别是在基于 Docker 类容器工具构建开发场景的情况下,带给我非常丝滑的使用畅快感。但在一些商业软件需求和设计用途的场景下,就有点让人难受了。以 Gimp 举例,即便我使用了这么多年 Linux,依然还是无法像使用 PS 一样随心所欲的操作它。加上我还有经常从 iPhone 导出照片和视频的需求...,这些非编程开发的事情导致我还得让早在 2012 年买的一台 MBP 继续服役。

我非常希望能在一台电脑上搞定这些所有事情,而那台十年前的 MBP,本就到了该「退休」的年龄了。所以当我看到有人在 Intel NUC 上成功安装了 macOS 后,内心自然是激动不已,跃跃欲试。

期许

对于这台 Intel NUC 上安装 macOS 的效果,我在开始尝试之前是有一个心里预期的。

以手头的这台 MBP 作为参照,它的 CPU 型号为 i5-3210M,而我的 NUC CPU 为 i5-8259U。两颗 CPU 有 6 年的代差,通过某 CPU 评分网站查询两者的评分,对比一下有 3 倍的差距。加上之前的 MBP 内存只有 8GB,而我这台 NUC 则是配备了 32GB 内存。NUC 在这些硬件上的优势让我对这次体验充满了期待。

折腾

以之前重装了无数次操作系统的经验,开始之前最首要的事情就是备份当前所有重要数据。经过大半年的时间,Arch 系统上累计了不少的东西。趁着数据往移动硬盘上移动的功夫,我开始了解在 Intel NUC 上安装 macOS 的过程。

首先弄明白了一件事,虽然苹果没有像微软一样把 macOS 拿来卖钱,但免费并不意味着可以在任何非 Apple 硬件上安装 macOS。给 NUC 装上 macOS,它就有了另一个称呼:Hackintosh,中文名:黑苹果。是对安装了 macOS 后 PC 电脑的代称。

另外也不是任何电脑都可以拿来安装 macOS,只有接近于苹果 Intel 系硬件的组合方案才有尝试的可能。这说起来跟苹果在 2005 年把 Mac 硬件架构换成 x86 有点渊源。如今 Apple 已经走 ARM 架构,估计这黑苹果也玩不了几年了。

至于安装过程,基本可以分为三步:

  1. 制作启动盘
  2. 设置 BIOS,使 U 盘能正常启动
  3. 安装系统

启动盘用 U 盘,4GB 大小应该就足够了,稳妥起见,我准备了一个 16GB 的。使用 Fat32 格式化好。

接下来就是整个过程中最重要的一环:找到正确的安装包。我在这上面浪费了较多时间,一些小网站上提供的下载地址不放心,大的论坛或是社区看起来靠谱吧,又要注册登陆。注册登陆也就罢了,居然还要邀请码。另外还有付费购买才给下载的,价格还不便宜。这一通把我折腾的都想要放弃了。还好我发现了 Github 和 Gitee 这两个靠谱的渠道。

简单来说,这两个源码托管网站上有大量折腾过这个事情的朋友分享现成的安装包文件。我只需要通过电脑硬件的型号关键词来搜索挑选就行了。

以我的 NUC 为例,型号为 NUC8i5BEH,直接在 Github 中搜索 NUC8i5BEH 的结果:

search on github

随便点开一个,会发现里面的文件结构如下:

detail for a respoitory

其中最重要的就是 EFI 目录,点开看里面有应该有两个重要的文件夹: BOOT 和 OC。前者是启动引导文件,后者包含了硬件依赖的配置和驱动文件。

选择一个后用 Git 把文件克隆到本地。然后把 EFI 目录复制到格式化好的 U 盘根目录。接下来解决 U 盘引导所依赖的「还原镜像」文件。这个需要使用 OpenCore 所提供的下载脚本。通过以下的地址下载:

截止本文撰写的时间,最新版本为 0.8。下载 zip 格式的文件,然后解压。找到里面的 Utilities 目录,打开后继续找 macrecovery 目录。下载镜像文件的脚本就在这个里面。这个目录里面有一个 recovery_urls.txt 文件,打开就能发现提供了获取各种版本 macOS 系统镜像的命令示例,类似于下面的格式:

...

Yosemite:
./macrecovery.py -b Mac-E43C1C25D4880AD6 -m 00000000000GDVW00

El Capitan
./macrecovery.py -b Mac-FFE5EF870D7BA81A -m 00000000000GQRX00

Sierra
./macrecovery.py -b Mac-77F17D7DA9285301 -m 00000000000J0DX00

High Sierra
./macrecovery.py -b Mac-7BA5B2D9E42DDD94 -m 00000000000J80300
./macrecovery.py -b Mac-BE088AF8C5EB4FA2 -m 00000000000J80300

...

Big Sur
./macrecovery.py -b Mac-2BD1B31983FE1663 -m 00000000000000000

...

面对如此多的系统版本,问题来了。应该选择哪一个?

我在此处踩的坑是以为可以随便选,事实上是不可以的。此处要选的系统版本依赖于上一步所选择的 EFI 安装包,这个包里包含的硬件驱动就决定了对应的系统版本。所以这里需要回头去看看 EFI 安装包中提供的 README.md 文件,一般作者会在里面提供系统版本名称。如果连这个都没提供,那就不要用了。

确定了系统版本后,回到刚下载的 OpenCore 目录中来,通过终端命令进入 Utilities/macrecovery 目录,把上面对应系统名称下的命令复制到终端窗口执行。比如我确定了系统版本为 Big Sur,那就复制并执行这行命令:

./macrecovery.py -b Mac-2BD1B31983FE1663 -m 00000000000000000 download

注意后面的 download 参数,这是需要自己在后面追加的,表示要下载文件。文件大概有六百多 MB,需要几分钟时间。等命令执行完成后,当前这个目录下会多出两个文件,名称都叫 BaseSystem,但后缀不一样。在 U 盘中先创建一个目录,命名为 com.apple.recovery.boot,然后把刚刚通过命令下载的两个以 BaseSystem 命名的文件都复制到刚创建的目录中。

至此,黑苹果的安装 U 盘创建完成。数据备份也刚好结束,直接重启电脑,按 F2 设置 BIOS。

对于 NUC 来说,需要修改的 BIOS 配置如下。

  • 禁用项:
    • Legacy Boot
    • Fast Boot
    • Network Boot
    • Secure Boot
    • Inter VT for directed I/VO(VT-d)
  • 启用项:
    • Boot USB Devices First
    • Boot Network Devices Last
  • Wake on LAN from S4/S5 设置为 Stay Off

以上属于抄作业,为什么这么设置我也不是很清楚。

保存 BIOS 设置后退出,插入 U 盘启动电脑。接下来就是拼人品的时候了。如果出现以下画面,就要恭喜自己成功了八成。

macOS install menu

我刚开始因为下载的系统和 EFI 目录的驱动不一致,在这一步就陷入了反复重启的循环之中。后来重新找了对应的系统后才成功进入安装界面。

至于上面为什么说是成功了八成,因为进入这个画面并不意味着就一定能正常安装系统。上面通过命令下载的镜像只是「还原镜像」,接下来必须要网卡驱动正常才能继续安装流程,以下载真正的系统镜像并开始安装。

所以说到底还是 EFI 中系统和驱动的有效性问题。过了网卡驱动这一关,那就没有大碍了。另外开始之前记得先用最下面的磁盘工具给硬盘格式化成 macOS 专用的分区格式,否则可能会碰到无法选择安装磁盘的问题。如果是固态硬盘就选择 APFS,否则就选 MacOS 扩展。完成后再点击重新安装,如果能通过网络检测这一步,并进入如下的安装界面,那就妥了。

staring install macOS

来张安装好后的桌面:

macOS desktop

以及系统信息:

About This Mac 序列号被我抹掉了

安装好系统首先要做的第一件事就是把 U 盘的 EFI 目录复制到系统硬盘中,让系统可以脱离 U 盘启动。这需要借助一个工具:Hackintool。

这个步骤很简单,此处就不再赘述。另外如果想用自己的苹果帐号登陆黑苹果系统,同样要先利用这个工具来修改序列号,也就是俗称的「改三码」。这部分内容留给有兴趣的朋友自己去探索。我改了「三码」后用自己的 iCloud 帐号亲测了一下,除了登录时在 iPhone 上要确认是否信任此设备,以及随后弹出的验证码外,后续使用没有碰到任何帐号方面的问题。

原点

在 NUC 上体验了两天黑苹果后,我又回到了 Arch Linux。有点不舍,但没办法说服自己接受以下问题:

  1. 来源不明的硬件驱动。这让我在涉及输入密码等类似一些个人敏感数据的操作时会有所顾虑,毕竟没办法确信这些由非官方提供的硬件驱动文件一定是可信的。而且我自己也没能力去验证并排除这些顾虑。以我的理解,作为系统最底层的硬件驱动程序,如果想干点坏事意味着是不受限的。
  2. 频繁「起飞」的风扇。这一点出乎我的意料,NUC 在 macOS 系统下风扇的启动有点过于频繁了。每次开机进入桌面要起飞一下,用 Git 克隆个项目库也要起飞一下。不论是对比之前 12 年的 MBP,还是和安装了 Arch Linux 时候的使用体验相比,这风扇的频率都显的不太正常。而且声音在我听来到了吓人的程度。很难想像用它来做前端打包的场景。

和上面两点相比,我之前比较在意的依赖于虚拟机使用容器工具,终端反应没有 Linux 流畅反倒看起来都不是什么大问题了。

总之,在 NUC 上体验了两天 macOS 后,我又花了半天时间回到了 Arch Linux。后面我应该会再回到 macOS,但不会是以黑苹果的方式。