记一次黑苹果 OCLP 2.x Root Patching 翻车与修复

前言

事情发生在一台黑苹果上。配置不算豪华,但够用:

  • CPU:Intel Core i5-9300H,4 核 8 线程,Coffee Lake-H 移动端
  • GPU:Intel UHD Graphics 630 核显,无独显
  • 内存:32GB DDR4
  • 网卡:博通 BCM960 无线网卡
  • SMBIOS:iMac19,1
  • 系统:macOS Sequoia 15.7.7 (24G720)
  • 引导:OpenCore + OCLP 2.4.1

UHD 630 核显苹果一直原生支持,驱动这块不用操心。但这张博通 BCM960 无线网卡是个麻烦 —— 苹果从 macOS Sonoma 开始移除了博通 WiFi 的原生驱动,到 Sequoia 更是彻底不给活路。解决方案只有一条:用 OpenCore Legacy Patcher(OCLP)打 Root Patch,把 IO80211FamilyLegacy 和降级的 IOSkywalkFamily 等 kext 注入系统卷,让博通网卡重新活过来。

升级到 Sequoia 后,我像往常一样打开 OCLP,点击 Post-Install Root Patch——

然后它就翻车了。

翻车现场

点击 Root Patching 后,OCLP 开始检测系统版本、验证补丁兼容性,一切看起来正常:

- Starting Patch Process
- Determining Required Patch set for Darwin 24
- Verifying whether Root Patching possible
- Patcher is capable of patching
- Local PatcherSupportPkg resources available, continuing...

然后,一个内部错误弹了出来:

An internal error occurred while running the Root Patcher:
Traceback (most recent call last):
File "opencore_legacy_patcher/wx_gui/gui_sys_patch_start.py", line 340, in _start_root_patching
File "opencore_legacy_patcher/sys_patch/sys_patch.py", line 572, in start_patch
File "opencore_legacy_patcher/sys_patch/sys_patch.py", line 127, in _mount_root_vol
File "opencore_legacy_patcher/sys_patch/mount/mount.py", line 113, in mount
File "opencore_legacy_patcher/sys_patch/mount/mount.py", line 70, in _mount_root_volume
File "opencore_legacy_patcher/support/subprocess_wrapper.py", line 54, in run_as_root

堆栈最后一行虽然被 GUI 截断了,但关键信息很清楚:run_as_root 失败了。OCLP 在以 root 权限执行挂载操作时找不到它依赖的工具。

查了 OCLP 论坛和 Reddit 上的同类报错,完整错误是:

FileNotFoundError: [Errno 2] No such file or directory:
'/Library/PrivilegedHelperTools/com.dortania.opencore-legacy-patcher.privileged-helper'

这个 privileged-helper 是 OCLP 的「特权助手」—— 一个以 root 身份运行的后台进程,负责执行需要系统权限的操作(挂载系统卷、写入补丁到受保护的 /System/Library/Extensions 等)。它不存在,Root Patching 就没法往下走。

根因:拖 .app 的代价

问题出在 OCLP 的安装方式上。

OpenCore Legacy Patcher 在 GitHub Releases 页面提供两种安装形式:

  • .app.zip — 解压后直接把 .app 拖进 /Applications
  • .pkg — 标准的 macOS 安装器包

我偷懒选了第一种。解压,拖进去,打开,看起来一切正常。但 .app bundle 里并不包含 privileged-helper—— 这个工具必须通过 .pkg 安装器注册为系统级的 LaunchDaemon,写入 /Library/PrivilegedHelperTools/ 并配置好权限(属主 root,setuid)。

换句话说,这根本不算 bug,是安装方法不对。但 OCLP 不会在启动时检测 helper 是否存在并给出友好提示 —— 它只在真正需要提权操作时才爆雷,而你看到的时候已经点了 Root Patching 按钮。

三步修复

第一步:下载 PKG 安装包

OCLP GitHub Releases 找到你当前使用的版本(我的是 2.4.1),下载 .pkg 文件。

版本一定要对上 —— 如果先升级了 OCLP 版本,后续的 OpenCore EFI 配置也可能需要同步更新,增加不必要的变量。

第二步:运行 PKG 安装器

Terminal window
open ~/Downloads/OpenCore-Patcher.pkg

macOS 会弹出标准安装向导,一路 Next,输入管理员密码授权。安装器会:

  1. 把 OCLP.app 写入 /Applications(覆盖之前拖进去的)
  2. privileged-helper 写入 /Library/PrivilegedHelperTools/
  3. 注册 LaunchDaemon 配置到 /Library/LaunchDaemons/

第三步:验证 helper 是否就位

安装完成后,在终端确认一下:

Terminal window
ls -la /Library/PrivilegedHelperTools/com.dortania.opencore-legacy-patcher.privileged-helper

期望输出:

-rwsr-sr-x 1 root wheel 136816 9 2 2025
com.dortania.opencore-legacy-patcher.privileged-helper

重点看两处:

  • 属主是 root:helper 必须以 root 身份运行才能挂载系统卷
  • 权限带 s(setuid/setgid):运行时自动提权,无需每次输入密码

看到这个输出,helper 就安装成功了。

验证:Root Patching 顺利通过

重新打开 OCLP,再次点击 Post-Install Root Patch。这次不再报 FileNotFoundError,OCLP 正常完成系统卷挂载 → kext 注入 → 内核缓存重建 → 提示重启。

重启后,博通 BCM960 的 WiFi 恢复正常。菜单栏上那个熟悉的扇形图标又亮了。

总结

整个过程本质上就是一步:把 OCLP 从「拖 app」换成「跑 PKG」。查资料、定位堆栈、下载安装、验证,折腾了半个多小时 —— 但如果一开始就用 PKG 安装,十秒钟的事。

几条经验:

  • 装 OCLP 永远用 PKG,别拖 .app。 从 2.3.0 起官方已经不给 .app.zip 了,这是个明确信号。
  • OCLP 不会在启动时检测 helper 是否缺失。 它只在需要提权操作时才报错,所以你会在最不该出问题的时候(比如急着恢复 WiFi)撞上它。
  • 每次 macOS 系统更新后都要重新跑 Root Patching。 系统更新会替换被补丁修改的 kext,WiFi 会再次失效,重新跑一遍就行。
  • 遇到 OCLP 报错先去翻官方 Troubleshooting。 Dortania 的文档 写得很实在,很多问题都是已知的。

黑苹果本来就是折腾,但有些坑完全可以绕过。记下来,下次别踩。