Compare commits

...

164 Commits
1.2.0 ... main

Author SHA1 Message Date
Gabriel Luchina a60e53cb92
Merge pull request #55 from jaminmc/AutoSerial
Auto generate new Serial numbers!
2025-07-23 11:02:03 -03:00
jaminmc 064e032b82 Auto generate new Serial numbers!
Now everyone won't be sharing the same serial!

On fresh install, It will prompt if you want to generate a new serial. If you have an install already, and you select "205 - Customize OpenCore config.plist" you will have an option to generate a new serial.

I created a CLI for GenSMBIOS, which generated all the serial numbers and stuff so that iMessage should work. For now it is pulling from my branch. That is until the pull request is accepted by corpnewt.

The Serial generation prompts for System Product Name, and has a default. The user can change it if they want. IE for MacOS 26, they may want to use MacPro7,1. I have not tested that though.
2025-07-23 09:56:02 -04:00
Gabriel Luchina bc7f38bd40
Merge pull request #54 from jaminmc/FixNag
Updated NoNag for PVE 8.4.5+, and improved logging
2025-07-23 08:49:09 -03:00
jaminmc 65d027b7f4 Updated NoNag for PVE 8.4.5+, and improved logging
Proxmox changed their Nag screen code in 8.4.5, so the fix changed.  The fix is from 0f3b95b3ff

Added a main.log that logs everything, and it still logs specific sections. display_and_log replaces the echo command for most things.
2025-07-22 17:19:32 -04:00
Gabriel Luchina 46187c808c
Merge pull request #53 from jaminmc/FixLogicProxmox9
Fix logic, and Preliminary support for Proxmox 9.0.0 BETA
2025-07-19 10:50:11 -03:00
jaminmc 8eb47bd0db
Preliminary support for Proxmox added to README.md 2025-07-19 03:00:10 -04:00
jaminmc 578e77f0d0
Fix init_dirs before loging, and preliminary Proxmox 9 Beta support
There was an error where the log dir wasn't created before the script would write to a log, so the script would fail if the folder was missing.

I enabled preliminary Proxmox 9 Beta support. Install works for me, and all the functions seem to work. Installing pve-no-subscription repo will give warnings in apt update, as Proxmox doesn't have trixie packages in there but is using the pve-testing repo instead.
2025-07-19 02:51:52 -04:00
jaminmc e469b61358
Remove Enterprise sources in Proxmox 9
Preliminary Proxmox 9 support! APT uses a new .sources format and extension in trixie.
2025-07-19 02:41:44 -04:00
Gabriel Luchina b7fc352b88
Merge pull request #52 from jaminmc/isostorage
Added Storage selection for ISO is there are more than 1 avalible.
2025-07-17 15:12:10 -03:00
jaminmc f0baf4a6ac Added Storage selection for ISO is there are more than 1 avalible.
This was inspired by df228d4cbd

That fix would have broken my system that uses local-zfs for virtual machines.

My fix has a function simular to the one that detects virtual machine storage, and if there is more than one for ISO's, it will prompt for the one to use.
2025-07-16 01:11:05 -04:00
Gabriel Luchina 8e922298ed
Merge pull request #50 from jaminmc/Refactored
Refactored the code to make it more maintainable.
2025-07-09 16:11:51 -03:00
jaminmc 8c72476379 Refactored the code to make it more maintainable.
- Redid the code for the cloud to be able to specify subnets, with the default based on bridge number. It now adds a bridge every time you run it.

- The creating if the VM now prompts you for a bridge to select if there is more than one, and prompts you to select storage if there is more than 1

