Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
df61370b7c | ||
|
|
79ab028b0a | ||
|
|
444819b6a0 | ||
|
|
079a1ac2ff | ||
|
|
9113dab049 | ||
|
|
377b29f317 | ||
|
|
be9bb8bef1 | ||
|
|
51c3921cf8 | ||
|
|
6f5d5922dc | ||
|
|
fa5266b069 | ||
|
|
d619f15d36 | ||
|
|
3e9ec51ef5 | ||
|
|
0ac54c7ec4 | ||
|
|
6220d21a7b | ||
|
|
7661b52a0a | ||
|
|
8c9b47b4d5 |
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help notify of issues
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the issue is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Open app or .command '...'
|
||||
2. Enter '....'
|
||||
3. See error
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Build Folder**
|
||||
If applicable, add the generated OpenCore Build to help explain your problem.
|
||||
|
||||
**Hardware (please complete the following information):**
|
||||
- OS Running (ie. macOS 10.15.7, Catalina)
|
||||
- OS Patching (ie. macOS 11.2.3, Big Sur)
|
||||
- Model Patching (ie. MacPro5,1)
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
4
.github/workflows/main.yml
vendored
@@ -14,10 +14,6 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Python 3
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
python3 -m pip install -U pip
|
||||
|
||||
10
CHANGELOG.md
@@ -1,5 +1,15 @@
|
||||
# OpenCore Legacy Patcher changelog
|
||||
|
||||
## 0.0.18
|
||||
- Disable Vault by default due to breaking installations
|
||||
- Move BOOTx64.efi to System/Library/CoreServices/ to support GPT BootCamp installs
|
||||
- Disable verbose by default, still configurable by end-user
|
||||
- Remove `AppleInternal`(0x10) from SIP value
|
||||
- Add Mac Pro DRM patches for Metal GPUs
|
||||
- Force `Moderate` SMBIOS replacement for models without native APFS support
|
||||
- Re-enable legacy BCM94322 networking patches
|
||||
- Add custom drive icons for external drives
|
||||
|
||||
## 0.0.17
|
||||
- Fix build detection breaking on older OS
|
||||
|
||||
|
||||
161
OCLP-GUI.command
Executable file
@@ -0,0 +1,161 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Current GUI issues:
|
||||
#
|
||||
# - Settings:
|
||||
# - Broken toggle(Does not update variable)
|
||||
# - Missing toggles(OpenCore, Kext, Metal, Wifi, SMBIOS)
|
||||
# - Install OpenCore:
|
||||
# - Outright non-functional
|
||||
# - Pottential implementations would be to copy TUI's UI
|
||||
|
||||
from tkinter import *
|
||||
import subprocess, sys, time
|
||||
import tkinter as tk
|
||||
from Resources import build, ModelArray, Constants, utilities
|
||||
|
||||
|
||||
# Build main menu
|
||||
class GUI_MENU():
|
||||
def __init__(self):
|
||||
self.constants = Constants.Constants()
|
||||
self.current_model: str = None
|
||||
self.constants.gui_mode = True
|
||||
opencore_model: str = subprocess.run("nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-product".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
if not opencore_model.startswith("nvram: Error getting variable"):
|
||||
opencore_model = [line.strip().split(":oem-product ", 1)[1] for line in opencore_model.split("\n") if line.strip().startswith("4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:")][0]
|
||||
self.current_model = opencore_model
|
||||
else:
|
||||
self.current_model = subprocess.run("system_profiler SPHardwareDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
self.current_model = [line.strip().split(": ", 1)[1] for line in self.current_model.stdout.decode().split("\n") if line.strip().startswith("Model Identifier")][0]
|
||||
|
||||
# Update SMBIOS
|
||||
def update_model_clicked(self):
|
||||
current_model = self.entry_smbios.get()
|
||||
self.current_model = current_model.strip()
|
||||
if self.current_model in ModelArray.SupportedSMBIOS11:
|
||||
self.support = True
|
||||
self.support_string = "Model is supported"
|
||||
else:
|
||||
self.support = False
|
||||
self.support_string = "Model is unsupported"
|
||||
# Update Labels
|
||||
self.label_smbios.configure(text=f" Configured model: {self.current_model} ", font=(".AppleSystemUIFont", 15))
|
||||
self.label_support.configure(text=self.support_string, font=(".AppleSystemUIFont", 15))
|
||||
|
||||
def build_clicked(self):
|
||||
build_window = tk.Tk()
|
||||
build_window.title("Build Menu")
|
||||
build_window.minsize(250, 30)
|
||||
build_window.eval('tk::PlaceWindow %s center' % build_window.winfo_pathname(build_window.winfo_id()))
|
||||
support_build_2 = """Model is unsupported
|
||||
Please enter a supported model in the main menu.
|
||||
"""
|
||||
|
||||
build_label = tk.Label(build_window, text=support_build_2)
|
||||
if self.current_model in ModelArray.SupportedSMBIOS11:
|
||||
support_build_2 = """
|
||||
Model is supported, building EFI..
|
||||
If you see this text for more than 15 seconds, try restarting the build
|
||||
|
||||
If repeated, please open an issue on Github
|
||||
"""
|
||||
|
||||
build_label.configure(text=support_build_2)
|
||||
build_label.pack()
|
||||
build.BuildOpenCore(self.current_model, self.constants).build_opencore()
|
||||
support_build_2 = f"""Finished building OpenCore for model {self.current_model}!
|
||||
Built at:
|
||||
{self.constants.opencore_release_folder}
|
||||
|
||||
Close this window and select Install OpenCore 🔧
|
||||
"""
|
||||
build_label.configure(text=support_build_2)
|
||||
build_label.pack()
|
||||
else:
|
||||
support_build_2 = "Model is unsupported"
|
||||
build_label.pack()
|
||||
build_window.eval('tk::PlaceWindow %s center' % build_window.winfo_pathname(build_window.winfo_id()))
|
||||
|
||||
def settings_menu(self):
|
||||
|
||||
#def v_func(self, v_var):
|
||||
|
||||
|
||||
|
||||
settings_window = tk.Tk()
|
||||
settings_window.title("Settings Menu")
|
||||
settings_window.minsize(250, 20)
|
||||
|
||||
label_settings = tk.Label(settings_window, text="Patcher Settings")
|
||||
label_settings.place(relx=0.1, rely=0.1, anchor=SW)
|
||||
|
||||
local_verbose_debug = tk.BooleanVar()
|
||||
verbose_box = tk.Checkbutton(settings_window, text='Enable Verbose Booting', variable=local_verbose_debug)
|
||||
verbose_box.pack()
|
||||
local_verbose_debug.set(True)
|
||||
print(local_verbose_debug.get())
|
||||
verbose_box.local_verbose_debug = local_verbose_debug
|
||||
|
||||
|
||||
#local_verbose_debug..set(self.constants.verbose_debug)
|
||||
|
||||
settings_window.eval('tk::PlaceWindow %s center' % settings_window.winfo_pathname(settings_window.winfo_id()))
|
||||
|
||||
|
||||
|
||||
def main_menu(self):
|
||||
#self.identify_model()
|
||||
main_window = tk.Tk()
|
||||
main_window.title("Main Menu")
|
||||
window_height = 350
|
||||
window_width = 400
|
||||
main_window.resizable(False, False)
|
||||
screen_width = main_window.winfo_screenwidth()
|
||||
screen_height = main_window.winfo_screenheight()
|
||||
x_cordinate = int((screen_width/2) - (window_width/2))
|
||||
y_cordinate = int((screen_height/2) - (window_height/2))
|
||||
main_window.geometry("{}x{}+{}+{}".format(window_width, window_height, x_cordinate, y_cordinate))
|
||||
|
||||
|
||||
# Check if supported
|
||||
if self.current_model in ModelArray.SupportedSMBIOS11:
|
||||
self.support = True
|
||||
self.support_string = "Model is supported"
|
||||
else:
|
||||
self.support = False
|
||||
self.support_string = "Model is unsupported"
|
||||
|
||||
# Setup Labels
|
||||
self.label_header = tk.Label(text=f"OpenCore Legacy Patcher v{self.constants.patcher_version}", font=(".AppleSystemUIFont", 20))
|
||||
self.label_smbios = tk.Label(text=f"Detected model: {self.current_model}", font=(".AppleSystemUIFont", 15))
|
||||
self.label_support = tk.Label(text=self.support_string, font=(".AppleSystemUIFont", 15))
|
||||
self.label_build = tk.Label(text="🔨",font=(".AppleSystemUIFont", 50))
|
||||
self.label_install = tk.Label(text="🔧",font=(".AppleSystemUIFont", 50))
|
||||
|
||||
# Setup Text Entry
|
||||
self.entry_smbios = tk.Entry(width=12, justify='center')
|
||||
|
||||
# Setup Buttons
|
||||
self.button_update = tk.Button(text="Update SMBIOS", command=self.update_model_clicked)
|
||||
self.button_build = tk.Button(text="Build OpenCore", command=self.build_clicked)
|
||||
self.button_install = tk.Button(text="Install OpenCore")
|
||||
self.button_settings = tk.Button(text="⚙️", command=self.settings_menu)
|
||||
|
||||
# Place Labels
|
||||
self.label_header.place(relx=0.5, rely=0.0, anchor=N)
|
||||
self.label_smbios.place(relx=0.5, rely=0.1, anchor=N)
|
||||
self.label_support.place(relx=0.5, rely=0.2, anchor=N)
|
||||
self.entry_smbios.place(relx=0.5, rely=0.3, anchor=N)
|
||||
self.button_update.place(relx=0.5, rely=0.4, anchor=N)
|
||||
self.label_build.place(relx=0.25, rely=0.75, anchor=S)
|
||||
self.button_build.place(relx=0.25, rely=0.85, anchor=S)
|
||||
self.label_install.place(relx=0.75, rely=0.75, anchor=S)
|
||||
self.button_install.place(relx=0.75, rely=0.85, anchor=S)
|
||||
self.button_settings.place(relx=0.9, rely=0.175, anchor=S)
|
||||
|
||||
main_window.mainloop()
|
||||
|
||||
|
||||
|
||||
GUI_MENU().main_menu()
|
||||
@@ -20,6 +20,8 @@ class OpenCoreLegacyPatcher():
|
||||
self.current_model = [line.strip().split(": ", 1)[1] for line in self.current_model.stdout.decode().split("\n") if line.strip().startswith("Model Identifier")][0]
|
||||
self.constants.detected_os, _, _ = platform.mac_ver()
|
||||
self.constants.detected_os = float('.'.join(self.constants.detected_os.split('.')[:2]))
|
||||
if self.current_model in ModelArray.NoAPFSsupport:
|
||||
self.constants.serial_settings = "Moderate"
|
||||
|
||||
def build_opencore(self):
|
||||
build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).build_opencore()
|
||||
@@ -44,6 +46,8 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
if print_models in {"y", "Y", "yes", "Yes"}:
|
||||
print("\n".join(ModelArray.SupportedSMBIOS))
|
||||
input("Press any key to continue...")
|
||||
if self.constants.custom_model in ModelArray.NoAPFSsupport:
|
||||
self.constants.serial_settings = "Moderate"
|
||||
|
||||
def change_os(self):
|
||||
utilities.cls()
|
||||
@@ -150,7 +154,7 @@ Recommended for adanced users who want control how serials are handled
|
||||
Valid options:
|
||||
|
||||
1. Minimal:\tUse original serials and minimally update SMBIOS
|
||||
2. Moderate:\tReplave entire SMBIOS but keep original serials
|
||||
2. Moderate:\tReplace entire SMBIOS but keep original serials
|
||||
3. Advanced:\tReplace entire SMBIOS and generate new serials
|
||||
|
||||
Note: For new users we recommend leaving as default(1. Minimal)
|
||||
@@ -202,7 +206,7 @@ Note: For secuirty reasons, OpenShell will be disabled when Vault is set.
|
||||
utilities.header(["Set SIP and SecureBootModel"])
|
||||
print("""SIP and SecureBootModel are used to ensure proper OTA functionality,
|
||||
however to patch the root volume both of these must be disabled.
|
||||
Only disable is absolutely necessary.
|
||||
Only disable is absolutely necessary. SIP value = 0xFEF
|
||||
|
||||
Note: for minor changes, SIP can be adjusted in recovery like normal.
|
||||
Additionally, when disabling SIP via the patcher amfi_get_out_of_my_way=1
|
||||
|
||||
@@ -8,7 +8,7 @@ from pathlib import Path
|
||||
|
||||
class Constants:
|
||||
def __init__(self):
|
||||
self.patcher_version = "0.0.17"
|
||||
self.patcher_version = "0.0.18"
|
||||
self.opencore_commit = "7bb41aa - 2021-03-06"
|
||||
self.opencore_version = "0.6.8"
|
||||
self.lilu_version = "1.5.1"
|
||||
@@ -42,7 +42,7 @@ class Constants:
|
||||
self.opencore_debug = False
|
||||
self.opencore_build = "RELEASE"
|
||||
self.kext_debug = False
|
||||
self.verbose_debug = True
|
||||
self.verbose_debug = False
|
||||
self.os_support = 11.0
|
||||
self.min_os_support = 11.0
|
||||
self.max_os_support = 11.0
|
||||
@@ -52,7 +52,7 @@ class Constants:
|
||||
self.gui_mode = False
|
||||
self.serial_settings = "Minimal"
|
||||
self.showpicker = True
|
||||
self.vault = True
|
||||
self.vault = False
|
||||
self.sip_status = True
|
||||
self.secure_status = True
|
||||
self.detected_os = 0.0
|
||||
@@ -149,6 +149,8 @@ class Constants:
|
||||
@property
|
||||
def app_icon_path(self): return self.current_path / Path("OC-Patcher.icns")
|
||||
@property
|
||||
def icon_path(self): return self.payload_path / Path("Icon/.VolumeIcon.icns")
|
||||
def icon_path_external(self): return self.payload_path / Path("Icon/External/.VolumeIcon.icns")
|
||||
@property
|
||||
def icon_path_internal(self): return self.payload_path / Path("Icon/Internal/.VolumeIcon.icns")
|
||||
@property
|
||||
def gui_path(self): return self.payload_path / Path("Icon/Resources.zip")
|
||||
|
||||
@@ -185,48 +185,26 @@ WifiBCM94322 = [
|
||||
"MacBook5,2",
|
||||
"MacBookAir3,1",
|
||||
"MacBookAir3,2",
|
||||
"MacBookAir4,1",
|
||||
"MacBookAir4,2",
|
||||
"MacBookAir5,1",
|
||||
"MacBookAir5,2",
|
||||
"MacBookPro5,1",
|
||||
"MacBookPro5,2",
|
||||
"MacBookPro5,3",
|
||||
"MacBookPro5,4",
|
||||
"MacBookPro5,5",
|
||||
"MacBookPro7,1",
|
||||
"Dortania1,1"
|
||||
]
|
||||
|
||||
WifiBCM943224 = [
|
||||
"MacBook6,1",
|
||||
"MacBook7,1",
|
||||
"MacBookPro6,1",
|
||||
"MacBookPro6,2",
|
||||
"Macmini3,1",
|
||||
"Macmini4,1",
|
||||
"iMac9,1",
|
||||
"Dortania1,1"
|
||||
]
|
||||
|
||||
WifiBCM94331 = [
|
||||
"MacBook5,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBook5,2", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBook6,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBook7,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBookAir3,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBookAir3,2", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBookAir4,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookAir4,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookAir5,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookAir5,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookPro5,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBookPro5,2", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBookPro5,3", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBookPro5,4", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBookPro5,5", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBookPro6,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookPro6,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookPro7,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"MacBookPro8,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookPro8,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookPro8,3", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
@@ -234,14 +212,12 @@ WifiBCM94331 = [
|
||||
"MacBookPro9,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookPro10,1",# PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"MacBookPro10,2",# PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"Macmini3,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"Macmini4,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"Macmini5,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"Macmini5,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"Macmini5,3", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"Macmini6,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
"Macmini6,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
|
||||
#"iMac9,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
|
||||
"iMac13,1", # PciRoot(0x0)/Pci(0x1C,0x3)/Pci(0x0,0x0)
|
||||
"iMac13,2", # PciRoot(0x0)/Pci(0x1C,0x3)/Pci(0x0,0x0)
|
||||
"MacPro5,1", # PciRoot(0x0)/Pci(0x1C,0x5)/Pci(0x0,0x0)
|
||||
@@ -816,4 +792,24 @@ NoSATAPatch = [
|
||||
"iMac14,1",
|
||||
"iMac14,2",
|
||||
"iMac14,3",
|
||||
]
|
||||
|
||||
NoAPFSsupport = [
|
||||
"MacBook5,1",
|
||||
"MacBook5,2",
|
||||
"MacBookAir2,1",
|
||||
"MacBookPro4,1",
|
||||
"MacBookPro5,1",
|
||||
"MacBookPro5,2",
|
||||
"MacBookPro5,3",
|
||||
"MacBookPro5,4",
|
||||
"MacBookPro5,5",
|
||||
"Macmini3,1",
|
||||
"iMac7,1",
|
||||
"iMac8,1",
|
||||
"iMac9,1",
|
||||
"MacPro3,1",
|
||||
"MacPro4,1",
|
||||
"Xserve3,1",
|
||||
"Dortania1,1"
|
||||
]
|
||||
@@ -126,6 +126,9 @@ class BuildOpenCore:
|
||||
property_path = "PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)"
|
||||
print("- Applying fake ID for WiFi")
|
||||
self.config["DeviceProperties"]["Add"][property_path] = {"device-id": binascii.unhexlify("ba430000"), "compatible": "pci14e4,43ba"}
|
||||
if self.model in ModelArray.WifiBCM94322:
|
||||
self.enable_kext("IO80211Mojave.kext", self.constants.io80211mojave_version, self.constants.io80211mojave_path)
|
||||
self.get_kext_by_bundle_path("IO80211Mojave.kext/Contents/PlugIns/AirPortBrcm4331.kext")["Enabled"] = True
|
||||
|
||||
# CPUFriend
|
||||
pp_map_path = Path(self.constants.current_path) / Path(f"payloads/Kexts/PlatformPlugin/{self.model}/Info.plist")
|
||||
@@ -208,6 +211,10 @@ class BuildOpenCore:
|
||||
amd_patch(self)
|
||||
elif (self.constants.current_gpuv == "NVIDIA (0x10de)") & (self.constants.current_gpud in ModelArray.NVIDIAMXMGPUs):
|
||||
nvidia_patch(self)
|
||||
elif self.model in ModelArray.MacPro71:
|
||||
print("- Adding Mac Pro, Xserve DRM patches")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " shikigva=128 unfairgva=1 -wegtree"
|
||||
|
||||
|
||||
# Add OpenCanopy
|
||||
print("- Adding OpenCanopy GUI")
|
||||
@@ -250,7 +257,7 @@ class BuildOpenCore:
|
||||
self.get_tool_by__path("OpenShell.efi")["Enabled"] = False
|
||||
if self.constants.sip_status is False:
|
||||
print("- Disabling SIP")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["csr-active-config"] = binascii.unhexlify("FF0F0000")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["csr-active-config"] = binascii.unhexlify("EF0F0000")
|
||||
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["csr-active-config"]
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " amfi_get_out_of_my_way=1"
|
||||
if self.constants.secure_status is False:
|
||||
@@ -335,10 +342,13 @@ class BuildOpenCore:
|
||||
self.config["PlatformInfo"]["Generic"]["SystemUUID"] = str(uuid.uuid4()).upper()
|
||||
|
||||
if self.constants.serial_settings == "Moderate":
|
||||
print("- Using Moderate SMBIOS patching")
|
||||
moderate_serial_patch(self)
|
||||
elif self.constants.serial_settings == "Advanced":
|
||||
print("- Using Advanced SMBIOS patching")
|
||||
adanced_serial_patch(self)
|
||||
else:
|
||||
print("- Using Minimal SMBIOS patching")
|
||||
self.spoofed_model = self.model
|
||||
minimal_serial_patch(self)
|
||||
|
||||
@@ -544,18 +554,27 @@ Please build OpenCore first!"""
|
||||
# TODO: Remount if readonly
|
||||
partition_info = plistlib.loads(subprocess.run(f"diskutil info -plist {disk_identifier}s{response}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||
mount_path = Path(partition_info["MountPoint"])
|
||||
|
||||
disk_type = partition_info["BusProtocol"]
|
||||
utilities.cls()
|
||||
utilities.header(["Copying OpenCore"])
|
||||
|
||||
if mount_path.exists():
|
||||
if (mount_path / Path("EFI")).exists():
|
||||
print("- Removing preexisting EFI folder")
|
||||
shutil.rmtree(mount_path / Path("EFI"), onerror=rmtree_handler)
|
||||
if (mount_path / Path("EFI/OC")).exists():
|
||||
print("- Removing preexisting EFI/OC folder")
|
||||
shutil.rmtree(mount_path / Path("EFI/OC"), onerror=rmtree_handler)
|
||||
if (mount_path / Path("System")).exists():
|
||||
print("- Removing preexisting System folder")
|
||||
shutil.rmtree(mount_path / Path("System"), onerror=rmtree_handler)
|
||||
print("- Coping OpenCore onto EFI partition")
|
||||
shutil.copytree(self.constants.opencore_release_folder / Path("EFI"), mount_path / Path("EFI"))
|
||||
shutil.copy(self.constants.icon_path, mount_path)
|
||||
print("OpenCore transfer complete")
|
||||
shutil.copytree(self.constants.opencore_release_folder / Path("EFI/OC"), mount_path / Path("EFI/OC"))
|
||||
shutil.copytree(self.constants.opencore_release_folder / Path("System"), mount_path / Path("System"))
|
||||
if disk_type == "USB":
|
||||
print("- Adding External USB Drive icon")
|
||||
shutil.copy(self.constants.icon_path_external, mount_path)
|
||||
else:
|
||||
print("- Adding Internal Drive icon")
|
||||
shutil.copy(self.constants.icon_path_internal, mount_path)
|
||||
print("- OpenCore transfer complete")
|
||||
print("\nPress [Enter] to continue.\n")
|
||||
input()
|
||||
else:
|
||||
|
||||
@@ -97,6 +97,7 @@ module.exports = {
|
||||
children: [
|
||||
'TROUBLESHOOTING',
|
||||
'UNINSTALL',
|
||||
'ICNS',
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
@@ -15,6 +15,8 @@ Now that you've loaded OpenCore, now select Install macOS!:
|
||||

|
||||
|
||||
|
||||
After plenty of verbose booting, you will reach the installer screen! From there it's just like any normal macOS install.
|
||||
After plenty of verbose booting, you will reach the installer screen! From there it's just like any normal macOS install. For an example of how the boot process looks, see the following video:
|
||||
|
||||
* [OpenCore Legacy Patcher Boot Process](https://www.youtube.com/watch?v=AN3zsbQV_n4)
|
||||
|
||||
# Once installed and booting, head to [Post-Installation](./POST-INSTALL.md)
|
||||
105
docs/ICNS.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# Creating custom icons for OpenCore and Mac Boot Picker
|
||||
|
||||
For users who want to customize your setup to be more personal, OpenCore does allow for custom icons and images in the boot picker.
|
||||
|
||||
|
||||
* [Custom OpenCore icons](#custom-opencore-icons)
|
||||
* [Custom Mac Boot Picker icons](#custom-mac-boot-picker-icons)
|
||||
* [Installing updated icons](#installing-updated-icons)
|
||||
|
||||
|
||||
# Custom OpenCore icons
|
||||
|
||||
To generate custom OpenCore icons, you'll need the following:
|
||||
|
||||
* Images in PNG format
|
||||
* Each image, with the following res:
|
||||
* Cursor — Mouse cursor (mandatory, up to 144x144).
|
||||
* Selected — Selected item (mandatory, 144x144).
|
||||
* Selector — Selecting item (mandatory, up to 144x40).
|
||||
* Left — Scrolling left (mandatory, 40x40).
|
||||
* Right — Scrolling right (mandatory, 40x40).
|
||||
* HardDrive — Generic OS (mandatory, 128x128).
|
||||
* Background — Centred background image. (Recommended max size 1920x1080)
|
||||
* Apple — Apple OS (128x128).
|
||||
* AppleRecv — Apple Recovery OS (128x128).
|
||||
* AppleTM — Apple Time Machine (128x128).
|
||||
* Windows — Windows (128x128).
|
||||
* Other — Custom entry (see [Entries](https://dortania.github.io/docs/latest/Configuration.html), 128x128).
|
||||
* ResetNVRAM — Reset NVRAM system action or tool (128x128).
|
||||
* Shell — Entry with UEFI Shell name for e.g. OpenShell (128x128).
|
||||
* Tool — Any other tool (128x128).
|
||||
|
||||
Note, for each image we recommend having one of double the size. This ensures that icons are scaled correctly since .icns support dedicated images depending on HiDPI or not.
|
||||
|
||||
|
||||
Once you have a custom image you want to use(for example, as a background), download the [latest release of OpenCorePkg](https://github.com/acidanthera/OpenCorePkg/releases) and enter the `Utilities/icnspack/` folder:
|
||||
|
||||

|
||||
|
||||
Now `cd` this folder in terminal and run the following:
|
||||
|
||||
```sh
|
||||
./icnspack Background.icns <insert_x1_image> <insert_x2_image>
|
||||
```
|
||||
Once done, you'll see your custom icon generated in `icnspack`'s folder:
|
||||
|
||||

|
||||
|
||||
# Custom Mac Boot Picker icons
|
||||
|
||||
Custom boot picker icons is much more complicated on Legacy Macs, on late 2013+ Macs the [Custom OpenCore icons](#custom-opencore-icons) method will work just fine. However on many 2012 and older Macs, the icons generated will be incompatible with the firmware.
|
||||
|
||||
To generate legacy icons, you'll need the following:
|
||||
|
||||
* A machine running macOS 10.4 through 10.11
|
||||
* Icon Composer.app (Requires Apple Developer Account for official download)
|
||||
* Users without the developer account can find a mirrors here:
|
||||
* [Icon Composer 10.6](https://github.com/dortania/OpenCore-Legacy-Patcher/blob/main/docs/Icon-Composer-10.6.zip)
|
||||
* [Icon Composer 10.11](https://github.com/dortania/OpenCore-Legacy-Patcher/blob/main/docs/Icon-Composer-10.11.zip)
|
||||
* PNG Image you wish to convert
|
||||
|
||||
Head to [developer.apple's More Downloads page](https://developer.apple.com/download/more/) and search for `Graphics Tools` that is supported by your OS(note for 10.6 and older, the app is hidden inside `Developer Tools`):
|
||||
|
||||

|
||||
|
||||
Once downloaded, open the disk image and you'll find Icon Composer.app:
|
||||
|
||||

|
||||
|
||||
Now run the app and simply drag the images to each section as so:
|
||||
|
||||

|
||||
|
||||
Now save and export the new icns
|
||||
|
||||
# Installing updated icons
|
||||
|
||||
To install, please ensure that Vault is disabled when you built OpenCore. If you're unsure, simply rebuild OpenCore with the Patcher setting "Vault" set to false.
|
||||
|
||||
* <span style="color:red"> Warning</span>: Editing your OpenCore EFI incorrectly can result in a bricked install. Please ensure you have a natively supported version of macOS installed to boot into in case of issues.
|
||||
|
||||
Now that you've verified you can edit OpenCore safely, you'll need to mount the drive that OpenCore is stored on. To do this, download [MountEFI](https://github.com/corpnewt/MountEFI) and run it:
|
||||
|
||||

|
||||
|
||||
Select the drive you installed OpenCore to and mount it.
|
||||
|
||||
* [Updating OpenCore icons](#updating-opencore-icons)
|
||||
* [Updating Mac Boot Picker icons](#updating-mac-boot-picker-icons)
|
||||
|
||||
### Updating OpenCore icons
|
||||
|
||||
Head to `EFI/OC/Resources/Image/` on your drive and you'll see all the custom icons. For Background.icns, we need to ensure the file matches the theme OpenCore has set so we add the prefix `Modern` to it:
|
||||
|
||||

|
||||
|
||||
Now reboot and you should see your updated icon(s)!
|
||||
|
||||
### Updating Mac Boot Picker icons
|
||||
|
||||
To update the Mac Boot Picker icons is actually quite simple, on the root of your drive simply drop the icon onto the root of the drive with the name `.VolumeIcon.icns`
|
||||
|
||||

|
||||
|
||||
Now reboot and you'll see the new icon!
|
||||
BIN
docs/Icon-Composer-10.11.zip
Normal file
BIN
docs/Icon-Composer-10.6.zip
Normal file
@@ -16,6 +16,8 @@ The below table will list all supported and unsupported functions of the patcher
|
||||
* [Mac Pro](#mac-pro)
|
||||
* [Xserve](#xserve)
|
||||
|
||||
Note: In this patcher, Brightness Control is tied to GPU acceleration
|
||||
|
||||
### MacBook
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
@@ -24,9 +26,9 @@ The below table will list all supported and unsupported functions of the patcher
|
||||
| MacBook2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
|
||||
| MacBook3,1 | Late 2007 | ^^ | ^^ |
|
||||
| MacBook4,1 | Early 2008 | ^^ | ^^ |
|
||||
| MacBook5,1 | Late 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
|
||||
| MacBook5,1 | Late 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
|
||||
| MacBook5,2 | Early 2009 | ^^ | ^^ |
|
||||
| MacBook6,1 | Late 2009 | ^^ | ^^ |
|
||||
| MacBook6,1 | Late 2009 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/> |
|
||||
| MacBook7,1 | Mid-2010 | ^^ | ^^ |
|
||||
|
||||
### MacBook Air
|
||||
@@ -34,8 +36,8 @@ The below table will list all supported and unsupported functions of the patcher
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| MacBookAir1,1 | Early 2008 | <span style="color:red"> NO </span> | Requires SSE4.1 CPU |
|
||||
| MacBookAir2,1 | Late 2008 |<span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- No Wifi Patches implemented(yet) |
|
||||
| MacBookAir3,1 | Late 2010 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
|
||||
| MacBookAir2,1 | Late 2008 |<span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
|
||||
| MacBookAir3,1 | Late 2010 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented |
|
||||
| MacBookAir3,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir4,1 | Mid-2011 | ^^ | ^^ |
|
||||
| MacBookAir4,2 | ^^ | ^^ | ^^ |
|
||||
@@ -51,16 +53,16 @@ The below table will list all supported and unsupported functions of the patcher
|
||||
| MacBookPro2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
|
||||
| MacBookPro2,2 | Late 2006 | ^^ | ^^ |
|
||||
| MacBookPro3,1 | Mid-2007 | ^^ | - Requires SSE4.1 CPU |
|
||||
| MacBookPro4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- No Wifi Patches implemented(yet) |
|
||||
| MacBookPro5,1 | Late 2008 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
|
||||
| MacBookPro4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
|
||||
| MacBookPro5,1 | Late 2008 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented |
|
||||
| MacBookPro5,2 | Early 2009 | ^^ | ^^ |
|
||||
| MacBookPro5,3 | Mid-2009 | ^^ | ^^ |
|
||||
| MacBookPro5,4 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro5,5 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro6,1 | Mid-2010 | ^^ | ^^ |
|
||||
| MacBookPro6,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro7,1 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro8,1 | Early 2011 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- Ethernet Connection Issues |
|
||||
| MacBookPro7,1 | ^^ | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- Ethernet issues |
|
||||
| MacBookPro8,1 | Early 2011 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- Ethernet Connection Issues |
|
||||
| MacBookPro8,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro8,3 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro9,1 | Mid-2012 | ^^ | <span style="color:green"> Everything is supported</span> |
|
||||
@@ -74,9 +76,9 @@ The below table will list all supported and unsupported functions of the patcher
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| Macmini1,1 | Early 2006 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
|
||||
| Macmini2,1 | Mid-2007 | ^^ | 32-Bit Firmware limitation |
|
||||
| Macmini3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
|
||||
| Macmini3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented |
|
||||
| Macmini4,1 | Mid-2010 | ^^ | ^^ |
|
||||
| Macmini5,1 | Mid-2011 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- Ethernet Connection Issues |
|
||||
| Macmini5,1 | Mid-2011 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- Ethernet Connection Issues |
|
||||
| Macmini5,2 | ^^ | ^^ | ^^ |
|
||||
| Macmini5,3 | ^^ | ^^ | ^^ |
|
||||
| Macmini6,1 | Late 2012 | ^^ | <span style="color:green"> Everything is supported</span> |
|
||||
@@ -91,11 +93,11 @@ The below table will list all supported and unsupported functions of the patcher
|
||||
| iMac5,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
|
||||
| iMac5,2 | ^^ | ^^ | ^^ |
|
||||
| iMac6,1 | ^^ | ^^ | ^^ |
|
||||
| iMac7,1 | Mid-2007 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- No Wifi Patches implemented (yet) |
|
||||
| iMac8,1 | Early 2008 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- No Wifi Patches implemented (yet) |
|
||||
| iMac9,1 | Early 2009 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
|
||||
| iMac10,1 | Late 2009 | ^^ | ^^ |
|
||||
| iMac11,1 | ^^ | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- Ethernet Connection Issues |
|
||||
| iMac7,1 | Mid-2007 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
|
||||
| iMac8,1 | Early 2008 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
|
||||
| iMac9,1 | Early 2009 | ^^ | ^^ |
|
||||
| iMac10,1 | Late 2009 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented |
|
||||
| iMac11,1 | ^^ | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- Ethernet Connection Issues |
|
||||
| iMac11,2 | Mid-2010 | ^^ | ^^ |
|
||||
| iMac11,3 | ^^ | ^^ | ^^ |
|
||||
| iMac12,1 | Mid-2011 | ^^ | ^^ |
|
||||
@@ -112,7 +114,7 @@ The below table will list all supported and unsupported functions of the patcher
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| MacPro1,1 | Mid-2006 | <span style="color:red"> NO </span> | 32-Bit Firmware limitation |
|
||||
| MacPro2,1 | Mid-2007 | ^^ | ^^ |
|
||||
| MacPro3,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No AppleHDA(Audio) Patching implemented(yet) |
|
||||
| MacPro3,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No AppleHDA(Audio) Patching implemented |
|
||||
| MacPro4,1 | Early 2009 | ^^ | <span style="color:green"> Everything is supported as long as GPU is Metal capable </span> |
|
||||
| MacPro5,1 | Mid-2010 | ^^ | ^^ |
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ features:
|
||||
- title: Built with security in mind
|
||||
details: Supporting System Integrity Protection(SIP), FileVault 2, .im4m Secure Boot and Vaulting. You're just as secure as a supported Mac
|
||||
- title: Native OTA updates
|
||||
details: Install updates the moment the come out just like on a supported Mac, and no more 12GB+ updates.
|
||||
details: Install updates the moment they come out just like on a supported Mac, and no more 12GB+ updates.
|
||||
- title: Zero firmware patching
|
||||
details: No need to patch APFS ROM support, all protocol upgrades are done in memory and never permanent.
|
||||
footer: Copyright © Dortania 2020-2021
|
||||
|
||||
BIN
images/OC-Picker-External.png
Normal file
|
After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |
BIN
images/background-moved.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
images/graphics-download.png
Normal file
|
After Width: | Height: | Size: 374 KiB |
BIN
images/graphics-open.png
Normal file
|
After Width: | Height: | Size: 514 KiB |
BIN
images/icns-sl-save.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
images/icnspack-done.png
Normal file
|
After Width: | Height: | Size: 505 KiB |
BIN
images/icnspack-folder.png
Normal file
|
After Width: | Height: | Size: 493 KiB |
BIN
images/icon-SL.png
Normal file
|
After Width: | Height: | Size: 232 KiB |
BIN
images/mac-icns-drive.png
Normal file
|
After Width: | Height: | Size: 394 KiB |
BIN
images/mountefi.png
Normal file
|
After Width: | Height: | Size: 99 KiB |