linioe 发表于 2023-9-19 15:20

经验之谈——使用OCLP打补丁之后无法进入系统怎么撤销补丁

本帖最后由 linioe 于 2023-9-19 15:31 编辑

    我有一台3代CPU的笔记本,得益于OCLP,一直能追最新版系统。但是有的时候打完补丁后无法进入系统(例如用0.6.8正式版可以进系统,但是想用最新的0.6.9开发版就开机跑码重启)。
    以前这种情况我都得重装系统,很是麻烦。因为OCLP是有撤销补丁的功能的,所以尝试参考OCLP源码获得帮助,得到了下面的办法。
    在此声明,我只在自己的三代CPU,系统Ventura和Sonoma上进行了测试,理论上支持3-6代CPU核显和博通网卡补丁。

    此方法可以在Recovery下或者别的系统下使用(最好是Recovery下使用,因为不同的系统命令效果可能不同,我只在Ventura和Sonoma进行了测试。别说没有Recovery,除了恢复方式安装的想要安装都得进Recovery)

    1.进入Recovery,打开实用工具 --> 终端
    2.找到要撤销补丁的分区标识:diskutil list
-bash-3.2# diskutil list/dev/disk0 (internal, physical):   #:                     TYPE NAME                  SIZE       IDENTIFIER   0:      GUID_partition_scheme                        *120.0 GB   disk0   1:                        EFI EFI                     209.7 MB   disk0s1   2:               Apple_APFS Container disk3         119.8 GB   disk0s2
/dev/disk1 (disk image):   #:                     TYPE NAME                  SIZE       IDENTIFIER   0:      GUID_partition_scheme                        +1.2 GB   disk1   1:               Apple_APFS Container disk2         1.2 GB   disk1s1
/dev/disk2 (synthesized):   #:                     TYPE NAME                  SIZE       IDENTIFIER   0:      APFS Container Scheme -                      +1.2 GB   disk2                                 Physical Store disk1s1   1:                APFS Volume macOS Base System       945.0 MB   disk2s1   2:                APFS Volume Preboot               81.3 MB    disk2s2
/dev/disk3 (synthesized):   #:                     TYPE NAME                  SIZE       IDENTIFIER   0:      APFS Container Scheme -                      +119.8 GB   disk3                                 Physical Store disk0s2   1:                APFS Volume Macintosh HD - 数据   24.9 GB    disk3s1   2:                APFS Volume Preboot               10.4 GB    disk3s2   3:                APFS Volume Recovery                3.0 GB   disk3s3   4:                APFS Volume Ventura - 数据          16.6 GB    disk3s4   5:                APFS Volume Macintosh HD            15.3 GB    disk3s5   6:                APFS Volume Ventura               9.3 GB   disk3s7   7:                APFS Volume Sonoma - 数据         13.9 GB    disk3s8   8:                APFS Volume Applications            1.9 GB   disk3s9   9:                APFS Volume Sonoma                  10.0 GB    disk3s1010:                APFS Volume VM                      1.1 GB   disk3s11

      例如我这里想要撤销Sonoma分区的补丁,就是disk3s10(注意不要选择Sonoma - 数据,要选Sonoma,不要选带数据那个;另外这个名字不一定是系统版本的名称,要取决于你自己取的名字,例如有的人用macos或者Macintosh)。
    3.卸载这个分区:diskuitl unmount diskXsY
-bash-3.2# diskutil unmount disk3s10Volume Sonoma on disk3s10 unmounted      由于系统默认的挂载方式是只读的,不能进行下一步操作,所以需要先卸载再以适当的方式挂载。
      这里的diskXsY就是上一步找到的标识,我这里就是disk3s10。
      注意这里如果卸载错了也不要紧,重启后系统会自动挂载,只要继续卸载上一步找到的分区就行。
      注意命令的结果,要卸载成功才能进行后续操作。
    4.创建临时挂载点:mkdir dir
-bash-3.2# mkdir dir      默认是在/var/root下创建dir文件夹,在别的地方创建也行,但是后续使用要注意路径
      使用ls命令查看是否创建成功
-bash-3.2# ls.bash_history      Desktop                Downloads      dir.forward      Documents      Library

    5.挂载要撤销补丁的分区:mount -o nobrowse -t apfs diskXsY dir