- The No Subcriber nag removal will now last through Proxmox updates
2025-06-27 23:48:14 -04:00
Gabriel Luchina f5bcd709ac
Merge pull request #49 from jaminmc/patch-1 - Added “Disable above 4G decoding” to troubleshooting.
Added “Disable above 4G decoding” to troubleshooting.
2025-06-20 09:40:19 -03:00
jaminmc 8316522559
Added “Disable above 4G decoding” to troubleshooting.
With “above 4G decoding” enabled, the GPU passthrough functionality did not work for macOS, while it did work for Windows and Fedora. However, when disabling “above 4G decoding” in the BIOS, the GPU works for all three operating systems.
2025-06-17 13:25:58 -04:00
Gabriel Luchina c4b8ec7386 Fix Typo in setup 2025-05-02 10:20:26 -03:00
Gabriel Luchina 061ef187a3
Merge pull request #47 from S33G/patch-1 [Gb -> GB]
Gb -> GB
2025-05-02 10:17:10 -03:00
Gabriel Luchina 4f226ff773 Include backup of pve-q35-4.0.cfg 2025-04-25 16:58:53 -03:00
Gabriel Luchina 30ab67f9e4 Added FIX for VM Crash when try connect in WiFi [BCM94360] in macOS Sonoma/Sequoia 2025-04-25 16:52:46 -03:00
Gabriel Luchina ae406da578
Added Troubleshooting for Problem for GPU Passthrough in README.md 2025-04-24 10:36:55 -03:00
Gabriel Luchina 51cd033552 Improvements in opencore-osx-proxmox-vm.iso 2025-04-24 10:23:27 -03:00
Gabriel Luchina c6c10f6327 Added new apps in opencore-osx-proxmox-vm.iso 2025-04-24 10:11:42 -03:00
Gabriel Luchina 284dc22bb0 Increse size of opencore-osx-proxmox-vm.iso and added SysReport of PVE 8.4 2025-04-24 10:05:11 -03:00
Gabriel Luchina 2d01dce143
Added Proxmox/PVE 8.4 Support, Updated README.md 2025-04-23 20:49:01 -03:00
Gabriel Luchina 6940e54787
Added Proxmox/PVE 8.4 Support, Updated README.md 2025-04-23 20:41:00 -03:00
Gabriel Luchina 60ce07a001 Added Proxmox/PVE 8.4 Support 2025-04-23 20:36:17 -03:00
Gabriel Luchina bf88dbda05 Partial support for PVE 8.4 2025-04-23 16:51:34 -03:00
Gabriel Luchina fe65a19342 Initial support to PVE 8.4 2025-04-23 16:36:53 -03:00
Gabriel Luchina b4a65cb259 Added macOS Prints, update cosmetic in setup binary and cleaning files 2025-04-22 23:52:55 -03:00
Gabriel Luchina 0a1c8f9a38
Update README.md 2025-04-22 22:49:44 -03:00
Gabriel Luchina fcb950952e
Update README.md 2025-04-22 21:40:05 -03:00
Gabriel Luchina cd31cdcbbc
Update README.md 2025-04-22 21:38:47 -03:00
Gabriel Luchina 66ff65d905 Enabled timeout Picker to 5s 2025-04-22 20:23:23 -03:00
Gabriel Luchina b33e03c33c Fix Canopy - Boot Menu 2025-04-22 20:14:24 -03:00
Gabriel Luchina 1421d8dd71
Update README.md 2025-04-22 18:01:15 -03:00
Gabriel Luchina 4045c854d0 Fix macrecovery (terminalsize) 2025-04-22 16:32:01 -03:00
Gabriel Luchina 694d49ae37
Update README.md 2025-04-22 16:23:38 -03:00
Gabriel Luchina 8ecb4e635c Upgrade to OC 1.0.4 and PVE 8.3 Support (PVE 8.4 don't supported yet) 2025-04-22 16:14:23 -03:00
seeg 3dc5cc19ac
Gb -> GB 2025-04-09 00:59:30 +01:00
Gabriel Luchina 16b8a5a839
Merge pull request #46 from galavernag/new-readme
Improve README formatting
2025-03-26 19:19:24 -03:00
Guilherme Galaverna 878fe5e4ff
Update README.md 2025-03-25 16:37:32 -03:00
Gabriel Luchina 448b965f36
Merge pull request #45 from TheBoiCJ/patch-2
Add same fix to setup
2024-12-16 15:26:18 -03:00
Gabriel Luchina ea8f2ba910
Merge pull request #44 from TheBoiCJ/patch-1
Make region dynamic
2024-12-16 15:25:12 -03:00
DaBoiCJ 729c8d003a
Add same fix to setup 2024-12-16 09:06:08 -08:00
DaBoiCJ b78d94ee77
Make region dynamic | Install text changed 2024-12-16 08:59:10 -08:00
Gabriel Luchina 7ca3dc8144
Merge pull request #43 from NetManDE/main
Add Parameter -x to fallocate
2024-11-11 11:21:12 -03:00
Gabriel Luchina 1f05883fa8
Merge pull request #42 from kafeg/main
Sonoma - use another recovery code
2024-11-11 11:19:51 -03:00
NetManDE 8df9ccd5dd
Merge pull request #1 from NetManDE/NetManDE-patch-1
Add Parameter -x to fallocate
2024-11-11 10:09:42 +01:00
NetManDE ee4bb6378c
Add Parameter -x to fallocate
Fix Error "fallocate fallocate failed operation not supported" when allocating space for the ISO file.
Occured on latest proxmox with bookworm
2024-11-11 10:09:14 +01:00
Vitaly Petrov fe60e968e4 Sonoma try another recovery code 2024-11-10 09:32:20 +01:00
Gabriel Luchina 085c660602
Merge pull request #41 from kafeg/main
HighSierra troubleshooting
2024-11-06 13:54:30 -03:00
Vitaly 1c0a175e8e
HighSierra troubleshooting 2024-11-06 07:34:35 +01:00
Gabriel Luchina af9dd31185 Fix size of recovery images 2024-11-04 19:59:44 -03:00
Gabriel Luchina 59b7e70d7d
Merge pull request #40 from kafeg/main
Sonoma recovery download fix (800M -> 1450M)
2024-11-04 19:56:42 -03:00
Vitaly cd7df20dc8
Sonoma recovery download fix (800M -> 1450M) 2024-11-04 15:47:48 +01:00
Gabriel Luchina 02f0f825ee
Merge pull request #39 from kafeg/main
Add NOTICE about kernel panic solution
2024-11-01 18:54:00 -03:00
Vitaly 70edc40aae
Add NOTICE about kernel panic solution 2024-11-01 22:50:33 +01:00
Gabriel Luchina 6e25c84c53
Merge pull request #38 from epideme/main
Fix spelling of Sequoia ISO
2024-10-28 19:56:43 -03:00
TheLEEC e1cac8349c
Fix spelling of Sequoia ISO 2024-10-28 18:47:19 +01:00
Gabriel Luchina d14a6ca5c6 Fix PVE/OC image 2024-10-25 10:37:39 -03:00
Gabriel Luchina 2438ded161
Merge pull request #37 from dannybastos/main
Added support to macOS Sequoia
2024-10-24 18:25:04 -03:00
Danny Caranha Bastos de80ba75ce
Update README.md 2024-10-24 16:57:55 -03:00
Danny Bastos 8444e7fd5a updated README.md 2024-10-24 16:56:13 -03:00
Danny Bastos 26b580c94b updated EFI to oc 1.0.2
added support to macos sequoia
2024-10-24 16:31:42 -03:00
Gabriel Luchina ebbf3685a5
Merge pull request #35 from jirijanata/main
Correct adding no subscription repository and Proxmox 8.2 support
2024-04-29 11:11:50 -03:00
Jiří Janata 2f9cc3676f
Update setup to support Proxmox 8.2 2024-04-28 20:45:17 +02:00
Jiří Janata 56850ec1d2
Update README.md with Proxmox 8.2 support 2024-04-28 20:40:37 +02:00
Jiří Janata 771432298d
Correct adding no subscription repository
Correction of if commands.
2024-04-28 11:49:15 +02:00
Gabriel Luchina 59ab10792a
Merge pull request #34 from chodorenko/main
For VMs on Sonoma 14.4+ the fix is to change the USB devices to XHCI
2024-04-02 17:08:14 -03:00
Mikhail Khadarenka be1e6d3e3d For VMs on Sonoma 14.4+ the fix is to change the USB devices to XHCI and disable/remove EHCI 2024-04-02 18:25:43 +02:00
Gabriel 160c5b60cc Upgrade to Opencore 0.9.9 2024-03-13 11:53:48 -03:00
Gabriel f31600002e Upgrate to Opencore 0.9.7 2023-12-12 19:05:48 -03:00
Gabriel 33215d5227 Added compatibility to PVE 8.1 2023-11-27 15:05:40 -03:00
Gabriel 14f248a926 Upgrade to Opencore 0.9.6 2023-11-27 15:02:51 -03:00
Gabriel 209b97d076 Added macOS Sonoma support 2023-09-27 17:46:35 -03:00
Gabriel 8f350cba27 Upgrade to Opencore 0.9.5 - September/2023 2023-09-11 14:17:50 -03:00
Gabriel e5cc7ff0f4 Upgrade to Opencore 0.9.4 2023-08-10 18:50:45 -03:00
Gabriel Luchina 5f7e565c16
Merge pull request #31 from dhruvb14/patch-1
Add kvm amd support
2023-07-26 13:16:04 -03:00
Gabriel Luchina 0c842e231b
Merge pull request #32 from Dev-Josue/fix-ventura-download
fixed an error with the Ventura recovery image download
2023-07-26 11:54:22 -03:00
Josue Martinez 1a3e66debb fixed an error with the Ventura recovery image download 2023-07-25 09:54:25 -04:00
Dhruv Bhavsar c573442b6f
Add kvm amd support
When starting any machine on AMD processor after running this script it errors with following error `TASK ERROR: KVM virtualisation configured, but not available. Either disable in VM configuration or enable in BIOS.`

After adding this line install works as expected on AMD machines
2023-07-24 14:02:19 -04:00
Gabriel 9d2f5096fd Update for CREATE VM of macOS Sonoma 2023-07-06 16:53:47 -03:00
Gabriel 506082b55e Update tool for create a .ISO of macOS 2023-07-06 16:03:54 -03:00
Gabriel eff19e612c Added support to PVE 8 2023-07-06 14:13:47 -03:00
Gabriel Luchina 5348342086
Merge pull request #30 from makinbacon21/main
add proxmox v8 support
2023-07-02 22:16:08 -03:00
Thomas Makin 8506cdc41e add proxmox v8 support 2023-06-29 21:46:57 -04:00
Gabriel Luchina 684a025ecb
Update README.md 2023-06-15 19:23:24 -03:00
Gabriel Luchina 6f87c042a5
Update README.md 2023-06-15 18:36:07 -03:00
Gabriel 0b55f355d1 Upgrade to Opencore 0.9.3 2023-06-15 18:35:16 -03:00
Gabriel 6fa3302ef2 Fix Package Installers for EFI in VMs 2023-05-11 14:49:52 -03:00
Gabriel 2384b38e5d Fix for compatibility PVE version 7.4 2023-05-11 12:17:26 -03:00
Gabriel 73470867d8 Upgrade to Opencore 0.9.2 2023-05-08 14:05:59 -03:00
Gabriel 7664d5bf0b Upgrade do Opencore 0.9.1 - April/2023 2023-04-04 11:38:18 -03:00
Gabriel 6930861bb5 Upgrade to Opencore 0.9.0 [March/2023] 2023-03-06 15:32:59 -03:00
Gabriel 0a9f96c9d2 Upgrade to Opencore 0.8.9 2023-02-14 10:52:25 -03:00
Gabriel 88ef37d8cd Fix invalid Boot after install macOS - because ScanPolicy 2023-02-06 15:43:55 -03:00
Gabriel Luchina e7d5d1b6b6
Merge pull request #28 from hugueslarrive/main
- A small optimization for creating recovery images
- A bug fix when using the script with running LXC containers
- And the addition of features for customizing Opencore's configuration (Option 205 in osx-setup menu)
2023-02-06 14:05:59 -03:00
Gabriel c67c38f212 Fix ERROR in recovery boot 2023-02-04 11:07:11 -03:00
Gabriel c13fe8ea02 Upgrade to Opencore 0.8.8 - Sorry for late update 2023-02-04 02:08:05 -03:00
Hugues Larrive afe4a039b6 Add Opencore config.plist customization feature 2023-01-26 00:41:59 +01:00
Hugues Larrive 3093ae561c Fix conflicts when loop0 is used by an LXC container 2023-01-25 11:33:17 +01:00
Hugues Larrive 63ea33e9f9 Use fallocate instead of dd for better performances 2023-01-25 11:02:11 +01:00
Gabriel Luchina d514b97ef8
Update README.md 2022-12-12 18:58:17 -03:00
Gabriel 42eb0b4c5f Fix QEMU Version for compatibility with PVE 7.3 2022-12-12 18:53:25 -03:00
Gabriel a42d7909c0 Enable PollAppleHotKeys and set Timeout to 0 2022-12-12 17:05:29 -03:00
Gabriel Luchina 876c89436c
Update README.md 2022-12-09 10:30:23 -03:00
Gabriel 3293601ff8 Migrate to Opencore 0.8.7 and update to support PVE v7.3 2022-12-06 14:05:30 -03:00
Gabriel 9aa6ea1c60 Include support in AMD Environment for macOS Ventura 2022-11-09 12:55:50 -03:00
Gabriel Luchina 279dea76c6
Update README.md 2022-11-09 12:09:57 -03:00
Gabriel fd5682757e Fix option for macOS Ventura 2022-11-09 11:59:45 -03:00
Gabriel aece0565ad Update macrecovery with Opencore 0.8.6 2022-11-09 11:55:23 -03:00
Gabriel e1720aa91b Upgrade to Opencore 0.8.6 + Include support for macOS Ventura 2022-11-09 11:48:42 -03:00
Gabriel 53aa335d4f Upgrade to Opencore 0.8.5 2022-10-06 10:46:22 -03:00
Gabriel d300e5fd76 Intermittent Error for Shutdown/Rebooting in Monterey 2022-09-15 10:49:06 -03:00
Gabriel 4ed5f032d8 Add new Artefatcs - ACPI, IOREG, of PVE 7.0, 7.1 and 7.2 2022-09-12 13:23:49 -03:00
Gabriel 3707e70cbd Added PVE 7.2 support 2022-09-11 20:49:45 -03:00
Gabriel 71466c87ce Scripts for enable/disable Gatekeeper - in Opencore ISO 2022-09-11 11:52:39 -03:00
Gabriel Luchina ae3a9e334b
Update README.md 2022-09-11 11:41:15 -03:00
Gabriel f8365b98c7 Upgrade do Opencore 0.8.4 2022-09-10 12:26:51 -03:00
Gabriel Luchina fdaa72ff17
Update README.md 2022-08-03 10:25:29 -03:00
Gabriel 1eb4ffe173 Upgrade to Opencore 0.8.3 - August/2022 2022-08-03 10:24:35 -03:00
Gabriel e107b83d38 Upgrade to Opencore 0.8.2 2022-07-26 10:15:00 -03:00
Gabriel Luchina 61afc88b46
Merge pull request #25 from ivan-leschinsky/main
Fix post setup for the custom VM ID
2022-06-26 21:38:17 -03:00
Ivan Leschinsky 1b49f901fa
Fix usage of custom VM_ID for all macOS versions 2022-06-26 16:23:50 +03:00
Ivan Leschinsky fa9e6481b4
Fix post setup for the custom VM ID 2022-06-26 15:38:09 +03:00
Gabriel Luchina dd48b05eb4
Update README.md 2022-06-21 13:34:04 -03:00
Gabriel 1312830af6 Upgrade to Opencore 0.8.1 2022-06-13 23:26:07 -03:00
Gabriel Luchina 24b92e0e48
Update README.md 2022-05-31 16:21:19 -03:00
Gabriel Luchina b64c35dcb6
Update README.md 2022-05-27 12:13:04 -03:00
Gabriel e91085ae74 Fix typo in Version 2022-05-27 12:11:51 -03:00
Gabriel 3747ea44f4 Add EFI Install Packages, Update Version Pattern 2022-05-27 10:36:04 -03:00
Gabriel 45e2f7e5b0 Update GenSMBIOS and ProperTree 2022-05-26 16:49:48 -03:00
Gabriel Luchina 9783561392
Update README.md 2022-05-24 20:28:52 -03:00
Gabriel Luchina 7da41a1081
Update README.md 2022-05-24 14:39:01 -03:00
Gabriel 8aef7484af Update of macrecovery 2022-04-29 15:39:01 -03:00
Gabriel 97c2c466b9 Include SysReport (Opencore) of VM in Debug Mode 2022-04-29 15:32:12 -03:00
Gabriel a920edb050 Empty trash in .ISO of Opencore 2022-04-22 23:45:38 -03:00
Gabriel a8d56e9543 Fix typo - version Opencore 2022-04-22 10:54:03 -03:00
Gabriel 39d8ffbf64 Upgrade to Opencore 0.8.0 (april/2022) 2022-04-18 21:07:16 -03:00
Gabriel 4fbf61db73 Fix Quick Action - MountEFI 2022-03-29 09:55:02 -03:00
Gabriel 02ef9d42aa Fix install for macOS Monterey 12.3 2022-03-22 16:34:41 -03:00
Gabriel b6cff517f4 Fix cosmetics in Wizard 2022-03-09 16:31:07 -03:00
Gabriel 9d4169c6d3 Fix Typos and some informations in wizard 2022-03-09 16:18:16 -03:00
Gabriel Luchina 909337ada5
Merge pull request #23 from dlerps/main
Adding some customization to the VM Setup;

- VM Id
- VM Name
- RAM
- Custom messages in Create VM
2022-03-09 15:52:03 -03:00
Daniel Lerps e70f89cd0c
Merge remote-tracking branch 'upstream/main' into main 2022-03-09 19:10:59 +01:00
Gabriel 0214037f67
Upgrade to Opencore 0.7.9 2022-03-09 19:09:02 +01:00
Daniel Lerps f414106f4a
Revert iso storage mounts to local 2022-03-09 19:03:18 +01:00
Daniel Lerps 7ef6f9df28
Use 4096 GB as default RAM size 2022-03-09 18:58:48 +01:00
Daniel Lerps 025886f92b
Set default VM names in case there is no user input 2022-03-09 18:55:24 +01:00
Gabriel 31fcfb053f Upgrade to Opencore 0.7.9 2022-03-09 11:29:57 -03:00
Daniel Lerps f866da5de3
Add customization options to VM setup script 2022-02-27 19:26:48 +01:00
Daniel Lerps 51a11337ad
Add log directory to gitignore 2022-02-27 19:11:15 +01:00
Gabriel 91219e68c7 Fix name of Opencore ISO 2022-02-09 17:56:52 -03:00
Gabriel 61045eee73 Upgrade to Opencore 0.7.8 + macrecovery 2022-02-09 08:49:44 -03:00
Gabriel 35f073149c Version 3.2.0 - Open source code, new scripts, etc 2022-01-31 10:28:09 -03:00
Gabriel 7ae07eb6e2 New version of OSX-PROXMOX (v3.1.0) - Please read CHANGELOG for details 2022-01-21 07:17:41 -03:00
Gabriel 07e5dc5662 New version of OSX-PROXMOX (v3.0.0) - Please read CHANGELOG for details 2022-01-14 10:04:52 -03:00
Gabriel Luchina f9594e3207
Update README.md 2022-01-13 15:11:39 -03:00
Gabriel Luchina 9c77c9999f
Update README.md 2021-12-18 21:35:35 -03:00
Gabriel e7bb086f2b New version of OSX-PROXMOX (v2.0.1) - Please read CHANGELOG for details 2021-12-08 13:24:22 -03:00
Gabriel 49e099034c New version of OSX-PROXMOX (v2.0.0) - Please read CHANGELOG for details 2021-12-06 19:55:50 -03:00
Gabriel 169c468e4a New version of OSX-PROXMOX (v1.5.1) - Please read CHANGELOG for details 2021-12-02 10:09:39 -03:00
Gabriel e648dd8da8 New version of OSX-PROXMOX (v1.5.0) - Please read CHANGELOG for details 2021-12-01 21:54:13 -03:00
Gabriel 0d503fe8c7 New version of OSX-PROXMOX (v1.4.0) - Please read CHANGELOG for details 2021-11-23 19:48:52 -03:00
Gabriel 7d4443f40f New version of OSX-PROXMOX (v1.3.0) - Please read CHANGELOG for details 2021-11-19 13:21:14 -03:00
96 changed files with 1721 additions and 523 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@
.Trashes
ehthumbs.db
Thumbs.db
logs

4
.gitmodules vendored Normal file
View File

@ -0,0 +1,4 @@
[submodule "tools/GenSMBIOS"]
path = tools/GenSMBIOS
url = https://github.com/jaminmc/GenSMBIOS.git
branch = AddCli

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 KiB

View File

@ -0,0 +1,163 @@
[device "ehci"]
driver = "ich9-usb-ehci1"
multifunction = "on"
bus = "pcie.0"
addr = "1d.7"
[device "uhci-1"]
driver = "ich9-usb-uhci1"
multifunction = "on"
bus = "pcie.0"
addr = "1d.0"
masterbus = "ehci.0"
firstport = "0"
[device "uhci-2"]
driver = "ich9-usb-uhci2"
multifunction = "on"
bus = "pcie.0"
addr = "1d.1"
masterbus = "ehci.0"
firstport = "2"
[device "uhci-3"]
driver = "ich9-usb-uhci3"
multifunction = "on"
bus = "pcie.0"
addr = "1d.2"
masterbus = "ehci.0"
firstport = "4"
[device "ehci-2"]
driver = "ich9-usb-ehci2"
multifunction = "on"
bus = "pcie.0"
addr = "1a.7"
[device "uhci-4"]
driver = "ich9-usb-uhci4"
multifunction = "on"
bus = "pcie.0"
addr = "1a.0"
masterbus = "ehci-2.0"
firstport = "0"
[device "uhci-5"]
driver = "ich9-usb-uhci5"
multifunction = "on"
bus = "pcie.0"
addr = "1a.1"
masterbus = "ehci-2.0"
firstport = "2"
[device "uhci-6"]
driver = "ich9-usb-uhci6"
multifunction = "on"
bus = "pcie.0"
addr = "1a.2"
masterbus = "ehci-2.0"
firstport = "4"
# FIXME: Remove this audio0 device at the next possible time
# see: https://pve.proxmox.com/pipermail/pve-devel/2019-July/038417.html
# https://pve.proxmox.com/pipermail/pve-devel/2019-July/038428.html
[device "audio0"]
driver = "ich9-intel-hda"
bus = "pcie.0"
addr = "1b.0"
[device "ich9-pcie-port-1"]
driver = "pcie-root-port"
x-speed = "16"
x-width = "32"
multifunction = "on"
bus = "pcie.0"
addr = "1c.0"
port = "1"
chassis = "1"
[device "ich9-pcie-port-2"]
driver = "pcie-root-port"
x-speed = "16"
x-width = "32"
multifunction = "on"
bus = "pcie.0"
addr = "1c.1"
port = "2"
chassis = "2"
[device "ich9-pcie-port-3"]
driver = "pcie-root-port"
x-speed = "16"
x-width = "32"
multifunction = "on"
bus = "pcie.0"
addr = "1c.2"
port = "3"
chassis = "3"
[device "ich9-pcie-port-4"]
driver = "pcie-root-port"
x-speed = "16"
x-width = "32"
multifunction = "on"
bus = "pcie.0"
addr = "1c.3"
port = "4"
chassis = "4"
##
# Example PCIe switch with two downstream ports
#
#[device "pcie-switch-upstream-port-1"]
# driver = "x3130-upstream"
# bus = "ich9-pcie-port-4"
# addr = "00.0"
#
#[device "pcie-switch-downstream-port-1-1"]
# driver = "xio3130-downstream"
# multifunction = "on"
# bus = "pcie-switch-upstream-port-1"
# addr = "00.0"
# port = "1"
# chassis = "5"
#
#[device "pcie-switch-downstream-port-1-2"]
# driver = "xio3130-downstream"
# multifunction = "on"
# bus = "pcie-switch-upstream-port-1"
# addr = "00.1"
# port = "1"
# chassis = "6"
[device "pcidmi"]
driver = "i82801b11-bridge"
bus = "pcie.0"
addr = "1e.0"
[device "pci.0"]
driver = "pci-bridge"
bus = "pcidmi"
addr = "1.0"
chassis_nr = "1"
[device "pci.1"]
driver = "pci-bridge"
bus = "pcidmi"
addr = "2.0"
chassis_nr = "2"
[device "pci.2"]
driver = "pci-bridge"
bus = "pcidmi"
addr = "3.0"
chassis_nr = "3"
[device "pci.3"]
driver = "pci-bridge"
bus = "pcidmi"
addr = "4.0"
chassis_nr = "4"

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key># Patch for BCM/Bluetooth in Proxmox/Virtualization Environment</key>
<string></string>
<key># DISCORD: http://hackintosh.one/s/discord</key>
<string></string>
<key># BY: https://luchina.com.br</key>
<string></string>
<key>Kernel</key>
<dict>
<key>Patch</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>BCM/BT Patch for macOS in Virtual Environment - Sonoma and Sequoia - Part 1 - Universo Hackintosh</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>aGliZXJuYXRlaGlkcmVhZHkAaGliZXJuYXRlY291bnQA</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data></data>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>Replace</key>
<data>aGliZXJuYXRlaGlkcmVhZHkAaHZfdm1tX3ByZXNlbnQA</data>
<key>ReplaceMask</key>
<data></data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>BCM/BT Patch for macOS in Virtual Environment - Sonoma and Sequoia - Part 2 - Universo Hackintosh</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>Ym9vdCBzZXNzaW9uIFVVSUQAaHZfdm1tX3ByZXNlbnQA</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data></data>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>Replace</key>
<data>Ym9vdCBzZXNzaW9uIFVVSUQAaGliZXJuYXRlY291bnQA</data>
<key>ReplaceMask</key>
<data></data>
<key>Skip</key>
<integer>0</integer>
</dict>
</array>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,18 @@
macOS/VM Crash when try connect in WiFi [for BCM94360, in macOS Sonoma or Sequoia]
1. Run osx-setup and choose option '200 - Add Promox VE NO Subscription repository'
2. Install Kernel/PVE pve-kernel-5.15.53-1-pve
apt update
apt install pve-kernel-5.15.53-1-pve
3. Add in the proxmox-boot-tool and pin kernel version '5.15.53-1-pve'
proxmox-boot-tool kernel list
proxmox-boot-tool kernel add 5.15.53-1-pve
proxmox-boot-tool refresh
proxmox-boot-tool kernel pin 5.15.53-1-pve
proxmox-boot-tool kernel list
4. Reboot and try connect WiFi in macOS

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,58 @@
CPU BrandString: Intel Core 2 Duo P9xxx (Penryn Class Core 2)
MicrocodeRevision: 0x00000001
Virtualization 1
CPUID 00010673 00040800 9EB83201 178BFBFF
ExtSigEcx 00000001
ExtSigEdx 20100800
Type 0x00
Family 0x06
Model 0x17
ExtModel 0x01
ExtFamily 0x00
Stepping 0x03
Features 0x9EB83201178BFBFF
ExtFeatures 0x0000000120100800
Signature 0x00010673
Brand 0x00
AppleProcessorType 0x0301
CstConfigLock 0
CpuGeneration 4
MaxId 0x0000000D
MaxExtId 0x80000008
PackageCount 1
CoreCount 4
ThreadCount 4
ExternalClock 1000
ARTFrequency 0
CPUFrequency 3400212000
CPUFrequencyFromTSC 0
CPUFrequencyFromART 0
TscAdjust 0
CPUFrequencyFromApple 0
CPUFrequencyFromVMT 3400212000
FSBFrequency 1000000000
CPU00:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU01:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU02:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU03:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8

View File

@ -0,0 +1,68 @@
1. Vendor ID: 0x8086, Device ID: 0x29C0, RevisionID: 0x00, ClassCode: 0x060000, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x0,0x0)
2. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x10,0x0)
3. Vendor ID: 0x1022, Device ID: 0x1487, RevisionID: 0x00, ClassCode: 0x040300, SubsystemVendorID: 0x1458, SubsystemID: 0xA0CD,
DevicePath: PciRoot(0x0)/Pci(0x10,0x0)/Pci(0x0,0x0)
4. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x10,0x1)
5. Vendor ID: 0x14E4, Device ID: 0x43A0, RevisionID: 0x03, ClassCode: 0x028000, SubsystemVendorID: 0x106B, SubsystemID: 0x0117,
DevicePath: PciRoot(0x0)/Pci(0x10,0x1)/Pci(0x0,0x0)
6. Vendor ID: 0x8086, Device ID: 0x2937, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1A,0x0)
7. Vendor ID: 0x8086, Device ID: 0x2938, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1A,0x1)
8. Vendor ID: 0x8086, Device ID: 0x2939, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1A,0x2)
9. Vendor ID: 0x8086, Device ID: 0x293C, RevisionID: 0x03, ClassCode: 0x0C0320, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1A,0x7)
10. Vendor ID: 0x8086, Device ID: 0x293E, RevisionID: 0x03, ClassCode: 0x040300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1B,0x0)
11. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)
12. Vendor ID: 0x1002, Device ID: 0x73FF, RevisionID: 0xC3, ClassCode: 0x030000, SubsystemVendorID: 0x1002, SubsystemID: 0x0E36,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)
13. Vendor ID: 0x1002, Device ID: 0xAB28, RevisionID: 0x00, ClassCode: 0x040300, SubsystemVendorID: 0x1002, SubsystemID: 0xAB28,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x1)
14. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x1)
15. Vendor ID: 0x1022, Device ID: 0x149C, RevisionID: 0x00, ClassCode: 0x0C0330, SubsystemVendorID: 0x1022, SubsystemID: 0x1486,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
16. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x2)
17. Vendor ID: 0x1022, Device ID: 0x149C, RevisionID: 0x00, ClassCode: 0x0C0330, SubsystemVendorID: 0x1022, SubsystemID: 0x148C,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x2)/Pci(0x0,0x0)
18. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x3)
19. Vendor ID: 0x1022, Device ID: 0x149C, RevisionID: 0x00, ClassCode: 0x0C0330, SubsystemVendorID: 0x1458, SubsystemID: 0x5007,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x3)/Pci(0x0,0x0)
20. Vendor ID: 0x8086, Device ID: 0x2934, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1D,0x0)
21. Vendor ID: 0x8086, Device ID: 0x2935, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1D,0x1)
22. Vendor ID: 0x8086, Device ID: 0x2936, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1D,0x2)
23. Vendor ID: 0x8086, Device ID: 0x293A, RevisionID: 0x03, ClassCode: 0x0C0320, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1D,0x7)
24. Vendor ID: 0x8086, Device ID: 0x244E, RevisionID: 0x92, ClassCode: 0x060401,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)
25. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)
26. Vendor ID: 0x1AF4, Device ID: 0x1003, RevisionID: 0x00, ClassCode: 0x078000, SubsystemVendorID: 0x1AF4, SubsystemID: 0x0003,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0x8,0x0)
27. Vendor ID: 0x1AF4, Device ID: 0x1001, RevisionID: 0x00, ClassCode: 0x010000, SubsystemVendorID: 0x1AF4, SubsystemID: 0x0002,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0xA,0x0)
28. Vendor ID: 0x15AD, Device ID: 0x07B0, RevisionID: 0x01, ClassCode: 0x020000, SubsystemVendorID: 0x15AD, SubsystemID: 0x07B0,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0x12,0x0)
29. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x2,0x0)
30. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x3,0x0)
31. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x4,0x0)
32. Vendor ID: 0x8086, Device ID: 0x2918, RevisionID: 0x02, ClassCode: 0x060100, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1F,0x0)
33. Vendor ID: 0x8086, Device ID: 0x2922, RevisionID: 0x02, ClassCode: 0x010601, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1F,0x2)
34. Vendor ID: 0x8086, Device ID: 0x2930, RevisionID: 0x02, ClassCode: 0x0C0500, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1F,0x3)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,130 @@
CPU BrandString: Intel Core 2 Duo P9xxx (Penryn Class Core 2)
MicrocodeRevision: 0x00000001
Virtualization 1
CPUID 00010673 00100800 9EB83201 178BFBFF
ExtSigEcx 00000001
ExtSigEdx 20100800
Type 0x00
Family 0x06
Model 0x17
ExtModel 0x01
ExtFamily 0x00
Stepping 0x03
Features 0x9EB83201178BFBFF
ExtFeatures 0x0000000120100800
Signature 0x00010673
Brand 0x00
AppleProcessorType 0x0301
CstConfigLock 0
CpuGeneration 3
MaxId 0x0000000D
MaxExtId 0x80000008
PackageCount 1
CoreCount 16
ThreadCount 16
ExternalClock 1000
ARTFrequency 0
CPUFrequency 3400205000
CPUFrequencyFromTSC 0
CPUFrequencyFromART 0
TscAdjust 0
CPUFrequencyFromApple 0
CPUFrequencyFromVMT 3400205000
FSBFrequency 1000000000
CPU00:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU01:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU02:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU03:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU04:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU05:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU06:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU07:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU08:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU09:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU10:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU11:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU12:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU13:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU14:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU15:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8

