diff --git a/.github/workflows/build-app.yml b/.github/workflows/build-app.yml index c11e75090..5003fc74b 100644 --- a/.github/workflows/build-app.yml +++ b/.github/workflows/build-app.yml @@ -13,10 +13,8 @@ jobs: steps: - uses: actions/checkout@v2 - # - name: Install Python Dependencies - # run: | - # python3 -m pip install -U pip - # pip3 install pyinstaller + - name: Install Python Dependencies + run: pip3 install --upgrade pyinstaller requests - run: pyinstaller OpenCore-Patcher.spec - run: ./after_pyinstaller.sh diff --git a/.github/workflows/build-cli.yml b/.github/workflows/build-cli.yml index 42e497d0d..24697942b 100644 --- a/.github/workflows/build-cli.yml +++ b/.github/workflows/build-cli.yml @@ -12,6 +12,9 @@ jobs: runs-on: self-hosted steps: - uses: actions/checkout@v2 + - name: Install Python Dependencies + run: pip3 install --upgrade pyinstaller requests + - run: pyinstaller OCLP-CLI.spec - run: cd dist; zip ../OCLP-CLI.zip OCLP-CLI - name: Upload Binary to Artifacts diff --git a/OCLP-CLI.command b/OCLP-CLI.command index 3c003e1a3..3a0ee9673 100755 --- a/OCLP-CLI.command +++ b/OCLP-CLI.command @@ -12,9 +12,10 @@ from pathlib import Path from Resources import Build, ModelArray, Constants, SysPatch, device_probe, Utilities -class OpenCoreLegacyPatcher(): +class OpenCoreLegacyPatcher: def __init__(self): print("Loading...") + Utilities.disable_cls() self.constants = Constants.Constants() self.constants.computer = device_probe.Computer.probe() self.computer = self.constants.computer @@ -35,29 +36,29 @@ class OpenCoreLegacyPatcher(): parser = argparse.ArgumentParser() # Generic building args - parser.add_argument('--build', help='Build OpenCore', action='store_true', required=False) - parser.add_argument('--verbose', help='Enable verbose boot', action='store_true', required=False) - parser.add_argument('--debug_oc', help='Enable OpenCore DEBUG', action='store_true', required=False) - parser.add_argument('--debug_kext', help='Enable kext DEBUG', action='store_true', required=False) - parser.add_argument('--skip_wifi', help='Skip wifi patches', action='store_true', required=False) - parser.add_argument('--hide_picker', help='Hide OpenCore picker', action='store_true', required=False) - parser.add_argument('--disable_sip', help='Disable SIP', action='store_true', required=False) - parser.add_argument('--disable_smb', help='Disable SecureBootModel', action='store_true', required=False) - parser.add_argument('--vault', help='Enable OpenCore Vaulting', action='store_true', required=False) - parser.add_argument('--support_all', help='Allow OpenCore on natively supported Models', action='store_true', required=False) - parser.add_argument('--firewire', help='Enable FireWire Booting', action='store_true', required=False) - parser.add_argument('--nvme', help='Enable NVMe Booting', action='store_true', required=False) - parser.add_argument('--disable_amfi', help='Disable AMFI', action='store_true', required=False) + parser.add_argument("--build", help="Build OpenCore", action="store_true", required=False) + parser.add_argument("--verbose", help="Enable verbose boot", action="store_true", required=False) + parser.add_argument("--debug_oc", help="Enable OpenCore DEBUG", action="store_true", required=False) + parser.add_argument("--debug_kext", help="Enable kext DEBUG", action="store_true", required=False) + parser.add_argument("--skip_wifi", help="Skip wifi patches", action="store_true", required=False) + parser.add_argument("--hide_picker", help="Hide OpenCore picker", action="store_true", required=False) + parser.add_argument("--disable_sip", help="Disable SIP", action="store_true", required=False) + parser.add_argument("--disable_smb", help="Disable SecureBootModel", action="store_true", required=False) + parser.add_argument("--vault", help="Enable OpenCore Vaulting", action="store_true", required=False) + parser.add_argument("--support_all", help="Allow OpenCore on natively supported Models", action="store_true", required=False) + parser.add_argument("--firewire", help="Enable FireWire Booting", action="store_true", required=False) + parser.add_argument("--nvme", help="Enable NVMe Booting", action="store_true", required=False) + parser.add_argument("--disable_amfi", help="Disable AMFI", action="store_true", required=False) # Building args requiring value values - parser.add_argument('--model', action='store', help='Set custom model', required=False) - parser.add_argument('--metal_gpu', action='store', help='Set Metal GPU Vendor', required=False) - parser.add_argument('--smbios_spoof', action='store', help='Set SMBIOS patching mode', required=False) + parser.add_argument("--model", action="store", help="Set custom model", required=False) + parser.add_argument("--metal_gpu", action="store", help="Set Metal GPU Vendor", required=False) + parser.add_argument("--smbios_spoof", action="store", help="Set SMBIOS patching mode", required=False) # SysPatch args - parser.add_argument('--patch_sys_vol', help='Patches root volume', action='store_true', required=False) - parser.add_argument('--unpatch_sys_vol', help='Unpatches root volume, EXPERIMENTAL', action='store_true', required=False) - parser.add_argument('--terascale_2', help='Enable TeraScale 2 Acceleration', action='store_true', required=False) + parser.add_argument("--patch_sys_vol", help="Patches root volume", action="store_true", required=False) + parser.add_argument("--unpatch_sys_vol", help="Unpatches root volume, EXPERIMENTAL", action="store_true", required=False) + parser.add_argument("--terascale_2", help="Enable TeraScale 2 Acceleration", action="store_true", required=False) args = parser.parse_args() @@ -138,6 +139,13 @@ class OpenCoreLegacyPatcher(): self.constants.custom_model = args.model self.set_defaults(self.constants.custom_model, False) self.build_opencore() + elif self.computer.real_model not in ModelArray.SupportedSMBIOS and self.constants.allow_oc_everywhere is False: + print( + """Your model is not supported by this patcher for running unsupported OSes!" + +If you plan to create the USB for another machine, please select the "Change Model" option in the menu.""" + ) + sys.exit(1) else: print(f"- Using detected model: {self.constants.computer.real_model}") self.build_opencore() @@ -183,11 +191,11 @@ class OpenCoreLegacyPatcher(): # Some models have a supported dGPU, others don't self.constants.sip_status = True # self.constants.secure_status = True # Monterey - #self.constants.disable_amfi = False # Signed bundles, Don't need to explicitly set currently + # self.constants.disable_amfi = False # Signed bundles, Don't need to explicitly set currently else: self.constants.sip_status = False # Unsigned kexts self.constants.secure_status = False # Modified root volume - #self.constants.disable_amfi = False # Signed bundles, Don't need to explicitly set currently + # self.constants.disable_amfi = False # Signed bundles, Don't need to explicitly set currently if model == "MacBook8,1": # MacBook8,1 has an odd bug where it cannot install Monterey with Minimal spoofing self.constants.serial_settings == "Moderate" @@ -204,7 +212,8 @@ class OpenCoreLegacyPatcher(): def install_opencore(self): Build.BuildOpenCore(self.constants.custom_model or self.constants.computer.real_model, self.constants).copy_efi() + OpenCoreLegacyPatcher() # Example arg for OCLP command line -# ./OCLP-CLI --build --verbose --debug_oc --debug_kext --model iMac11,2 \ No newline at end of file +# ./OCLP-CLI --build --verbose --debug_oc --debug_kext --model iMac11,2 diff --git a/OCLP-CLI.spec b/OCLP-CLI.spec index 31e1f3ce8..c849bc978 100644 --- a/OCLP-CLI.spec +++ b/OCLP-CLI.spec @@ -23,7 +23,7 @@ exe = EXE(pyz, a.binaries, a.zipfiles, a.datas, - [], + [('u', None, 'OPTION')], name='OCLP-CLI', debug=False, bootloader_ignore_signals=False, diff --git a/OpenCore-Patcher.command b/OpenCore-Patcher.command index 5b6a26af7..9505ef193 100755 --- a/OpenCore-Patcher.command +++ b/OpenCore-Patcher.command @@ -7,8 +7,7 @@ import platform import subprocess import sys -from Resources import (Build, CliMenu, Constants, ModelArray, SysPatch, - Utilities, device_probe) +from Resources import Build, CliMenu, Constants, ModelArray, SysPatch, Utilities, device_probe class OpenCoreLegacyPatcher: @@ -64,11 +63,11 @@ class OpenCoreLegacyPatcher: # Some models have a supported dGPU, others don't self.constants.sip_status = True # self.constants.secure_status = True # Monterey - #self.constants.disable_amfi = False # Signed bundles, Don't need to explicitly set currently + # self.constants.disable_amfi = False # Signed bundles, Don't need to explicitly set currently else: self.constants.sip_status = False # Unsigned kexts self.constants.secure_status = False # Modified root volume - #self.constants.disable_amfi = False # Signed bundles, Don't need to explicitly set currently + # self.constants.disable_amfi = False # Signed bundles, Don't need to explicitly set currently if model == "MacBook8,1": # MacBook8,1 has an odd bug where it cannot install Monterey with Minimal spoofing self.constants.serial_settings == "Moderate" diff --git a/Resources/Utilities.py b/Resources/Utilities.py index 80fa53e1f..2d92eb467 100644 --- a/Resources/Utilities.py +++ b/Resources/Utilities.py @@ -66,9 +66,11 @@ def csr_decode(csr_active_config): else: return True + def friendly_hex(integer: int): return "{:02X}".format(integer) + def patching_status(): # Detection for Root Patching sip_enabled = True # System Integrity Protection @@ -94,7 +96,18 @@ def patching_status(): return sip_enabled, sbm_enabled, amfi_enabled, fv_enabled +clear = True + + +def disable_cls(): + global clear + clear = False + + def cls(): + global clear + if not clear: + return if not check_recovery(): os.system("cls" if os.name == "nt" else "clear") else: @@ -117,6 +130,7 @@ def get_nvram(variable: str, uuid: str = None, *, decode: bool = False): value = value.strip(b"\0").decode() return value + def download_file(link, location): print("- Attempting download from following link:") print(link) @@ -140,6 +154,7 @@ def download_file(link, location): chunk = file.read(1024 * 1024 * 16) print(f"- Checksum: {checksum.hexdigest()}") + # def menu(title, prompt, menu_options, add_quit=True, auto_number=False, in_between=[], top_level=False): # return_option = ["Q", "Quit", None] if top_level else ["B", "Back", None] # if add_quit: menu_options.append(return_option)