-bash-3.2# mount -o nobrowse -t apfs disk3s10 dir
      这里的diskXsY就是第2步找到的标识,我这里就是disk3s10。
      通过命令ls dir查看挂载是否成功
-bash-3.2# ls dir.VolumeIcon.icns      Users                        opt.file                        Volumes                        private.vol                        bin                        sbinApplications                cores                        tmpLibrary                        dev                        usrSystem                        etc                        var    6.预检查分区:diskutil info diskXsY
-bash-3.2# diskutil info disk3s10   Device Identifier:         disk3s10   Device Node:               /dev/disk3s10   Whole:                     No   Part of Whole:             disk3
   Volume Name:               Sonoma   Mounted:                   Yes   Mount Point:               /System/Volumes/Data/private/var/root/dir
...
   APFS Snapshots are defined upon this APFS Volume.Snapshot list:   Snapshot UUID:             68FEEBDB-4C03-45E5-B957-B82869F95009   Name:                      com.apple.os.update-2EC73C0A30C4B87F8DA7553A83D8D5A028BEA8C7939287594B2C906F0C309D55   XID:                     7924228   Snapshot UUID:             1A88BED2-CE3F-497B-B0B4-8781A33ECED5   Name:                      com.apple.bless.1F7F6042-D9F0-41E5-A0B5-93CA8592676B   XID:                     8041363      这里的diskXsY就是第2步找到的标识,我这里就是disk3s10。
      查看结果应该有一个或多个Name开头为com.apple.bless的快照,最后一个就是要撤销的快照。有一个Name开头为com.apple.os.install或com.apple.os.update的快照,这个是最初没打补丁之前的快照。如果没有上述的两种快照,那么可能是别的方式更改的快照(例如直接删除了最基础的快照,这样撤销后会导致没有快照无法开机或者干脆就无法撤销快照),此方法可能不适用。
    7.撤销补丁:bless --mount dir --bootefi --last-sealed-snapshot
-bash-3.2# bless --mount dir --bootefi --last-sealed-snapshot
      如果第4步在别的地方创建的挂载点,那么命令中替换dir
      此命令没有返回结果,如果有结果则是失败了的失败原因
    8.清理补丁残留
      三代CPU:
            rm -rf dir/Library/Extensions/AppleIntelFramebufferCapri.kext
            rm -rf dir/Library/Extensions/AppleIntelHD4000Graphics.kext
      四代CPU:
            rm -rf dir/Library/Extensions/AppleIntelFramebufferAzul.kext
            rm -rf dir/Library/Extensions/AppleIntelHD5000Graphics.kext

      五代CPU:
            rm -rf dir/Library/Extensions/AppleIntelBDWGraphicsFramebuffer.kext
            rm -rf dir/Library/Extensions/AppleIntelBDWGraphics.kext

      六代CPU:
            rm -rf dir/Library/Extensions/AppleIntelSKLGraphicsFramebuffer.kext
            rm -rf dir/Library/Extensions/AppleIntelSKLGraphics.kext

    9.重启:reboot


    备注:
      (1)在别的系统下也可以完成上述操作,如果执行命令提示没有权限,则在命令前加上sudo即可。
      (2)理论上Non-Metal补丁(Nvidia Tesla、Maxwell、Pascal,AMD TeraScale 1、TeraScale 2,Intel Ironlake、Sandy Bridge),Nvidia Kepler补丁,AMD GCN 1-3、Polaris、Vega补丁都可以用,但是我没有测试过,不确定除了撤销快照还要进行哪些操作(源码中是有一些命令的),各位可以研究一下。
            

jackacc 发表于 2023-9-19 16:05

OCLP作者,如果遇到补丁后无法进系统就在引导加一条-igfxvesa

linioe 发表于 2023-9-19 17:15

jackacc 发表于 2023-9-19 16:05 https://bbs.pcbeta.com/static/image/common/back.gif
OCLP作者,如果遇到补丁后无法进系统就在引导加一条-igfxvesa

谢谢帮忙,我试了,还是不行,日志会出现
AMFI: Denying core dump for pid xxx(xxx是具体数字,好多条,每条的数字不一样):too many corpses being created
然后就重启,先是五国,然后就是重复这个流程。
我分别试了用AMFIPass.kext和不用(不用时加amfi=0x80),都是一样的错误