View File

@ -0,0 +1,52 @@
1. Vendor ID: 0x8086, Device ID: 0x29C0, RevisionID: 0x00, ClassCode: 0x060000, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x0,0x0)
2. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x10,0x0)
3. Vendor ID: 0x14E4, Device ID: 0x43A0, RevisionID: 0x03, ClassCode: 0x028000, SubsystemVendorID: 0x106B, SubsystemID: 0x0117,
DevicePath: PciRoot(0x0)/Pci(0x10,0x0)/Pci(0x0,0x0)
4. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x10,0x1)
5. Vendor ID: 0x1022, Device ID: 0x1487, RevisionID: 0x00, ClassCode: 0x040300, SubsystemVendorID: 0x1458, SubsystemID: 0xA0CD,
DevicePath: PciRoot(0x0)/Pci(0x10,0x1)/Pci(0x0,0x0)
6. Vendor ID: 0x8086, Device ID: 0x293E, RevisionID: 0x03, ClassCode: 0x040300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1B,0x0)
7. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)
8. Vendor ID: 0x1002, Device ID: 0x73BF, RevisionID: 0xC0, ClassCode: 0x030000, SubsystemVendorID: 0x1DA2, SubsystemID: 0x440E,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)
9. Vendor ID: 0x1002, Device ID: 0xAB28, RevisionID: 0x00, ClassCode: 0x040300, SubsystemVendorID: 0x1002, SubsystemID: 0xAB28,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x1)
10. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x1)
11. Vendor ID: 0x1022, Device ID: 0x149C, RevisionID: 0x00, ClassCode: 0x0C0330, SubsystemVendorID: 0x1022, SubsystemID: 0x1486,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
12. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x2)
13. Vendor ID: 0x1022, Device ID: 0x149C, RevisionID: 0x00, ClassCode: 0x0C0330, SubsystemVendorID: 0x1022, SubsystemID: 0x148C,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x2)/Pci(0x0,0x0)
14. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x3)
15. Vendor ID: 0x1022, Device ID: 0x149C, RevisionID: 0x00, ClassCode: 0x0C0330, SubsystemVendorID: 0x1458, SubsystemID: 0x5007,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x3)/Pci(0x0,0x0)
16. Vendor ID: 0x8086, Device ID: 0x244E, RevisionID: 0x92, ClassCode: 0x060401,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)
17. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)
18. Vendor ID: 0x1AF4, Device ID: 0x1003, RevisionID: 0x00, ClassCode: 0x078000, SubsystemVendorID: 0x1AF4, SubsystemID: 0x0003,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0x8,0x0)
19. Vendor ID: 0x1AF4, Device ID: 0x1001, RevisionID: 0x00, ClassCode: 0x010000, SubsystemVendorID: 0x1AF4, SubsystemID: 0x0002,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0xA,0x0)
20. Vendor ID: 0x15AD, Device ID: 0x07B0, RevisionID: 0x01, ClassCode: 0x020000, SubsystemVendorID: 0x15AD, SubsystemID: 0x07B0,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0x12,0x0)
21. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x2,0x0)
22. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x3,0x0)
23. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x4,0x0)
24. Vendor ID: 0x8086, Device ID: 0x2918, RevisionID: 0x02, ClassCode: 0x060100, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1F,0x0)
25. Vendor ID: 0x8086, Device ID: 0x2922, RevisionID: 0x02, ClassCode: 0x010601, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1F,0x2)
26. Vendor ID: 0x8086, Device ID: 0x2930, RevisionID: 0x02, ClassCode: 0x0C0500, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1F,0x3)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,58 @@
CPU BrandString: Intel Core 2 Duo P9xxx (Penryn Class Core 2)
MicrocodeRevision: 0x00000001
Virtualization 1
CPUID 00010673 00040800 9EB83201 178BFBFF
ExtSigEcx 00000001
ExtSigEdx 20100800
Type 0x00
Family 0x06
Model 0x17
ExtModel 0x01
ExtFamily 0x00
Stepping 0x03
Features 0x9EB83201178BFBFF
ExtFeatures 0x0000000120100800
Signature 0x00010673
Brand 0x00
AppleProcessorType 0x0301
CstConfigLock 0
CpuGeneration 4
MaxId 0x0000000D
MaxExtId 0x80000008
PackageCount 1
CoreCount 4
ThreadCount 4
ExternalClock 1000
ARTFrequency 0
CPUFrequency 3400193000
CPUFrequencyFromTSC 0
CPUFrequencyFromART 0
TscAdjust 0
CPUFrequencyFromApple 0
CPUFrequencyFromVMT 3400193000
FSBFrequency 1000000000
CPU00:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU01:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU02:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8
CPU03:
MSR_IA32_MISC_ENABLE: 0x1
MSR_IA32_EXT_CONFIG: 0x0
MSR_FSB_FREQ: 0x3
MSR_IA32_PERF_STATUS: 0x400000003E8

