diff --git a/data/sys_patch_data.py b/data/sys_patch_data.py deleted file mode 100644 index eb234852a..000000000 --- a/data/sys_patch_data.py +++ /dev/null @@ -1,287 +0,0 @@ -# Lists Root patches used by sys_patch.py -# Copyright (C) 2020-2021, Dhinak G, Mykola Grymalyuk -DeleteNvidiaAccel11 = [ - "AMDRadeonX4000.kext", - "AMDRadeonX4000HWServices.kext", - "AMDRadeonX5000.kext", - "AMDRadeonX5000HWServices.kext", - "AMDRadeonX6000.kext", - "AMDRadeonX6000Framebuffer.kext", - "AMDRadeonX6000HWServices.kext", - "AppleIntelBDWGraphics.kext", - "AppleIntelBDWGraphicsFramebuffer.kext", - "AppleIntelCFLGraphicsFramebuffer.kext", - "AppleIntelHD4000Graphics.kext", - "AppleIntelHD5000Graphics.kext", - "AppleIntelICLGraphics.kext", - "AppleIntelICLLPGraphicsFramebuffer.kext", - "AppleIntelKBLGraphics.kext", - "AppleIntelKBLGraphicsFramebuffer.kext", - "AppleIntelSKLGraphics.kext", - "AppleIntelSKLGraphicsFramebuffer.kext", - "AppleIntelFramebufferAzul.kext", - "AppleIntelFramebufferCapri.kext", - "AppleParavirtGPU.kext", - "GeForce.kext", - "IOAcceleratorFamily2.kext", - "IOGPUFamily.kext", -] - -DeleteAMDAccel11 = [ - "AMDRadeonX4000.kext", - "AMDRadeonX4000HWServices.kext", - "AMDRadeonX5000.kext", - "AMDRadeonX5000HWServices.kext", - "AMDRadeonX6000.kext", - "AMDRadeonX6000Framebuffer.kext", - "AMDRadeonX6000HWServices.kext", - "AMD7000Controller.kext", # AMDSupport Dependency - "AMD8000Controller.kext", # AMDSupport Dependency - "AMD9000Controller.kext", # AMDSupport Dependency - "AMD9500Controller.kext", # AMDSupport Dependency - "AMD10000Controller.kext", # AMDSupport Dependency - "AppleIntelBDWGraphics.kext", - "AppleIntelBDWGraphicsFramebuffer.kext", - "AppleIntelCFLGraphicsFramebuffer.kext", - "AppleIntelHD4000Graphics.kext", - "AppleIntelHD5000Graphics.kext", - "AppleIntelICLGraphics.kext", - "AppleIntelICLLPGraphicsFramebuffer.kext", - "AppleIntelKBLGraphics.kext", - "AppleIntelKBLGraphicsFramebuffer.kext", - "AppleIntelSKLGraphics.kext", - "AppleIntelSKLGraphicsFramebuffer.kext", - "AppleIntelFramebufferAzul.kext", - "AppleIntelFramebufferCapri.kext", - "AppleParavirtGPU.kext", - "GeForce.kext", - "IOGPUFamily.kext", -] - -DeleteAMDAccel11TS2 = [ - "AppleCameraInterface.kext", -] - -AddNvidiaAccel11 = [ - "GeForceGA.bundle", - "GeForceTesla.kext", - "GeForceTeslaGLDriver.bundle", - "GeForceTeslaVADriver.bundle", - "NVDANV50HalTesla.kext", - "NVDAResmanTesla.kext", - "IOSurface.kext", -] - -AddNvidiaBrightness = [ - "GeForceGA.bundle", - "GeForceTesla.kext", - "GeForceTeslaGLDriver.bundle", - "GeForceTeslaVADriver.bundle", - "NVDANV50HalTesla.kext", - "NVDAResmanTesla.kext", -] - -AddNvidiaKeplerAccel11 = [ - "GeForce.kext", - "GeForceAIRPlugin.bundle", - "GeForceGLDriver.bundle", - "GeForceMTLDriver.bundle", - "GeForceVADriver.bundle", - "NVDAGF100Hal.kext", - "NVDAGK100Hal.kext", - "NVDAResman.kext", - "NVDAStartup.kext", -] - -AddNvidiaTeslaAccel12 = [ - "NVDAStartup.kext", -] - -AddAMDAccel11 = [ - "AMD2400Controller.kext", - "AMD2600Controller.kext", - "AMD3800Controller.kext", - "AMD4600Controller.kext", - "AMD4800Controller.kext", - "AMD5000Controller.kext", - "AMD6000Controller.kext", - "AMDFramebuffer.kext", - "AMDLegacyFramebuffer.kext", - "AMDLegacySupport.kext", - "AMDRadeonVADriver.bundle", - "AMDRadeonVADriver2.bundle", - "AMDRadeonX3000.kext", - "AMDRadeonX3000GLDriver.bundle", - "AMDShared.bundle", - "AMDSupport.kext", - "ATIRadeonX2000.kext", - "ATIRadeonX2000GA.plugin", - "ATIRadeonX2000GLDriver.bundle", - "ATIRadeonX2000VADriver.bundle", -] - -AddAMDBrightness = [ - "AMD2400Controller.kext", - "AMD2600Controller.kext", - "AMD3800Controller.kext", - "AMD4600Controller.kext", - "AMD4800Controller.kext", - "AMD5000Controller.kext", - "AMD6000Controller.kext", - "AMDLegacyFramebuffer.kext", - "AMDLegacySupport.kext", - "AMDRadeonVADriver.bundle", - "AMDRadeonVADriver2.bundle", - # "AMDRadeonX3000.kext", - # "AMDRadeonX3000GLDriver.bundle", - "AMDShared.bundle", - "ATIRadeonX2000.kext", - "ATIRadeonX2000GA.plugin", - "ATIRadeonX2000GLDriver.bundle", - "ATIRadeonX2000VADriver.bundle", -] - -AddAMDAccel11TS2 = [ - "IOSurface.kext", - "IOAcceleratorFamily2.kext", -] - -AddIntelGen1Accel = [ - "AppleIntelHDGraphics.kext", - "AppleIntelHDGraphicsFB.kext", - "AppleIntelHDGraphicsGA.plugin", - "AppleIntelHDGraphicsGLDriver.bundle", - "AppleIntelHDGraphicsVADriver.bundle", -] - -AddIntelGen2Accel = [ - "AppleIntelHD3000Graphics.kext", - "AppleIntelHD3000GraphicsGA.plugin", - "AppleIntelHD3000GraphicsGLDriver.bundle", - "AppleIntelHD3000GraphicsVADriver.bundle", - # "AppleIntelSNBGraphicsFB.kext", - "AppleIntelSNBVA.bundle", -] - -AddIntelGen2AccelStock = [ - "AppleIntelSNBGraphicsFB-Clean.kext", -] - -AddIntelGen2AccelPatched = [ - "AppleIntelSNBGraphicsFB.kext", -] - -AddIntelGen3Accel = [ - "AppleIntelFramebufferCapri.kext", - "AppleIntelHD4000Graphics.kext", - "AppleIntelHD4000GraphicsGLDriver.bundle", - "AppleIntelHD4000GraphicsMTLDriver.bundle", - "AppleIntelHD4000GraphicsVADriver.bundle", - "AppleIntelIVBVA.bundle", - "AppleIntelGraphicsShared.bundle", -] - -AddGeneralAccel = ["IOAcceleratorFamily2.kext", "IOSurface.kext"] - -DeleteBrightness = ["AppleGraphicsControl.kext/Contents/PlugIns/AGDCBacklightControl.kext"] - -DeleteDemux = [ - "AppleGraphicsControl.kext/Contents/PlugIns/AGDCBacklightControl.kext", - "AppleGraphicsControl.kext/Contents/PlugIns/AppleMuxControl.kext", - "AppleBacklight.kext", -] - -AddDemux = [ - "AppleMuxControl.kext", -] - -AddBrightness = [ - "AppleBacklight.kext", - "AppleBacklightExpert.kext", -] - -AddVolumeControl = [ - "AppleHDA.kext", - "IOAudioFamily.kext", -] - -AddVolumeControlv2 = [ - "AppleHDA.kext", -] - -DeleteVolumeControl = [ - "AppleVirtIO.kext", - "AppleVirtualGraphics.kext", - "AppleVirtualPlatform.kext", - "ApplePVPanic.kext", - "AppleVirtIOStorage.kext", -] - -AddNvidiaAccelLegacy = [ - # "GeForceGA.bundle", - "GeForceTesla.kext", - "GeForceTeslaGLDriver.bundle", - "GeForceTeslaVADriver.bundle", - "NVDANV50HalTesla.kext", - "NVDAResmanTesla.kext", -] - -AddAMDAccelLegacy = [ - "AMD2400Controller.kext", - "AMD2600Controller.kext", - "AMD3800Controller.kext", - "AMD4600Controller.kext", - "AMD4800Controller.kext", - "AMD5000Controller.kext", - "AMD6000Controller.kext", - "AMDFramebuffer.kext", - "AMDLegacyFramebuffer.kext", - "AMDLegacySupport.kext", - "AMDRadeonVADriver.bundle", - "AMDRadeonVADriver2.bundle", - "AMDRadeonX3000.kext", - "AMDRadeonX3000GLDriver.bundle", - "AMDRadeonX4000HWServices.kext", - "AMDRadeonX4000.kext", - "AMDRadeonX4000GLDriver.bundle", - "AMDShared.bundle", - "AMDSupport.kext", - "ATIRadeonX2000.kext", - "ATIRadeonX2000GA.plugin", - "ATIRadeonX2000GLDriver.bundle", - "ATIRadeonX2000VADriver.bundle", -] - -AddGeneralAccelCatalina = [ - "AppleGraphicsControl.kext", - "AppleGraphicsPowerManagement.kext", - "AppleMCCSControl.kext", - "IOGraphicsFamily.kext", - "IONDRVSupport.kext", - "IOSurface.kext", -] - -AddGeneralAccelMojave = [ - "IONDRVSupport.kext", - "AppleGraphicsControl.kext", - "AppleGraphicsPowerManagement.kext", - "AppleMCCSControl.kext", - "IOAccelerator2D.plugin", - "IOAcceleratorFamily2.kext", - "IOGraphicsFamily.kext", -] - -BackupLocations = [ - "System/Library/Extensions", - "System/Library/Frameworks/CoreDisplay.framework", - "System/Library/Frameworks/IOSurface.framework", - "System/Library/Frameworks/OpenGL.framework", - "System/Library/Frameworks/WebKit.framework", - "System/Library/LaunchDaemons", - "System/Library/PrivateFrameworks/DisplayServices.framework", - "System/Library/PrivateFrameworks/GPUSupport.framework", - "System/Library/PrivateFrameworks/SkyLight.framework", - "System/Library/PrivateFrameworks/IOAccelerator.framework", - "System/Library/PrivateFrameworks/AppleGVA.framework", - "System/Library/PrivateFrameworks/AppleGVACore.framework", -] diff --git a/data/sys_patch_dict.py b/data/sys_patch_dict.py new file mode 100644 index 000000000..352a9bc6c --- /dev/null +++ b/data/sys_patch_dict.py @@ -0,0 +1,305 @@ +from data import os_data + +def SystemPatchDictionary(os): + sys_patch_dict = { + "Graphics": { + "Non-Metal Common": { + "Install": { + "/System/Library/Extensions": { + "IOSurface.kext": "10.15.7", + }, + "/System/Library/Frameworks": { + "OpenGL.framework": "10.14.3", + "CoreDisplay.framework": f"10.14.4-{os}", + "IOSurface.framework": f"10.15.7-{os}", + "QuartzCore.framework": f"10.15.7-{os}", + }, + "/System/Library/PrivateFrameworks": { + "GPUSupport.framework": "10.14.3", + "SkyLight.framework": f"10.14.6-{os}", + }, + }, + "Remove": { + "/System/Library/Extensions": [ + "AMDRadeonX4000.kext", + "AMDRadeonX4000HWServices.kext", + "AMDRadeonX5000.kext", + "AMDRadeonX5000HWServices.kext", + "AMDRadeonX6000.kext", + "AMDRadeonX6000Framebuffer.kext", + "AMDRadeonX6000HWServices.kext", + "AppleIntelBDWGraphics.kext", + "AppleIntelBDWGraphicsFramebuffer.kext", + "AppleIntelCFLGraphicsFramebuffer.kext", + "AppleIntelHD4000Graphics.kext", + "AppleIntelHD5000Graphics.kext", + "AppleIntelICLGraphics.kext", + "AppleIntelICLLPGraphicsFramebuffer.kext", + "AppleIntelKBLGraphics.kext", + "AppleIntelKBLGraphicsFramebuffer.kext", + "AppleIntelSKLGraphics.kext", + "AppleIntelSKLGraphicsFramebuffer.kext", + "AppleIntelFramebufferAzul.kext", + "AppleIntelFramebufferCapri.kext", + "AppleParavirtGPU.kext", + "GeForce.kext", + "IOAcceleratorFamily2.kext", + "IOGPUFamily.kext", + ], + }, + "Install Non-Root": { + "/Library/Application Support/SkyLightPlugins": { + **({ "DropboxHack.dylib": "SkyLightPlugins" } if os >= os_data.os_data.monterey else {}), + **({ "DropboxHack.txt": "SkyLightPlugins" } if os >= os_data.os_data.monterey else {}), + }, + }, + }, + "Metal Common": { + "Install": { + "/System/Library/Frameworks": { + "OpenCL.framework": "11.6", + "WebKit.framework": "11.6", + }, + "/System/Library/PrivateFrameworks": { + "AppleGVA.framework": "10.15.7", + "AppleGVACore.framework": "10.15.7", + }, + }, + }, + + "Legacy GVA": { + "Install": { + "/System/Library/PrivateFrameworks": { + "AppleGVA.framework": "10.13.6", + "AppleGVACore.framework": "10.15.7", + }, + }, + }, + + "Nvidia Tesla": { + "Install": { + "/System/Library/Extensions": { + "GeForceGA.bundle": "10.13.6", + "GeForceTesla.kext": "10.13.6", + "GeForceTeslaGLDriver.bundle": "10.13.6", + "GeForceTeslaVADriver.bundle": "10.13.6", + "NVDANV50HalTesla.kext": "10.13.6", + "NVDAResmanTesla.kext": "10.13.6", + **({ "NVDAStartup.kext": "12.0 Beta 6" } if os >= os_data.os_data.monterey else {}) + }, + }, + }, + "Nvidia Kepler": { + "Install": { + "/System/Library/Extensions": { + "GeForceAIRPlugin.bundle": "11.0 Beta 3", + "GeForceGLDriver.bundle": "11.0 Beta 3", + "GeForceMTLDriver.bundle": "11.0 Beta 3", + "GeForce.kext": "12.0 Beta 6", + "GeForceVADriver.bundle": "12.0 Beta 6", + "NVDAGF100Hal.kext": "12.0 Beta 6", + "NVDAGK100Hal.kext": "12.0 Beta 6", + "NVDAResman.kext": "12.0 Beta 6", + "NVDAStartup.kext": "12.0 Beta 6", + }, + }, + }, + "AMD TeraScale 1": { + "Install": { + "/System/Library/Extensions": { + "AMD2400Controller.kext": "10.13.6", + "AMD2600Controller.kext": "10.13.6", + "AMD3800Controller.kext": "10.13.6", + "AMD4600Controller.kext": "10.13.6", + "AMD4800Controller.kext": "10.13.6", + "AMDFramebuffer.kext": "10.13.6", + "AMDLegacyFramebuffer.kext": "10.13.6", + "AMDLegacySupport.kext": "10.13.6", + "AMDShared.bundle": "10.13.6", + "AMDSupport.kext": "10.13.6", + "ATIRadeonX2000.kext": "10.13.6", + "ATIRadeonX2000GA.plugin": "10.13.6", + "ATIRadeonX2000GLDriver.bundle": "10.13.6", + "ATIRadeonX2000VADriver.bundle": "10.13.6", + }, + }, + "Remove": { + "/System/Library/Extensions": [ + "AMD7000Controller.kext", + "AMD8000Controller.kext", + "AMD9000Controller.kext", + "AMD9500Controller.kext", + "AMD10000Controller.kext", + ], + }, + }, + "AMD TeraScale 2": { + "Processes": { + "defaults write com.apple.cmio CMIO_Unit_Input_ASC.DoNotUseOpenCL -bool true": False, + }, + "Install": { + "/System/Library/Extensions": { + "AMD5000Controller.kext": "10.13.6", + "AMD6000Controller.kext": "10.13.6", + "AMDFramebuffer.kext": "10.13.6", + "AMDLegacyFramebuffer.kext": "10.13.6", + "AMDLegacySupport.kext": "10.13.6", + "AMDRadeonVADriver.bundle": "10.13.6", + "AMDRadeonVADriver2.bundle": "10.13.6", + "AMDRadeonX3000.kext": "10.13.6", + "AMDRadeonX3000GLDriver.bundle": "10.13.6", + "AMDShared.bundle": "10.13.6", + "AMDSupport.kext": "10.13.6", + "IOAcceleratorFamily2.kext": "10.13.6", + "IOSurface.kext": "10.14.6", + }, + "/System/Library/Frameworks": { + "OpenCL.framework": "10.13.6", + "IOSurface.framework": f"10.14.6-{os}", + }, + "/System/Library/PrivateFrameworks": { + "GPUSupport.framework": "10.13.6", + "IOAccelerator.framework": f"10.13.6-{os}", + }, + }, + "Remove": { + "/System/Library/Extensions": { + "AppleCameraInterface.kext", # Specific to IOAccelerator downgrade + "AMD7000Controller.kext", + "AMD8000Controller.kext", + "AMD9000Controller.kext", + "AMD9500Controller.kext", + "AMD10000Controller.kext", + }, + }, + }, + "Intel Ironlake": { + "Install": { + "/System/Library/Extensions": { + "AppleIntelHDGraphics.kext": "10.13.6", + "AppleIntelHDGraphicsFB.kext": "10.13.6", + "AppleIntelHDGraphicsGA.plugin": "10.13.6", + "AppleIntelHDGraphicsGLDriver.bundle": "10.13.6", + "AppleIntelHDGraphicsVADriver.bundle": "10.13.6", + }, + }, + }, + "Intel Sandy Bridge": { + "Install": { + "/System/Library/Extensions": { + "AppleIntelHD3000Graphics.kext": "10.13.6", + "AppleIntelHD3000GraphicsGA.plugin": "10.13.6", + "AppleIntelHD3000GraphicsGLDriver.bundle": "10.13.6", + "AppleIntelHD3000GraphicsVADriver.bundle": "10.13.6", + "AppleIntelSNBGraphicsFB.kext": "10.13.6", # Add check for Board ID patched kext + "AppleIntelSNBVA.bundle": "10.13.6", + }, + }, + }, + "Intel Ivy Bridge": { + "Processes": { + "defaults write com.apple.coremedia hardwareVideoDecoder -string enable": False, + }, + "Install": { + "/System/Library/Extensions": { + "AppleIntelHD4000GraphicsGLDriver.bundle": "11.0 Beta 6", + "AppleIntelHD4000GraphicsMTLDriver.bundle": "11.0 Beta 6", + "AppleIntelHD4000GraphicsVADriver.bundle": "11.3 Beta 1", + "AppleIntelFramebufferCapri.kext": "11.4", + "AppleIntelHD4000Graphics.kext": "11.4", + "AppleIntelIVBVA.bundle": "11.4", + "AppleIntelGraphicsShared.bundle": "11.4", # libIGIL-Metal.dylib pulled from 11.0 Beta 6 + }, + }, + }, + }, + "Audio": { + "Legacy Realtek": { + # For iMac7,1 and iMac8,1 units with legacy Realtek HD Audio + "Install": { + "/System/Library/Extensions": { + "AppleHDA.kext": "10.11.6", + "IOAudioFamily.kext": "10.11.6", + }, + }, + "Remove": { + "/System/Library/Extensions": [ + "AppleVirtIO.kext", + "AppleVirtualGraphics.kext", + "AppleVirtualPlatform.kext", + "ApplePVPanic.kext", + "AppleVirtIOStorage.kext", + ], + }, + }, + # For Mac Pros with non-UGA/GOP GPUs + "Legacy Non-GOP": { + "Install": { + "/System/Library/Extensions": { + "AppleHDA.kext": "10.13.6", + }, + }, + }, + }, + "Networking": { + "Legacy WiFi": { + "Install": { + "/usr/libexec": { + "airportd": "11.5.2", + }, + "/System/Library/CoreServices": { + "WiFiAgent.app": "11.5.2", + }, + }, + "Install Non-Root": { + "/Library/Application Support/SkyLightPlugins": { + **({ "CoreWLAN.dylib": "SkyLightPlugins" } if os >= os_data.os_data.monterey else {}), + **({ "CoreWLAN.txt": "SkyLightPlugins" } if os >= os_data.os_data.monterey else {}), + }, + }, + }, + }, + "Brightness": { + "Legacy Brightness": { + "Install": { + "/System/Library/Extensions": { + "AppleBacklight.kext": "10.12.6", + "AppleBacklightExpert.kext": "10.12.6", + }, + "/System/Library/PrivateFrameworks": { + "DisplayServices.framework": "10.12.6", + }, + }, + "Remove": { + "/System/Library/Extensions/AppleGraphicsControl.kext/Contents/PlugIns": [ + "AGDCBacklightControl.kext", + ], + }, + }, + }, + "Miscellaneous": { + "Legacy GMUX": { + "Install": { + "/System/Library/Extensions/AppleGraphicsControl.kext/Contents/PlugIns": { + "AppleMuxControl.kext": "10.12.6", + }, + }, + "Remove": { + "/System/Library/Extensions": [ + "AppleBacklight.kext", + ], + "/System/Library/Extensions/AppleGraphicsControl.kext/Contents/PlugIns": [ + "AGDCBacklightControl.kext", + "AppleMuxControl.kext", + ], + }, + }, + "Legacy Keyboard Backlight": { + "Processes": { + "defaults write /Library/Preferences/.GlobalPreferences.plist Moraea_BacklightHack -bool true": True, + }, + }, + }, + } + + return sys_patch_dict \ No newline at end of file diff --git a/gui/gui_main.py b/gui/gui_main.py index c2790e01b..6ac81056f 100644 --- a/gui/gui_main.py +++ b/gui/gui_main.py @@ -899,7 +899,7 @@ class wx_python_gui: # Download resources sys.stdout=menu_redirect.RedirectLabel(self.developer_note) - download_result, os_ver, extensions_link, framework_link = sys_patch_download.grab_patcher_support_pkg(self.constants).download_files() + download_result, os_ver, link = sys_patch_download.grab_patcher_support_pkg(self.constants).download_files() sys.stdout=sys.__stdout__ if download_result is None: diff --git a/resources/constants.py b/resources/constants.py index 80f71b765..1b7e2e515 100644 --- a/resources/constants.py +++ b/resources/constants.py @@ -15,7 +15,7 @@ class Constants: def __init__(self): # Patcher Versioning self.patcher_version = "0.4.5" # OpenCore-Legacy-Patcher - self.patcher_support_pkg_version = "0.3.9" # PatcherSupportPkg + self.patcher_support_pkg_version = "0.4.0" # PatcherSupportPkg self.url_patcher_support_pkg = "https://github.com/dortania/PatcherSupportPkg/releases/download/" self.nightly_url_patcher_support_pkg = "https://nightly.link/dortania/PatcherSupportPkg/workflows/build/master/" self.discord_link = "https://discord.gg/rqdPgH8xSN" @@ -571,167 +571,14 @@ class Constants: return self.payload_path / Path("AutoPkg-Assets.pkg.zip") # Apple Payloads Paths - @property - def payload_apple_root_path_zip(self): - return self.payload_path / Path("Apple.zip") + def payload_local_binaries_root_path(self): + return self.payload_path / Path("Universal-Binaries") @property - def payload_universal_extensions_zip_path(self): - return self.payload_path / Path("Universal-Extensions.zip") + def payload_local_binaries_root_path_zip(self): + return self.payload_path / Path("Universal-Binaries.zip") - @property - def payload_apple_root_path(self): - return self.payload_path / Path("Apple") - - @property - def payload_apple_kexts_path(self): - return self.payload_path / Path("Universal-Extensions") - - @property - def payload_apple_coreservices_path(self): - return self.payload_apple_root_path / Path("CoreServices") - - @property - def payload_apple_usr_path(self): - return self.payload_apple_root_path / Path("usr") - - @property - def payload_apple_libexec_path(self): - return self.payload_apple_usr_path / Path("libexec") - - @property - def payload_apple_application_support(self): - return self.payload_apple_root_path / Path("Application Support") - - @property - def payload_apple_private_path(self): - return self.payload_apple_root_path / Path("private") - - @property - def payload_apple_etc_path(self): - return self.payload_apple_private_path / Path("etc") - - @property - def payload_apple_frameworks_path(self): - return self.payload_apple_root_path / Path("Frameworks") - - @property - def payload_apple_frameworks_path_accel(self): - return self.payload_apple_frameworks_path / Path("Graphics-Acceleration-Non-Metal") - - @property - def payload_apple_frameworks_path_accel_ts2(self): - return self.payload_apple_frameworks_path / Path("Graphics-Acceleration-TeraScale-2") - - @property - def payload_apple_frameworks_path_accel_ivy(self): - return self.payload_apple_frameworks_path / Path("Graphics-Acceleration-Ivy-Bridge") - - @property - def payload_apple_frameworks_path_accel_kepler(self): - return self.payload_apple_frameworks_path / Path("Graphics-Acceleration-Kepler") - - @property - def payload_apple_lauchd_path(self): - return self.payload_apple_root_path / Path("LaunchDaemons") - - @property - def payload_apple_private_frameworks_path(self): - return self.payload_apple_root_path / Path("PrivateFrameworks") - - @property - def payload_apple_private_frameworks_path_accel(self): - return self.payload_apple_private_frameworks_path / Path("Graphics-Acceleration-Non-Metal") - - @property - def payload_apple_private_frameworks_path_accel_ts2(self): - return self.payload_apple_private_frameworks_path / Path("Graphics-Acceleration-TeraScale-2") - - @property - def payload_apple_private_frameworks_path_accel_ivy(self): - return self.payload_apple_private_frameworks_path / Path("Graphics-Acceleration-Ivy-Bridge") - - @property - def payload_apple_private_frameworks_path_brightness(self): - return self.payload_apple_private_frameworks_path / Path("Brightness-Control") - - @property - def payload_apple_private_frameworks_path_legacy_drm(self): - return self.payload_apple_private_frameworks_path / Path("Legacy-GVA") - - # Apple Extensions - # El Capitan Extensions - @property - def audio_path(self): - return self.payload_apple_kexts_path / Path("Audio") - - # High Sierra Extensions - @property - def audio_v2_path(self): - return self.payload_apple_kexts_path / Path("Audio-v2") - - # GPU Kexts and Bundles - - @property - def legacy_graphics(self): - return self.payload_apple_kexts_path / Path("Graphics-Acceleration") - - @property - def legacy_nvidia_path(self): - return self.legacy_graphics / Path("Nvidia-Tesla") - - @property - def legacy_nvidia_kepler_path(self): - return self.legacy_graphics / Path("Nvidia-Kepler") - - @property - def legacy_amd_path(self): - return self.legacy_graphics / Path("AMD-TeraScale") - - @property - def legacy_amd_path_ts2(self): - return self.legacy_graphics / Path("AMD-TeraScale-2") - - @property - def legacy_intel_gen1_path(self): - return self.legacy_graphics / Path("Intel-Gen5-Ironlake") - - @property - def legacy_intel_gen2_path(self): - return self.legacy_graphics / Path("Intel-Gen6-SandyBridge") - - @property - def legacy_intel_gen3_path(self): - return self.legacy_graphics / Path("Intel-Gen7-IvyBridge") - - @property - def legacy_general_path(self): - return self.legacy_graphics / Path("General-Patches") - - @property - def legacy_brightness(self): - return self.payload_apple_kexts_path / Path("Brightness-Control") - - @property - def legacy_mux_path(self): - return self.payload_apple_kexts_path / Path("Legacy-Mux") - - @property - def legacy_wifi_coreservices(self): - return self.payload_apple_coreservices_path / Path("Legacy-Wifi") - - @property - def legacy_wifi_libexec(self): - return self.payload_apple_libexec_path / Path("Legacy-Wifi") - - @property - def legacy_wifi_support(self): - return self.payload_apple_application_support / Path("Legacy-Wifi") - - @property - def legacy_dropbox_support(self): - return self.payload_apple_application_support / Path("Dropbox") sbm_values = [ "j137ap", # iMacPro1,1 diff --git a/resources/generate_smbios.py b/resources/generate_smbios.py index 188bd67a5..5377ebb7b 100644 --- a/resources/generate_smbios.py +++ b/resources/generate_smbios.py @@ -105,6 +105,13 @@ def find_model_off_board(board): return key return None +def find_board_off_model(model): + if model in smbios_data.smbios_dictionary: + return smbios_data.smbios_dictionary[model]["Board ID"] + else: + return None + + def check_firewire(model): # MacBooks never supported FireWire # Pre-Thunderbolt MacBook Airs as well @@ -116,4 +123,54 @@ def check_firewire(model): elif model.startswith("MacBook"): return False else: - return True \ No newline at end of file + return True + +def determine_best_board_id_for_sandy(current_board_id, gpus): + # This function is mainly for users who are either spoofing or using hackintoshes + # Generally hackintosh will use whatever the latest SMBIOS is, so we need to determine + # the best Board ID to patch inside of AppleIntelSNBGraphicsFB + + # Currently the kext supports the following models: + # MacBookPro8,1 - Mac-94245B3640C91C81 (13") + # MacBookPro8,2 - Mac-94245A3940C91C80 (15") + # MacBookPro8,3 - Mac-942459F5819B171B (17") + # MacBookAir4,1 - Mac-C08A6BB70A942AC2 (11") + # MacBookAir4,2 - Mac-742912EFDBEE19B3 (13") + # Macmini5,1 - Mac-8ED6AF5B48C039E1 + # Macmini5,2 - Mac-4BC72D62AD45599E (headless) + # Macmini5,3 - Mac-7BA5B2794B2CDB12 + # iMac12,1 - Mac-942B5BF58194151B (headless) + # iMac12,2 - Mac-942B59F58194171B (headless) + # Unknown(MBP) - Mac-94245AF5819B141B + # Unknown(iMac) - Mac-942B5B3A40C91381 (headless) + if current_board_id: + model = find_model_off_board(current_board_id) + if model: + if model.startswith("MacBook"): + try: + size = int(smbios_data.smbios_dictionary[model]["Screen Size"]) + except KeyError: + size = 13 # Assume 13 if it's missing + if model.startswith("MacBookPro"): + if size >= 17: + return find_board_off_model("MacBookPro8,3") + elif size >= 15: + return find_board_off_model("MacBookPro8,2") + else: + return find_board_off_model("MacBookPro8,1") + else: # MacBook and MacBookAir + if size >= 13: + return find_board_off_model("MacBookAir4,2") + else: + return find_board_off_model("MacBookAir4,1") + else: + # We're working with a desktop, so need to figure out whether the unit is running headless or not + if len(gpus) > 1: + # More than 1 GPU detected, assume headless + if model.startswith("Macmini"): + return find_board_off_model("Macmini5,2") + else: + return find_board_off_model("iMac12,2") + else: + return find_board_off_model("Macmini5,1") + return find_board_off_model("Macmini5,1") # Safest bet if we somehow don't know the model \ No newline at end of file diff --git a/resources/sys_patch.py b/resources/sys_patch.py index c3e95ff09..e8d86559f 100644 --- a/resources/sys_patch.py +++ b/resources/sys_patch.py @@ -11,8 +11,8 @@ import subprocess import zipfile from pathlib import Path -from resources import constants, utilities, generate_smbios, sys_patch_download, sys_patch_detect -from data import sip_data, sys_patch_data, os_data +from resources import constants, generate_smbios, utilities, sys_patch_download, sys_patch_detect +from data import os_data, sys_patch_dict class PatchSysVolume: @@ -26,7 +26,7 @@ class PatchSysVolume: self.root_supports_snapshot = utilities.check_if_root_is_apfs_snapshot() self.constants.root_patcher_succeded = False # Reset Variable each time we start - # GUI will detect hardware patches betfore starting PatchSysVolume() + # GUI will detect hardware patches before starting PatchSysVolume() # However the TUI will not, so allow for data to be passed in manually avoiding multiple calls if hardware_details is None: hardware_details = sys_patch_detect.detect_root_patch(self.computer.real_model, self.constants).detect_patch_set() @@ -68,14 +68,7 @@ class PatchSysVolume: else: self.mount_location = "" self.mount_location_data = "" - self.mount_coreservices = f"{self.mount_location}/System/Library/CoreServices" self.mount_extensions = f"{self.mount_location}/System/Library/Extensions" - self.mount_frameworks = f"{self.mount_location}/System/Library/Frameworks" - self.mount_lauchd = f"{self.mount_location}/System/Library/LaunchDaemons" - self.mount_private_frameworks = f"{self.mount_location}/System/Library/PrivateFrameworks" - self.mount_libexec = f"{self.mount_location}/usr/libexec" - self.mount_extensions_mux = f"{self.mount_location}/System/Library/Extensions/AppleGraphicsControl.kext/Contents/PlugIns/" - self.mount_private_etc = f"{self.mount_location_data}/private/etc" self.mount_application_support = f"{self.mount_location_data}/Library/Application Support" def find_mount_root_vol(self, patch): @@ -147,6 +140,7 @@ class PatchSysVolume: # - Check the output for 'KernelCache ID' to see if the cache was successfully rebuilt # kmutil notes: # - will return 71 on failure to build KCs + # - will return 31 on 'No binaries or codeless kexts were provided' # - will return -10 if the volume is missing (ie. unmounted by another process) if result.returncode != 0 or (self.constants.detected_os < os_data.os_data.catalina and "KernelCache ID" not in result.stdout.decode()): self.success_status = False @@ -191,26 +185,7 @@ class PatchSysVolume: print("- Unmounting Root Volume (Don't worry if this fails)") utilities.elevated(["diskutil", "unmount", self.root_mount_path], stdout=subprocess.PIPE).stdout.decode().strip().encode() - def delete_old_binaries(self, vendor_patch): - for delete_current_kext in vendor_patch: - delete_path = Path(self.mount_extensions) / Path(delete_current_kext) - if Path(delete_path).exists(): - print(f"- Deleting {delete_current_kext}") - utilities.process_status(utilities.elevated(["rm", "-R", delete_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - else: - print(f"- Couldn't find {delete_current_kext}, skipping") - def add_new_binaries(self, vendor_patch, vendor_location): - for add_current_kext in vendor_patch: - existing_path = Path(self.mount_extensions) / Path(add_current_kext) - if Path(existing_path).exists(): - print(f"- Found conflicting kext, Deleting Root Volume's {add_current_kext}") - utilities.process_status(utilities.elevated(["rm", "-R", existing_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - print(f"- Adding {add_current_kext}") - utilities.process_status(utilities.elevated(["cp", "-R", f"{vendor_location}/{add_current_kext}", self.mount_extensions], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - utilities.process_status(utilities.elevated(["chmod", "-Rf", "755", f"{self.mount_extensions}/{add_current_kext}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - utilities.process_status(utilities.elevated(["chown", "-Rf", "root:wheel", f"{self.mount_extensions}/{add_current_kext}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - def install_auto_patcher_launch_agent(self): # Installs the following: # - OpenCore-Patcher.app in /Library/Application Support/Dortania/ @@ -265,360 +240,192 @@ class PatchSysVolume: def clean_skylight_plugins(self): if (Path(self.mount_application_support) / Path("SkyLightPlugins/")).exists(): - print("- Found SkylightPlugins folder, removing") - utilities.process_status(utilities.elevated(["rm", "-rf", f"{self.mount_application_support}/SkyLightPlugins"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - - def add_brightness_patch(self): - self.delete_old_binaries(sys_patch_data.DeleteBrightness) - self.add_new_binaries(sys_patch_data.AddBrightness, self.constants.legacy_brightness) - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_private_frameworks_path_brightness}/", self.mount_private_frameworks], stdout=subprocess.PIPE) - utilities.process_status(utilities.elevated(["chmod", "-Rf", "755", f"{self.mount_private_frameworks}/DisplayServices.framework"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - utilities.process_status(utilities.elevated(["chown", "-Rf", "root:wheel", f"{self.mount_private_frameworks}/DisplayServices.framework"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - - def add_audio_patch(self): - if self.model in ["iMac7,1", "iMac8,1"]: - self.delete_old_binaries(sys_patch_data.DeleteVolumeControl) - self.add_new_binaries(sys_patch_data.AddVolumeControl, self.constants.audio_path) + print("- Found SkylightPlugins folder, removing old plugins") + utilities.process_status(utilities.elevated(["rm", "-Rf", f"{self.mount_application_support}/SkyLightPlugins"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + utilities.process_status(utilities.elevated(["mkdir", f"{self.mount_application_support}/SkyLightPlugins"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) else: - self.add_new_binaries(sys_patch_data.AddVolumeControlv2, self.constants.audio_v2_path) - - def add_wifi_patch(self): - print("- Merging Wireless CoreSerices patches") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.legacy_wifi_coreservices}/", self.mount_coreservices], stdout=subprocess.PIPE) - utilities.process_status(utilities.elevated(["chmod", "-Rf", "755", f"{self.mount_coreservices}/WiFiAgent.app"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - utilities.process_status(utilities.elevated(["chown", "-Rf", "root:wheel", f"{self.mount_coreservices}/WiFiAgent.app"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - print("- Merging Wireless usr/libexec patches") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.legacy_wifi_libexec}/", self.mount_libexec], stdout=subprocess.PIPE) - utilities.process_status(utilities.elevated(["chmod", "755", f"{self.mount_libexec}/airportd"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - utilities.process_status(utilities.elevated(["chown", "root:wheel", f"{self.mount_libexec}/airportd"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - - # dylib patch to resolve password crash prompt - # Note requires ASentientBot's SkyLight to function - # Thus Metal machines do not benefit from this patch, however install anyways as harmless - print("- Merging Wireless SkyLightPlugins") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.legacy_wifi_support}/", self.mount_application_support], stdout=subprocess.PIPE) - - def add_legacy_mux_patch(self): - self.delete_old_binaries(sys_patch_data.DeleteDemux) - print("- Merging Legacy Mux Kext patches") - utilities.process_status( - utilities.elevated(["cp", "-R", f"{self.constants.legacy_mux_path}/AppleMuxControl.kext", self.mount_extensions_mux], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - ) - - def add_legacy_keyboard_backlight_patch(self): - print("- Enabling Keyboard Backlight delay") - utilities.process_status( - utilities.elevated(["defaults", "write", "/Library/Preferences/.GlobalPreferences.plist", "Moraea_BacklightHack", "-bool", "true"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - ) - - def add_legacy_dropbox_patch(self): - print("- Merging DropboxHack SkyLightPlugins") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.legacy_dropbox_support}/", self.mount_application_support], stdout=subprocess.PIPE) - - def gpu_accel_legacy(self): - if self.constants.detected_os == os_data.os_data.mojave: - print("- Installing General Acceleration Kext patches for Mojave") - self.add_new_binaries(sys_patch_data.AddGeneralAccelMojave, self.constants.legacy_general_path) - elif self.constants.detected_os == os_data.os_data.catalina: - print("- Installing General Acceleration Kext patches for Catalina") - self.add_new_binaries(sys_patch_data.AddGeneralAccelCatalina, self.constants.legacy_general_path) - elif self.constants.detected_os in [os_data.os_data.big_sur, os_data.os_data.monterey]: - print("- Installing General Acceleration Kext patches for Big Sur/Monterey") - self.add_new_binaries(sys_patch_data.AddGeneralAccel, self.constants.legacy_general_path) - - # Nvidia - def gpu_accel_legacy_nvidia_master(self): - if self.constants.detected_os in [os_data.os_data.mojave, os_data.os_data.catalina]: - print("- Installing Nvidia Acceleration Kext patches for Mojave/Catalina") - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddNvidiaAccelLegacy, self.constants.legacy_nvidia_path) - elif self.constants.detected_os in [os_data.os_data.big_sur, os_data.os_data.monterey]: - print("- Installing Nvidia Acceleration Kext patches for Big Sur/Monterey") - self.delete_old_binaries(sys_patch_data.DeleteNvidiaAccel11) - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddNvidiaAccel11, self.constants.legacy_nvidia_path) - if self.constants.detected_os == os_data.os_data.monterey and self.constants.detected_os_minor > 0: - # Beta 7+ removes NVDAStartup - self.add_new_binaries(sys_patch_data.AddNvidiaTeslaAccel12, self.constants.legacy_nvidia_kepler_path) - else: - print("- Installing basic Nvidia Framebuffer Kext patches for generic OS") - self.add_new_binaries(sys_patch_data.AddNvidiaBrightness, self.constants.legacy_nvidia_path) - - # AMD/ATI - def gpu_accel_legacy_ts1_master(self): - if self.constants.detected_os in [os_data.os_data.mojave, os_data.os_data.catalina]: - print("- Installing TeraScale 1 Acceleration Kext patches for Mojave/Catalina") - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddAMDAccelLegacy, self.constants.legacy_amd_path) - elif self.constants.detected_os in [os_data.os_data.big_sur, os_data.os_data.monterey]: - print("- Installing TeraScale 1 Acceleration Kext patches for Big Sur/Monterey") - self.delete_old_binaries(sys_patch_data.DeleteAMDAccel11) - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddAMDAccel11, self.constants.legacy_amd_path) - else: - print("- Installing basic TeraScale 1 Framebuffer Kext patches for generic OS") - self.add_new_binaries(sys_patch_data.AddAMDBrightness, self.constants.legacy_amd_path) - - def gpu_accel_legacy_ts2_master(self): - if self.constants.detected_os in [os_data.os_data.mojave, os_data.os_data.catalina] and self.constants.allow_ts2_accel is True: - print("- Installing TeraScale 2 Acceleration Kext patches for Mojave/Catalina") - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddAMDAccelLegacy, self.constants.legacy_amd_path) - elif self.constants.detected_os in [os_data.os_data.big_sur, os_data.os_data.monterey] and self.constants.allow_ts2_accel is True: - print("- Installing TeraScale 2 Acceleration Kext patches for Big Sur") - self.delete_old_binaries(sys_patch_data.DeleteAMDAccel11) - self.delete_old_binaries(sys_patch_data.DeleteAMDAccel11TS2) - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddAMDAccel11, self.constants.legacy_amd_path) - else: - print("- Installing basic TeraScale 2 Framebuffer Kext patches for generic OS") - self.add_new_binaries(sys_patch_data.AddAMDBrightness, self.constants.legacy_amd_path) - - # Intel - def gpu_accel_legacy_ironlake_master(self): - if self.constants.detected_os in [os_data.os_data.mojave, os_data.os_data.catalina]: - print("- Installing Ironlake Acceleration Kext patches for Mojave/Catalina") - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddIntelGen1Accel, self.constants.legacy_intel_gen1_path) - elif self.constants.detected_os in [os_data.os_data.big_sur, os_data.os_data.monterey]: - print("- Installing Ironlake Acceleration Kext patches for Big Sur/Monterey") - self.delete_old_binaries(sys_patch_data.DeleteNvidiaAccel11) - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddIntelGen1Accel, self.constants.legacy_intel_gen1_path) - else: - print("- Installing basic Ironlake Framebuffer Kext patches for generic OS") - self.add_new_binaries(sys_patch_data.AddIntelGen1Accel, self.constants.legacy_intel_gen1_path) - - def gpu_accel_legacy_sandybridge_master(self): - if self.constants.detected_os in [os_data.os_data.mojave, os_data.os_data.catalina]: - print("- Installing Sandy Bridge Acceleration Kext patches for Mojave/Catalina") - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddIntelGen2Accel, self.constants.legacy_intel_gen2_path) - self.gpu_accel_legacy_sandybridge_board_id() - elif self.constants.detected_os in [os_data.os_data.big_sur, os_data.os_data.monterey]: - print("- Installing Sandy Bridge Acceleration Kext patches for Big Sur/Monterey") - self.delete_old_binaries(sys_patch_data.DeleteNvidiaAccel11) - self.gpu_accel_legacy() - self.add_new_binaries(sys_patch_data.AddIntelGen2Accel, self.constants.legacy_intel_gen2_path) - self.gpu_accel_legacy_sandybridge_board_id() - self.gpu_accel_legacy_gva() - else: - print("- Installing basic Sandy Bridge Framebuffer Kext patches for generic OS") - self.add_new_binaries(sys_patch_data.AddIntelGen2Accel, self.constants.legacy_intel_gen2_path) - self.gpu_accel_legacy_sandybridge_board_id() - - def gpu_accel_legacy_sandybridge_board_id(self): - if self.constants.computer.reported_board_id in self.constants.sandy_board_id_stock: - print("- Using stock AppleIntelSNBGraphicsFB") - # TODO: Clean this function up - # add_new_binaries() and delete_old_binaries() have a bug when the passed array has a single element - # 'TypeError: expected str, bytes or os.PathLike object, not list' - # This is a temporary workaround to fix that - utilities.elevated(["rm", "-r", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB-Clean.kext"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - utilities.elevated(["rm", "-r", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB.kext"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - # Add kext - print("- Adding AppleIntelSNBGraphicsFB.kext") - utilities.elevated( - ["cp", "-r", f"{self.constants.legacy_intel_gen2_path}/AppleIntelSNBGraphicsFB-Clean.kext", f"{self.mount_extensions}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT - ) - # Rename kext - utilities.elevated( - ["mv", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB-Clean.kext", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB.kext"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT - ) - # Fix permissions - utilities.elevated(["chown", "-Rf", "root:wheel", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB.kext"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - utilities.elevated(["chmod", "-Rf", "755", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB.kext"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - - else: - # Adjust board ID for spoofs - print("- Using Board ID patched AppleIntelSNBGraphicsFB") - utilities.elevated(["rm", "-r", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB-Clean.kext"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - utilities.elevated(["rm", "-r", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB.kext"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - # Add kext - print("- Adding AppleIntelSNBGraphicsFB.kext") - utilities.elevated(["cp", "-r", f"{self.constants.legacy_intel_gen2_path}/AppleIntelSNBGraphicsFB.kext", f"{self.mount_extensions}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - # Fix permissions - utilities.elevated(["chown", "-Rf", "root:wheel", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB.kext"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - utilities.elevated(["chmod", "-Rf", "755", f"{self.mount_extensions}/AppleIntelSNBGraphicsFB.kext"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - - def gpu_framebuffer_ivybridge_master(self): - if self.constants.detected_os == os_data.os_data.monterey: - print("- Installing IvyBridge Acceleration Kext patches for Monterey") - self.add_new_binaries(sys_patch_data.AddIntelGen3Accel, self.constants.legacy_intel_gen3_path) - if self.validate is False: - print("- Fixing Acceleration in CoreMedia") - utilities.process_status(subprocess.run(["defaults", "write", "com.apple.coremedia", "hardwareVideoDecoder", "-string", "enable"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) - print("- Merging Ivy Bridge Frameworks") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_frameworks_path_accel_ivy}/", self.mount_frameworks], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - print("- Merging Ivy Bridge PrivateFrameworks") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_private_frameworks_path_accel_ivy}/", self.mount_private_frameworks], stdout=subprocess.PIPE) - else: - print("- Installing basic Ivy Bridge Kext patches for generic OS") - self.add_new_binaries(sys_patch_data.AddIntelGen3Accel, self.constants.legacy_intel_gen3_path) - - def gpu_framebuffer_kepler_master(self): - if self.constants.detected_os == os_data.os_data.monterey: - print("- Installing Kepler Acceleration Kext patches for Monterey") - self.add_new_binaries(sys_patch_data.AddNvidiaKeplerAccel11, self.constants.legacy_nvidia_kepler_path) - print("- Merging Kepler Frameworks") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_frameworks_path_accel_kepler}/", self.mount_frameworks], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - else: - print("- Installing Kepler Kext patches for generic OS") - self.add_new_binaries(sys_patch_data.AddNvidiaKeplerAccel11, self.constants.legacy_nvidia_kepler_path) - - def gpu_accel_legacy_gva(self): - print("- Merging AppleGVA Hardware Accel patches for non-Metal") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_private_frameworks_path_legacy_drm}/", self.mount_private_frameworks], stdout=subprocess.PIPE) - - def gpu_accel_legacy_extended(self): - if self.constants.detected_os == os_data.os_data.monterey: - self.add_legacy_dropbox_patch() - - if self.legacy_keyboard_backlight is True: - self.add_legacy_keyboard_backlight_patch() - - print("- Merging general legacy Frameworks") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_frameworks_path_accel}/", self.mount_frameworks], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - if self.constants.detected_os > os_data.os_data.big_sur: - print("- Merging Monterey WebKit patch") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_frameworks_path_accel_ivy}/", self.mount_frameworks], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - - print("- Merging general legacy PrivateFrameworks") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_private_frameworks_path_accel}/", self.mount_private_frameworks], stdout=subprocess.PIPE) - if self.constants.detected_os > os_data.os_data.catalina: - # With PatcherSupportPkg v0.2.0, IOHID-Fixup.plist is deprecated and integrated into SkyLight patch set - if (Path(self.mount_lauchd) / Path("IOHID-Fixup.plist")).exists(): - print("- Stripping legacy IOHID-Fixup.plist") - utilities.process_status( - utilities.elevated(["rm", "-f", f"{self.mount_lauchd}/IOHID-Fixup.plist"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - ) - else: - print("- Disabling Library Validation") - utilities.process_status( - utilities.elevated( - ["defaults", "write", "/Library/Preferences/com.apple.security.libraryvalidation.plist", "DisableLibraryValidation", "-bool", "true"], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - ) - ) - - def gpu_accel_legacy_extended_ts2(self): - print("- Merging TeraScale 2 legacy Frameworks") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_frameworks_path_accel_ts2}/", self.mount_frameworks], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - - print("- Merging TeraScale 2 PrivateFrameworks") - utilities.elevated(["rsync", "-r", "-i", "-a", f"{self.constants.payload_apple_private_frameworks_path_accel_ts2}/", self.mount_private_frameworks], stdout=subprocess.PIPE) - if self.validate is False: - print("- Fixing Acceleration in CMIO") - utilities.process_status(subprocess.run(["defaults", "write", "com.apple.cmio", "CMIO_Unit_Input_ASC.DoNotUseOpenCL", "-bool", "true"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + print("- Creating SkylightPlugins folder") + utilities.process_status(utilities.elevated(["mkdir", f"{self.mount_application_support}/SkyLightPlugins/"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + def patch_root_vol(self): print(f"- Running patches for {self.model}") - - # Before starting, clean out old plugins - self.clean_skylight_plugins() - - # Graphics patches - if self.nvidia_legacy is True: - print("- Installing legacy Nvidia Patches") - if self.constants.detected_os in self.constants.legacy_accel_support: - print("- Detected supported OS, installing Acceleration Patches") - self.added_legacy_kexts = True - else: - print("- Detected unsupported OS, installing Basic Framebuffer") - self.gpu_accel_legacy_nvidia_master() - - elif self.kepler_gpu is True: - print("- Installing Kepler Patches") - if self.constants.detected_os == os_data.os_data.monterey: - print("- Detected supported OS, installing Acceleration Patches") - else: - print("- Detected unsupported OS, installing Basic Framebuffer") - self.gpu_framebuffer_kepler_master() - - elif self.amd_ts1 is True: - print("- Installing legacy TeraScale 1 Patches") - if self.constants.detected_os in self.constants.legacy_accel_support: - print("- Detected supported OS, installing Acceleration Patches") - self.added_legacy_kexts = True - else: - print("- Detected unsupported OS, installing Basic Framebuffer") - self.gpu_accel_legacy_ts1_master() - - elif self.amd_ts2 is True: - print("- Installing legacy TeraScale 2 Patches") - if self.constants.detected_os in self.constants.legacy_accel_support: - print("- Detected supported OS, installing Acceleration Patches") - self.added_legacy_kexts = True - else: - print("- Detected unsupported OS, installing Basic Framebuffer") - self.gpu_accel_legacy_ts2_master() - - if self.iron_gpu is True: - print("- Installing legacy Ironlake Patches") - if self.constants.detected_os in self.constants.legacy_accel_support: - print("- Detected supported OS, installing Acceleration Patches") - self.added_legacy_kexts = True - else: - print("- Detected unsupported OS, installing Basic Framebuffer") - self.gpu_accel_legacy_ironlake_master() - - elif self.sandy_gpu is True: - print("- Installing legacy Sandy Bridge Patches") - if self.constants.detected_os in self.constants.legacy_accel_support: - print("- Detected supported OS, installing Acceleration Patches") - self.added_legacy_kexts = True - else: - print("- Detected unsupported OS, installing Basic Framebuffer") - self.gpu_accel_legacy_sandybridge_master() - - elif self.ivy_gpu is True: - print("- Installing Ivy Bridge Patches") - if self.constants.detected_os == os_data.os_data.monterey: - print("- Detected supported OS, installing Acceleration Patches") - else: - print("- Detected unsupported OS, installing Basic Framebuffer") - self.gpu_framebuffer_ivybridge_master() - - if self.amd_ts2 is True and self.constants.detected_os in self.constants.legacy_accel_support and self.constants.allow_ts2_accel is True: - # TeraScale 2 patches must be installed after Intel HD3000 - self.add_new_binaries(sys_patch_data.AddAMDAccel11TS2, self.constants.legacy_amd_path_ts2) - - if self.added_legacy_kexts is True and self.constants.detected_os in self.constants.legacy_accel_support: - self.gpu_accel_legacy_extended() - if self.amd_ts2 is True and self.constants.allow_ts2_accel is True: - self.gpu_accel_legacy_extended_ts2() - - # Misc patches - if self.brightness_legacy is True: - print("- Installing legacy Brightness Control") - self.add_brightness_patch() - - if self.legacy_audio is True: - print("- Fixing Volume Control Support") - self.add_audio_patch() - - if self.legacy_wifi is True: - print("- Installing legacy Wireless support") - self.add_wifi_patch() - - if self.legacy_gmux is True: - print("- Installing Legacy Mux Brightness support") - self.add_legacy_mux_patch() + + self.execute_patchset(self.generate_patchset()) if self.constants.wxpython_variant is True and self.constants.detected_os >= os_data.os_data.big_sur: self.install_auto_patcher_launch_agent() - if self.validate is False: - self.rebuild_snapshot() + self.rebuild_snapshot() + + def generate_patchset(self): + all_hardware_patchset = sys_patch_dict.SystemPatchDictionary(self.constants.detected_os) + required_patches = {} + + print("- Creating Patch Set for Booted Hardware:") + if self.iron_gpu is True: + print(" - Adding Intel Ironlake Graphics Patchset") + required_patches.update({"Non-Metal Common": all_hardware_patchset["Graphics"]["Non-Metal Common"]}) + required_patches.update({"Intel Ironlake": all_hardware_patchset["Graphics"]["Intel Ironlake"]}) + if self.sandy_gpu is True: + print(" - Adding Intel Sandy Bridge Graphics Patchset") + required_patches.update({"Non-Metal Common": all_hardware_patchset["Graphics"]["Non-Metal Common"]}) + required_patches.update({"Legacy GVA": all_hardware_patchset["Graphics"]["Legacy GVA"]}) + required_patches.update({"Intel Sandy Bridge": all_hardware_patchset["Graphics"]["Intel Sandy Bridge"]}) + if self.ivy_gpu is True: + print(" - Adding Intel Ivy Bridge Graphics Patchset") + required_patches.update({"Metal Common": all_hardware_patchset["Graphics"]["Metal Common"]}) + required_patches.update({"Intel Ivy Bridge": all_hardware_patchset["Graphics"]["Intel Ivy Bridge"]}) + if self.nvidia_legacy is True: + print(" - Adding Nvidia Tesla Graphics Patchset") + required_patches.update({"Non-Metal Common": all_hardware_patchset["Graphics"]["Non-Metal Common"]}) + required_patches.update({"Nvidia Tesla": all_hardware_patchset["Graphics"]["Nvidia Tesla"]}) + if self.kepler_gpu is True: + print(" - Adding Nvidia Kepler Graphics Patchset") + required_patches.update({"Metal Common": all_hardware_patchset["Graphics"]["Metal Common"]}) + required_patches.update({"Nvidia Kepler": all_hardware_patchset["Graphics"]["Nvidia Kepler"]}) + if self.amd_ts1 is True: + print(" - Adding AMD TeraScale 1 Graphics Patchset") + required_patches.update({"Non-Metal Common": all_hardware_patchset["Graphics"]["Non-Metal Common"]}) + required_patches.update({"AMD TeraScale 1": all_hardware_patchset["Graphics"]["AMD TeraScale 1"]}) + if self.amd_ts2 is True: + print(" - Adding AMD TeraScale 2 Graphics Patchset") + required_patches.update({"Non-Metal Common": all_hardware_patchset["Graphics"]["Non-Metal Common"]}) + required_patches.update({"AMD TeraScale 2": all_hardware_patchset["Graphics"]["AMD TeraScale 2"]}) + if self.brightness_legacy is True: + print(" - Adding Legacy Brightness Patchset") + required_patches.update({"Legacy Brightness": all_hardware_patchset["Brightness"]["Legacy Brightness"]}) + if self.legacy_audio is True: + print(" - Adding Legacy Audio Patchset") + if self.model in ["iMac7,1", "iMac8,1"]: + required_patches.update({"Legacy Realtek": all_hardware_patchset["Audio"]["Legacy Realtek"]}) + else: + required_patches.update({"Legacy Non-GOP": all_hardware_patchset["Audio"]["Legacy Non-GOP"]}) + if self.legacy_wifi is True: + print(" - Adding Legacy WiFi Patchset") + required_patches.update({"Legacy WiFi": all_hardware_patchset["Networking"]["Legacy WiFi"]}) + if self.legacy_gmux is True: + print(" - Adding Legacy GMUX Patchset") + required_patches.update({"Legacy GMUX": all_hardware_patchset["Miscellaneous"]["Legacy GMUX"]}) + if self.legacy_keyboard_backlight: + print(" - Adding Legacy Keyboard Backlight Patchset") + required_patches.update({"Legacy Keyboard Backlight": all_hardware_patchset["Miscellaneous"]["Legacy Keyboard Backlight"]}) + + return required_patches + + + def execute_patchset(self, required_patches): + source_files_path = str(self.constants.payload_local_binaries_root_path) + print("- Running Preflight Checks before patching") + # Make sure old SkyLight plugins aren't being used + self.clean_skylight_plugins() + # Make sure SNB kexts are compatible with the host + if "Intel Sandy Bridge" in required_patches: + if self.computer.reported_board_id not in self.constants.sandy_board_id_stock: + print(f"- Found unspported Board ID {self.computer.reported_board_id}, performing AppleIntelSNBGraphicsFB bin patching") + board_to_patch = generate_smbios.determine_best_board_id_for_sandy(self.computer.reported_board_id, self.computer.gpus) + print(f"- Replacing {board_to_patch} with {self.computer.reported_board_id}") + + board_to_patch_hex = bytes.fromhex(board_to_patch.encode('utf-8').hex()) + reported_board_hex = bytes.fromhex(self.computer.reported_board_id.encode('utf-8').hex()) + + if len(board_to_patch_hex) != len(reported_board_hex): + print(f"- Error: Board ID {self.computer.reported_board_id} is not the same length as {board_to_patch}") + raise Exception("Host's Board ID is not the same length as the kext's Board ID, cannot patch!!!") + else: + path = source_files_path + "10.13.6/System/Library/Extensions/AppleIntelSNBGraphicsFB.kext/Contents/MacOS/AppleIntelSNBGraphicsFB" + if Path(path).exists: + with open(path, 'rb') as f: + data = f.read() + data = data.replace(board_to_patch_hex, reported_board_hex) + with open(path, 'wb') as f: + f.write(data) + else: + raise Exception("Failed to find AppleIntelSNBGraphicsFB.kext, cannot patch!!!") + + print("- Finished Preflight, starting patching") + for patch in required_patches: + print("- Installing Patchset: " + patch) + if "Remove" in required_patches[patch]: + for remove_patch_directory in required_patches[patch]["Remove"]: + print("- Remove Files at: " + remove_patch_directory) + for remove_patch_file in required_patches[patch]["Remove"][remove_patch_directory]: + destination_folder_path = str(self.mount_location) + remove_patch_directory + self.remove_file(destination_folder_path, remove_patch_file) + + if "Install" in required_patches[patch]: + for install_patch_directory in required_patches[patch]["Install"]: + print(f"- Handling Installs in: {install_patch_directory}") + for install_file in required_patches[patch]["Install"][install_patch_directory]: + source_folder_path = source_files_path + "/" + required_patches[patch]['Install'][install_patch_directory][install_file] + install_patch_directory + destination_folder_path = str(self.mount_location) + install_patch_directory + self.install_new_file(source_folder_path, destination_folder_path, install_file) + + if "Install Non-Root" in required_patches[patch]: + for install_patch_directory in required_patches[patch]["Install Non-Root"]: + print(f"- Handling Non-Root Installs in: {install_patch_directory}") + for install_file in required_patches[patch]["Install Non-Root"][install_patch_directory]: + source_folder_path = source_files_path + "/" + required_patches[patch]['Install Non-Root'][install_patch_directory][install_file] + install_patch_directory + destination_folder_path = str(self.mount_location_data) + install_patch_directory + self.install_new_file(source_folder_path, destination_folder_path, install_file) + + if "Processes" in required_patches[patch]: + for process in required_patches[patch]["Processes"]: + # Some processes need sudo, however we cannot directly call sudo in some scenarios + # Instead, call elevated funtion and strip sudo from argument + process_array = process.split(" ") + if required_patches[patch]["Processes"][process] is True: + utilities.process_status(utilities.elevated(process_array, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + else: + utilities.process_status(subprocess.run(process_array, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + + def install_new_file(self, source_folder, destination_folder, file_name): + # .frameworks are merged + # .kexts and .apps are deleted and replaced + file_name_str = str(file_name) + if file_name_str.endswith(".kext") or file_name_str.endswith(".app") or file_name_str.endswith(".bundle") or file_name_str.endswith(".plugin"): + if Path(destination_folder + "/" + file_name).exists(): + print(f" - Found existing {file_name}, overwritting...") + utilities.process_status(utilities.elevated(["rm", "-R", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + else: + print(" - Installing: " + file_name) + utilities.process_status(utilities.elevated(["cp", "-R", f"{source_folder}/{file_name}", destination_folder], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + utilities.process_status(utilities.elevated(["chmod", "-Rf", "755", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + utilities.process_status(utilities.elevated(["chown", "-Rf", "root:wheel", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + + elif file_name_str.endswith(".framework"): + # merge with rsync + print(" - Installing: " + file_name) + utilities.elevated(["rsync", "-r", "-i", "-a", f"{source_folder}/{file_name}", f"{destination_folder}/"], stdout=subprocess.PIPE) + utilities.process_status(utilities.elevated(["chmod", "-Rf", "755", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + utilities.process_status(utilities.elevated(["chown", "-Rf", "root:wheel", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + else: + # Assume it's an individual file, replace as normal + if Path(destination_folder + "/" + file_name).exists(): + print(f" - Found existing {file_name}, overwritting...") + utilities.process_status(utilities.elevated(["rm", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + else: + print(" - Installing: " + file_name) + utilities.process_status(utilities.elevated(["cp", f"{source_folder}/{file_name}", destination_folder], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + utilities.process_status(utilities.elevated(["chmod", "755", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + utilities.process_status(utilities.elevated(["chown", "root:wheel", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + + def remove_file(self, destination_folder, file_name): + if Path(destination_folder + "/" + file_name).exists(): + print(" - Removing: " + file_name) + if Path(destination_folder + "/" + file_name).is_dir(): + utilities.process_status(utilities.elevated(["rm", "-R", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + else: + utilities.process_status(utilities.elevated(["rm", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) + def check_files(self): - if Path(self.constants.payload_apple_root_path).exists(): + if Path(self.constants.payload_local_binaries_root_path).exists(): print("- Found local Apple Binaries") if self.constants.gui_mode is False: patch_input = input("Would you like to redownload?(y/n): ") if patch_input in {"y", "Y", "yes", "Yes"}: - shutil.rmtree(Path(self.constants.payload_apple_root_path)) + shutil.rmtree(Path(self.constants.payload_local_binaries_root_path)) output = self.download_files() else: output = self.download_files() @@ -628,32 +435,26 @@ class PatchSysVolume: def download_files(self): if self.constants.gui_mode is False or "Library/InstallerSandboxes/" in str(self.constants.payload_path): - download_result, os_ver, extensions_link, framework_link = sys_patch_download.grab_patcher_support_pkg(self.constants).download_files() + download_result, os_ver, link = sys_patch_download.grab_patcher_support_pkg(self.constants).download_files() else: download_result = True - os_ver, extensions_link, framework_link = sys_patch_download.grab_patcher_support_pkg(self.constants).generate_pkg_link() + os_ver, link = sys_patch_download.grab_patcher_support_pkg(self.constants).generate_pkg_link() - if download_result and self.constants.payload_apple_root_path_zip.exists() and self.constants.payload_universal_extensions_zip_path.exists(): - print("- Download completed") - print("- Unzipping download...") + if download_result and self.constants.payload_local_binaries_root_path_zip.exists(): + print("- Unzipping binaries...") try: - utilities.process_status(subprocess.run(["unzip", self.constants.payload_apple_root_path_zip], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=self.constants.payload_path)) - utilities.process_status(subprocess.run(["unzip", self.constants.payload_universal_extensions_zip_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=self.constants.payload_path)) + utilities.process_status(subprocess.run(["ditto", "-V", "-x", "-k", "--sequesterRsrc", "--rsrc", self.constants.payload_local_binaries_root_path_zip, self.constants.payload_path])) print("- Renaming folder") - os.rename(self.constants.payload_path / Path(os_ver), self.constants.payload_apple_root_path) - Path(self.constants.payload_apple_root_path_zip).unlink() - Path(self.constants.payload_universal_extensions_zip_path).unlink() print("- Binaries downloaded to:") print(self.constants.payload_path) - return self.constants.payload_apple_root_path + return self.constants.payload_local_binaries_root_path except zipfile.BadZipFile: print("- Couldn't unzip") return None else: if self.constants.gui_mode is True: - print("- Download failed, please verify the below links work:") - print(framework_link) - print(extensions_link) + print("- Download failed, please verify the below link work:") + print(link) print("\nIf you continue to have issues, try using the Offline builds") print("located on Github next to the other builds") else: @@ -705,57 +506,6 @@ class PatchSysVolume: ] ) - def verify_patch_allowed(self): - sip = sip_data.system_integrity_protection.root_patch_sip_big_sur if self.constants.detected_os > os_data.os_data.catalina else sip_data.system_integrity_protection.root_patch_sip_mojave - if sip == sip_data.system_integrity_protection.root_patch_sip_mojave: - sip_value = "For Hackintoshes, please set csr-active-config to '03060000' (0x603)\nFor non-OpenCore Macs, please run 'csrutil disable' in RecoveryOS" - else: - sip_value = ( - "For Hackintoshes, please set csr-active-config to '02080000' (0x802)\nFor non-OpenCore Macs, please run 'csrutil disable' and \n'csrutil authenticated-root disable' in RecoveryOS" - ) - if self.sip_enabled is True: - print("\nCannot patch! Please disable System Integrity Protection (SIP).") - print("Disable SIP in Patcher Settings and Rebuild OpenCore\n") - print("Ensure the following bits are set for csr-active-config:") - print("\n".join(sip)) - print(sip_value) - - if self.sbm_enabled is True: - print("\nCannot patch! Please disable Apple Secure Boot.") - print("Disable SecureBootModel in Patcher Settings and Rebuild OpenCore") - print("For Hackintoshes, set SecureBootModel to Disabled") - - if self.fv_enabled is True: - print("\nCannot patch! Please disable FileVault.") - print("For OCLP Macs, please rebuild your config with 0.2.5 or newer") - print("For others, Go to System Preferences -> Security and disable FileVault") - - if self.amfi_enabled is True and self.amfi_must_disable is True: - print("\nCannot patch! Please disable AMFI.") - print("For Hackintoshes, please add amfi_get_out_of_my_way=1 to boot-args") - - if self.check_board_id is True and (self.computer.reported_board_id not in self.constants.sandy_board_id and self.computer.reported_board_id not in self.constants.sandy_board_id_stock): - print("\nCannot patch! Board ID not supported by AppleIntelSNBGraphicsFB") - print(f"Detected Board ID: {self.computer.reported_board_id}") - print("Please ensure your Board ID is listed below:") - for board in self.constants.sandy_board_id: - print(f"- {board} ({generate_smbios.find_model_off_board(board)})") - for board in self.constants.sandy_board_id_stock: - print(f"- {board} ({generate_smbios.find_model_off_board(board)})") - - self.bad_board_id = True - - if self.dosdude_patched is True: - print("\nCannot patch! Detected machine has already been patched by another patcher") - print("Please ensure your install is either clean or patched with OpenCore Legacy Patcher") - - if any( - [self.sip_enabled, self.sbm_enabled, self.fv_enabled, self.dosdude_patched, self.amfi_enabled if self.amfi_must_disable else False, self.bad_board_id if self.check_board_id else False] - ): - return False - else: - return True - # Entry Function def start_patch(self): print("- Starting Patch Process") @@ -772,9 +522,8 @@ class PatchSysVolume: change_menu = "y" print("- Continuing root patching") if change_menu in ["y", "Y"]: - print("- Continuing with Patching") print("- Verifying whether Root Patching possible") - if self.verify_patch_allowed() is True: + if sys_patch_detect.detect_root_patch(self.computer.real_model, self.constants).verify_patch_allowed(print_errors=not self.constants.wxpython_variant) is True: print("- Patcher is capable of patching") if self.check_files(): self.find_mount_root_vol(True) @@ -786,7 +535,7 @@ class PatchSysVolume: def start_unpatch(self): print("- Starting Unpatch Process") - if self.verify_patch_allowed() is True: + if sys_patch_detect.detect_root_patch(self.computer.real_model, self.constants).verify_patch_allowed(print_errors=not self.constants.wxpython_variant) is True: self.find_mount_root_vol(False) if self.constants.gui_mode is False: input("\nPress [ENTER] to return to the main menu") diff --git a/resources/sys_patch_detect.py b/resources/sys_patch_detect.py index dc4b4e04a..2689a9f7e 100644 --- a/resources/sys_patch_detect.py +++ b/resources/sys_patch_detect.py @@ -3,7 +3,7 @@ # Used when supplying data to sys_patch.py # Copyright (C) 2020-2022, Dhinak G, Mykola Grymalyuk -from resources import constants, device_probe, utilities +from resources import constants, device_probe, utilities, generate_smbios from data import model_array, os_data, sip_data class detect_root_patch: @@ -182,13 +182,52 @@ class detect_root_patch: return self.root_patch_dict - def verify_patch_allowed(self): + def verify_patch_allowed(self, print_errors=False): sip = sip_data.system_integrity_protection.root_patch_sip_big_sur if self.constants.detected_os > os_data.os_data.catalina else sip_data.system_integrity_protection.root_patch_sip_mojave self.sip_enabled, self.sbm_enabled, self.amfi_enabled, self.fv_enabled, self.dosdude_patched = utilities.patching_status(sip, self.constants.detected_os) + if sip == sip_data.system_integrity_protection.root_patch_sip_mojave: + sip_value = "For Hackintoshes, please set csr-active-config to '03060000' (0x603)\nFor non-OpenCore Macs, please run 'csrutil disable' in RecoveryOS" + else: + sip_value = ( + "For Hackintoshes, please set csr-active-config to '02080000' (0x802)\nFor non-OpenCore Macs, please run 'csrutil disable' and \n'csrutil authenticated-root disable' in RecoveryOS" + ) + if print_errors is True: + if self.sip_enabled is True: + print("\nCannot patch! Please disable System Integrity Protection (SIP).") + print("Disable SIP in Patcher Settings and Rebuild OpenCore\n") + print("Ensure the following bits are set for csr-active-config:") + print("\n".join(sip)) + print(sip_value) + + if self.sbm_enabled is True: + print("\nCannot patch! Please disable Apple Secure Boot.") + print("Disable SecureBootModel in Patcher Settings and Rebuild OpenCore") + print("For Hackintoshes, set SecureBootModel to Disabled") + + if self.fv_enabled is True: + print("\nCannot patch! Please disable FileVault.") + print("For OCLP Macs, please rebuild your config with 0.2.5 or newer") + print("For others, Go to System Preferences -> Security and disable FileVault") + + if self.amfi_enabled is True and self.amfi_must_disable is True: + print("\nCannot patch! Please disable AMFI.") + print("For Hackintoshes, please add amfi_get_out_of_my_way=1 to boot-args") + + if self.dosdude_patched is True: + print("\nCannot patch! Detected machine has already been patched by another patcher") + print("Please ensure your install is either clean or patched with OpenCore Legacy Patcher") if self.check_board_id is True and (self.computer.reported_board_id not in self.constants.sandy_board_id and self.computer.reported_board_id not in self.constants.sandy_board_id_stock): self.bad_board_id = True - + if print_errors is True: + print("\nCannot patch! Board ID not supported by AppleIntelSNBGraphicsFB") + print(f"Detected Board ID: {self.computer.reported_board_id}") + print("Please ensure your Board ID is listed below:") + for board in self.constants.sandy_board_id: + print(f"- {board} ({generate_smbios.find_model_off_board(board)})") + for board in self.constants.sandy_board_id_stock: + print(f"- {board} ({generate_smbios.find_model_off_board(board)})") + if any( [self.sip_enabled, self.sbm_enabled, self.fv_enabled, self.dosdude_patched, self.amfi_enabled if self.amfi_must_disable else False, self.bad_board_id if self.check_board_id else False] ): diff --git a/resources/sys_patch_download.py b/resources/sys_patch_download.py index 0577c1bac..5e3189d18 100644 --- a/resources/sys_patch_download.py +++ b/resources/sys_patch_download.py @@ -22,31 +22,23 @@ class grab_patcher_support_pkg: os_ver = "10.14-Mojave" else: raise Exception(f"Unsupported OS: {self.constants.detected_os}") - framework_link = f"{self.constants.url_patcher_support_pkg}{self.constants.patcher_support_pkg_version}/{os_ver}.zip" - extensions_link = f"{self.constants.url_patcher_support_pkg}{self.constants.patcher_support_pkg_version}/Universal-Extensions.zip" - return os_ver, extensions_link, framework_link + link = f"{self.constants.url_patcher_support_pkg}{self.constants.patcher_support_pkg_version}/Universal-Binaries.zip" + return os_ver, link def download_files(self): - os_ver, extensions_link, framework_link = self.generate_pkg_link() - if Path(self.constants.payload_apple_root_path).exists(): + os_ver, link = self.generate_pkg_link() + if Path(self.constants.payload_local_binaries_root_path).exists(): print("- Removing old Apple Binaries folder") # Delete folder - shutil.rmtree(self.constants.payload_apple_root_path) - if Path(self.constants.payload_apple_root_path_zip).exists(): - print("- Removing old Apple Binaries zip") - Path(self.constants.payload_apple_root_path_zip).unlink() + shutil.rmtree(self.constants.payload_local_binaries_root_path) download_result = None - local_framework_zip = Path(self.constants.payload_path) / f"{os_ver}.zip" - local_extensions_zip = Path(self.constants.payload_path) / f"Universal-Extensions.zip" - if Path(local_framework_zip).exists() and Path(local_extensions_zip).exists(): - print(f"- Found local {os_ver} zip, skipping download") - print(f"- Duplicating into Apple.zip") - shutil.copy(local_framework_zip, self.constants.payload_apple_root_path_zip) + local_zip = Path(self.constants.payload_path) / f"Universal-Binaries.zip" + if Path(local_zip).exists(): + print(f"- Found local {local_zip} zip, skipping download") download_result = True else: - print(f"- No local version found, donwloading...") - if utilities.download_file(extensions_link, self.constants.payload_universal_extensions_zip_path): - download_result = utilities.download_file(framework_link, self.constants.payload_apple_root_path_zip) + print(f"- No local version found, downloading...") + download_result = utilities.download_file(link, self.constants.payload_local_binaries_root_path_zip) - return download_result, os_ver, extensions_link, framework_link \ No newline at end of file + return download_result, os_ver, link \ No newline at end of file