jackacc 发表于 2023-9-19 18:46

可以再试试-v -x

lclcolin 发表于 2023-9-19 22:20

收藏备用...

达芬奇密码 发表于 2023-9-20 16:55

技术性文章 学习了

shenzhibin2012 发表于 2023-9-21 01:11

安全模式启动,进去卸载了就行

linioe 发表于 2023-9-21 12:53

shenzhibin2012 发表于 2023-9-21 01:11 https://bbs.pcbeta.com/static/image/common/back.gif
安全模式启动,进去卸载了就行

安全模式和单用户模式都试了了,全都不行。
不过我突然有个想法,既然0.6.9对sonoma生效但是对ventura失败应该是某个为sonoma设计的补丁应用到了ventura上,我可以找这个思路找找

ZleM0n 发表于 2023-9-21 16:05

技术贴,马克一下

gujiangjiang 发表于 2023-9-21 18:07

我之前打完补丁没问题,OTA 升级系统后就进不去了,卡进度条,后来一了百了,去 PE 修改 Config,把 ig-platform-id 改成了 0x11111111,然后开机就可以进系统了。。。进系统之后重新用 OCLP 打补丁,然后就搞定了。。。

linioe 发表于 2023-9-21 19:00

gujiangjiang 发表于 2023-9-21 18:07 https://bbs.pcbeta.com/static/image/common/back.gif
我之前打完补丁没问题,OTA 升级系统后就进不去了,卡进度条,后来一了百了,去 PE 修改 Config,把 ig-pla ...

是这样的,升级会导致补丁失效,注入正确的ig-platform-id确实会进不去系统,我都是先把DeviceProperties注释掉升级,打完补丁再改回来。

linioe 发表于 2023-9-21 19:08

本帖最后由 linioe 于 2023-9-21 19:10 编辑

0.6.9不能用在Ventura的原因找到了,因为这个提交:https://github.com/dortania/OpenCore-Legacy-Patcher/commit/20d04d307d4f068ed84104a4aa4c238f543d0ab1


"Metal 3802 Common Extended": {
                  "Display Name": "",
                  "OS Support": {
                        "Minimum OS Support": {
                            "OS Major": os_data.os_data.ventura,
                            "OS Minor": 4 # 13.3
                        },
                        "Maximum OS Support": {
                            "OS Major": os_data.os_data.max_os,
                            "OS Minor": 99
                        },
                  },
                  "Install": {
                        "/System/Library/Frameworks": {
                            "Metal.framework": f"13.2.1-{self.os_major}",
                            **({"CoreImage.framework": "14.0 Beta 3" } if self.os_major >= os_data.os_data.ventura else {}),
                        },
                        "/System/Library/PrivateFrameworks": {
                            **({"MTLCompiler.framework": "13.2.1" } if self.os_major == os_data.os_data.ventura else {}),
                            **({"GPUCompiler.framework": "13.2.1" } if self.os_major == os_data.os_data.ventura else {}),
                        },
                  },
                },



绿色的条件判断应该用 > 而不是 >= ,用 >= 会把这个14.0版本的CoreImage.framework引入到Ventura,造成无法进系统。
OCLP后续应该会解决这个问

lzlwt 发表于 2023-10-23 12:57

技术贴,收藏备用...

redwolf747 发表于 2023-10-23 15:55

很不错,详细。收藏。

yvhsou 发表于 2023-10-23 16:00

我打了BCM94352Z的网卡驱动后,频繁重启,基本上半小时重启下,无语,而且修复后网卡速度极慢,不清楚其他人有没有这问题

wings110 发表于 2023-10-26 23:16

感谢分享?

qw3497 发表于 2023-10-28 14:39

各位可以研究一下

qhdzdk 发表于 2023-10-28 15:03

谢谢分享,学习了!

带你拿个杯 发表于 2023-10-29 13:05

我记得OCLP有移除所有补丁的功能啊

linioe 发表于 2023-10-29 19:37

带你拿个杯 发表于 2023-10-29 13:05 https://i.pcbeta.com/static/image/common/back.gif
我记得OCLP有移除所有补丁的功能啊

是的,我这个就是参考那个功能
页: [1] 2
查看完整版本: 经验之谈——使用OCLP打补丁之后无法进入系统怎么撤销补丁