View File

@ -0,0 +1,68 @@
1. Vendor ID: 0x8086, Device ID: 0x29C0, RevisionID: 0x00, ClassCode: 0x060000, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x0,0x0)
2. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x10,0x0)
3. Vendor ID: 0x1022, Device ID: 0x1487, RevisionID: 0x00, ClassCode: 0x040300, SubsystemVendorID: 0x1458, SubsystemID: 0xA0CD,
DevicePath: PciRoot(0x0)/Pci(0x10,0x0)/Pci(0x0,0x0)
4. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x10,0x1)
5. Vendor ID: 0x14E4, Device ID: 0x43A0, RevisionID: 0x03, ClassCode: 0x028000, SubsystemVendorID: 0x106B, SubsystemID: 0x0117,
DevicePath: PciRoot(0x0)/Pci(0x10,0x1)/Pci(0x0,0x0)
6. Vendor ID: 0x8086, Device ID: 0x2937, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1A,0x0)
7. Vendor ID: 0x8086, Device ID: 0x2938, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1A,0x1)
8. Vendor ID: 0x8086, Device ID: 0x2939, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1A,0x2)
9. Vendor ID: 0x8086, Device ID: 0x293C, RevisionID: 0x03, ClassCode: 0x0C0320, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1A,0x7)
10. Vendor ID: 0x8086, Device ID: 0x293E, RevisionID: 0x03, ClassCode: 0x040300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1B,0x0)
11. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)
12. Vendor ID: 0x1002, Device ID: 0x73FF, RevisionID: 0xC3, ClassCode: 0x030000, SubsystemVendorID: 0x1002, SubsystemID: 0x0E36,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)
13. Vendor ID: 0x1002, Device ID: 0xAB28, RevisionID: 0x00, ClassCode: 0x040300, SubsystemVendorID: 0x1002, SubsystemID: 0xAB28,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x1)
14. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x1)
15. Vendor ID: 0x1022, Device ID: 0x149C, RevisionID: 0x00, ClassCode: 0x0C0330, SubsystemVendorID: 0x1022, SubsystemID: 0x1486,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
16. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x2)
17. Vendor ID: 0x1022, Device ID: 0x149C, RevisionID: 0x00, ClassCode: 0x0C0330, SubsystemVendorID: 0x1022, SubsystemID: 0x148C,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x2)/Pci(0x0,0x0)
18. Vendor ID: 0x1B36, Device ID: 0x000C, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x3)
19. Vendor ID: 0x1022, Device ID: 0x149C, RevisionID: 0x00, ClassCode: 0x0C0330, SubsystemVendorID: 0x1458, SubsystemID: 0x5007,
DevicePath: PciRoot(0x0)/Pci(0x1C,0x3)/Pci(0x0,0x0)
20. Vendor ID: 0x8086, Device ID: 0x2934, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1D,0x0)
21. Vendor ID: 0x8086, Device ID: 0x2935, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1D,0x1)
22. Vendor ID: 0x8086, Device ID: 0x2936, RevisionID: 0x03, ClassCode: 0x0C0300, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1D,0x2)
23. Vendor ID: 0x8086, Device ID: 0x293A, RevisionID: 0x03, ClassCode: 0x0C0320, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1D,0x7)
24. Vendor ID: 0x8086, Device ID: 0x244E, RevisionID: 0x92, ClassCode: 0x060401,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)
25. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)
26. Vendor ID: 0x1AF4, Device ID: 0x1003, RevisionID: 0x00, ClassCode: 0x078000, SubsystemVendorID: 0x1AF4, SubsystemID: 0x0003,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0x8,0x0)
27. Vendor ID: 0x1AF4, Device ID: 0x1001, RevisionID: 0x00, ClassCode: 0x010000, SubsystemVendorID: 0x1AF4, SubsystemID: 0x0002,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0xA,0x0)
28. Vendor ID: 0x15AD, Device ID: 0x07B0, RevisionID: 0x01, ClassCode: 0x020000, SubsystemVendorID: 0x15AD, SubsystemID: 0x07B0,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0x12,0x0)
29. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x2,0x0)
30. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x3,0x0)
31. Vendor ID: 0x1B36, Device ID: 0x0001, RevisionID: 0x00, ClassCode: 0x060400,
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x4,0x0)
32. Vendor ID: 0x8086, Device ID: 0x2918, RevisionID: 0x02, ClassCode: 0x060100, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1F,0x0)
33. Vendor ID: 0x8086, Device ID: 0x2922, RevisionID: 0x02, ClassCode: 0x010601, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1F,0x2)
34. Vendor ID: 0x8086, Device ID: 0x2930, RevisionID: 0x02, ClassCode: 0x0C0500, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100,
DevicePath: PciRoot(0x0)/Pci(0x1F,0x3)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,42 @@
CPU BrandString: Intel Xeon Processor (Cascadelake)
MicrocodeRevision: 0x00000001
Virtualization 1
CPUID 00050656 00040800 FFF83203 178BFBFF
ExtSigEcx 00000121
ExtSigEdx 2C100800
Type 0x00
Family 0x06
Model 0x55
ExtModel 0x05
ExtFamily 0x00
Stepping 0x06
Features 0xFFF83203178BFBFF
ExtFeatures 0x000001212C100800
Signature 0x00050656
Brand 0x00
AppleProcessorType 0x0501
CstConfigLock 0
CpuGeneration 14
MaxId 0x0000000D
MaxExtId 0x80000008
PackageCount 1
CoreCount 4
ThreadCount 4
ExternalClock 1000
ARTFrequency 0
CPUFrequency 3400203000
CPUFrequencyFromTSC 0
CPUFrequencyFromART 0
TscAdjust 0
CPUFrequencyFromApple 0
CPUFrequencyFromVMT 3400203000
FSBFrequency 1000000000
CPU00:
CPU01:
CPU02:
CPU03:

View File

@ -0,0 +1,57 @@
PCI Bus Driver
Virtio PCI Driver
Virtio 1.0 PCI Driver
Virtio Block Driver
Virtio SCSI Host Driver
Virtio Random Number Generator Driver
PVSCSI Host Driver
Platform Console Management Driver
Console Splitter Driver
Graphics Console Driver
Serial Terminal Driver
Generic Disk I/O Driver
Partition Driver(MBR/GPT/El Torito)
SCSI Bus Driver
Scsi Disk Driver
Sata Controller Init Driver
AtaAtapiPassThru Driver
ATA Bus Driver
NVM Express Driver
OVMF Sio Bus Driver
PCI SIO Serial Driver
PS/2 Keyboard Driver
FAT File System Driver
UDF File System Driver
Virtio Filesystem Driver
Simple Network Protocol Driver
VLAN Configuration Driver
MNP Network Service Driver
ARP Network Service Driver
DHCP Protocol Driver
IP4 Network Service Driver
UDP Network Service Driver
MTFTP4 Network Service
DHCP6 Protocol Driver
IP6 Network Service Driver
UDP6 Network Service Driver
MTFTP6 Network Service Driver
TCP Network Service Driver
UEFI PXE Base Code Driver
DNS Network Service Driver
HttpDxe
UEFI HTTP Boot Driver
iSCSI Driver
Virtio Network Driver
Usb Uhci Driver
Usb Ehci Driver
Usb Xhci Driver
Usb Bus Driver
Usb Keyboard Driver
Usb Mass Storage Driver
QEMU Video Driver
Virtio GPU Driver
AMD GOP X64 Release Driver Rev.1.65.0.15.50.Sep 28 2017.15:11:11
15ad07b0.efidrv
HFS File System Driver
Usb Mouse Driver
APFS

View File

@ -0,0 +1,7 @@
GOP INFO 2560(2560)x1440 fmt 1
GOP FB 0x800000000[0xE10000]
GOP BPP 4 - Success
GOP FBS 0xE10000 - Success
MTRR supported PAT supported
PAT 0x0007040600070406 (default)
0x800000000~0x800000000 MTRR 0=UC PTE1 bits 0x0000000800000083 PAT@0->6=WB

View File

@ -0,0 +1,100 @@
01. Bridge device - Host bridge
Vendor ID: 0x0001, Device ID: 0x8086, RevisionID: 0x29C0, ClassCode: 0x000600, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100
DevicePath: PciRoot(0x0)/Pci(0x0,0x0)
02. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x0002, Device ID: 0x1B36, RevisionID: 0x0C, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x10,0x0)
03. Multimedia controller - High definition audio device
Vendor ID: 0x0003, Device ID: 0x1022, RevisionID: 0x1487, ClassCode: 0x000403, SubsystemVendorID: 0x1458, SubsystemID: 0xA0CD
DevicePath: PciRoot(0x0)/Pci(0x10,0x0)/Pci(0x0,0x0)
04. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x0004, Device ID: 0x1B36, RevisionID: 0x0C, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x10,0x1)
05. Network controller - Other network controller
Vendor ID: 0x0005, Device ID: 0x14E4, RevisionID: 0x43A0, ClassCode: 0x030280, SubsystemVendorID: 0x106B, SubsystemID: 0x0111
DevicePath: PciRoot(0x0)/Pci(0x10,0x1)/Pci(0x0,0x0)
06. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x0006, Device ID: 0x1B36, RevisionID: 0x0C, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)
07. Display controller - VGA-compatible controller
Vendor ID: 0x0007, Device ID: 0x1002, RevisionID: 0x67DF, ClassCode: 0xE70300, SubsystemVendorID: 0x1849, SubsystemID: 0x5001
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)
08. Multimedia controller - High definition audio device
Vendor ID: 0x0008, Device ID: 0x1002, RevisionID: 0xAAF0, ClassCode: 0x000403, SubsystemVendorID: 0x1849, SubsystemID: 0xAAF0
DevicePath: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x1)
09. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x0009, Device ID: 0x1B36, RevisionID: 0x0C, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x1C,0x1)
10. Serial bus controller - Universal Serial Bus xHCI controller
Vendor ID: 0x000A, Device ID: 0x1022, RevisionID: 0x149C, ClassCode: 0x000C03, SubsystemVendorID: 0x1022, SubsystemID: 0x1486
DevicePath: PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
11. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x000B, Device ID: 0x1B36, RevisionID: 0x0C, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x1C,0x2)
12. Serial bus controller - Universal Serial Bus xHCI controller
Vendor ID: 0x000C, Device ID: 0x1022, RevisionID: 0x149C, ClassCode: 0x000C03, SubsystemVendorID: 0x1022, SubsystemID: 0x148C
DevicePath: PciRoot(0x0)/Pci(0x1C,0x2)/Pci(0x0,0x0)
13. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x000D, Device ID: 0x1B36, RevisionID: 0x0C, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x1C,0x3)
14. Serial bus controller - Universal Serial Bus xHCI controller
Vendor ID: 0x000E, Device ID: 0x1022, RevisionID: 0x149C, ClassCode: 0x000C03, SubsystemVendorID: 0x1458, SubsystemID: 0x5007
DevicePath: PciRoot(0x0)/Pci(0x1C,0x3)/Pci(0x0,0x0)
15. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x000F, Device ID: 0x8086, RevisionID: 0x244E, ClassCode: 0x920604
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)
16. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x0010, Device ID: 0x1B36, RevisionID: 0x01, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)
17. Simple communications controller - Other communications device
Vendor ID: 0x0011, Device ID: 0x1AF4, RevisionID: 0x1003, ClassCode: 0x000780, SubsystemVendorID: 0x1AF4, SubsystemID: 0x0003
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0x8,0x0)
18. Mass storage controller - SCSI controller
Vendor ID: 0x0012, Device ID: 0x1AF4, RevisionID: 0x1001, ClassCode: 0x000100, SubsystemVendorID: 0x1AF4, SubsystemID: 0x0002
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0xA,0x0)
19. Network controller - Ethernet controller
Vendor ID: 0x0013, Device ID: 0x15AD, RevisionID: 0x7B0, ClassCode: 0x010200, SubsystemVendorID: 0x15AD, SubsystemID: 0x07B0
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x1,0x0)/Pci(0x12,0x0)
20. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x0014, Device ID: 0x1B36, RevisionID: 0x01, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x2,0x0)
21. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x0015, Device ID: 0x1B36, RevisionID: 0x01, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x3,0x0)
22. Bridge device - PCI-to-PCI bridge
Vendor ID: 0x0016, Device ID: 0x1B36, RevisionID: 0x01, ClassCode: 0x000604
DevicePath: PciRoot(0x0)/Pci(0x1E,0x0)/Pci(0x4,0x0)
23. Bridge device - ISA bridge
Vendor ID: 0x0017, Device ID: 0x8086, RevisionID: 0x2918, ClassCode: 0x020601, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100
DevicePath: PciRoot(0x0)/Pci(0x1F,0x0)
24. Mass storage controller - Serial ATA controller using AHCI
Vendor ID: 0x0018, Device ID: 0x8086, RevisionID: 0x2922, ClassCode: 0x020106, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100
DevicePath: PciRoot(0x0)/Pci(0x1F,0x2)
25. Serial bus controller - SMBus controller
Vendor ID: 0x0019, Device ID: 0x8086, RevisionID: 0x2930, ClassCode: 0x020C05, SubsystemVendorID: 0x1AF4, SubsystemID: 0x1100
DevicePath: PciRoot(0x0)/Pci(0x1F,0x3)

View File

@ -1,6 +1,64 @@
OpenCore Changelog
==================
#### Latest versions
- Check history of commits
#### v3.2.0
- Open SOURCE CODE of BINARY \o/
- Alter function '201 - Update Opencore ISO file' to download .ISO directly from repository;
- Add script in tools - CHECK-IOMMU.sh - Check if your IOMMU are ENABLED;
- Update macrecovery tool for Opencore 0.7.7;
- Update README;
- Adjustments to copyright terms.
#### v3.1.0
- Add support to run macOS in Cloud using this solution with VultR Provider;
- Add option to 'Remove Proxmox Subscription Notice';
#### v3.0.0
- Upgrade Opencore to 0.7.7;
- Upgrade Lilu and WhateverGreen Kexts;
- Add function '201 - Update Opencore ISO file';
- Add function '202 - Clear all Recovery Images';
- Add option to choose Storage in create VM;
- Fix minor bugs.
#### v2.0.1
- Fixed Opencore ISO disk size which was making booting impossible to install new virtual machines;
#### v2.0.0
- Upgrade to Opencore 0.7.6 (December/2021);
- Update Lilu (kext);
- Update VirtualSMC (kext);
- Fully compatible with Intel 12th and activate of all cores (P+E) and HT (Hyper-Threading);
#### v1.5.1
- Fix Menu Option - # 200;
- Cleaning some codes unnecessary in setup;
#### v1.5.0
- Fix QEMU 6.1 Passthrough in PVE 7.1+;
- Add option to "only ENTER" for exit osx-setup;
#### v1.4.0
- Add option to skip download and create recovery image of macOS;
#### v1.3.0
- Add script ```IOMMU-Groups.sh``` in tools;
- Add option 'Fix issues to start macOS (stuck at Apple logo) for Proxmox VE v7.1.XX';
- Add option 'Add Proxmox VE NO Subscription repository - for beta/non production upgrades';
- Remove option 'Activate support for Windows 11 natively'.
#### v1.2.0
- Remove PVE/Kernel version from ```osx-setup``` menu;

Binary file not shown.

176
README.md
View File

@ -1,46 +1,166 @@
# OSX-PROXMOX - Run macOS on ANY Computer - AMD & Intel
<div align="center">
Install Proxmox VE v7.XX - Next, Next & Finish (NNF).
# 🚀 OSX-PROXMOX - Run macOS on ANY Computer (AMD & Intel)
Open Proxmox Web Console -> Datacenter > NAME OF YOUR HOST > Shell.
![GitHub stars](https://img.shields.io/github/stars/luchina-gabriel/osx-proxmox?style=flat-square)
![GitHub forks](https://img.shields.io/github/forks/luchina-gabriel/OSX-PROXMOX?style=flat-square)
![GitHub license](https://img.shields.io/github/license/luchina-gabriel/osx-proxmox?style=flat-square)
![GitHub issues](https://img.shields.io/github/issues/luchina-gabriel/osx-proxmox?style=flat-square)
Copy, paste and execute.
</div>
Voilà, install macOS! This is really and magic **easiest way**!
![v15 - Sequoia](https://github.com/user-attachments/assets/4efd8874-dbc8-48b6-a485-73f7c38a5e06)
Easily install macOS on Proxmox VE with just a few steps! This guide provides the simplest and most effective way to set up macOS on Proxmox, whether you're using AMD or Intel hardware.
## COPY & PASTE - in shell of Proxmox
---
```
## 🛠 Installation Guide
1. Install a **FRESH/CLEAN** version of Proxmox VE (v7.0.XX ~ 8.4.XX) - just follow the Next, Next & Finish (NNF) approach.
* Preliminary support for Proxmox VE V9.0.0 BETA.
2. Open the **Proxmox Web Console** → Navigate to `Datacenter > YOUR_HOST_NAME > Shell`.
3. Copy, paste, and execute the command below:
```bash
/bin/bash -c "$(curl -fsSL https://install.osx-proxmox.com)"
```
## Versions of macOS Supported
* macOS High Sierra - 10.13
* macOS Mojave - 10.14
* macOS Catalina - 10.15
* macOS Big Sur - 11
* macOS Monterey - 12
🎉 Voilà! You can now install macOS!
![osx-terminal](https://github.com/user-attachments/assets/ea81b920-f3e2-422e-b1ff-0d9045adc55e)
---
## Versions of Proxmox VE Supported
* 7.XX
## 🔧 Additional Configuration
## Opencore version
* November/2021 - 0.7.5 with SIP Enabled, DMG only signed by Apple and all features of securities.
### Install EFI Package in macOS (Disable Gatekeeper First)
## Disclaimer
```bash
sudo spctl --master-disable
```
- FOR DEV/STUDENT/TEST ONLY PURPOSES.
- I'm not responsible for any problem and/or equipment damage or loss of files. Always back up everything before any changes to your computer.
---
## Demonstration (in Portuguese/Brazil)
## 🍏 macOS Versions Supported
✅ macOS High Sierra - 10.13
✅ macOS Mojave - 10.14
✅ macOS Catalina - 10.15
✅ macOS Big Sur - 11
✅ macOS Monterey - 12
✅ macOS Ventura - 13
✅ macOS Sonoma - 14
✅ macOS Sequoia - 15
https://youtu.be/G51z390XYMA
---
\* Please use CC with Auto Translate to English for your convenience.
## 🖥 Proxmox VE Versions Supported
✅ v7.0.XX ~ 8.4.XX
## Credits
### 🔄 OpenCore Version
- **April/2025 - 1.0.4** → with SIP Enabled, DMG only signed by Apple and all features of securities
---
## ☁️ Cloud Support (Run Hackintosh in the Cloud!)
- [🌍 VultR](https://www.vultr.com/?ref=9035565-8H)
- [📺 Video Tutorial](https://youtu.be/8QsMyL-PNrM) (Enable captions for better understanding)
- Now has configurable bridges, and can add as many bridges and specify the subnet for them.
---
## ⚠️ Disclaimer
🚨 **FOR DEVELOPMENT, STUDENT, AND TESTING PURPOSES ONLY.**
I am **not responsible** for any issues, damage, or data loss. Always back up your system before making any changes.
---
## 📌 Requirements
Since macOS Monterey, your host must have a **working TSC (timestamp counter)**. Otherwise, if you assign multiple cores to the VM, macOS may **crash due to time inconsistencies**. To check if your host is compatible, run the following command in Proxmox:
```bash
dmesg | grep -i -e tsc -e clocksource
```
### ✅ Expected Output (for working hosts):
```
clocksource: Switched to clocksource tsc
```
### ❌ Problematic Output (for broken hosts):
```
tsc: Marking TSC unstable due to check_tsc_sync_source failed
clocksource: Switched to clocksource hpet
```
### 🛠 Possible Fixes
1. Disable "ErP mode" and **all C-state power-saving modes** in your BIOS. Then power off your machine completely and restart.
2. Try forcing TSC in GRUB:
- Edit `/etc/default/grub` and add:
```bash
clocksource=tsc tsc=reliable
```
- Run `update-grub` and reboot (This may cause instability).
3. Verify the TSC clock source:
```bash
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
```
The output **must be `tsc`**.
[Read More](https://www.nicksherlock.com/2022/10/installing-macos-13-ventura-on-proxmox/comment-page-1/#comment-55532)
---
## 🔍 Troubleshooting
### ❌ High Sierra & Below - *Recovery Server Could Not Be Contacted*
If you encounter this error, you need to switch from **HTTPS** to **HTTP** in the installation URL:
1. When the error appears, leave the window open.
2. Open **Installer Log** (`Window > Installer Log`).
3. Search for "Failed to load catalog" → Copy the log entry.
4. Close the error message and return to `macOS Utilities`.
5. Open **Terminal**, paste the copied data, and **remove everything except the URL** (e.g., `https://example.sucatalog`).
6. Change `https://` to `http://`.
7. Run the command:
```bash
nvram IASUCatalogURL="http://your-http-url.sucatalog"
```
8. Quit Terminal and restart the installation.
[Reference & More Details](https://mrmacintosh.com/how-to-fix-the-recovery-server-could-not-be-contacted-error-high-sierra-recovery-is-still-online-but-broken/)
### ❌ Problem for GPU Passthrough
If you see an Apple logo and the bar doesnt move on your external display, you need to disable “above 4g decoding” in the motherboards BIOS.
In some environments it is necessary to segment the IOMMU Groups to be able to pass the GPU to the VM.
1. Add the content `pcie_acs_override=downstream,multifunction pci=nommconf` in the file `/etc/default/grub` at the end of the line `GRUB_CMDLINE_LINUX_DEFAULT`;
2. After changing the grub file, run the command `update-grub` and reboot your PVE.
---
## 🎥 Demonstration (in Portuguese)
📽️ [Watch on YouTube](https://youtu.be/dil6iRWiun0)
*(Enable auto-translate captions for English subtitles!)*
---
## 🎖 Credits
- **OpenCore/Acidanthera Team** - Open-source bootloader
- **Corpnewt** - Tools (ProperTree, GenSMBIOS, etc.)
- **Apple** - macOS
- **Proxmox** - Fantastic virtualization platform & documentation
---
## 🌎 Join Our Community - Universo Hackintosh Discord
💬 [**Join Here!**](https://discord.universohackintosh.com.br)
- Opencore/Acidanthera Team
- Corpnewt for Applications (ProperTree, genSMBIOS, etc)
- Apple for macOS
- Proxmox - Excelent and better documentation for Virtualization

View File

@ -3,42 +3,82 @@
#########################################################################################################################
#
# Script: install
#
# https://luchina.com.br
# Purpose: Install OSX-PROXMOX
# Source: https://luchina.com.br
#
#########################################################################################################################
clear
# Exit on any error
set -e
if [ -e /root/OSX-PROXMOX ]; then rm -rf /root/OSX-PROXMOX; fi;
if [ -e /etc/apt/sources.list.d/pve-enterprise.list ]; then rm -rf /etc/apt/sources.list.d/pve-enterprise.list; fi;
echo "Waiting install OSX-PROXMOX..."
echo " "
apt update > /tmp/install-osx-proxmox.log 2>> /tmp/install-osx-proxmox.log
if [ $? -ne 0 ]
then
echo " "
echo "Error with 'apt-get update' ..."
echo "Trying to change /etc/apt/sources.list"
echo " "
sed -i 's/ftp.br.debian.org/ftp.debian.org/g' /etc/apt/sources.list
echo "Retrying 'apt-get update' ..."
echo " "
apt-get update >> /tmp/install-osx-proxmox.log 2>> /tmp/install-osx-proxmox.log
if [ $? -ne 0 ]; then echo "Error with 'apt-get update' ..."; exit; fi
# Check if running as root
if [ "$EUID" -ne 0 ]; then
echo "This script must be run as root."
exit 1
fi
apt install git -y >> /tmp/install-osx-proxmox.log 2>> /tmp/install-osx-proxmox.log
# Define log file
LOG_FILE="/root/install-osx-proxmox.log"
git clone https://github.com/luchina-gabriel/OSX-PROXMOX.git >> /tmp/install-osx-proxmox.log 2>> /tmp/install-osx-proxmox.log
# Function to log messages
log_message() {
echo "$1" | tee -a "$LOG_FILE"
}
if [ ! -e /root/OSX-PROXMOX ]; then mkdir -p /root/OSX-PROXMOX; fi;
# Function to check command success
check_status() {
if [ $? -ne 0 ]; then
log_message "Error: $1"
exit 1
fi
}
/root/OSX-PROXMOX/setup
# Clear screen
clear
# Clean up existing files
log_message "Cleaning up existing files..."
[ -d "/root/OSX-PROXMOX" ] && rm -rf "/root/OSX-PROXMOX"
[ -f "/etc/apt/sources.list.d/pve-enterprise.list" ] && rm -f "/etc/apt/sources.list.d/pve-enterprise.list"
[ -f "/etc/apt/sources.list.d/ceph.list" ] && rm -f "/etc/apt/sources.list.d/ceph.list"
[ -f "/etc/apt/sources.list.d/pve-enterprise.sources" ] && rm -f "/etc/apt/sources.list.d/pve-enterprise.sources"
[ -f "/etc/apt/sources.list.d/ceph.sources" ] && rm -f "/etc/apt/sources.list.d/ceph.sources"
log_message "Preparing to install OSX-PROXMOX..."
# Update package lists
log_message "Updating package lists..."
apt-get update >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_message "Initial apt-get update failed. Attempting to fix sources..."
# Use main Debian mirror instead of country-specific
sed -i 's/ftp\.[a-z]\{2\}\.debian\.org/ftp.debian.org/g' /etc/apt/sources.list
log_message "Retrying apt-get update..."
apt-get update >> "$LOG_FILE" 2>&1
check_status "Failed to update package lists after source modification"
fi
# Install git
log_message "Installing git..."
apt-get install -y git >> "$LOG_FILE" 2>&1
check_status "Failed to install git"
# Clone repository
log_message "Cloning OSX-PROXMOX repository..."
git clone --recurse-submodules https://github.com/luchina-gabriel/OSX-PROXMOX.git /root/OSX-PROXMOX >> "$LOG_FILE" 2>&1
check_status "Failed to clone repository"
# Ensure directory exists and setup is executable
if [ -f "/root/OSX-PROXMOX/setup" ]; then
chmod +x "/root/OSX-PROXMOX/setup"
log_message "Running setup script..."
/root/OSX-PROXMOX/setup 2>&1 | tee -a "$LOG_FILE"
check_status "Failed to run setup script"
else
log_message "Error: Setup script not found in /root/OSX-PROXMOX"
exit 1
fi
log_message "Installation completed successfully"

BIN
setup

Binary file not shown.

20
tools/CHECK-IOMMU.sh Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
#
# Script: check-iommu-enabled.sh
# Goal: Check if IOMMU is enabled on your system
#
# Author: Gabriel Luchina
# https://luchina.com.br
# 20220128T1112
# Check for IOMMU or DMAR messages in dmesg
iommu_check=$(dmesg | grep -E 'DMAR|IOMMU')
if [ -n "$iommu_check" ]; then
echo "IOMMU Enabled"
else
echo "IOMMU NOT Enabled"
echo "Ensure 'intel_iommu=on' or 'amd_iommu=on' is present in the 'GRUB_CMDLINE_LINUX_DEFAULT' line of /etc/default/grub"
exit 1
fi

View File

@ -7,6 +7,8 @@
# https://luchina.com.br
# 20211116T2245
set -e
clear
echo -e "\nAutomate script for create \"ISO\" file of macOS Install in Proxmox VE Environament"
@ -14,21 +16,27 @@ echo -e "BY: https://luchina.com.br"
echo -e "SUPPORT: https://osx-proxmox.com"
echo -n -e "\nPath to temporary files (work dir): "
read TEMPDIR
read -r TEMPDIR
echo -n -e "Path to macOS Installation (.app) file: "
read APPOSX
read -r APPOSX
echo " "
## Core
cd ${TEMPDIR} > /dev/null 2> /dev/null
if [ -d "$TEMPDIR" ]; then
cd "$TEMPDIR" || exit 1
rm -rf macOS-install* > /dev/null 2> /dev/null
hdiutil create -o macOS-install -size 14g -layout GPTSPUD -fs HFS+J > /dev/null 2> /dev/null
hdiutil create -o macOS-install -size 16g -layout GPTSPUD -fs HFS+J > /dev/null 2> /dev/null
hdiutil attach -noverify -mountpoint /Volumes/install_build macOS-install.dmg > /dev/null 2> /dev/null
sudo "${APPOSX}/Contents/Resources/createinstallmedia" --volume /Volumes/install_build --nointeraction
hdiutil detach -force "/Volumes/Install macOS"* > /dev/null 2> /dev/null && sleep 3s > /dev/null 2> /dev/null
hdiutil detach -force "/Volumes/Shared Support"* > /dev/null 2> /dev/null
mv macOS-install.dmg macOS-install.iso > /dev/null 2> /dev/null
else
echo "The temporary directory does not exist!"
exit 1
fi
echo " "

1
tools/GenSMBIOS Submodule

@ -0,0 +1 @@
Subproject commit 573f5fc375cb52688ccac4312de8422ae263dcf2

19
tools/IOMMU-Groups.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/bash
#
# Script: IOMMU-Groups.sh
# Goal: List PCI devices in IOMMU Groups
#
# Author: Gabriel Luchina
# https://luchina.com.br
# 20250627T2331
#!/bin/bash
shopt -s nullglob
for iommu_group in $(ls /sys/kernel/iommu_groups/ | sort -V); do
echo "IOMMU Group ${iommu_group}:"
for pci_device in /sys/kernel/iommu_groups/$iommu_group/devices/*; do
echo -e "\t$(lspci -nns ${pci_device##*/})"
done
done

View File

@ -2,4 +2,7 @@
macrecovery is a tool that helps to automate recovery interaction. It can be used to download diagnostics and recovery as well as analyse MLB.
Requires python to run. Run with `-h` argument to see all available arguments.
Requires python3 to run. Run with `-h` argument to see all available arguments.
To create a disk image for a virtual machine installation use `build-image.sh`.

View File

@ -1,79 +1,79 @@
{
"Mac-226CB3C6A851A671": "latest",
"Mac-031B6874CF7F642A": "10.15.7",
"Mac-27AD2F918AE68F61": "latest",
"Mac-AA95B1DDAB278B95": "latest",
"Mac-66E35819EE2D0D05": "latest",
"Mac-7BA5B2D9E42DDD94": "latest",
"Mac-7BA5B2794B2CDB12": "10.13.6",
"Mac-06F11F11946D27C5": "latest",
"Mac-AFD8A9D944EA4843": "10.15.7",
"Mac-942B59F58194171B": "10.13.6",
"Mac-B809C3757DA9BB8D": "latest",
"Mac-7DF2A3B5E5D671ED": "10.15.7",
"Mac-35C1E88140C3E6CF": "11.6.1",
"Mac-942459F5819B171B": "10.13.6",
"Mac-77EB7D7DAF985301": "10.15.7",
"Mac-827FB448E656EC26": "latest",
"Mac-7BA5B2DFE22DDD8C": "latest",
"Mac-2E6FAB96566FE58C": "10.15.7",
"Mac-F2208EC8": "10.13.6",
"Mac-BE0E8AC46FE800CC": "11.6.1",
"Mac-00BE6ED71E35EB86": "10.15.7",
"Mac-4B7AC7E43945597E": "10.15.7",
"Mac-CAD6701F7CEA0921": "latest",
"Mac-63001698E7A34814": "latest",
"Mac-937CB26E2E02BB01": "latest",
"Mac-FFE5EF870D7BA81A": "latest",
"Mac-53FDB3D8DB8CA971": "latest",
"Mac-A61BADE1FDAD7B05": "latest",
"Mac-42FD25EABCABB274": "11.6.1",
"Mac-827FAC58A8FDFA22": "latest",
"Mac-1E7E29AD0135F9BC": "latest",
"Mac-3CBD00234E554E41": "11.6.1",
"Mac-66F35F19FE2A0D05": "10.15.7",
"Mac-189A3D4F975D5FFC": "11.6.1",
"Mac-B4831CEBD52A0C4C": "latest",
"Mac-C08A6BB70A942AC2": "10.13.6",
"Mac-8ED6AF5B48C039E1": "10.13.6",
"Mac-FC02E91DDD3FA6A4": "10.15.7",
"Mac-06F11FD93F0323C5": "latest",
"Mac-9AE82516C7C6B903": "latest",
"Mac-6F01561E16C75D06": "10.15.7",
"Mac-F60DEB81FF30ACF6": "latest",
"Mac-473D31EABEB93F9B": "latest",
"Mac-F22589C8": "10.13.6",
"Mac-0CFF9C7C2B63DF8D": "latest",
"Mac-CFF7D910A743CAAF": "latest",
"Mac-942C5DF58193131B": "10.13.6",
"Mac-77F17D7DA9285301": "latest",
"Mac-9F18E312C5C2BF0B": "latest",
"Mac-E1008331FDC96864": "latest",
"Mac-E7203C0F68AA0004": "latest",
"Mac-742912EFDBEE19B3": "10.13.6",
"Mac-27ADBB7B4CEE8E61": "10.15.7",
"Mac-F65AE981FFA204ED": "10.15.7",
"Mac-031AEE4D24BFF0B1": "10.15.7",
"Mac-4B682C642B45593E": "latest",
"Mac-DB15BD556843C820": "latest",
"Mac-937A206F2EE63C01": "latest",
"Mac-81E3E92DD6088272": "11.6.1",
"Mac-E43C1C25D4880AD6": "latest",
"Mac-EE2EBD4B90B839A8": "13.7",
"Mac-BE0E8AC46FE800CC": "11.7.10",
"Mac-9AE82516C7C6B903": "12.7.6",
"Mac-942452F5819B1C1B": "10.13.6",
"Mac-65CE76090165799A": "latest",
"Mac-551B86E5744E2388": "latest",
"Mac-BE088AF8C5EB4FA2": "latest",
"Mac-A5C67F76ED83108C": "latest",
"Mac-5F9802EFE386AA28": "latest",
"Mac-AF89B6D9451A490B": "latest",
"Mac-94245B3640C91C81": "10.13.6",
"Mac-EE2EBD4B90B839A8": "latest",
"Mac-4BC72D62AD45599E": "10.13.6",
"Mac-2BD1B31983FE1663": "11.6.1",
"Mac-7DF21CB3ED6977E5": "11.6.1",
"Mac-A369DDC4E67F1C45": "latest",
"Mac-94245A3940C91C80": "10.13.6",
"Mac-942C5DF58193131B": "10.13.6",
"Mac-C08A6BB70A942AC2": "10.13.6",
"Mac-742912EFDBEE19B3": "10.13.6",
"Mac-66F35F19FE2A0D05": "10.15.7",
"Mac-2E6FAB96566FE58C": "10.15.7",
"Mac-35C1E88140C3E6CF": "11.7.10",
"Mac-7DF21CB3ED6977E5": "11.7.10",
"Mac-9F18E312C5C2BF0B": "12.7.6",
"Mac-937CB26E2E02BB01": "12.7.6",
"Mac-827FAC58A8FDFA22": "14.7",
"Mac-226CB3C6A851A671": "14.7",
"Mac-0CFF9C7C2B63DF8D": "latest",
"Mac-C3EC7CD22292981F": "10.15.7",
"Mac-35C5E08120C7EEAF": "latest",
"Mac-942B5BF58194151B": "10.13.6"
"Mac-AFD8A9D944EA4843": "10.15.7",
"Mac-189A3D4F975D5FFC": "11.7.10",
"Mac-3CBD00234E554E41": "11.7.10",
"Mac-2BD1B31983FE1663": "11.7.10",
"Mac-06F11FD93F0323C5": "12.7.6",
"Mac-06F11F11946D27C5": "12.7.6",
"Mac-E43C1C25D4880AD6": "12.7.6",
"Mac-473D31EABEB93F9B": "12.7.6",
"Mac-66E35819EE2D0D05": "12.7.6",
"Mac-A5C67F76ED83108C": "12.7.6",
"Mac-B4831CEBD52A0C4C": "13.7",
"Mac-CAD6701F7CEA0921": "13.7",
"Mac-551B86E5744E2388": "13.7",
"Mac-937A206F2EE63C01": "latest",
"Mac-827FB448E656EC26": "latest",
"Mac-1E7E29AD0135F9BC": "latest",
"Mac-53FDB3D8DB8CA971": "latest",
"Mac-E1008331FDC96864": "latest",
"Mac-5F9802EFE386AA28": "latest",
"Mac-E7203C0F68AA0004": "latest",
"Mac-A61BADE1FDAD7B05": "latest",
"Mac-F22589C8": "10.13.6",
"Mac-94245B3640C91C81": "10.13.6",
"Mac-94245A3940C91C80": "10.13.6",
"Mac-942459F5819B171B": "10.13.6",
"Mac-4B7AC7E43945597E": "10.15.7",
"Mac-6F01561E16C75D06": "10.15.7",
"Mac-F60DEB81FF30ACF6": "12.7.6",
"Mac-27AD2F918AE68F61": "latest",
"Mac-F2208EC8": "10.13.6",
"Mac-8ED6AF5B48C039E1": "10.13.6",
"Mac-4BC72D62AD45599E": "10.13.6",
"Mac-7BA5B2794B2CDB12": "10.13.6",
"Mac-031AEE4D24BFF0B1": "10.15.7",
"Mac-F65AE981FFA204ED": "10.15.7",
"Mac-35C5E08120C7EEAF": "12.7.6",
"Mac-7BA5B2DFE22DDD8C": "latest",
"Mac-942B5BF58194151B": "10.13.6",
"Mac-942B59F58194171B": "10.13.6",
"Mac-00BE6ED71E35EB86": "10.15.7",
"Mac-FC02E91DDD3FA6A4": "10.15.7",
"Mac-7DF2A3B5E5D671ED": "10.15.7",
"Mac-031B6874CF7F642A": "10.15.7",
"Mac-27ADBB7B4CEE8E61": "10.15.7",
"Mac-77EB7D7DAF985301": "10.15.7",
"Mac-81E3E92DD6088272": "11.7.10",
"Mac-42FD25EABCABB274": "11.7.10",
"Mac-A369DDC4E67F1C45": "12.7.6",
"Mac-FFE5EF870D7BA81A": "12.7.6",
"Mac-DB15BD556843C820": "12.7.6",
"Mac-65CE76090165799A": "12.7.6",
"Mac-B809C3757DA9BB8D": "12.7.6",
"Mac-4B682C642B45593E": "13.7",
"Mac-77F17D7DA9285301": "13.7",
"Mac-BE088AF8C5EB4FA2": "13.7",
"Mac-AA95B1DDAB278B95": "latest",
"Mac-63001698E7A34814": "latest",
"Mac-CFF7D910A743CAAF": "latest",
"Mac-AF89B6D9451A490B": "latest",
"Mac-7BA5B2D9E42DDD94": "latest"
}

View File

@ -0,0 +1,18 @@
#!/bin/bash -e
rm -rf Recovery.RO.dmg Recovery.RO.raw Recovery.dmg.sparseimage
hdiutil create -size 800m -layout "UNIVERSAL HD" -type SPARSE -o Recovery.dmg
newDevice=$(hdiutil attach -nomount Recovery.dmg.sparseimage | head -n 1 | awk '{print $1}')
echo newdevice "$newDevice"
diskutil partitionDisk "${newDevice}" 1 MBR fat32 RECOVERY R
N=$(echo "$newDevice" | tr -dc '0-9')
diskutil mount disk"${N}"s1
MOUNT="$(diskutil info disk"${N}"s1 | sed -n 's/.*Mount Point: *//p')"
mkdir -p "$MOUNT/com.apple.recovery.boot"
cp ./*.dmg ./*.chunklist "$MOUNT/com.apple.recovery.boot/"
diskutil umount disk"${N}"s1
hdiutil detach "$newDevice"
hdiutil convert -format UDZO Recovery.dmg.sparseimage -o Recovery.RO.dmg
rm Recovery.dmg.sparseimage
qemu-img convert -f dmg -O raw Recovery.RO.dmg Recovery.raw
rm Recovery.RO.dmg

260
tools/macrecovery/macrecovery.py Normal file → Executable file
View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
"""
Gather recovery information for Macs.
@ -6,35 +6,30 @@ Gather recovery information for Macs.
Copyright (c) 2019, vit9696
"""
from __future__ import print_function
import argparse
import binascii
import datetime
import hashlib
import json
import linecache
import os
import random
import struct
import string
import sys
import textwrap
import time
try:
from urllib.request import Request, HTTPError, urlopen
from urllib.parse import urlencode,urlparse
from urllib.parse import urlparse
except ImportError:
from urllib2 import Request,HTTPError,urlopen
from urllib import urlencode
from urlparse import urlparse
print('ERROR: Python 2 is not supported, please use Python 3')
sys.exit(1)
SELF_DIR = os.path.dirname(os.path.realpath(__file__))
RECENT_MAC = 'Mac-7BA5B2D9E42DDD94'
# MacPro7,1
RECENT_MAC = 'Mac-27AD2F918AE68F61'
MLB_ZERO = '00000000000000000'
MLB_VALID = 'C02749200YGJ803AX'
MLB_PRODUCT = '00000000000J80300'
MLB_VALID = 'F5K105303J9K3F71M'
MLB_PRODUCT = 'F5K00000000K3F700'
TYPE_SID = 16
TYPE_K = 64
@ -47,46 +42,42 @@ INFO_IMAGE_SESS = 'AT'
INFO_SIGN_LINK = 'CU'
INFO_SIGN_HASH = 'CH'
INFO_SIGN_SESS = 'CT'
INFO_REQURED = [ INFO_PRODUCT, INFO_IMAGE_LINK, INFO_IMAGE_HASH, INFO_IMAGE_SESS,
INFO_SIGN_LINK, INFO_SIGN_HASH, INFO_SIGN_SESS ]
INFO_REQURED = [INFO_PRODUCT, INFO_IMAGE_LINK, INFO_IMAGE_HASH, INFO_IMAGE_SESS, INFO_SIGN_LINK, INFO_SIGN_HASH, INFO_SIGN_SESS]
# Use -2 for better resize stability on Windows
TERMINAL_MARGIN = 2
def run_query(url, headers, post=None, raw=False):
if post is not None:
data = '\n'.join([entry + '=' + post[entry] for entry in post])
if sys.version_info[0] >= 3:
data = data.encode('utf-8')
data = '\n'.join(entry + '=' + post[entry] for entry in post).encode()
else:
data = None
req = Request(url=url, headers=headers, data=data)
try:
response = urlopen(req)
if raw: return response
if raw:
return response
return dict(response.info()), response.read()
except HTTPError as e:
print('ERROR: "{}" when connecting to {}'.format(e, url))
print(f'ERROR: "{e}" when connecting to {url}')
sys.exit(1)
def generate_id(type, id=None):
valid_chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
if id is None:
return ''.join(random.choice(valid_chars) for i in range(type))
return id
def generate_id(id_type, id_value=None):
return id_value or ''.join(random.choices(string.hexdigits[:16].upper(), k=id_type))
def product_mlb(mlb):
return '00000000000' + mlb[11] + mlb[12] + mlb[13] + mlb[14] + '00'
return '00000000000' + mlb[11:15] + '00'
def mlb_from_eeee(eeee):
if len(eeee) != 4:
print('ERROR: Invalid EEEE code length!')
sys.exit(1)
return '00000000000' + eeee + '00'
return f'00000000000{eeee}00'
def int_from_unsigned_bytes(bytes, byteorder):
if byteorder == 'little': bytes = bytes[::-1]
encoded = binascii.hexlify(bytes)
return int(encoded, 16)
# zhangyoufu https://gist.github.com/MCJack123/943eaca762730ca4b7ae460b731b68e7#gistcomment-3061078 2021-10-08
Apple_EFI_ROM_public_key_1 = 0xC3E748CAD9CD384329E10E25A91E43E1A762FF529ADE578C935BDDF9B13F2179D4855E6FC89E9E29CA12517D17DFA1EDCE0BEBF0EA7B461FFE61D94E2BDF72C196F89ACD3536B644064014DAE25A15DB6BB0852ECBD120916318D1CCDEA3C84C92ED743FC176D0BACA920D3FCF3158AFF731F88CE0623182A8ED67E650515F75745909F07D415F55FC15A35654D118C55A462D37A3ACDA08612F3F3F6571761EFCCBCC299AEE99B3A4FD6212CCFFF5EF37A2C334E871191F7E1C31960E010A54E86FA3F62E6D6905E1CD57732410A3EB0C6B4DEFDABE9F59BF1618758C751CD56CEF851D1C0EAA1C558E37AC108DA9089863D20E2E7E4BF475EC66FE6B3EFDCF
@ -97,6 +88,7 @@ assert ChunkListHeader.size == 0x24
Chunk = struct.Struct('<I32s')
assert Chunk.size == 0x24
def verify_chunklist(cnkpath):
with open(cnkpath, 'rb') as f:
hash_ctx = hashlib.sha256()
@ -111,7 +103,7 @@ def verify_chunklist(cnkpath):
assert chunk_count > 0
assert chunk_offset == 0x24
assert signature_offset == chunk_offset + Chunk.size * chunk_count
for i in range(chunk_count):
for _ in range(chunk_count):
data = f.read(Chunk.size)
hash_ctx.update(data)
chunk_size, chunk_sha256 = Chunk.unpack(data)
@ -120,8 +112,8 @@ def verify_chunklist(cnkpath):
if signature_method == 1:
data = f.read(256)
assert len(data) == 256
signature = int_from_unsigned_bytes(data, 'little')
plaintext = 0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003031300d0609608648016503040201050004200000000000000000000000000000000000000000000000000000000000000000 | int_from_unsigned_bytes(digest, 'big')
signature = int.from_bytes(data, 'little')
plaintext = int(f'0x1{"f"*404}003031300d060960864801650304020105000420{"0"*64}', 16) | int.from_bytes(digest, 'big')
assert pow(signature, 0x10001, Apple_EFI_ROM_public_key_1) == plaintext
elif signature_method == 2:
data = f.read(32)
@ -131,6 +123,7 @@ def verify_chunklist(cnkpath):
raise NotImplementedError
assert f.read(1) == b''
def get_session(args):
headers = {
'Host': 'osrecovery.apple.com',
@ -138,22 +131,22 @@ def get_session(args):
'User-Agent': 'InternetRecovery/1.0',
}
headers, output = run_query('http://osrecovery.apple.com/', headers)
headers, _ = run_query('http://osrecovery.apple.com/', headers)
if args.verbose:
print('Session headers:')
for header in headers:
print('{}: {}'.format(header, headers[header]))
print(f'{header}: {headers[header]}')
for header in headers:
if header.lower() == 'set-cookie':
cookies = headers[header].split('; ')
for cookie in cookies:
if cookie.startswith('session='):
return cookie
return cookie if cookie.startswith('session=') else ...
raise RuntimeError('No session in headers ' + str(headers))
def get_image_info(session, bid, mlb=MLB_ZERO, diag=False, os_type='default', cid=None):
headers = {
'Host': 'osrecovery.apple.com',
@ -179,24 +172,25 @@ def get_image_info(session, bid, mlb=MLB_ZERO, diag = False, os_type = 'default'
headers, output = run_query(url, headers, post)
if sys.version_info[0] >= 3:
output = output.decode('utf-8')
info = {}
for line in output.split('\n'):
try:
key, value = line.split(': ')
info[key] = value
except:
except KeyError:
continue
except ValueError:
continue
for k in INFO_REQURED:
if k not in info:
raise RuntimeError('Missing key ' + k)
raise RuntimeError(f'Missing key {k}')
return info
def save_image(url, sess, filename='', dir=''):
def save_image(url, sess, filename='', directory=''):
purl = urlparse(url)
headers = {
'Host': purl.hostname,
@ -205,45 +199,69 @@ def save_image(url, sess, filename='', dir=''):
'Cookie': '='.join(['AssetToken', sess])
}
if not os.path.exists(directory):
os.makedirs(directory)
if filename == '':
filename = os.path.basename(purl.path)
if filename.find('/') >= 0 or filename == '':
if filename.find(os.sep) >= 0 or filename == '':
raise RuntimeError('Invalid save path ' + filename)
print('Saving ' + url + ' to ' + filename + '...')
print(f'Saving {url} to {directory}{os.sep}{filename}...')
with open (os.path.join(dir, filename), 'wb') as fh:
with open(os.path.join(directory, filename), 'wb') as fh:
response = run_query(url, headers, raw=True)
headers = dict(response.headers)
totalsize = -1
for header in headers:
if header.lower() == 'content-length':
totalsize = int(headers[header])
break
size = 0
oldterminalsize = 0
while True:
chunk = response.read(2**20)
if not chunk:
break
fh.write(chunk)
size += len(chunk)
print('\r{} MBs downloaded...'.format(size / (2**20)), end='')
terminalsize = 80
if oldterminalsize != terminalsize:
print(f'\r{"":<{terminalsize}}', end='')
oldterminalsize = terminalsize
if totalsize > 0:
progress = size / totalsize
barwidth = terminalsize // 3
print(f'\r{size / (2**20):.1f}/{totalsize / (2**20):.1f} MB ', end='')
if terminalsize > 55:
print(f'|{"=" * int(barwidth * progress):<{barwidth}}|', end='')
print(f' {progress*100:.1f}% downloaded', end='')
else:
# Fallback if Content-Length isn't available
print(f'\r{size / (2**20)} MB downloaded...', end='')
sys.stdout.flush()
print('\rDownload complete!')
print('\nDownload complete!')
return os.path.join(directory, os.path.basename(filename))
return os.path.join(dir, os.path.basename(filename))
def verify_image(dmgpath, cnkpath):
print('Verifying image with chunklist...')
with open(dmgpath, 'rb') as dmgf:
cnkcount = 0
for cnksize, cnkhash in verify_chunklist(cnkpath):
cnkcount += 1
print('\rChunk {} ({} bytes)'.format(cnkcount, cnksize), end='')
for cnkcount, (cnksize, cnkhash) in enumerate(verify_chunklist(cnkpath), 1):
terminalsize = 80
print(f'\r{f"Chunk {cnkcount} ({cnksize} bytes)":<{terminalsize}}', end='')
sys.stdout.flush()
cnk = dmgf.read(cnksize)
if len(cnk) != cnksize:
raise RuntimeError('Invalid chunk {} size: expected {}, read {}'.format(cnkcount, cnksize, len(cnk)))
raise RuntimeError(f'Invalid chunk {cnkcount} size: expected {cnksize}, read {len(cnk)}')
if hashlib.sha256(cnk).digest() != cnkhash:
raise RuntimeError('Invalid chunk {}: hash mismatch'.format(cnkcount))
raise RuntimeError(f'Invalid chunk {cnkcount}: hash mismatch')
if dmgf.read(1) != b'':
raise RuntimeError('Invalid image: larger than chunklist')
print('\rImage verification complete!')
print('\nImage verification complete!')
def action_download(args):
"""
@ -274,15 +292,14 @@ def action_download(args):
"""
session = get_session(args)
info = get_image_info(session, bid=args.board_id, mlb=args.mlb,
diag=args.diagnostics, os_type=args.os_type)
info = get_image_info(session, bid=args.board_id, mlb=args.mlb, diag=args.diagnostics, os_type=args.os_type)
if args.verbose:
print(info)
print('Downloading ' + info[INFO_PRODUCT] + '...')
dmgname = '' if args.basename == '' else args.basename + '.dmg'
dmgpath = save_image(info[INFO_IMAGE_LINK], info[INFO_IMAGE_SESS], dmgname, args.outdir)
print(f'Downloading {info[INFO_PRODUCT]}...')
cnkname = '' if args.basename == '' else args.basename + '.chunklist'
cnkpath = save_image(info[INFO_SIGN_LINK], info[INFO_SIGN_SESS], cnkname, args.outdir)
dmgname = '' if args.basename == '' else args.basename + '.dmg'
dmgpath = save_image(info[INFO_IMAGE_LINK], info[INFO_IMAGE_SESS], dmgname, args.outdir)
try:
verify_image(dmgpath, cnkpath)
return 0
@ -293,11 +310,12 @@ def action_download(args):
while tb.tb_next:
tb = tb.tb_next
err = linecache.getline(tb.tb_frame.f_code.co_filename, tb.tb_lineno, tb.tb_frame.f_globals).strip()
except:
except Exception:
err = "Invalid chunklist"
print('\rImage verification failed. ({})'.format(err))
print(f'\rImage verification failed. ({err})')
return 1
def action_selfcheck(args):
"""
Sanity check server logic for recovery:
@ -316,18 +334,12 @@ def action_selfcheck(args):
"""
session = get_session(args)
valid_default = get_image_info(session, bid=RECENT_MAC, mlb=MLB_VALID,
diag=False, os_type='default')
valid_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_VALID,
diag=False, os_type='latest')
product_default = get_image_info(session, bid=RECENT_MAC, mlb=MLB_PRODUCT,
diag=False, os_type='default')
product_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_PRODUCT,
diag=False, os_type='latest')
generic_default = get_image_info(session, bid=RECENT_MAC, mlb=MLB_ZERO,
diag=False, os_type='default')
generic_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_ZERO,
diag=False, os_type='latest')
valid_default = get_image_info(session, bid=RECENT_MAC, mlb=MLB_VALID, diag=False, os_type='default')
valid_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_VALID, diag=False, os_type='latest')
product_default = get_image_info(session, bid=RECENT_MAC, mlb=MLB_PRODUCT, diag=False, os_type='default')
product_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_PRODUCT, diag=False, os_type='latest')
generic_default = get_image_info(session, bid=RECENT_MAC, mlb=MLB_ZERO, diag=False, os_type='default')
generic_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_ZERO, diag=False, os_type='latest')
if args.verbose:
print(valid_default)
@ -339,50 +351,43 @@ def action_selfcheck(args):
if valid_default[INFO_PRODUCT] == valid_latest[INFO_PRODUCT]:
# Valid MLB must give different default and latest if this is not a too new product.
print('ERROR: Cannot determine any previous product, got {}'.format(valid_default[INFO_PRODUCT]))
print(f'ERROR: Cannot determine any previous product, got {valid_default[INFO_PRODUCT]}')
return 1
if product_default[INFO_PRODUCT] != product_latest[INFO_PRODUCT]:
# Product-only MLB must give the same value for default and latest.
print('ERROR: Latest and default do not match for product MLB, got {} and {}'.format(
product_default[INFO_PRODUCT], product_latest[INFO_PRODUCT]))
print(f'ERROR: Latest and default do not match for product MLB, got {product_default[INFO_PRODUCT]} and {product_latest[INFO_PRODUCT]}')
return 1
if generic_default[INFO_PRODUCT] != generic_latest[INFO_PRODUCT]:
# Zero MLB always give the same value for default and latest.
print('ERROR: Generic MLB gives different product, got {} and {}'.format(
generic_default[INFO_PRODUCT], generic_latest[INFO_PRODUCT]))
print(f'ERROR: Generic MLB gives different product, got {generic_default[INFO_PRODUCT]} and {generic_latest[INFO_PRODUCT]}')
return 1
if valid_latest[INFO_PRODUCT] != generic_latest[INFO_PRODUCT]:
# Valid MLB must always equal generic MLB.
print('ERROR: Cannot determine unified latest product, got {} and {}'.format(
valid_latest[INFO_PRODUCT], generic_latest[INFO_PRODUCT]))
print(f'ERROR: Cannot determine unified latest product, got {valid_latest[INFO_PRODUCT]} and {generic_latest[INFO_PRODUCT]}')
return 1
if product_default[INFO_PRODUCT] != valid_default[INFO_PRODUCT]:
# Product-only MLB can give the same value with valid default MLB.
# This is not an error for all models, but for our chosen code it is.
print('ERROR: Valid and product MLB give mismatch, got {} and {}'.format(
product_default[INFO_PRODUCT], valid_default[INFO_PRODUCT]))
print(f'ERROR: Valid and product MLB give mismatch, got {product_default[INFO_PRODUCT]} and {valid_default[INFO_PRODUCT]}')
return 1
print('SUCCESS: Found no discrepancies with MLB validation algorithm!')
return 0
def action_verify(args):
"""
Try to verify MLB serial number.
"""
session = get_session(args)
generic_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_ZERO,
diag=False, os_type='latest')
uvalid_default = get_image_info(session, bid=args.board_id, mlb=args.mlb,
diag=False, os_type='default')
uvalid_latest = get_image_info(session, bid=args.board_id, mlb=args.mlb,
diag=False, os_type='latest')
uproduct_default = get_image_info(session, bid=args.board_id, mlb=product_mlb(args.mlb),
diag=False, os_type='default')
generic_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_ZERO, diag=False, os_type='latest')
uvalid_default = get_image_info(session, bid=args.board_id, mlb=args.mlb, diag=False, os_type='default')
uvalid_latest = get_image_info(session, bid=args.board_id, mlb=args.mlb, diag=False, os_type='latest')
uproduct_default = get_image_info(session, bid=args.board_id, mlb=product_mlb(args.mlb), diag=False, os_type='default')
if args.verbose:
print(generic_latest)
@ -392,10 +397,7 @@ def action_verify(args):
# Verify our MLB number.
if uvalid_default[INFO_PRODUCT] != uvalid_latest[INFO_PRODUCT]:
if uvalid_latest[INFO_PRODUCT] == generic_latest[INFO_PRODUCT]:
print('SUCCESS: {} MLB looks valid and supported!'.format(args.mlb))
else:
print('SUCCESS: {} MLB looks valid, but probably unsupported!'.format(args.mlb))
print(f'SUCCESS: {args.mlb} MLB looks valid and supported!' if uvalid_latest[INFO_PRODUCT] == generic_latest[INFO_PRODUCT] else f'SUCCESS: {args.mlb} MLB looks valid, but probably unsupported!')
return 0
print('UNKNOWN: Run selfcheck, check your board-id, or try again later!')
@ -403,15 +405,15 @@ def action_verify(args):
# Here we have matching default and latest products. This can only be true for very
# new models. These models get either latest or special builds.
if uvalid_default[INFO_PRODUCT] == generic_latest[INFO_PRODUCT]:
print('UNKNOWN: {} MLB can be valid if very new!'.format(args.mlb))
print(f'UNKNOWN: {args.mlb} MLB can be valid if very new!')
return 0
if uproduct_default[INFO_PRODUCT] != uvalid_default[INFO_PRODUCT]:
print('UNKNOWN: {} MLB looks invalid, other models use product {} instead of {}!'.format(
args.mlb, uproduct_default[INFO_PRODUCT], uvalid_default[INFO_PRODUCT]))
print(f'UNKNOWN: {args.mlb} MLB looks invalid, other models use product {uproduct_default[INFO_PRODUCT]} instead of {uvalid_default[INFO_PRODUCT]}!')
return 0
print('UNKNOWN: {} MLB can be valid if very new and using special builds!'.format(args.mlb))
print(f'UNKNOWN: {args.mlb} MLB can be valid if very new and using special builds!')
return 0
def action_guess(args):
"""
Attempt to guess which model does this MLB belong.
@ -420,56 +422,51 @@ def action_guess(args):
mlb = args.mlb
anon = mlb.startswith('000')
with open(args.board_db, 'r') as fh:
with open(args.board_db, 'r', encoding='utf-8') as fh:
db = json.load(fh)
supported = {}
session = get_session(args)
generic_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_ZERO,
diag=False, os_type='latest')
generic_latest = get_image_info(session, bid=RECENT_MAC, mlb=MLB_ZERO, diag=False, os_type='latest')
for model in db:
try:
if anon:
# For anonymous lookup check when given model does not match latest.
model_latest = get_image_info(session, bid=model, mlb=MLB_ZERO,
diag=False, os_type='latest')
model_latest = get_image_info(session, bid=model, mlb=MLB_ZERO, diag=False, os_type='latest')
if model_latest[INFO_PRODUCT] != generic_latest[INFO_PRODUCT]:
if db[model] == 'current':
print('WARN: Skipped {} due to using latest product {} instead of {}'.format(
model, model_latest[INFO_PRODUCT], generic_latest[INFO_PRODUCT]))
print(f'WARN: Skipped {model} due to using latest product {model_latest[INFO_PRODUCT]} instead of {generic_latest[INFO_PRODUCT]}')
continue
user_default = get_image_info(session, bid=model, mlb=mlb,
diag=False, os_type='default')
user_default = get_image_info(session, bid=model, mlb=mlb, diag=False, os_type='default')
if user_default[INFO_PRODUCT] != generic_latest[INFO_PRODUCT]:
supported[model] = [db[model], user_default[INFO_PRODUCT], generic_latest[INFO_PRODUCT]]
else:
# For normal lookup check when given model has mismatching normal and latest.
user_latest = get_image_info(session, bid=model, mlb=mlb,
diag=False, os_type='latest')
user_latest = get_image_info(session, bid=model, mlb=mlb, diag=False, os_type='latest')
user_default = get_image_info(session, bid=model, mlb=mlb,
diag=False, os_type='default')
user_default = get_image_info(session, bid=model, mlb=mlb, diag=False, os_type='default')
if user_latest[INFO_PRODUCT] != user_default[INFO_PRODUCT]:
supported[model] = [db[model], user_default[INFO_PRODUCT], user_latest[INFO_PRODUCT]]
except Exception as e:
print('WARN: Failed to check {}, exception: {}'.format(model, str(e)))
print(f'WARN: Failed to check {model}, exception: {e}')
if len(supported) > 0:
print('SUCCESS: MLB {} looks supported for:'.format(mlb))
for model in supported:
print('- {}, up to {}, default: {}, latest: {}'.format(model, supported[model][0],
supported[model][1], supported[model][2]))
print(f'SUCCESS: MLB {mlb} looks supported for:')
for model in supported.items():
print(f'- {model}, up to {supported[model][0]}, default: {supported[model][1]}, latest: {supported[model][2]}')
return 0
print('UNKNOWN: Failed to determine supported models for MLB {}!'.format(mlb))
print(f'UNKNOWN: Failed to determine supported models for MLB {mlb}!')
return None
def main():
parser = argparse.ArgumentParser(description='Gather recovery information for Macs')
@ -477,18 +474,18 @@ def main():
help='Action to perform: "download" - performs recovery downloading,'
' "selfcheck" checks whether MLB serial validation is possible, "verify" performs'
' MLB serial verification, "guess" tries to find suitable mac model for MLB.')
parser.add_argument('-o', '--outdir', type=str, default=os.getcwd(),
help='customise output directory for downloading, defaults to current directory')
parser.add_argument('-o', '--outdir', type=str, default='com.apple.recovery.boot',
help='customise output directory for downloading, defaults to com.apple.recovery.boot')
parser.add_argument('-n', '--basename', type=str, default='',
help='customise base name for downloading, defaults to remote name')
parser.add_argument('-b', '--board-id', type=str, default=RECENT_MAC,
help='use specified board identifier for downloading, defaults to ' + RECENT_MAC)
help=f'use specified board identifier for downloading, defaults to {RECENT_MAC}')
parser.add_argument('-m', '--mlb', type=str, default=MLB_ZERO,
help='use specified logic board serial for downloading, defaults to ' + MLB_ZERO)
help=f'use specified logic board serial for downloading, defaults to {MLB_ZERO}')
parser.add_argument('-e', '--code', type=str, default='',
help='generate product logic board serial with specified product EEEE code')
parser.add_argument('-os', '--os-type', type=str, default='default', choices=['default', 'latest'],
help='use specified os type, defaults to default ' + MLB_ZERO)
help=f'use specified os type, defaults to default {MLB_ZERO}')
parser.add_argument('-diag', '--diagnostics', action='store_true', help='download diagnostics image')
parser.add_argument('-v', '--verbose', action='store_true', help='print debug information')
parser.add_argument('-db', '--board-db', type=str, default=os.path.join(SELF_DIR, 'boards.json'),
@ -505,14 +502,15 @@ def main():
if args.action == 'download':
return action_download(args)
elif args.action == 'selfcheck':
if args.action == 'selfcheck':
return action_selfcheck(args)
elif args.action == 'verify':
if args.action == 'verify':
return action_verify(args)
elif args.action == 'guess':
if args.action == 'guess':
return action_guess(args)
else:
assert(False)
assert False
if __name__ == '__main__':
sys.exit(main())

View File

@ -31,15 +31,24 @@ Catalina
Big Sur
./macrecovery.py -b Mac-2BD1B31983FE1663 -m 00000000000000000
Monterey
./macrecovery.py -b Mac-E43C1C25D4880AD6 -m 00000000000000000
Ventura
./macrecovery.py -b Mac-B4831CEBD52A0C4C -m 00000000000000000
Sonoma
./macrecovery.py -b Mac-827FAC58A8FDFA22 -m 00000000000000000
Diagnostics
./macrecovery.py -b Mac-E43C1C25D4880AD6 -m 00000000000000000 -diag
./macrecovery.py -b Mac-E43C1C25D4880AD6 -m 00000000000GDVQ00 -diag
./macrecovery.py -b Mac-E43C1C25D4880AD6 <real MLB> -diag
./macrecovery.py -b Mac-7BA5B2D9E42DDD94 -m 00000000000000000 -diag
./macrecovery.py -b Mac-7BA5B2D9E42DDD94 -m 00000000000JG3600 -diag
./macrecovery.py -b Mac-7BA5B2D9E42DDD94 <real MLB> -diag
Default version
./macrecovery.py -b Mac-E43C1C25D4880AD6 -m 00000000000GDVQ00 (oldest)
./macrecovery.py -b Mac-E43C1C25D4880AD6 -m <real MLB> -os default (newer)
./macrecovery.py -b Mac-7BA5B2D9E42DDD94 -m 00000000000JG3600 (oldest)
./macrecovery.py -b Mac-7BA5B2D9E42DDD94 -m <real MLB> -os default (newer)
Latest version
./macrecovery.py -b Mac-E43C1C25D4880AD6 -m 00000000000000000 -os latest
./macrecovery.py -b Mac-E43C1C25D4880AD6 -m <real MLB> -os latest
./macrecovery.py -b Mac-7BA5B2D9E42DDD94 -m 00000000000000000 -os latest
./macrecovery.py -b Mac-7BA5B2D9E42DDD94 -m <real MLB> -os latest