OSX-KVM - March 2021 - Batch Update 1
Changes: - Upgrade to OpenCore 0.6.7-RELEASE - Big Sur image building script updates (Nick) - See https://github.com/kholia/OSX-KVM/pull/169 for details. - Removed history to reduce repository size
10
.github/issue_template.md
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
#### Notes
|
||||
|
||||
- Please, DO NOT create a new issue if your issue is already known.
|
||||
- Carefully read the documentation included in the repository.
|
||||
- Look closely at the closed and open issues.
|
||||
|
||||
- Attach details about your host OS (distribution, kernel, QEMU version) and
|
||||
host CPU (vendor and model number).
|
||||
|
||||
- Remove this template message after reading it ;)
|
11
.gitignore
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
*.iso
|
||||
mac_hdd.img
|
||||
mac_hdd_ng.img
|
||||
*.sha256sum
|
||||
*.sucatalog
|
||||
*.img
|
||||
*.dmg
|
||||
*.dist
|
||||
*.smd
|
||||
*.dmg
|
||||
OVMF_VARS-1024x768.fd
|
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[submodule "resources/OcBinaryData"]
|
||||
path = resources/OcBinaryData
|
||||
url = https://github.com/acidanthera/OcBinaryData.git
|
119
CREDITS.md
Normal file
|
@ -0,0 +1,119 @@
|
|||
### Credits
|
||||
|
||||
- [UPSTREAM] https://github.com/acidanthera/OpenCorePkg + https://dortania.github.io/ - for making all this possible!
|
||||
|
||||
* RehabMan, th3joker and others - FakeSMC.kext, https://bitbucket.org/RehabMan
|
||||
|
||||
* Chuck Remes (chuckremes) - better documentation
|
||||
|
||||
* Meissa - better networking documentation
|
||||
|
||||
* PJ Meyer (pjmeyer) - compatibility with modern versions of GNU mktemp
|
||||
|
||||
* Robert DeRose (RobertDeRose) and Dirk Bajohr (isolution-de) - macOS support
|
||||
|
||||
* Fritz Elfert (felfert) - cleanups, better documentation, and nicer ISO creation script
|
||||
|
||||
* Ian McDowell (IMcD23) - more documentation, and better ISO creation script
|
||||
|
||||
* voobscout - libvirt XML file
|
||||
|
||||
* Evgeny Grin (Karlson2k) - for the original ISO creation script
|
||||
|
||||
* Gabriel L. Somlo - for getting things started and going
|
||||
|
||||
* http://www.insanelymac.com/ - Enoch bootloader
|
||||
|
||||
* Nicholas Sherlock - UEFI, Clover, and other hacks
|
||||
|
||||
* Phil Dennis-Jordan - virtio-net-osx, usb-tablet and other hacks
|
||||
|
||||
* Nikolay Dimitrov (nikidim) - Docker for Mac
|
||||
|
||||
* Francisco de la Peña - libvirt XML file for macOS High Sierra
|
||||
|
||||
* Christian Giliberto - libvirt XML tweaks
|
||||
|
||||
* José Roberto Meza Cabrera - AMD Ryzen testing
|
||||
|
||||
* Paweł BB Drozd - UEFI resolution
|
||||
|
||||
* Jan Kuri (jkuri) - Mojave ISO creation fixes
|
||||
|
||||
* Mike Hardy (mikehardy) - Network documentation improvements
|
||||
|
||||
* CuriousTommy + pickled_monkey - Information on vmxnet3 network adapter
|
||||
|
||||
* Povilas Kanapickas (p12tic) - Flexible ISO generation
|
||||
|
||||
* Dick Marinus (meeuw) - Allow usage of latest Clover
|
||||
|
||||
* Foxlet (foxlet) - Allow installation without existing macOS
|
||||
|
||||
* Ralph Kühnert (redradrat) - Debug fetch-macOS.py script
|
||||
|
||||
* Pellegrino Prevete (tallero) - Better documentation
|
||||
|
||||
* Niklas Korz (niklaskorz) - Stop using brctl
|
||||
|
||||
* Mike Bybee (stereoplegic) - Higher resolution documentation
|
||||
|
||||
* Yarkhan - Passthrough for making iDevices work
|
||||
|
||||
* Yu-Chen Lin (npes87184) - Virtio and qemu-img notes
|
||||
|
||||
* Wen-He - Catalina related fixes
|
||||
|
||||
* Alexander Galato (alet) - OVMF build documentation fixes
|
||||
|
||||
* zimbatm - portability enhancements, cool crazy ideas (thanks!)
|
||||
|
||||
* https://github.com/Leoyzen/KVM-Opencore - OpenCore support
|
||||
|
||||
* Kyle Dayton - UEFI, Clover, and GPU passthrough notes
|
||||
|
||||
- foxtrotdragon - OpenCore language fixes
|
||||
|
||||
- hoshsadiq (Hosh) - fetch-macOS.py improvements
|
||||
|
||||
- philffm - Typo fix in `Big-Sur.md`
|
||||
|
||||
- jviotti - Headless mode fixes
|
||||
|
||||
- offlinehacker - libvirt support
|
||||
|
||||
- hellodeibu - Big Sur support
|
||||
|
||||
- kittywhiskers - Large number of changes - thank you!
|
||||
|
||||
- zimbatm - Thank you!
|
||||
|
||||
- Peter Asanov (ink-splatters) - Fixes for the OS-fetch script
|
||||
|
||||
- Sangwhan "fish" Moon - Big Sur doc enhancements
|
||||
|
||||
- ADawesomeguy - Big Sur doc enhancements, Xcode + OSX-KVM tutorial
|
||||
|
||||
- shmsh9 - Python 3.9.x support
|
||||
|
||||
- Gelma (Andrea Gelmini) - Typo fixes
|
||||
|
||||
- ivy-rew (Reguel) - Greatly improved Big-Sur notes
|
||||
|
||||
- Broly1 - Greatly improved Big-Sur notes
|
||||
|
||||
- mikkeyboi (Michael Leung) - Greatly improved Big-Sur notes
|
||||
|
||||
- CyberShadow (Vladimir Panteleev) - Documentation fixes
|
||||
|
||||
- mikehardy (Mike Hardy) - Docker on macOS notes, CPU support notes
|
||||
|
||||
- Dogr95 - macOS-libvirt-Catalina.xml fixes
|
||||
|
||||
- headkaze - AppleVirtualGraphics.kext tip
|
||||
|
||||
- aydenbottos - macOS-libvirt-Catalina.xml fixes
|
||||
|
||||
- mikkeyboi - Unraid OS stuff
|
||||
|
||||
Note: Individual files have more specific 'credits' in them.
|
2
Makefile
Normal file
|
@ -0,0 +1,2 @@
|
|||
clean:
|
||||
rm -rf content || true
|
30
OVMF-notes.txt
Normal file
|
@ -0,0 +1,30 @@
|
|||
Current OVMF blobs are borrowed from the following URL,
|
||||
|
||||
http://download.proxmox.com/debian/dists/buster/pve-no-subscription/binary-amd64/pve-edk2-firmware_2.20200531-1_all.deb
|
||||
|
||||
OVMF for non-OpenCore boot loaders: https://github.com/kholia/edk2/tree/macOS-NG-v3.
|
||||
|
||||
Building OVMF
|
||||
-------------
|
||||
|
||||
# Add tools and build dependencies:
|
||||
apt-get update
|
||||
apt-get install build-essential git lintian debhelper iasl nasm \
|
||||
python uuid-dev -y
|
||||
|
||||
|
||||
git clone https://github.com/tianocore/edk2
|
||||
cd edk2
|
||||
git submodule update --init
|
||||
make -C BaseTools
|
||||
. edksetup.sh BaseTools
|
||||
build -a X64 -t GCC5 -p OvmfPkg/OvmfPkgX64.dsc -b RELEASE
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
* https://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/
|
||||
|
||||
* https://www.nicksherlock.com/2018/04/patch-ovmf-to-support-macos-in-proxmox-5-1/
|
||||
|
||||
* https://github.com/thenickdude/edk2 (macos-support branch)
|
BIN
OVMF_CODE.fd
Normal file
BIN
OVMF_VARS-1024x768.fd
Normal file
58
OpenCore-Boot-CD.sh
Executable file
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Special thanks to:
|
||||
# https://github.com/Leoyzen/KVM-Opencore
|
||||
# https://github.com/thenickdude/KVM-Opencore/
|
||||
# https://github.com/qemu/qemu/blob/master/docs/usb2.txt
|
||||
#
|
||||
# qemu-img create -f qcow2 mac_hdd_ng.img 128G
|
||||
#
|
||||
# echo 1 > /sys/module/kvm/parameters/ignore_msrs (this is required)
|
||||
|
||||
############################################################################
|
||||
# NOTE: Tweak the "MY_OPTIONS" line in case you are having booting problems!
|
||||
############################################################################
|
||||
|
||||
MY_OPTIONS="+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check"
|
||||
|
||||
# This script works for Big Sur, Catalina, Mojave, and High Sierra. Tested with
|
||||
# macOS 10.15.6, macOS 10.14.6, and macOS 10.13.6
|
||||
|
||||
ALLOCATED_RAM="3072" # MiB
|
||||
CPU_SOCKETS="1"
|
||||
CPU_CORES="2"
|
||||
CPU_THREADS="4"
|
||||
|
||||
REPO_PATH="./"
|
||||
OVMF_DIR="."
|
||||
|
||||
# shellcheck disable=SC2054
|
||||
args=(
|
||||
-enable-kvm -m "$ALLOCATED_RAM" -cpu Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,"$MY_OPTIONS"
|
||||
-machine q35
|
||||
-usb -device usb-kbd -device usb-tablet
|
||||
-smp "$CPU_THREADS",cores="$CPU_CORES",sockets="$CPU_SOCKETS"
|
||||
-device usb-ehci,id=ehci
|
||||
# -device usb-kbd,bus=ehci.0
|
||||
# -device usb-mouse,bus=ehci.0
|
||||
# -device nec-usb-xhci,id=xhci
|
||||
-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
|
||||
-drive if=pflash,format=raw,readonly,file="$REPO_PATH/$OVMF_DIR/OVMF_CODE.fd"
|
||||
-drive if=pflash,format=raw,file="$REPO_PATH/$OVMF_DIR/OVMF_VARS-1024x768.fd"
|
||||
-smbios type=2
|
||||
-device ich9-intel-hda -device hda-duplex
|
||||
-device ich9-ahci,id=sata
|
||||
# -drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file="$REPO_PATH/OpenCore-Catalina/OpenCore-nopicker.qcow2"
|
||||
-drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file="$REPO_PATH/OpenCore-Catalina/OpenCore.qcow2"
|
||||
-device ide-hd,bus=sata.2,drive=OpenCoreBoot
|
||||
-device ide-hd,bus=sata.3,drive=InstallMedia
|
||||
-drive id=InstallMedia,if=none,file="$REPO_PATH/os.dmg",format=raw
|
||||
-drive id=MacHDD,if=none,file="$REPO_PATH/mac_hdd_ng.img",format=qcow2
|
||||
-device ide-hd,bus=sata.4,drive=MacHDD
|
||||
# -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,id=net0,mac=52:54:00:c9:18:27
|
||||
-netdev user,id=net0 -device vmxnet3,netdev=net0,id=net0,mac=52:54:00:c9:18:27
|
||||
-monitor stdio
|
||||
-device VGA,vgamem_mb=128
|
||||
)
|
||||
|
||||
qemu-system-x86_64 "${args[@]}"
|
61
OpenCore-Boot.sh
Executable file
|
@ -0,0 +1,61 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Special thanks to:
|
||||
# https://github.com/Leoyzen/KVM-Opencore
|
||||
# https://github.com/thenickdude/KVM-Opencore/
|
||||
# https://github.com/qemu/qemu/blob/master/docs/usb2.txt
|
||||
#
|
||||
# qemu-img create -f qcow2 mac_hdd_ng.img 128G
|
||||
#
|
||||
# echo 1 > /sys/module/kvm/parameters/ignore_msrs (this is required)
|
||||
|
||||
############################################################################
|
||||
# NOTE: Tweak the "MY_OPTIONS" line in case you are having booting problems!
|
||||
############################################################################
|
||||
|
||||
MY_OPTIONS="+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check"
|
||||
|
||||
# This script works for Big Sur, Catalina, Mojave, and High Sierra. Tested with
|
||||
# macOS 10.15.6, macOS 10.14.6, and macOS 10.13.6
|
||||
|
||||
ALLOCATED_RAM="3072" # MiB
|
||||
CPU_SOCKETS="1"
|
||||
CPU_CORES="2"
|
||||
CPU_THREADS="4"
|
||||
|
||||
REPO_PATH="."
|
||||
OVMF_DIR="."
|
||||
|
||||
# This causes high cpu usage on the *host* side
|
||||
# qemu-system-x86_64 -enable-kvm -m 3072 -cpu Penryn,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,hypervisor=off,vmx=on,kvm=off,$MY_OPTIONS\
|
||||
|
||||
# shellcheck disable=SC2054
|
||||
args=(
|
||||
-enable-kvm -m "$ALLOCATED_RAM" -cpu Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,"$MY_OPTIONS"
|
||||
-machine q35
|
||||
-usb -device usb-kbd -device usb-tablet
|
||||
-smp "$CPU_THREADS",cores="$CPU_CORES",sockets="$CPU_SOCKETS"
|
||||
-device usb-ehci,id=ehci
|
||||
# -device usb-kbd,bus=ehci.0
|
||||
# -device usb-mouse,bus=ehci.0
|
||||
# -device nec-usb-xhci,id=xhci
|
||||
-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
|
||||
-drive if=pflash,format=raw,readonly,file="$REPO_PATH/$OVMF_DIR/OVMF_CODE.fd"
|
||||
-drive if=pflash,format=raw,file="$REPO_PATH/$OVMF_DIR/OVMF_VARS-1024x768.fd"
|
||||
-smbios type=2
|
||||
-device ich9-intel-hda -device hda-duplex
|
||||
-device ich9-ahci,id=sata
|
||||
# -drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file="$REPO_PATH/OpenCore-Catalina/OpenCore-nopicker.qcow2"
|
||||
-drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file="$REPO_PATH/OpenCore-Catalina/OpenCore.qcow2"
|
||||
-device ide-hd,bus=sata.2,drive=OpenCoreBoot
|
||||
-device ide-hd,bus=sata.3,drive=InstallMedia
|
||||
-drive id=InstallMedia,if=none,file="$REPO_PATH/BaseSystem.img",format=raw
|
||||
-drive id=MacHDD,if=none,file="$REPO_PATH/mac_hdd_ng.img",format=qcow2
|
||||
-device ide-hd,bus=sata.4,drive=MacHDD
|
||||
# -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,id=net0,mac=52:54:00:c9:18:27
|
||||
-netdev user,id=net0 -device vmxnet3,netdev=net0,id=net0,mac=52:54:00:c9:18:27
|
||||
-monitor stdio
|
||||
-device VGA,vgamem_mb=128
|
||||
)
|
||||
|
||||
qemu-system-x86_64 "${args[@]}"
|
BIN
OpenCore-Catalina/EFI/BOOT/BOOTx64.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/ACPI/SSDT-DTGP.aml
Normal file
BIN
OpenCore-Catalina/EFI/OC/ACPI/SSDT-EC.aml
Normal file
BIN
OpenCore-Catalina/EFI/OC/ACPI/SSDT-EHCI.aml
Normal file
BIN
OpenCore-Catalina/EFI/OC/ACPI/SSDT-PLUG.aml
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/AudioDxe.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/CrScreenshotDxe.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/HiiDatabase.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/NvmExpressDxe.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/OpenCanopy.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/OpenHfsPlus.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/OpenPartitionDxe.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/OpenRuntime.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/OpenUsbKbDxe.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/Ps2KeyboardDxe.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/Ps2MouseDxe.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/UsbMouseDxe.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/VBoxHfs.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Drivers/XhciDxe.efi
Normal file
|
@ -0,0 +1,66 @@
|
|||
<?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>BuildMachineOSBuild</key>
|
||||
<string>18A391011</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>111.1.18, Copyright 2008-2016 Apple Inc. All rights reserved.</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AGPMInjector</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>AGPMInjector</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>KEXT</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.7.3-AGPMInjector</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>111.1.18</string>
|
||||
<key>IOKitPersonalities</key>
|
||||
<dict>
|
||||
<key>AGPM</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AGPM</string>
|
||||
<key>IOClass</key>
|
||||
<string>AGPMController</string>
|
||||
<key>IONameMatch</key>
|
||||
<string>AGPMEnabler</string>
|
||||
<key>IOProviderClass</key>
|
||||
<string>IOPlatformPluginDevice</string>
|
||||
<key>Machines</key>
|
||||
<dict>
|
||||
<key>iMacPro1,1</key>
|
||||
<dict>
|
||||
<key>GFX0</key>
|
||||
<dict>
|
||||
<key>AGDCEnabled</key>
|
||||
<integer>1</integer>
|
||||
<key>Heuristic</key>
|
||||
<dict>
|
||||
<key>ID</key>
|
||||
<integer>4</integer>
|
||||
</dict>
|
||||
<key>control-id</key>
|
||||
<integer>17</integer>
|
||||
<key>max-power-state</key>
|
||||
<integer>15</integer>
|
||||
<key>min-power-state</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2008-2016 Apple Inc. All rights reserved.</string>
|
||||
<key>OSBundleRequired</key>
|
||||
<string>Safe Boot</string>
|
||||
</dict>
|
||||
</plist>
|
12282
OpenCore-Catalina/EFI/OC/Kexts/AppleALC.kext/Contents/Info.plist
Normal file
BIN
OpenCore-Catalina/EFI/OC/Kexts/AppleALC.kext/Contents/MacOS/AppleALC
Executable file
|
@ -0,0 +1,115 @@
|
|||
<?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>files</key>
|
||||
<dict/>
|
||||
<key>files2</key>
|
||||
<dict/>
|
||||
<key>rules</key>
|
||||
<dict>
|
||||
<key>^Resources/</key>
|
||||
<true/>
|
||||
<key>^Resources/.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Resources/Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^version.plist$</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>rules2</key>
|
||||
<dict>
|
||||
<key>.*\.dSYM($|/)</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>11</real>
|
||||
</dict>
|
||||
<key>^(.*/)?\.DS_Store$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>2000</real>
|
||||
</dict>
|
||||
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^Info\.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^PkgInfo$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^Resources/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Resources/Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^[^/]+$</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^embedded\.provisionprofile$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^version\.plist$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
85
OpenCore-Catalina/EFI/OC/Kexts/Lilu.kext/Contents/Info.plist
Normal file
|
@ -0,0 +1,85 @@
|
|||
<?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>BuildMachineOSBuild</key>
|
||||
<string>19H2</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>Lilu</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>as.vit9696.Lilu</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Lilu</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>KEXT</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.4.9</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.4.9</string>
|
||||
<key>DTCompiler</key>
|
||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||
<key>DTPlatformBuild</key>
|
||||
<string>12A7209</string>
|
||||
<key>DTPlatformName</key>
|
||||
<string>macosx</string>
|
||||
<key>DTPlatformVersion</key>
|
||||
<string>10.15.6</string>
|
||||
<key>DTSDKBuild</key>
|
||||
<string>19G68</string>
|
||||
<key>DTSDKName</key>
|
||||
<string>macosx10.15</string>
|
||||
<key>DTXcode</key>
|
||||
<string>1200</string>
|
||||
<key>DTXcodeBuild</key>
|
||||
<string>12A7209</string>
|
||||
<key>IOKitPersonalities</key>
|
||||
<dict>
|
||||
<key>as.vit9696.Lilu</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>as.vit9696.Lilu</string>
|
||||
<key>IOClass</key>
|
||||
<string>Lilu</string>
|
||||
<key>IOMatchCategory</key>
|
||||
<string>Lilu</string>
|
||||
<key>IOProviderClass</key>
|
||||
<string>IOResources</string>
|
||||
<key>IOResourceMatch</key>
|
||||
<string>IOKit</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.6</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2016-2020 vit9696. All rights reserved.</string>
|
||||
<key>OSBundleCompatibleVersion</key>
|
||||
<string>1.2.0</string>
|
||||
<key>OSBundleLibraries</key>
|
||||
<dict>
|
||||
<key>com.apple.kpi.bsd</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.dsep</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.iokit</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.libkern</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.mach</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.unsupported</key>
|
||||
<string>10.0.0</string>
|
||||
</dict>
|
||||
<key>OSBundleRequired</key>
|
||||
<string>Root</string>
|
||||
</dict>
|
||||
</plist>
|
BIN
OpenCore-Catalina/EFI/OC/Kexts/Lilu.kext/Contents/MacOS/Lilu
Executable file
|
@ -0,0 +1,64 @@
|
|||
<?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>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>MCEReporterDisabler 0.5, Copyright (GPLv2) © 2017 by RehabMan. All rights reserved.</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.rehabman.disabler.MCEReporter</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>MCEReporterDisabler</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>KEXT</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>0.5</string>
|
||||
<key>IOKitPersonalities</key>
|
||||
<dict>
|
||||
<key>MCEInterruptControllerDisabler</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleIntelMCEReporter</string>
|
||||
<key>IOClass</key>
|
||||
<string>IOService</string>
|
||||
<key>IOMatchCategory</key>
|
||||
<string>AppleIntelMCEInterruptController</string>
|
||||
<key>IOProbeScore</key>
|
||||
<integer>5000</integer>
|
||||
<key>IOPropertyMatch</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>board-id</key>
|
||||
<string>Mac-F60DEB81FF30ACF6</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>board-id</key>
|
||||
<string>Mac-7BA5B2D9E42DDD94</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>board-id</key>
|
||||
<string>Mac-27AD2F918AE68F61</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>IOProviderClass</key>
|
||||
<string>IOPlatformExpertDevice</string>
|
||||
</dict>
|
||||
<key>MCEReporterDisabler</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleIntelMCEReporter</string>
|
||||
<key>IOClass</key>
|
||||
<string>IOService</string>
|
||||
<key>IOMatchCategory</key>
|
||||
<string>AppleIntelMCEReporter</string>
|
||||
<key>IOProbeScore</key>
|
||||
<integer>5000</integer>
|
||||
<key>IOProviderClass</key>
|
||||
<string>AppleIntelMCEInterruptNub</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
245
OpenCore-Catalina/EFI/OC/Kexts/USBPorts.kext/Contents/Info.plist
Normal file
|
@ -0,0 +1,245 @@
|
|||
<?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>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>1.0 Copyright © 2018-2020 Headsoft. All rights reserved.</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.Headsoft.USBPorts</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>USBPorts</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>KEXT</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>IOKitPersonalities</key>
|
||||
<dict>
|
||||
<key>iMacPro1,1-EH01</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleUSBMergeNub</string>
|
||||
<key>IOClass</key>
|
||||
<string>AppleUSBMergeNub</string>
|
||||
<key>IONameMatch</key>
|
||||
<string>EH01</string>
|
||||
<key>IOPCIPrimaryMatch</key>
|
||||
<string>0x293a8086</string>
|
||||
<key>IOProbeScore</key>
|
||||
<integer>5000</integer>
|
||||
<key>IOProviderClass</key>
|
||||
<string>AppleUSBEHCIPCI</string>
|
||||
<key>IOProviderMergeProperties</key>
|
||||
<dict>
|
||||
<key>port-count</key>
|
||||
<data>
|
||||
BgAAAA==
|
||||
</data>
|
||||
<key>ports</key>
|
||||
<dict>
|
||||
<key>HS11</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
AQAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>HS12</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
AgAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>HS13</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
AwAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>HS14</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
BAAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>HS15</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
BQAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>HS16</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
BgAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>model</key>
|
||||
<string>iMacPro1,1</string>
|
||||
</dict>
|
||||
<key>iMacPro1,1-UHC1</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleUSBMergeNub</string>
|
||||
<key>IOClass</key>
|
||||
<string>AppleUSBMergeNub</string>
|
||||
<key>IONameMatch</key>
|
||||
<string>UHC1</string>
|
||||
<key>IOPCIPrimaryMatch</key>
|
||||
<string>0x29348086</string>
|
||||
<key>IOProbeScore</key>
|
||||
<integer>5000</integer>
|
||||
<key>IOProviderClass</key>
|
||||
<string>AppleUSBUHCIPCI</string>
|
||||
<key>IOProviderMergeProperties</key>
|
||||
<dict>
|
||||
<key>port-count</key>
|
||||
<data>
|
||||
AgAAAA==
|
||||
</data>
|
||||
<key>ports</key>
|
||||
<dict>
|
||||
<key>LS01</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
AQAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>LS02</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
AgAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>model</key>
|
||||
<string>iMacPro1,1</string>
|
||||
</dict>
|
||||
<key>iMacPro1,1-UHC2</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleUSBMergeNub</string>
|
||||
<key>IOClass</key>
|
||||
<string>AppleUSBMergeNub</string>
|
||||
<key>IONameMatch</key>
|
||||
<string>UHC2</string>
|
||||
<key>IOPCIPrimaryMatch</key>
|
||||
<string>0x29358086</string>
|
||||
<key>IOProbeScore</key>
|
||||
<integer>5000</integer>
|
||||
<key>IOProviderClass</key>
|
||||
<string>AppleUSBUHCIPCI</string>
|
||||
<key>IOProviderMergeProperties</key>
|
||||
<dict>
|
||||
<key>port-count</key>
|
||||
<data>
|
||||
AgAAAA==
|
||||
</data>
|
||||
<key>ports</key>
|
||||
<dict>
|
||||
<key>LS03</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
AQAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>LS04</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
AgAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>model</key>
|
||||
<string>iMacPro1,1</string>
|
||||
</dict>
|
||||
<key>iMacPro1,1-UHC3</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleUSBMergeNub</string>
|
||||
<key>IOClass</key>
|
||||
<string>AppleUSBMergeNub</string>
|
||||
<key>IONameMatch</key>
|
||||
<string>UHC3</string>
|
||||
<key>IOPCIPrimaryMatch</key>
|
||||
<string>0x29368086</string>
|
||||
<key>IOProbeScore</key>
|
||||
<integer>5000</integer>
|
||||
<key>IOProviderClass</key>
|
||||
<string>AppleUSBUHCIPCI</string>
|
||||
<key>IOProviderMergeProperties</key>
|
||||
<dict>
|
||||
<key>port-count</key>
|
||||
<data>
|
||||
AgAAAA==
|
||||
</data>
|
||||
<key>ports</key>
|
||||
<dict>
|
||||
<key>LS05</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
AQAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>LS06</key>
|
||||
<dict>
|
||||
<key>UsbConnector</key>
|
||||
<integer>0</integer>
|
||||
<key>port</key>
|
||||
<data>
|
||||
AgAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>model</key>
|
||||
<string>iMacPro1,1</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>OSBundleRequired</key>
|
||||
<string>Root</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,414 @@
|
|||
<?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>BuildMachineOSBuild</key>
|
||||
<string>19H2</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>VirtualSMC</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>as.vit9696.VirtualSMC</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>VirtualSMC</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>KEXT</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.1.8</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.1.8</string>
|
||||
<key>DTCompiler</key>
|
||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||
<key>DTPlatformBuild</key>
|
||||
<string>12A7209</string>
|
||||
<key>DTPlatformName</key>
|
||||
<string>macosx</string>
|
||||
<key>DTPlatformVersion</key>
|
||||
<string>10.15.6</string>
|
||||
<key>DTSDKBuild</key>
|
||||
<string>19G68</string>
|
||||
<key>DTSDKName</key>
|
||||
<string>macosx10.15</string>
|
||||
<key>DTXcode</key>
|
||||
<string>1200</string>
|
||||
<key>DTXcodeBuild</key>
|
||||
<string>12A7209</string>
|
||||
<key>IOKitPersonalities</key>
|
||||
<dict>
|
||||
<key>as.vit9696.VirtualSMC</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>as.vit9696.VirtualSMC</string>
|
||||
<key>IOClass</key>
|
||||
<string>VirtualSMC</string>
|
||||
<key>IODeviceMemory</key>
|
||||
<array>
|
||||
<array>
|
||||
<dict>
|
||||
<key>address</key>
|
||||
<integer>768</integer>
|
||||
<key>length</key>
|
||||
<integer>32</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<array>
|
||||
<dict>
|
||||
<key>address</key>
|
||||
<integer>4277141504</integer>
|
||||
<key>length</key>
|
||||
<integer>65536</integer>
|
||||
</dict>
|
||||
</array>
|
||||
</array>
|
||||
<key>IOInterruptControllers</key>
|
||||
<array>
|
||||
<string>io-apic-0</string>
|
||||
</array>
|
||||
<key>IOInterruptSpecifiers</key>
|
||||
<array>
|
||||
<data>
|
||||
BgAAAAAAAAA=
|
||||
</data>
|
||||
</array>
|
||||
<key>IOMatchCategory</key>
|
||||
<string>IOACPIPlatformDevice</string>
|
||||
<key>IOName</key>
|
||||
<string>SMC</string>
|
||||
<key>IOProbeScore</key>
|
||||
<integer>60000</integer>
|
||||
<key>IOProviderClass</key>
|
||||
<string>AppleACPIPlatformExpert</string>
|
||||
<key>Keystore</key>
|
||||
<dict>
|
||||
<key>Generic</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
iA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>Total fan number, this should be put to a plugin</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
Rk51bQ==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
dWk4IA==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
gA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>CPU plimit</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
TVNUYw==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
dWk4IA==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
gA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>FAN plimit (supposedly)</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
TVNUZg==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
dWk4IA==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
gA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>Memory plimit</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
TVNUbQ==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
dWk4IA==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
gA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>This should be 1 on laptops, and is overriden by sensors</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
QkFUUA==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
ZmxhZw==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
gA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>Only MacPros have custom illumination controllers</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
THNOTQ==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
dWk4IA==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
</array>
|
||||
<key>GenericDesktopV1</key>
|
||||
<array/>
|
||||
<key>GenericDesktopV2</key>
|
||||
<array/>
|
||||
<key>GenericLaptopV1</key>
|
||||
<array/>
|
||||
<key>GenericLaptopV2</key>
|
||||
<array/>
|
||||
<key>GenericV1</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
gA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>GPU plimit</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
TVNUZw==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
dWk4IA==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
</array>
|
||||
<key>GenericV2</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
gA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>E plimit (???)</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
TVNUZQ==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
dWk4IA==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
gA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>I plimit (???)</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
TVNUaQ==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
dWk4IA==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>attr</key>
|
||||
<data>
|
||||
gA==
|
||||
</data>
|
||||
<key>comment</key>
|
||||
<string>J plimit (???)</string>
|
||||
<key>name</key>
|
||||
<data>
|
||||
TVNUag==
|
||||
</data>
|
||||
<key>type</key>
|
||||
<data>
|
||||
dWk4IA==
|
||||
</data>
|
||||
<key>value</key>
|
||||
<data>
|
||||
AA==
|
||||
</data>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<key>ModelInfo</key>
|
||||
<dict>
|
||||
<key>GenericV1</key>
|
||||
<dict>
|
||||
<key>branch</key>
|
||||
<data>
|
||||
ajUyAAAAAAA=
|
||||
</data>
|
||||
<key>hwname</key>
|
||||
<data>
|
||||
c21jLXBpa2V0b24A
|
||||
</data>
|
||||
<key>platform</key>
|
||||
<data>
|
||||
ajUyAAAAAAA=
|
||||
</data>
|
||||
<key>rev</key>
|
||||
<data>
|
||||
AXQPAAAE
|
||||
</data>
|
||||
<key>revfb</key>
|
||||
<data>
|
||||
AXQPAAAE
|
||||
</data>
|
||||
<key>revfu</key>
|
||||
<data>
|
||||
AXQPAAAE
|
||||
</data>
|
||||
</dict>
|
||||
<key>GenericV2</key>
|
||||
<dict>
|
||||
<key>branch</key>
|
||||
<data>
|
||||
ajUyAAAAAAA=
|
||||
</data>
|
||||
<key>hwname</key>
|
||||
<data>
|
||||
c21jLWh1cm9ucml2ZXIA
|
||||
</data>
|
||||
<key>platform</key>
|
||||
<data>
|
||||
ajUyAAAAAAA=
|
||||
</data>
|
||||
<key>rev</key>
|
||||
<data>
|
||||
AigPAAAH
|
||||
</data>
|
||||
<key>revfb</key>
|
||||
<data>
|
||||
AigPAAAH
|
||||
</data>
|
||||
<key>revfu</key>
|
||||
<data>
|
||||
AigPAAAH
|
||||
</data>
|
||||
</dict>
|
||||
<key>GenericV3</key>
|
||||
<dict>
|
||||
<key>hwname</key>
|
||||
<data>
|
||||
c21jLWh1cm9ucml2ZXIA
|
||||
</data>
|
||||
<key>platform</key>
|
||||
<data>
|
||||
ajUyAAAAAAA=
|
||||
</data>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>_STA</key>
|
||||
<integer>11</integer>
|
||||
<key>name</key>
|
||||
<data>
|
||||
QVBQMDAwMQA=
|
||||
</data>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.6</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2017 vit9696. All rights reserved.</string>
|
||||
<key>OSBundleCompatibleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>OSBundleLibraries</key>
|
||||
<dict>
|
||||
<key>as.vit9696.Lilu</key>
|
||||
<string>1.2.0</string>
|
||||
<key>com.apple.iokit.IOACPIFamily</key>
|
||||
<string>1.0.0d1</string>
|
||||
<key>com.apple.kpi.bsd</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.dsep</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.iokit</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.libkern</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.mach</key>
|
||||
<string>10.0.0</string>
|
||||
<key>com.apple.kpi.unsupported</key>
|
||||
<string>10.0.0</string>
|
||||
</dict>
|
||||
<key>OSBundleRequired</key>
|
||||
<string>Root</string>
|
||||
</dict>
|
||||
</plist>
|
BIN
OpenCore-Catalina/EFI/OC/Kexts/VirtualSMC.kext/Contents/MacOS/VirtualSMC
Executable file
|
@ -0,0 +1,115 @@
|
|||
<?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>files</key>
|
||||
<dict/>
|
||||
<key>files2</key>
|
||||
<dict/>
|
||||
<key>rules</key>
|
||||
<dict>
|
||||
<key>^Resources/</key>
|
||||
<true/>
|
||||
<key>^Resources/.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Resources/Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^version.plist$</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>rules2</key>
|
||||
<dict>
|
||||
<key>.*\.dSYM($|/)</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>11</real>
|
||||
</dict>
|
||||
<key>^(.*/)?\.DS_Store$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>2000</real>
|
||||
</dict>
|
||||
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^Info\.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^PkgInfo$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^Resources/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Resources/Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^[^/]+$</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^embedded\.provisionprofile$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^version\.plist$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,149 @@
|
|||
<?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>BuildMachineOSBuild</key>
|
||||
<string>15G31</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>VoodooHDA</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.voodoo.driver.VoodooHDA</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>VoodooHDA</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>KEXT</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.9.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.9.2</string>
|
||||
<key>DTCompiler</key>
|
||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||
<key>DTPlatformBuild</key>
|
||||
<string>7D1014</string>
|
||||
<key>DTPlatformVersion</key>
|
||||
<string>GM</string>
|
||||
<key>DTSDKBuild</key>
|
||||
<string>15E60</string>
|
||||
<key>DTSDKName</key>
|
||||
<string>macosx10.11</string>
|
||||
<key>DTXcode</key>
|
||||
<string>0731</string>
|
||||
<key>DTXcodeBuild</key>
|
||||
<string>7D1014</string>
|
||||
<key>IOKitPersonalities</key>
|
||||
<dict>
|
||||
<key>VoodooHDA</key>
|
||||
<dict>
|
||||
<key>AllowMSI</key>
|
||||
<true/>
|
||||
<key>Boost</key>
|
||||
<integer>1</integer>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.voodoo.driver.VoodooHDA</string>
|
||||
<key>DisableInputMonitor</key>
|
||||
<true/>
|
||||
<key>IOClass</key>
|
||||
<string>VoodooHDADevice</string>
|
||||
<key>IOMatchCategory</key>
|
||||
<string>VoodooHDADevice</string>
|
||||
<key>IOPCIClassMatch</key>
|
||||
<string>0x04020000&0xfffe0000</string>
|
||||
<key>IOProviderClass</key>
|
||||
<string>IOPCIDevice</string>
|
||||
<key>IOUserClientClass</key>
|
||||
<string>VoodooHDAUserClient</string>
|
||||
<key>InhibitCache</key>
|
||||
<false/>
|
||||
<key>MixerValues</key>
|
||||
<dict>
|
||||
<key>PCM</key>
|
||||
<integer>100</integer>
|
||||
<key>Rec</key>
|
||||
<integer>90</integer>
|
||||
<key>iGain</key>
|
||||
<integer>90</integer>
|
||||
<key>iMix</key>
|
||||
<integer>100</integer>
|
||||
</dict>
|
||||
<key>NodesToPatch</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Caps</key>
|
||||
<string>0x373e</string>
|
||||
<key>Codec</key>
|
||||
<integer>4</integer>
|
||||
<key>Comment</key>
|
||||
<string>Example of possible values</string>
|
||||
<key>Config</key>
|
||||
<string>0x90a70120</string>
|
||||
<key>Conns</key>
|
||||
<string>12,13,24</string>
|
||||
<key>Control</key>
|
||||
<string>20</string>
|
||||
<key>DAC</key>
|
||||
<string>2</string>
|
||||
<key>Enable</key>
|
||||
<string>1</string>
|
||||
<key>Node</key>
|
||||
<integer>12</integer>
|
||||
<key>Select</key>
|
||||
<string>13</string>
|
||||
<key>SwitchCh</key>
|
||||
<string>0</string>
|
||||
<key>Type</key>
|
||||
<string>4</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Codec</key>
|
||||
<integer>2</integer>
|
||||
<key>Comment</key>
|
||||
<string>To disable back sound on ALC codec set enable=0</string>
|
||||
<key>Enable</key>
|
||||
<string>1</string>
|
||||
<key>Node</key>
|
||||
<integer>11</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Noise</key>
|
||||
<integer>0</integer>
|
||||
<key>Vectorize</key>
|
||||
<true/>
|
||||
<key>VoodooHDAEnableHalfMicVolumeFix</key>
|
||||
<false/>
|
||||
<key>VoodooHDAEnableHalfVolumeFix</key>
|
||||
<false/>
|
||||
<key>VoodooHDAEnableMuteFix</key>
|
||||
<false/>
|
||||
<key>VoodooHDAEnableVolumeChangeFix</key>
|
||||
<false/>
|
||||
<key>VoodooHDAVerboseLevel</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>OSBundleLibraries</key>
|
||||
<dict>
|
||||
<key>com.apple.iokit.IOAudioFamily</key>
|
||||
<string>1.1fc9</string>
|
||||
<key>com.apple.iokit.IOPCIFamily</key>
|
||||
<string>2.1</string>
|
||||
<key>com.apple.kpi.iokit</key>
|
||||
<string>9.0.0</string>
|
||||
<key>com.apple.kpi.libkern</key>
|
||||
<string>9.0.0</string>
|
||||
<key>com.apple.kpi.mach</key>
|
||||
<string>9.0.0</string>
|
||||
<key>com.apple.kpi.unsupported</key>
|
||||
<string>9.0.0</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
BIN
OpenCore-Catalina/EFI/OC/Kexts/VoodooHDA.kext/Contents/MacOS/VoodooHDA
Executable file
|
@ -0,0 +1,105 @@
|
|||
<?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>files</key>
|
||||
<dict/>
|
||||
<key>files2</key>
|
||||
<dict/>
|
||||
<key>rules</key>
|
||||
<dict>
|
||||
<key>^Resources/</key>
|
||||
<true/>
|
||||
<key>^Resources/.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^version.plist$</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>rules2</key>
|
||||
<dict>
|
||||
<key>.*\.dSYM($|/)</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>11</real>
|
||||
</dict>
|
||||
<key>^(.*/)?\.DS_Store$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>2000</real>
|
||||
</dict>
|
||||
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^Info\.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^PkgInfo$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^Resources/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^[^/]+$</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^embedded\.provisionprofile$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^version\.plist$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,106 @@
|
|||
<?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>BuildMachineOSBuild</key>
|
||||
<string>19H2</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>WhateverGreen</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>as.vit9696.WhateverGreen</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>WhateverGreen</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>KEXT</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.4.4</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.4.4</string>
|
||||
<key>DTCompiler</key>
|
||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||
<key>DTPlatformBuild</key>
|
||||
<string>12A7209</string>
|
||||
<key>DTPlatformName</key>
|
||||
<string>macosx</string>
|
||||
<key>DTPlatformVersion</key>
|
||||
<string>10.15.6</string>
|
||||
<key>DTSDKBuild</key>
|
||||
<string>19G68</string>
|
||||
<key>DTSDKName</key>
|
||||
<string>macosx10.15</string>
|
||||
<key>DTXcode</key>
|
||||
<string>1200</string>
|
||||
<key>DTXcodeBuild</key>
|
||||
<string>12A7209</string>
|
||||
<key>IOKitPersonalities</key>
|
||||
<dict>
|
||||
<key>NVHDAEnabler</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>as.vit9696.WhateverGreen</string>
|
||||
<key>IOClass</key>
|
||||
<string>NVHDAEnabler</string>
|
||||
<key>IOMatchCategory</key>
|
||||
<string>IOFramebuffer</string>
|
||||
<key>IOPCIClassMatch</key>
|
||||
<string>0x03000000&0xff000000</string>
|
||||
<key>IOPCIMatch</key>
|
||||
<string>0x000010de&0x0000ffff</string>
|
||||
<key>IOProbeScore</key>
|
||||
<integer>300000</integer>
|
||||
<key>IOProviderClass</key>
|
||||
<string>IOPCIDevice</string>
|
||||
</dict>
|
||||
<key>as.vit9696.WhateverGreen</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>as.vit9696.WhateverGreen</string>
|
||||
<key>IOClass</key>
|
||||
<string>WhateverGreen</string>
|
||||
<key>IOMatchCategory</key>
|
||||
<string>WhateverGreen</string>
|
||||
<key>IOProviderClass</key>
|
||||
<string>IOResources</string>
|
||||
<key>IOResourceMatch</key>
|
||||
<string>IOKit</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.8</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2018 vit9696. All rights reserved.</string>
|
||||
<key>OSBundleCompatibleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>OSBundleLibraries</key>
|
||||
<dict>
|
||||
<key>as.vit9696.Lilu</key>
|
||||
<string>1.2.0</string>
|
||||
<key>com.apple.iokit.IOPCIFamily</key>
|
||||
<string>1.0.0b1</string>
|
||||
<key>com.apple.kpi.bsd</key>
|
||||
<string>12.0.0</string>
|
||||
<key>com.apple.kpi.dsep</key>
|
||||
<string>12.0.0</string>
|
||||
<key>com.apple.kpi.iokit</key>
|
||||
<string>12.0.0</string>
|
||||
<key>com.apple.kpi.libkern</key>
|
||||
<string>12.0.0</string>
|
||||
<key>com.apple.kpi.mach</key>
|
||||
<string>12.0.0</string>
|
||||
<key>com.apple.kpi.unsupported</key>
|
||||
<string>12.0.0</string>
|
||||
</dict>
|
||||
<key>OSBundleRequired</key>
|
||||
<string>Root</string>
|
||||
</dict>
|
||||
</plist>
|
BIN
OpenCore-Catalina/EFI/OC/Kexts/WhateverGreen.kext/Contents/MacOS/WhateverGreen
Executable file
|
@ -0,0 +1,115 @@
|
|||
<?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>files</key>
|
||||
<dict/>
|
||||
<key>files2</key>
|
||||
<dict/>
|
||||
<key>rules</key>
|
||||
<dict>
|
||||
<key>^Resources/</key>
|
||||
<true/>
|
||||
<key>^Resources/.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Resources/Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^version.plist$</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>rules2</key>
|
||||
<dict>
|
||||
<key>.*\.dSYM($|/)</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>11</real>
|
||||
</dict>
|
||||
<key>^(.*/)?\.DS_Store$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>2000</real>
|
||||
</dict>
|
||||
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^Info\.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^PkgInfo$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^Resources/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Resources/Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^[^/]+$</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^embedded\.provisionprofile$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^version\.plist$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
BIN
OpenCore-Catalina/EFI/OC/OpenCore.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/BootKicker.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/ChipTune.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/CleanNvram.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/GopStop.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/KeyTester.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/MmapDump.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/OpenControl.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/OpenShell.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/ResetSystem.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/RtcRw.efi
Normal file
BIN
OpenCore-Catalina/EFI/OC/Tools/VerifyMsrE2.efi
Normal file
BIN
OpenCore-Catalina/OpenCore-Passthrough.qcow2
Normal file
BIN
OpenCore-Catalina/OpenCore-nopicker.qcow2
Normal file
BIN
OpenCore-Catalina/OpenCore.qcow2
Normal file
50
OpenCore-Catalina/README.md
Normal file
|
@ -0,0 +1,50 @@
|
|||
### Notes
|
||||
|
||||
Catalina installs the same way as Mojave.
|
||||
|
||||
Tested with macOS Catalina 10.15.7 with OpenCore-0.6.7-RELEASE.zip release
|
||||
(March, 2021).
|
||||
|
||||
Note: Our `config.plist` is buggy and we need to fix it!
|
||||
|
||||
Note: Use `create_iso_catalina.sh` for generating a macOS Catalina based "ISO"
|
||||
(actually DMG) image.
|
||||
|
||||
Attention: Use 64-bit Ubuntu 20.04 LTS as the host OS for "best" results.
|
||||
Guestfish output results may vary across platforms.
|
||||
|
||||
```
|
||||
git submodule init && git submodule update
|
||||
|
||||
cp -a ../resources/OcBinaryData/Resources EFI/OC/Resources # symlink hacks don't work
|
||||
|
||||
# Normal OpenCore Image
|
||||
rm -f OpenCore.qcow2; sudo ./opencore-image-ng.sh --cfg config.plist --img OpenCore.qcow2
|
||||
|
||||
# OpenCore w/ ShowPicker Disabled
|
||||
rm -f OpenCore-nopicker.qcow2; sudo ./opencore-image-ng.sh --cfg config-nopicker.plist --img OpenCore-nopicker.qcow2
|
||||
|
||||
# Passthrough Optimized OpenCore
|
||||
rm -f OpenCore-Passthrough.qcow2; sudo ./opencore-image-ng.sh --cfg config-pt.plist --img OpenCore-Passthrough.qcow2
|
||||
```
|
||||
|
||||
Note: https://github.com/thenickdude/KVM-Opencore is one of the best resources
|
||||
for customizing `OpenCore.qcow2`. Thanks Nick! :)
|
||||
|
||||
### Links
|
||||
|
||||
* https://github.com/acidanthera/OpenCorePkg/releases
|
||||
|
||||
* https://github.com/williambj1/OpenCore-Factory/releases
|
||||
|
||||
* https://opencore.slowgeek.com/ (neat!)
|
||||
|
||||
* https://github.com/chris1111/USB-3.0-NEC/releases (thanks Chris!)
|
||||
|
||||
* https://github.com/khronokernel/Opencore-Vanilla-Desktop-Guide/blob/master/clover-conversion/clover-efi.md
|
||||
|
||||
* https://insanelymacdiscord.github.io/Getting-Started-With-OpenCore/
|
||||
|
||||
* https://dortania.github.io/Anti-Hackintosh-Buyers-Guide/
|
||||
|
||||
* https://dortania.github.io/OpenCore-Desktop-Guide/troubleshooting/debug.html
|
883
OpenCore-Catalina/config-nopicker.plist
Normal file
|
@ -0,0 +1,883 @@
|
|||
<?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>ACPI</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>add DTGP method</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-DTGP.aml</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Fake EC and USBX Power</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-EC.aml</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>USB 2.0 Injection</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-EHCI.aml</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>CPU AGPM Plugin=1</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-PLUG.aml</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Delete</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>All</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Delete CpuPm</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>OemTableId</key>
|
||||
<data>Q3B1UG0AAAA=</data>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data>U1NEVA==</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>All</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Delete Cpu0Ist</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>OemTableId</key>
|
||||
<data>Q3B1MElzdAA=</data>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data>U1NEVA==</data>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Patch</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>_Q11 to XQ11</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>X1ExMQ==</data>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>OemTableId</key>
|
||||
<data></data>
|
||||
<key>Replace</key>
|
||||
<data>WFExMQ==</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data></data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>_Q12 to XQ12</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>X1ExMg==</data>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>OemTableId</key>
|
||||
<data></data>
|
||||
<key>Replace</key>
|
||||
<data>WFExMg==</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data></data>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>FadtEnableReset</key>
|
||||
<false/>
|
||||
<key>NormalizeHeaders</key>
|
||||
<false/>
|
||||
<key>RebaseRegions</key>
|
||||
<false/>
|
||||
<key>ResetHwSig</key>
|
||||
<false/>
|
||||
<key>ResetLogoStatus</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Booter</key>
|
||||
<dict>
|
||||
<key>MmioWhitelist</key>
|
||||
<array/>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>AvoidRuntimeDefrag</key>
|
||||
<true/>
|
||||
<key>DevirtualiseMmio</key>
|
||||
<false/>
|
||||
<key>DisableSingleUser</key>
|
||||
<false/>
|
||||
<key>DisableVariableWrite</key>
|
||||
<false/>
|
||||
<key>DiscardHibernateMap</key>
|
||||
<false/>
|
||||
<key>EnableSafeModeSlide</key>
|
||||
<true/>
|
||||
<key>EnableWriteUnprotector</key>
|
||||
<true/>
|
||||
<key>ForceExitBootServices</key>
|
||||
<false/>
|
||||
<key>ProtectMemoryRegions</key>
|
||||
<false/>
|
||||
<key>ProtectSecureBoot</key>
|
||||
<false/>
|
||||
<key>ProtectUefiServices</key>
|
||||
<false/>
|
||||
<key>ProvideCustomSlide</key>
|
||||
<true/>
|
||||
<key>ProvideMaxSlide</key>
|
||||
<integer>0</integer>
|
||||
<key>RebuildAppleMemoryMap</key>
|
||||
<false/>
|
||||
<key>SetupVirtualMap</key>
|
||||
<false/>
|
||||
<key>SignalAppleOS</key>
|
||||
<false/>
|
||||
<key>SyncRuntimePermissions</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>DeviceProperties</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<dict>
|
||||
<key>PciRoot(0x1)/Pci(0x1F,0x0)</key>
|
||||
<dict>
|
||||
<key>compatible</key>
|
||||
<string>pci8086,2916</string>
|
||||
<key>device-id</key>
|
||||
<data>
|
||||
FikA
|
||||
</data>
|
||||
<key>name</key>
|
||||
<string>pci8086,2916</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Delete</key>
|
||||
<dict>
|
||||
<key>PciRoot(0x0)/Pci(0x1b,0x0)</key>
|
||||
<array>
|
||||
<string>MaximumBootBeepVolume</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Kernel</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>Any</string>
|
||||
<key>BundlePath</key>
|
||||
<string>VoodooHDA.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/VoodooHDA</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>Lilu.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Patch engine</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/Lilu</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>12.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>VirtualSMC.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>SMC emulator</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/VirtualSMC</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>12.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>WhateverGreen.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Video patches</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/WhateverGreen</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>12.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>AGPMInjector.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>USBPorts.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>MCEReporterDisabler.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>AppleMCEReporter disabler</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Block</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>Any</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Identifier</key>
|
||||
<string>com.apple.driver.AppleTyMCEDriver</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Emulate</key>
|
||||
<dict>
|
||||
<key>Cpuid1Data</key>
|
||||
<data>
|
||||
VAYFAAAAAAAAAAAAAAAAAA==
|
||||
</data>
|
||||
<key>Cpuid1Mask</key>
|
||||
<data>
|
||||
////AAAAAAAAAAAAAAAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>Force</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>Any</string>
|
||||
<key>BundlePath</key>
|
||||
<string>System/Library/Extensions/IONetworkingFamily.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Patch engine</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Identifier</key>
|
||||
<string>com.apple.iokit.IONetworkingFamily</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/IONetworkingFamily</string>
|
||||
<key>MaxKernel</key>
|
||||
<string>13.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Patch</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Base</key>
|
||||
<string>_cpu_topology_sort</string>
|
||||
<key>Comment</key>
|
||||
<string>algrey - cpu_topology_sort -disable _x86_validate_topology</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
6AAA//8=
|
||||
</data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data>
|
||||
/wAA//8=
|
||||
</data>
|
||||
<key>MaxKernel</key>
|
||||
<string>20.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>17.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
Dx9EAAA=
|
||||
</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data>
|
||||
</data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Base</key>
|
||||
<string></string>
|
||||
<key>Comment</key>
|
||||
<string>algrey - cpuid_set_cpufamily - force CPUFAMILY_INTEL_PENRYN</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
MduAPQAAAAAGdQA=
|
||||
</data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data>
|
||||
/////wAAAP///wA=
|
||||
</data>
|
||||
<key>MaxKernel</key>
|
||||
<string>20.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>17.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
u7xP6njpXQAAAJA=
|
||||
</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data>
|
||||
</data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>AppleCpuPmCfgLock</key>
|
||||
<false/>
|
||||
<key>AppleXcpmCfgLock</key>
|
||||
<false/>
|
||||
<key>AppleXcpmExtraMsrs</key>
|
||||
<false/>
|
||||
<key>AppleXcpmForceBoost</key>
|
||||
<false/>
|
||||
<key>CustomSMBIOSGuid</key>
|
||||
<false/>
|
||||
<key>DisableIoMapper</key>
|
||||
<false/>
|
||||
<key>DisableLinkeditJettison</key>
|
||||
<true/>
|
||||
<key>DisableRtcChecksum</key>
|
||||
<false/>
|
||||
<key>DummyPowerManagement</key>
|
||||
<true/>
|
||||
<key>ExternalDiskIcons</key>
|
||||
<false/>
|
||||
<key>IncreasePciBarSize</key>
|
||||
<false/>
|
||||
<key>LapicKernelPanic</key>
|
||||
<false/>
|
||||
<key>PanicNoKextDump</key>
|
||||
<false/>
|
||||
<key>PowerTimeoutKernelPanic</key>
|
||||
<false/>
|
||||
<key>ThirdPartyDrives</key>
|
||||
<false/>
|
||||
<key>XhciPortLimit</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Scheme</key>
|
||||
<dict>
|
||||
<key>FuzzyMatch</key>
|
||||
<true/>
|
||||
<key>KernelArch</key>
|
||||
<string>x86_64</string>
|
||||
<key>KernelCache</key>
|
||||
<string>Auto</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Misc</key>
|
||||
<dict>
|
||||
<key>BlessOverride</key>
|
||||
<array/>
|
||||
<key>Boot</key>
|
||||
<dict>
|
||||
<key>ConsoleAttributes</key>
|
||||
<integer>0</integer>
|
||||
<key>HibernateMode</key>
|
||||
<string>Auto</string>
|
||||
<key>HideAuxiliary</key>
|
||||
<false/>
|
||||
<key>PickerAttributes</key>
|
||||
<integer>1</integer>
|
||||
<key>PickerAudioAssist</key>
|
||||
<false/>
|
||||
<key>PickerMode</key>
|
||||
<string>External</string>
|
||||
<key>PollAppleHotKeys</key>
|
||||
<true/>
|
||||
<key>ShowPicker</key>
|
||||
<false/>
|
||||
<key>TakeoffDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>Timeout</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>Debug</key>
|
||||
<dict>
|
||||
<key>AppleDebug</key>
|
||||
<false/>
|
||||
<key>ApplePanic</key>
|
||||
<false/>
|
||||
<key>DisableWatchDog</key>
|
||||
<false/>
|
||||
<key>DisplayDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>DisplayLevel</key>
|
||||
<integer>2147483650</integer>
|
||||
<key>SerialInit</key>
|
||||
<false/>
|
||||
<key>SysReport</key>
|
||||
<false/>
|
||||
<key>Target</key>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>Entries</key>
|
||||
<array/>
|
||||
<key>Security</key>
|
||||
<dict>
|
||||
<key>AllowNvramReset</key>
|
||||
<true/>
|
||||
<key>AllowSetDefault</key>
|
||||
<false/>
|
||||
<key>ApECID</key>
|
||||
<integer>0</integer>
|
||||
<key>AuthRestart</key>
|
||||
<false/>
|
||||
<key>BootProtect</key>
|
||||
<string>None</string>
|
||||
<key>DmgLoading</key>
|
||||
<string>Signed</string>
|
||||
<key>EnablePassword</key>
|
||||
<false/>
|
||||
<key>ExposeSensitiveData</key>
|
||||
<integer>6</integer>
|
||||
<key>HaltLevel</key>
|
||||
<integer>2147483648</integer>
|
||||
<key>PasswordHash</key>
|
||||
<data></data>
|
||||
<key>PasswordSalt</key>
|
||||
<data></data>
|
||||
<key>ScanPolicy</key>
|
||||
<integer>0</integer>
|
||||
<key>SecureBootModel</key>
|
||||
<string>Disabled</string>
|
||||
<key>Vault</key>
|
||||
<string>Optional</string>
|
||||
</dict>
|
||||
<key>Tools</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
<key>Auxiliary</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Not signed for security reasons</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Name</key>
|
||||
<string>UEFI Shell</string>
|
||||
<key>Path</key>
|
||||
<string>OpenShell.efi</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arguments</key>
|
||||
<string>Shutdown</string>
|
||||
<key>Auxiliary</key>
|
||||
<true/>
|
||||
<key>Comment</key>
|
||||
<string>Perform shutdown</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Name</key>
|
||||
<string>Shutdown</string>
|
||||
<key>Path</key>
|
||||
<string>ResetSystem.efi</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<key>NVRAM</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<dict>
|
||||
<key>4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14</key>
|
||||
<dict>
|
||||
<key>DefaultBackgroundColor</key>
|
||||
<data>AAAAAA==</data>
|
||||
<key>UIScale</key>
|
||||
<data>AQ==</data>
|
||||
</dict>
|
||||
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
|
||||
<dict>
|
||||
<key>rtc-blacklist</key>
|
||||
<data></data>
|
||||
</dict>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<dict>
|
||||
<key>SystemAudioVolume</key>
|
||||
<data>Rg==</data>
|
||||
<key>boot-args</key>
|
||||
<string>-v keepsyms=1 tlbto_us=0 vti=9</string>
|
||||
<key>run-efi-updater</key>
|
||||
<string>No</string>
|
||||
<key>csr-active-config</key>
|
||||
<data>ZwAAAA==</data>
|
||||
<key>prev-lang:kbd</key>
|
||||
<data>ZW4tVVM6MA==</data>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Delete</key>
|
||||
<dict>
|
||||
<key>4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14</key>
|
||||
<array>
|
||||
<string>UIScale</string>
|
||||
<string>DefaultBackgroundColor</string>
|
||||
</array>
|
||||
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
|
||||
<array>
|
||||
<string>rtc-blacklist</string>
|
||||
</array>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<array>
|
||||
<string>boot-args</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>LegacyEnable</key>
|
||||
<false/>
|
||||
<key>LegacyOverwrite</key>
|
||||
<false/>
|
||||
<key>LegacySchema</key>
|
||||
<dict>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<array>
|
||||
<string>EFILoginHiDPI</string>
|
||||
<string>EFIBluetoothDelay</string>
|
||||
<string>LocationServicesEnabled</string>
|
||||
<string>SystemAudioVolume</string>
|
||||
<string>SystemAudioVolumeDB</string>
|
||||
<string>SystemAudioVolumeSaved</string>
|
||||
<string>bluetoothActiveControllerInfo</string>
|
||||
<string>bluetoothInternalControllerInfo</string>
|
||||
<string>flagstate</string>
|
||||
<string>fmm-computer-name</string>
|
||||
<string>nvda_drv</string>
|
||||
<string>prev-lang:kbd</string>
|
||||
</array>
|
||||
<key>8BE4DF61-93CA-11D2-AA0D-00E098032B8C</key>
|
||||
<array>
|
||||
<string>Boot0080</string>
|
||||
<string>Boot0081</string>
|
||||
<string>Boot0082</string>
|
||||
<string>BootNext</string>
|
||||
<string>BootOrder</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>WriteFlash</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>PlatformInfo</key>
|
||||
<dict>
|
||||
<key>Automatic</key>
|
||||
<true/>
|
||||
<key>Generic</key>
|
||||
<dict>
|
||||
<key>AdviseWindows</key>
|
||||
<false/>
|
||||
<key>MLB</key>
|
||||
<string>C02717306J9JG361M</string>
|
||||
<key>ROM</key>
|
||||
<data>
|
||||
m7zhIYfl
|
||||
</data>
|
||||
<key>SpoofVendor</key>
|
||||
<true/>
|
||||
<key>SystemProductName</key>
|
||||
<string>iMacPro1,1</string>
|
||||
<key>SystemSerialNumber</key>
|
||||
<string>C02TM2ZBHX87</string>
|
||||
<key>SystemUUID</key>
|
||||
<string>007076A6-F2A2-4461-BBE5-BAD019F8025A</string>
|
||||
</dict>
|
||||
<key>UpdateDataHub</key>
|
||||
<true/>
|
||||
<key>UpdateNVRAM</key>
|
||||
<true/>
|
||||
<key>UpdateSMBIOS</key>
|
||||
<true/>
|
||||
<key>UpdateSMBIOSMode</key>
|
||||
<string>Create</string>
|
||||
</dict>
|
||||
<key>UEFI</key>
|
||||
<dict>
|
||||
<key>APFS</key>
|
||||
<dict>
|
||||
<key>EnableJumpstart</key>
|
||||
<true/>
|
||||
<key>GlobalConnect</key>
|
||||
<false/>
|
||||
<key>HideVerbose</key>
|
||||
<false/>
|
||||
<key>JumpstartHotPlug</key>
|
||||
<true/>
|
||||
<key>MinDate</key>
|
||||
<integer>0</integer>
|
||||
<key>MinVersion</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>Audio</key>
|
||||
<dict>
|
||||
<key>AudioCodec</key>
|
||||
<integer>0</integer>
|
||||
<key>AudioDevice</key>
|
||||
<string>PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x1)</string>
|
||||
<key>AudioOut</key>
|
||||
<integer>0</integer>
|
||||
<key>AudioSupport</key>
|
||||
<false/>
|
||||
<key>MinimumVolume</key>
|
||||
<integer>20</integer>
|
||||
<key>PlayChime</key>
|
||||
<false/>
|
||||
<key>VolumeAmplifier</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>ConnectDrivers</key>
|
||||
<true/>
|
||||
<key>Drivers</key>
|
||||
<array>
|
||||
<string>VBoxHfs.efi</string>
|
||||
<string>OpenRuntime.efi</string>
|
||||
<string>OpenCanopy.efi</string>
|
||||
<string>#AudioDxe.efi</string>
|
||||
<string>#OpenUsbKbDxe.efi</string>
|
||||
<string>#UsbMouseDxe.efi</string>
|
||||
<string>#Ps2KeyboardDxe.efi</string>
|
||||
<string>#Ps2MouseDxe.efi</string>
|
||||
<string>#HiiDatabase.efi</string>
|
||||
<string>#NvmExpressDxe.efi</string>
|
||||
<string>#XhciDxe.efi</string>
|
||||
<string>#ExFatDxe.efi</string>
|
||||
<string>#PartitionDxe.efi</string>
|
||||
<string>#CrScreenshotDxe.efi</string>
|
||||
</array>
|
||||
<key>Input</key>
|
||||
<dict>
|
||||
<key>KeyFiltering</key>
|
||||
<false/>
|
||||
<key>KeyForgetThreshold</key>
|
||||
<integer>5</integer>
|
||||
<key>KeyMergeThreshold</key>
|
||||
<integer>2</integer>
|
||||
<key>KeySupport</key>
|
||||
<true/>
|
||||
<key>KeySupportMode</key>
|
||||
<string>Auto</string>
|
||||
<key>KeySwap</key>
|
||||
<false/>
|
||||
<key>PointerSupport</key>
|
||||
<false/>
|
||||
<key>PointerSupportMode</key>
|
||||
<string>ASUS</string>
|
||||
<key>TimerResolution</key>
|
||||
<integer>50000</integer>
|
||||
</dict>
|
||||
<key>Output</key>
|
||||
<dict>
|
||||
<key>ClearScreenOnModeSwitch</key>
|
||||
<false/>
|
||||
<key>ConsoleMode</key>
|
||||
<string></string>
|
||||
<key>DirectGopRendering</key>
|
||||
<false/>
|
||||
<key>IgnoreTextInGraphics</key>
|
||||
<false/>
|
||||
<key>ProvideConsoleGop</key>
|
||||
<true/>
|
||||
<key>ReconnectOnResChange</key>
|
||||
<false/>
|
||||
<key>ReplaceTabWithSpace</key>
|
||||
<false/>
|
||||
<key>Resolution</key>
|
||||
<string>1920x1080@32</string>
|
||||
<key>SanitiseClearScreen</key>
|
||||
<false/>
|
||||
<key>TextRenderer</key>
|
||||
<string>BuiltinGraphics</string>
|
||||
<key>UgaPassThrough</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>ProtocolOverrides</key>
|
||||
<dict>
|
||||
<key>AppleAudio</key>
|
||||
<false/>
|
||||
<key>AppleBootPolicy</key>
|
||||
<false/>
|
||||
<key>AppleDebugLog</key>
|
||||
<false/>
|
||||
<key>AppleEvent</key>
|
||||
<false/>
|
||||
<key>AppleFramebufferInfo</key>
|
||||
<false/>
|
||||
<key>AppleImageConversion</key>
|
||||
<false/>
|
||||
<key>AppleImg4Verification</key>
|
||||
<false/>
|
||||
<key>AppleKeyMap</key>
|
||||
<false/>
|
||||
<key>AppleRtcRam</key>
|
||||
<false/>
|
||||
<key>AppleSecureBoot</key>
|
||||
<false/>
|
||||
<key>AppleSmcIo</key>
|
||||
<false/>
|
||||
<key>AppleUserInterfaceTheme</key>
|
||||
<false/>
|
||||
<key>DataHub</key>
|
||||
<false/>
|
||||
<key>DeviceProperties</key>
|
||||
<false/>
|
||||
<key>FirmwareVolume</key>
|
||||
<false/>
|
||||
<key>HashServices</key>
|
||||
<false/>
|
||||
<key>OSInfo</key>
|
||||
<false/>
|
||||
<key>UnicodeCollation</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>ExitBootServicesDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>IgnoreInvalidFlexRatio</key>
|
||||
<false/>
|
||||
<key>ReleaseUsbOwnership</key>
|
||||
<false/>
|
||||
<key>RequestBootVarRouting</key>
|
||||
<true/>
|
||||
<key>TscSyncTimeout</key>
|
||||
<integer>0</integer>
|
||||
<key>UnblockFsConnect</key>
|
||||
<true/>
|
||||
<key>ConnectDrivers</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
886
OpenCore-Catalina/config-pt.plist
Normal file
|
@ -0,0 +1,886 @@
|
|||
<?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>ACPI</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>add DTGP method</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-DTGP.aml</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Fake EC and USBX Power</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-EC.aml</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>USB 2.0 Injection</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-EHCI.aml</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>CPU AGPM Plugin=1</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-PLUG.aml</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Delete</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>All</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Delete CpuPm</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>OemTableId</key>
|
||||
<data>Q3B1UG0AAAA=</data>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data>U1NEVA==</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>All</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Delete Cpu0Ist</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>OemTableId</key>
|
||||
<data>Q3B1MElzdAA=</data>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data>U1NEVA==</data>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Patch</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>_Q11 to XQ11</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>X1ExMQ==</data>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>OemTableId</key>
|
||||
<data></data>
|
||||
<key>Replace</key>
|
||||
<data>WFExMQ==</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data></data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>_Q12 to XQ12</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>X1ExMg==</data>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>OemTableId</key>
|
||||
<data></data>
|
||||
<key>Replace</key>
|
||||
<data>WFExMg==</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data></data>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>FadtEnableReset</key>
|
||||
<false/>
|
||||
<key>NormalizeHeaders</key>
|
||||
<false/>
|
||||
<key>RebaseRegions</key>
|
||||
<false/>
|
||||
<key>ResetHwSig</key>
|
||||
<false/>
|
||||
<key>ResetLogoStatus</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Booter</key>
|
||||
<dict>
|
||||
<key>MmioWhitelist</key>
|
||||
<array/>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>AvoidRuntimeDefrag</key>
|
||||
<true/>
|
||||
<key>DevirtualiseMmio</key>
|
||||
<false/>
|
||||
<key>DisableSingleUser</key>
|
||||
<false/>
|
||||
<key>DisableVariableWrite</key>
|
||||
<false/>
|
||||
<key>DiscardHibernateMap</key>
|
||||
<false/>
|
||||
<key>EnableSafeModeSlide</key>
|
||||
<true/>
|
||||
<key>EnableWriteUnprotector</key>
|
||||
<true/>
|
||||
<key>ForceExitBootServices</key>
|
||||
<false/>
|
||||
<key>ProtectMemoryRegions</key>
|
||||
<false/>
|
||||
<key>ProtectSecureBoot</key>
|
||||
<false/>
|
||||
<key>ProtectUefiServices</key>
|
||||
<false/>
|
||||
<key>ProvideCustomSlide</key>
|
||||
<true/>
|
||||
<key>ProvideMaxSlide</key>
|
||||
<integer>0</integer>
|
||||
<key>RebuildAppleMemoryMap</key>
|
||||
<false/>
|
||||
<key>SetupVirtualMap</key>
|
||||
<false/>
|
||||
<key>SignalAppleOS</key>
|
||||
<false/>
|
||||
<key>SyncRuntimePermissions</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>DeviceProperties</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<dict>
|
||||
<key>PciRoot(0x1)/Pci(0x1F,0x0)</key>
|
||||
<dict>
|
||||
<key>compatible</key>
|
||||
<string>pci8086,2916</string>
|
||||
<key>device-id</key>
|
||||
<data>
|
||||
FikA
|
||||
</data>
|
||||
<key>name</key>
|
||||
<string>pci8086,2916</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Delete</key>
|
||||
<dict>
|
||||
<key>PciRoot(0x0)/Pci(0x1b,0x0)</key>
|
||||
<array>
|
||||
<string>MaximumBootBeepVolume</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Kernel</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>mXHCD.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Hello There</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/mXHCD</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>Lilu.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Patch engine</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/Lilu</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>VirtualSMC.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>SMC emulator</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/VirtualSMC</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>WhateverGreen.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Video patches</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/WhateverGreen</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>AppleALC.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Audio patches</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AppleALC</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>AGPMInjector.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>USBPorts.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>MCEReporterDisabler.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Block</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Identifier</key>
|
||||
<string>com.apple.driver.AppleTyMCEDriver</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Emulate</key>
|
||||
<dict>
|
||||
<key>Cpuid1Data</key>
|
||||
<data>VwYFAAAAAAAAAAAAAAAAAA==</data>
|
||||
<key>Cpuid1Mask</key>
|
||||
<data>/////wAAAAAAAAAAAAAAAA==</data>
|
||||
</dict>
|
||||
<key>Patch</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Base</key>
|
||||
<string></string>
|
||||
<key>Comment</key>
|
||||
<string>algrey - cpuid_set_generic_info - disable check to allow leaf7</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>ADoPgg==</data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>MaxKernel</key>
|
||||
<string>19.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>17.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>AAAPgg==</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Base</key>
|
||||
<string>_cpu_topology_sort</string>
|
||||
<key>Comment</key>
|
||||
<string>algrey - cpu_topology_sort -disable _x86_validate_topology</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>6AAA//8=</data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data>/wAA//8=</data>
|
||||
<key>MaxKernel</key>
|
||||
<string>19.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>17.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>Dx9EAAA=</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Base</key>
|
||||
<string></string>
|
||||
<key>Comment</key>
|
||||
<string>algrey - cpuid_set_cpufamily - force CPUFAMILY_INTEL_PENRYN</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>MduAPQAAAAAGdQA=</data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data>/////wAAAP///wA=</data>
|
||||
<key>MaxKernel</key>
|
||||
<string>19.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>17.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>u7xP6njpXQAAAJA=</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Base</key>
|
||||
<string></string>
|
||||
<key>Comment</key>
|
||||
<string>algrey - - skip cpuid_cores_per_package test -10.15</string>
|
||||
<key>Count</key>
|
||||
<integer>0</integer>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>gz0AAAAAAA8AAAAAAItdvA==</data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data>//8AAAD///8AAAAA/////w==</data>
|
||||
<key>MaxKernel</key>
|
||||
<string>19.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>AAAAAAAAAQAAAAAAAAAAAA==</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data>AAAAAAAADwAAAAAAAAAAAA==</data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Base</key>
|
||||
<string></string>
|
||||
<key>Comment</key>
|
||||
<string>algrey - - skip cpuid_cores_per_package test</string>
|
||||
<key>Count</key>
|
||||
<integer>0</integer>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>gz0AAAAAAHQAi128</data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data>//8AAAD///8A////</data>
|
||||
<key>MaxKernel</key>
|
||||
<string>18.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>17.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>AAAAAAAAAQAAAAAA</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data>AAAAAAAADwAAAAAA</data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>AppleCpuPmCfgLock</key>
|
||||
<false/>
|
||||
<key>AppleXcpmCfgLock</key>
|
||||
<false/>
|
||||
<key>AppleXcpmExtraMsrs</key>
|
||||
<false/>
|
||||
<key>AppleXcpmForceBoost</key>
|
||||
<false/>
|
||||
<key>CustomSMBIOSGuid</key>
|
||||
<false/>
|
||||
<key>DisableIoMapper</key>
|
||||
<false/>
|
||||
<key>DisableRtcChecksum</key>
|
||||
<false/>
|
||||
<key>DummyPowerManagement</key>
|
||||
<true/>
|
||||
<key>ExternalDiskIcons</key>
|
||||
<false/>
|
||||
<key>IncreasePciBarSize</key>
|
||||
<false/>
|
||||
<key>LapicKernelPanic</key>
|
||||
<false/>
|
||||
<key>PanicNoKextDump</key>
|
||||
<false/>
|
||||
<key>PowerTimeoutKernelPanic</key>
|
||||
<false/>
|
||||
<key>ThirdPartyDrives</key>
|
||||
<false/>
|
||||
<key>XhciPortLimit</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Misc</key>
|
||||
<dict>
|
||||
<key>BlessOverride</key>
|
||||
<array/>
|
||||
<key>Boot</key>
|
||||
<dict>
|
||||
<key>ConsoleAttributes</key>
|
||||
<integer>0</integer>
|
||||
<key>HibernateMode</key>
|
||||
<string>Auto</string>
|
||||
<key>HideAuxiliary</key>
|
||||
<false/>
|
||||
<key>PickerAttributes</key>
|
||||
<integer>1</integer>
|
||||
<key>PickerAudioAssist</key>
|
||||
<false/>
|
||||
<key>PickerMode</key>
|
||||
<string>External</string>
|
||||
<key>PollAppleHotKeys</key>
|
||||
<true/>
|
||||
<key>ShowPicker</key>
|
||||
<true/>
|
||||
<key>TakeoffDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>Timeout</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>Debug</key>
|
||||
<dict>
|
||||
<key>AppleDebug</key>
|
||||
<false/>
|
||||
<key>ApplePanic</key>
|
||||
<false/>
|
||||
<key>DisableWatchDog</key>
|
||||
<false/>
|
||||
<key>DisplayDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>DisplayLevel</key>
|
||||
<integer>2147483650</integer>
|
||||
<key>SysReport</key>
|
||||
<false/>
|
||||
<key>Target</key>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>Entries</key>
|
||||
<array/>
|
||||
<key>Security</key>
|
||||
<dict>
|
||||
<key>AllowNvramReset</key>
|
||||
<true/>
|
||||
<key>AllowSetDefault</key>
|
||||
<false/>
|
||||
<key>AuthRestart</key>
|
||||
<false/>
|
||||
<key>BootProtect</key>
|
||||
<string>None</string>
|
||||
<key>ExposeSensitiveData</key>
|
||||
<integer>6</integer>
|
||||
<key>HaltLevel</key>
|
||||
<integer>2147483648</integer>
|
||||
<key>ScanPolicy</key>
|
||||
<integer>0</integer>
|
||||
<key>Vault</key>
|
||||
<string>Optional</string>
|
||||
</dict>
|
||||
<key>Tools</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
<key>Auxiliary</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Not signed for security reasons</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Name</key>
|
||||
<string>UEFI Shell</string>
|
||||
<key>Path</key>
|
||||
<string>OpenShell.efi</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arguments</key>
|
||||
<string>Shutdown</string>
|
||||
<key>Auxiliary</key>
|
||||
<true/>
|
||||
<key>Comment</key>
|
||||
<string>Perform shutdown</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Name</key>
|
||||
<string>Shutdown</string>
|
||||
<key>Path</key>
|
||||
<string>ResetSystem.efi</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<key>NVRAM</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<dict>
|
||||
<key>4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14</key>
|
||||
<dict>
|
||||
<key>DefaultBackgroundColor</key>
|
||||
<data>AAAAAA==</data>
|
||||
<key>UIScale</key>
|
||||
<data>AQ==</data>
|
||||
</dict>
|
||||
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
|
||||
<dict>
|
||||
<key>rtc-blacklist</key>
|
||||
<data></data>
|
||||
</dict>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<dict>
|
||||
<key>SystemAudioVolume</key>
|
||||
<data>Rg==</data>
|
||||
<key>boot-args</key>
|
||||
<string>-v keepsyms=1</string>
|
||||
<key>run-efi-updater</key>
|
||||
<string>No</string>
|
||||
<key>csr-active-config</key>
|
||||
<data>AAAAAA==</data>
|
||||
<key>prev-lang:kbd</key>
|
||||
<data>ZW4tVVM6MA==</data>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Delete</key>
|
||||
<dict>
|
||||
<key>4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14</key>
|
||||
<array>
|
||||
<string>UIScale</string>
|
||||
<string>DefaultBackgroundColor</string>
|
||||
</array>
|
||||
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
|
||||
<array>
|
||||
<string>rtc-blacklist</string>
|
||||
</array>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<array>
|
||||
<string>boot-args</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>LegacyEnable</key>
|
||||
<false/>
|
||||
<key>LegacyOverwrite</key>
|
||||
<false/>
|
||||
<key>LegacySchema</key>
|
||||
<dict>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<array>
|
||||
<string>EFILoginHiDPI</string>
|
||||
<string>EFIBluetoothDelay</string>
|
||||
<string>LocationServicesEnabled</string>
|
||||
<string>SystemAudioVolume</string>
|
||||
<string>SystemAudioVolumeDB</string>
|
||||
<string>SystemAudioVolumeSaved</string>
|
||||
<string>bluetoothActiveControllerInfo</string>
|
||||
<string>bluetoothInternalControllerInfo</string>
|
||||
<string>flagstate</string>
|
||||
<string>fmm-computer-name</string>
|
||||
<string>nvda_drv</string>
|
||||
<string>prev-lang:kbd</string>
|
||||
</array>
|
||||
<key>8BE4DF61-93CA-11D2-AA0D-00E098032B8C</key>
|
||||
<array>
|
||||
<string>Boot0080</string>
|
||||
<string>Boot0081</string>
|
||||
<string>Boot0082</string>
|
||||
<string>BootNext</string>
|
||||
<string>BootOrder</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>WriteFlash</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>PlatformInfo</key>
|
||||
<dict>
|
||||
<key>Automatic</key>
|
||||
<true/>
|
||||
<key>Generic</key>
|
||||
<dict>
|
||||
<key>AdviseWindows</key>
|
||||
<false/>
|
||||
<key>MLB</key>
|
||||
<string>C02717306J9JG361M</string>
|
||||
<key>ROM</key>
|
||||
<data>
|
||||
m7zhIYfl
|
||||
</data>
|
||||
<key>SpoofVendor</key>
|
||||
<true/>
|
||||
<key>SystemProductName</key>
|
||||
<string>iMacPro1,1</string>
|
||||
<key>SystemSerialNumber</key>
|
||||
<string>C02TM2ZBHX87</string>
|
||||
<key>SystemUUID</key>
|
||||
<string>007076A6-F2A2-4461-BBE5-BAD019F8025A</string>
|
||||
</dict>
|
||||
<key>UpdateDataHub</key>
|
||||
<true/>
|
||||
<key>UpdateNVRAM</key>
|
||||
<true/>
|
||||
<key>UpdateSMBIOS</key>
|
||||
<true/>
|
||||
<key>UpdateSMBIOSMode</key>
|
||||
<string>Create</string>
|
||||
</dict>
|
||||
<key>UEFI</key>
|
||||
<dict>
|
||||
<key>APFS</key>
|
||||
<dict>
|
||||
<key>EnableJumpstart</key>
|
||||
<true/>
|
||||
<key>GlobalConnect</key>
|
||||
<false/>
|
||||
<key>HideVerbose</key>
|
||||
<true/>
|
||||
<key>JumpstartHotPlug</key>
|
||||
<false/>
|
||||
<key>MinDate</key>
|
||||
<integer>-1</integer>
|
||||
<key>MinVersion</key>
|
||||
<integer>-1</integer>
|
||||
</dict>
|
||||
<key>Audio</key>
|
||||
<dict>
|
||||
<key>AudioCodec</key>
|
||||
<integer>0</integer>
|
||||
<key>AudioDevice</key>
|
||||
<string>PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x1)</string>
|
||||
<key>AudioOut</key>
|
||||
<integer>0</integer>
|
||||
<key>AudioSupport</key>
|
||||
<false/>
|
||||
<key>MinimumVolume</key>
|
||||
<integer>20</integer>
|
||||
<key>PlayChime</key>
|
||||
<false/>
|
||||
<key>VolumeAmplifier</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>ConnectDrivers</key>
|
||||
<true/>
|
||||
<key>Drivers</key>
|
||||
<array>
|
||||
<string>OpenRuntime.efi</string>
|
||||
<string>VBoxHfs.efi</string>
|
||||
<string>OpenCanopy.efi</string>
|
||||
</array>
|
||||
<key>Input</key>
|
||||
<dict>
|
||||
<key>KeyFiltering</key>
|
||||
<false/>
|
||||
<key>KeyForgetThreshold</key>
|
||||
<integer>5</integer>
|
||||
<key>KeyMergeThreshold</key>
|
||||
<integer>2</integer>
|
||||
<key>KeySupport</key>
|
||||
<true/>
|
||||
<key>KeySupportMode</key>
|
||||
<string>Auto</string>
|
||||
<key>KeySwap</key>
|
||||
<false/>
|
||||
<key>PointerSupport</key>
|
||||
<false/>
|
||||
<key>PointerSupportMode</key>
|
||||
<string>ASUS</string>
|
||||
<key>TimerResolution</key>
|
||||
<integer>50000</integer>
|
||||
</dict>
|
||||
<key>Output</key>
|
||||
<dict>
|
||||
<key>ClearScreenOnModeSwitch</key>
|
||||
<false/>
|
||||
<key>ConsoleMode</key>
|
||||
<string></string>
|
||||
<key>DirectGopRendering</key>
|
||||
<false/>
|
||||
<key>IgnoreTextInGraphics</key>
|
||||
<false/>
|
||||
<key>ProvideConsoleGop</key>
|
||||
<true/>
|
||||
<key>ReconnectOnResChange</key>
|
||||
<false/>
|
||||
<key>ReplaceTabWithSpace</key>
|
||||
<false/>
|
||||
<key>Resolution</key>
|
||||
<string>1920x1080@32</string>
|
||||
<key>SanitiseClearScreen</key>
|
||||
<false/>
|
||||
<key>TextRenderer</key>
|
||||
<string>BuiltinGraphics</string>
|
||||
</dict>
|
||||
<key>ProtocolOverrides</key>
|
||||
<dict>
|
||||
<key>AppleAudio</key>
|
||||
<false/>
|
||||
<key>AppleBootPolicy</key>
|
||||
<false/>
|
||||
<key>AppleDebugLog</key>
|
||||
<false/>
|
||||
<key>AppleEvent</key>
|
||||
<false/>
|
||||
<key>AppleImageConversion</key>
|
||||
<false/>
|
||||
<key>AppleKeyMap</key>
|
||||
<false/>
|
||||
<key>AppleRtcRam</key>
|
||||
<false/>
|
||||
<key>AppleSmcIo</key>
|
||||
<false/>
|
||||
<key>AppleUserInterfaceTheme</key>
|
||||
<false/>
|
||||
<key>DataHub</key>
|
||||
<false/>
|
||||
<key>DeviceProperties</key>
|
||||
<false/>
|
||||
<key>FirmwareVolume</key>
|
||||
<false/>
|
||||
<key>HashServices</key>
|
||||
<false/>
|
||||
<key>OSInfo</key>
|
||||
<false/>
|
||||
<key>UnicodeCollation</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>DeduplicateBootOrder</key>
|
||||
<true/>
|
||||
<key>ExitBootServicesDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>IgnoreInvalidFlexRatio</key>
|
||||
<false/>
|
||||
<key>ReleaseUsbOwnership</key>
|
||||
<false/>
|
||||
<key>RequestBootVarRouting</key>
|
||||
<true/>
|
||||
<key>TscSyncTimeout</key>
|
||||
<integer>0</integer>
|
||||
<key>UnblockFsConnect</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
883
OpenCore-Catalina/config.plist
Normal file
|
@ -0,0 +1,883 @@
|
|||
<?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>ACPI</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>add DTGP method</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-DTGP.aml</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Fake EC and USBX Power</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-EC.aml</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>USB 2.0 Injection</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-EHCI.aml</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>CPU AGPM Plugin=1</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
<string>SSDT-PLUG.aml</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Delete</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>All</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Delete CpuPm</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>OemTableId</key>
|
||||
<data>Q3B1UG0AAAA=</data>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data>U1NEVA==</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>All</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Delete Cpu0Ist</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>OemTableId</key>
|
||||
<data>Q3B1MElzdAA=</data>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data>U1NEVA==</data>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Patch</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>_Q11 to XQ11</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>X1ExMQ==</data>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>OemTableId</key>
|
||||
<data></data>
|
||||
<key>Replace</key>
|
||||
<data>WFExMQ==</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data></data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>_Q12 to XQ12</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>X1ExMg==</data>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>OemTableId</key>
|
||||
<data></data>
|
||||
<key>Replace</key>
|
||||
<data>WFExMg==</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
<key>TableLength</key>
|
||||
<integer>0</integer>
|
||||
<key>TableSignature</key>
|
||||
<data></data>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>FadtEnableReset</key>
|
||||
<false/>
|
||||
<key>NormalizeHeaders</key>
|
||||
<false/>
|
||||
<key>RebaseRegions</key>
|
||||
<false/>
|
||||
<key>ResetHwSig</key>
|
||||
<false/>
|
||||
<key>ResetLogoStatus</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Booter</key>
|
||||
<dict>
|
||||
<key>MmioWhitelist</key>
|
||||
<array/>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>AvoidRuntimeDefrag</key>
|
||||
<true/>
|
||||
<key>DevirtualiseMmio</key>
|
||||
<false/>
|
||||
<key>DisableSingleUser</key>
|
||||
<false/>
|
||||
<key>DisableVariableWrite</key>
|
||||
<false/>
|
||||
<key>DiscardHibernateMap</key>
|
||||
<false/>
|
||||
<key>EnableSafeModeSlide</key>
|
||||
<true/>
|
||||
<key>EnableWriteUnprotector</key>
|
||||
<true/>
|
||||
<key>ForceExitBootServices</key>
|
||||
<false/>
|
||||
<key>ProtectMemoryRegions</key>
|
||||
<false/>
|
||||
<key>ProtectSecureBoot</key>
|
||||
<false/>
|
||||
<key>ProtectUefiServices</key>
|
||||
<false/>
|
||||
<key>ProvideCustomSlide</key>
|
||||
<true/>
|
||||
<key>ProvideMaxSlide</key>
|
||||
<integer>0</integer>
|
||||
<key>RebuildAppleMemoryMap</key>
|
||||
<false/>
|
||||
<key>SetupVirtualMap</key>
|
||||
<false/>
|
||||
<key>SignalAppleOS</key>
|
||||
<false/>
|
||||
<key>SyncRuntimePermissions</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>DeviceProperties</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<dict>
|
||||
<key>PciRoot(0x1)/Pci(0x1F,0x0)</key>
|
||||
<dict>
|
||||
<key>compatible</key>
|
||||
<string>pci8086,2916</string>
|
||||
<key>device-id</key>
|
||||
<data>
|
||||
FikA
|
||||
</data>
|
||||
<key>name</key>
|
||||
<string>pci8086,2916</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Delete</key>
|
||||
<dict>
|
||||
<key>PciRoot(0x0)/Pci(0x1b,0x0)</key>
|
||||
<array>
|
||||
<string>MaximumBootBeepVolume</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Kernel</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>Any</string>
|
||||
<key>BundlePath</key>
|
||||
<string>VoodooHDA.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/VoodooHDA</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>Lilu.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Patch engine</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/Lilu</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>12.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>VirtualSMC.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>SMC emulator</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/VirtualSMC</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>12.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>WhateverGreen.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Video patches</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/WhateverGreen</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>12.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>AGPMInjector.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BundlePath</key>
|
||||
<string>USBPorts.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>MCEReporterDisabler.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>AppleMCEReporter disabler</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Block</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>Any</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Identifier</key>
|
||||
<string>com.apple.driver.AppleTyMCEDriver</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Emulate</key>
|
||||
<dict>
|
||||
<key>Cpuid1Data</key>
|
||||
<data>
|
||||
VAYFAAAAAAAAAAAAAAAAAA==
|
||||
</data>
|
||||
<key>Cpuid1Mask</key>
|
||||
<data>
|
||||
////AAAAAAAAAAAAAAAAAA==
|
||||
</data>
|
||||
</dict>
|
||||
<key>Force</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>Any</string>
|
||||
<key>BundlePath</key>
|
||||
<string>System/Library/Extensions/IONetworkingFamily.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Patch engine</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Identifier</key>
|
||||
<string>com.apple.iokit.IONetworkingFamily</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/IONetworkingFamily</string>
|
||||
<key>MaxKernel</key>
|
||||
<string>13.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Patch</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Base</key>
|
||||
<string>_cpu_topology_sort</string>
|
||||
<key>Comment</key>
|
||||
<string>algrey - cpu_topology_sort -disable _x86_validate_topology</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
6AAA//8=
|
||||
</data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data>
|
||||
/wAA//8=
|
||||
</data>
|
||||
<key>MaxKernel</key>
|
||||
<string>20.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>17.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
Dx9EAAA=
|
||||
</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data>
|
||||
</data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Base</key>
|
||||
<string></string>
|
||||
<key>Comment</key>
|
||||
<string>algrey - cpuid_set_cpufamily - force CPUFAMILY_INTEL_PENRYN</string>
|
||||
<key>Count</key>
|
||||
<integer>1</integer>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
MduAPQAAAAAGdQA=
|
||||
</data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data>
|
||||
/////wAAAP///wA=
|
||||
</data>
|
||||
<key>MaxKernel</key>
|
||||
<string>20.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>17.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
u7xP6njpXQAAAJA=
|
||||
</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data>
|
||||
</data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>AppleCpuPmCfgLock</key>
|
||||
<false/>
|
||||
<key>AppleXcpmCfgLock</key>
|
||||
<false/>
|
||||
<key>AppleXcpmExtraMsrs</key>
|
||||
<false/>
|
||||
<key>AppleXcpmForceBoost</key>
|
||||
<false/>
|
||||
<key>CustomSMBIOSGuid</key>
|
||||
<false/>
|
||||
<key>DisableIoMapper</key>
|
||||
<false/>
|
||||
<key>DisableLinkeditJettison</key>
|
||||
<true/>
|
||||
<key>DisableRtcChecksum</key>
|
||||
<false/>
|
||||
<key>DummyPowerManagement</key>
|
||||
<true/>
|
||||
<key>ExternalDiskIcons</key>
|
||||
<false/>
|
||||
<key>IncreasePciBarSize</key>
|
||||
<false/>
|
||||
<key>LapicKernelPanic</key>
|
||||
<false/>
|
||||
<key>PanicNoKextDump</key>
|
||||
<false/>
|
||||
<key>PowerTimeoutKernelPanic</key>
|
||||
<false/>
|
||||
<key>ThirdPartyDrives</key>
|
||||
<false/>
|
||||
<key>XhciPortLimit</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Scheme</key>
|
||||
<dict>
|
||||
<key>FuzzyMatch</key>
|
||||
<true/>
|
||||
<key>KernelArch</key>
|
||||
<string>x86_64</string>
|
||||
<key>KernelCache</key>
|
||||
<string>Auto</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Misc</key>
|
||||
<dict>
|
||||
<key>BlessOverride</key>
|
||||
<array/>
|
||||
<key>Boot</key>
|
||||
<dict>
|
||||
<key>ConsoleAttributes</key>
|
||||
<integer>0</integer>
|
||||
<key>HibernateMode</key>
|
||||
<string>Auto</string>
|
||||
<key>HideAuxiliary</key>
|
||||
<false/>
|
||||
<key>PickerAttributes</key>
|
||||
<integer>1</integer>
|
||||
<key>PickerAudioAssist</key>
|
||||
<false/>
|
||||
<key>PickerMode</key>
|
||||
<string>External</string>
|
||||
<key>PollAppleHotKeys</key>
|
||||
<true/>
|
||||
<key>ShowPicker</key>
|
||||
<true/>
|
||||
<key>TakeoffDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>Timeout</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>Debug</key>
|
||||
<dict>
|
||||
<key>AppleDebug</key>
|
||||
<false/>
|
||||
<key>ApplePanic</key>
|
||||
<false/>
|
||||
<key>DisableWatchDog</key>
|
||||
<false/>
|
||||
<key>DisplayDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>DisplayLevel</key>
|
||||
<integer>2147483650</integer>
|
||||
<key>SerialInit</key>
|
||||
<false/>
|
||||
<key>SysReport</key>
|
||||
<false/>
|
||||
<key>Target</key>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>Entries</key>
|
||||
<array/>
|
||||
<key>Security</key>
|
||||
<dict>
|
||||
<key>AllowNvramReset</key>
|
||||
<true/>
|
||||
<key>AllowSetDefault</key>
|
||||
<false/>
|
||||
<key>ApECID</key>
|
||||
<integer>0</integer>
|
||||
<key>AuthRestart</key>
|
||||
<false/>
|
||||
<key>BootProtect</key>
|
||||
<string>None</string>
|
||||
<key>DmgLoading</key>
|
||||
<string>Signed</string>
|
||||
<key>EnablePassword</key>
|
||||
<false/>
|
||||
<key>ExposeSensitiveData</key>
|
||||
<integer>6</integer>
|
||||
<key>HaltLevel</key>
|
||||
<integer>2147483648</integer>
|
||||
<key>PasswordHash</key>
|
||||
<data></data>
|
||||
<key>PasswordSalt</key>
|
||||
<data></data>
|
||||
<key>ScanPolicy</key>
|
||||
<integer>0</integer>
|
||||
<key>SecureBootModel</key>
|
||||
<string>Disabled</string>
|
||||
<key>Vault</key>
|
||||
<string>Optional</string>
|
||||
</dict>
|
||||
<key>Tools</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
<key>Auxiliary</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Not signed for security reasons</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Name</key>
|
||||
<string>UEFI Shell</string>
|
||||
<key>Path</key>
|
||||
<string>OpenShell.efi</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arguments</key>
|
||||
<string>Shutdown</string>
|
||||
<key>Auxiliary</key>
|
||||
<true/>
|
||||
<key>Comment</key>
|
||||
<string>Perform shutdown</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Name</key>
|
||||
<string>Shutdown</string>
|
||||
<key>Path</key>
|
||||
<string>ResetSystem.efi</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<key>NVRAM</key>
|
||||
<dict>
|
||||
<key>Add</key>
|
||||
<dict>
|
||||
<key>4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14</key>
|
||||
<dict>
|
||||
<key>DefaultBackgroundColor</key>
|
||||
<data>AAAAAA==</data>
|
||||
<key>UIScale</key>
|
||||
<data>AQ==</data>
|
||||
</dict>
|
||||
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
|
||||
<dict>
|
||||
<key>rtc-blacklist</key>
|
||||
<data></data>
|
||||
</dict>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<dict>
|
||||
<key>SystemAudioVolume</key>
|
||||
<data>Rg==</data>
|
||||
<key>boot-args</key>
|
||||
<string>-v keepsyms=1 tlbto_us=0 vti=9</string>
|
||||
<key>run-efi-updater</key>
|
||||
<string>No</string>
|
||||
<key>csr-active-config</key>
|
||||
<data>ZwAAAA==</data>
|
||||
<key>prev-lang:kbd</key>
|
||||
<data>ZW4tVVM6MA==</data>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Delete</key>
|
||||
<dict>
|
||||
<key>4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14</key>
|
||||
<array>
|
||||
<string>UIScale</string>
|
||||
<string>DefaultBackgroundColor</string>
|
||||
</array>
|
||||
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
|
||||
<array>
|
||||
<string>rtc-blacklist</string>
|
||||
</array>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<array>
|
||||
<string>boot-args</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>LegacyEnable</key>
|
||||
<false/>
|
||||
<key>LegacyOverwrite</key>
|
||||
<false/>
|
||||
<key>LegacySchema</key>
|
||||
<dict>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<array>
|
||||
<string>EFILoginHiDPI</string>
|
||||
<string>EFIBluetoothDelay</string>
|
||||
<string>LocationServicesEnabled</string>
|
||||
<string>SystemAudioVolume</string>
|
||||
<string>SystemAudioVolumeDB</string>
|
||||
<string>SystemAudioVolumeSaved</string>
|
||||
<string>bluetoothActiveControllerInfo</string>
|
||||
<string>bluetoothInternalControllerInfo</string>
|
||||
<string>flagstate</string>
|
||||
<string>fmm-computer-name</string>
|
||||
<string>nvda_drv</string>
|
||||
<string>prev-lang:kbd</string>
|
||||
</array>
|
||||
<key>8BE4DF61-93CA-11D2-AA0D-00E098032B8C</key>
|
||||
<array>
|
||||
<string>Boot0080</string>
|
||||
<string>Boot0081</string>
|
||||
<string>Boot0082</string>
|
||||
<string>BootNext</string>
|
||||
<string>BootOrder</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>WriteFlash</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>PlatformInfo</key>
|
||||
<dict>
|
||||
<key>Automatic</key>
|
||||
<true/>
|
||||
<key>Generic</key>
|
||||
<dict>
|
||||
<key>AdviseWindows</key>
|
||||
<false/>
|
||||
<key>MLB</key>
|
||||
<string>C02717306J9JG361M</string>
|
||||
<key>ROM</key>
|
||||
<data>
|
||||
m7zhIYfl
|
||||
</data>
|
||||
<key>SpoofVendor</key>
|
||||
<true/>
|
||||
<key>SystemProductName</key>
|
||||
<string>iMacPro1,1</string>
|
||||
<key>SystemSerialNumber</key>
|
||||
<string>C02TM2ZBHX87</string>
|
||||
<key>SystemUUID</key>
|
||||
<string>007076A6-F2A2-4461-BBE5-BAD019F8025A</string>
|
||||
</dict>
|
||||
<key>UpdateDataHub</key>
|
||||
<true/>
|
||||
<key>UpdateNVRAM</key>
|
||||
<true/>
|
||||
<key>UpdateSMBIOS</key>
|
||||
<true/>
|
||||
<key>UpdateSMBIOSMode</key>
|
||||
<string>Create</string>
|
||||
</dict>
|
||||
<key>UEFI</key>
|
||||
<dict>
|
||||
<key>APFS</key>
|
||||
<dict>
|
||||
<key>EnableJumpstart</key>
|
||||
<true/>
|
||||
<key>GlobalConnect</key>
|
||||
<false/>
|
||||
<key>HideVerbose</key>
|
||||
<false/>
|
||||
<key>JumpstartHotPlug</key>
|
||||
<true/>
|
||||
<key>MinDate</key>
|
||||
<integer>0</integer>
|
||||
<key>MinVersion</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>Audio</key>
|
||||
<dict>
|
||||
<key>AudioCodec</key>
|
||||
<integer>0</integer>
|
||||
<key>AudioDevice</key>
|
||||
<string>PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x1)</string>
|
||||
<key>AudioOut</key>
|
||||
<integer>0</integer>
|
||||
<key>AudioSupport</key>
|
||||
<false/>
|
||||
<key>MinimumVolume</key>
|
||||
<integer>20</integer>
|
||||
<key>PlayChime</key>
|
||||
<false/>
|
||||
<key>VolumeAmplifier</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>ConnectDrivers</key>
|
||||
<true/>
|
||||
<key>Drivers</key>
|
||||
<array>
|
||||
<string>VBoxHfs.efi</string>
|
||||
<string>OpenRuntime.efi</string>
|
||||
<string>OpenCanopy.efi</string>
|
||||
<string>#AudioDxe.efi</string>
|
||||
<string>#OpenUsbKbDxe.efi</string>
|
||||
<string>#UsbMouseDxe.efi</string>
|
||||
<string>#Ps2KeyboardDxe.efi</string>
|
||||
<string>#Ps2MouseDxe.efi</string>
|
||||
<string>#HiiDatabase.efi</string>
|
||||
<string>#NvmExpressDxe.efi</string>
|
||||
<string>#XhciDxe.efi</string>
|
||||
<string>#ExFatDxe.efi</string>
|
||||
<string>#PartitionDxe.efi</string>
|
||||
<string>#CrScreenshotDxe.efi</string>
|
||||
</array>
|
||||
<key>Input</key>
|
||||
<dict>
|
||||
<key>KeyFiltering</key>
|
||||
<false/>
|
||||
<key>KeyForgetThreshold</key>
|
||||
<integer>5</integer>
|
||||
<key>KeyMergeThreshold</key>
|
||||
<integer>2</integer>
|
||||
<key>KeySupport</key>
|
||||
<true/>
|
||||
<key>KeySupportMode</key>
|
||||
<string>Auto</string>
|
||||
<key>KeySwap</key>
|
||||
<false/>
|
||||
<key>PointerSupport</key>
|
||||
<false/>
|
||||
<key>PointerSupportMode</key>
|
||||
<string>ASUS</string>
|
||||
<key>TimerResolution</key>
|
||||
<integer>50000</integer>
|
||||
</dict>
|
||||
<key>Output</key>
|
||||
<dict>
|
||||
<key>ClearScreenOnModeSwitch</key>
|
||||
<false/>
|
||||
<key>ConsoleMode</key>
|
||||
<string></string>
|
||||
<key>DirectGopRendering</key>
|
||||
<false/>
|
||||
<key>IgnoreTextInGraphics</key>
|
||||
<false/>
|
||||
<key>ProvideConsoleGop</key>
|
||||
<true/>
|
||||
<key>ReconnectOnResChange</key>
|
||||
<false/>
|
||||
<key>ReplaceTabWithSpace</key>
|
||||
<false/>
|
||||
<key>Resolution</key>
|
||||
<string>1920x1080@32</string>
|
||||
<key>SanitiseClearScreen</key>
|
||||
<false/>
|
||||
<key>TextRenderer</key>
|
||||
<string>BuiltinGraphics</string>
|
||||
<key>UgaPassThrough</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>ProtocolOverrides</key>
|
||||
<dict>
|
||||
<key>AppleAudio</key>
|
||||
<false/>
|
||||
<key>AppleBootPolicy</key>
|
||||
<false/>
|
||||
<key>AppleDebugLog</key>
|
||||
<false/>
|
||||
<key>AppleEvent</key>
|
||||
<false/>
|
||||
<key>AppleFramebufferInfo</key>
|
||||
<false/>
|
||||
<key>AppleImageConversion</key>
|
||||
<false/>
|
||||
<key>AppleImg4Verification</key>
|
||||
<false/>
|
||||
<key>AppleKeyMap</key>
|
||||
<false/>
|
||||
<key>AppleRtcRam</key>
|
||||
<false/>
|
||||
<key>AppleSecureBoot</key>
|
||||
<false/>
|
||||
<key>AppleSmcIo</key>
|
||||
<false/>
|
||||
<key>AppleUserInterfaceTheme</key>
|
||||
<false/>
|
||||
<key>DataHub</key>
|
||||
<false/>
|
||||
<key>DeviceProperties</key>
|
||||
<false/>
|
||||
<key>FirmwareVolume</key>
|
||||
<false/>
|
||||
<key>HashServices</key>
|
||||
<false/>
|
||||
<key>OSInfo</key>
|
||||
<false/>
|
||||
<key>UnicodeCollation</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
<key>ExitBootServicesDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>IgnoreInvalidFlexRatio</key>
|
||||
<false/>
|
||||
<key>ReleaseUsbOwnership</key>
|
||||
<false/>
|
||||
<key>RequestBootVarRouting</key>
|
||||
<true/>
|
||||
<key>TscSyncTimeout</key>
|
||||
<integer>0</integer>
|
||||
<key>UnblockFsConnect</key>
|
||||
<true/>
|
||||
<key>ConnectDrivers</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
38
OpenCore-Catalina/create_iso_catalina.sh
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Create a "ISO" (DMG) image for powering offline macOS installations
|
||||
|
||||
# Bail at first ISO creation error
|
||||
set -e
|
||||
|
||||
display_help() {
|
||||
echo "Usage: $(basename $0) [-h] [<path/to/install_app.app> <path/to/output_iso_file.iso>]"
|
||||
exit 0
|
||||
}
|
||||
|
||||
if [ "$1" == "-h" ] ; then
|
||||
display_help
|
||||
fi
|
||||
|
||||
if [ "$#" -eq 2 ]
|
||||
then
|
||||
in_path=$1
|
||||
dmg_path=$2
|
||||
elif [ "$#" -eq 0 ]
|
||||
then
|
||||
in_path=/Applications/Install\ macOS\ Catalina.app
|
||||
dmg_path=~/Desktop/Catalina.iso
|
||||
echo "Using default paths:"
|
||||
echo "Install app: $in_path"
|
||||
echo "Output disk: $dmg_path"
|
||||
else
|
||||
display_help
|
||||
fi
|
||||
|
||||
# Borrrowed from multiple internet sources
|
||||
hdiutil create -o "$dmg_path" -size 9g -layout GPTSPUD -fs HFS+J
|
||||
hdiutil attach "$dmg_path" -noverify -mountpoint /Volumes/install_build
|
||||
sudo "$in_path/Contents/Resources/createinstallmedia" --volume /Volumes/install_build --nointeraction
|
||||
|
||||
# createinstallmedia may leave a bunch of subvolumes still mounted when it exits, so we need to use -force here.
|
||||
hdiutil detach --force "/Volumes/Install macOS Catalina"
|
163
OpenCore-Catalina/opencore-image-ng.sh
Executable file
|
@ -0,0 +1,163 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# https://github.com/kraxel/imagefish
|
||||
|
||||
######################################################################
|
||||
# defaults
|
||||
|
||||
iso=""
|
||||
img=""
|
||||
cfg=""
|
||||
|
||||
######################################################################
|
||||
# create work dir
|
||||
|
||||
function msg() {
|
||||
local txt="$1"
|
||||
local bold="\x1b[1m"
|
||||
local normal="\x1b[0m"
|
||||
echo -e "${bold}### ${txt}${normal}"
|
||||
}
|
||||
|
||||
function do_cleanup() {
|
||||
msg "cleaning up ..."
|
||||
if test "$GUESTFISH_PID" != ""; then
|
||||
guestfish --remote -- exit >/dev/null 2>&1 || true
|
||||
fi
|
||||
sudo rm -rf "$WORK"
|
||||
}
|
||||
|
||||
WORK="${TMPDIR-/var/tmp}/${0##*/}-$$"
|
||||
mkdir "$WORK" || exit 1
|
||||
trap 'do_cleanup' EXIT
|
||||
|
||||
BASE="$(dirname $0)"
|
||||
|
||||
######################################################################
|
||||
# parse args
|
||||
|
||||
function print_help() {
|
||||
cat <<EOF
|
||||
usage: $0 [ options ]
|
||||
options:
|
||||
--iso <iso-image>
|
||||
--img <disk-image>
|
||||
--cfg <clover-config>
|
||||
EOF
|
||||
}
|
||||
|
||||
while test "$1" != ""; do
|
||||
case "$1" in
|
||||
--iso)
|
||||
iso="$2"
|
||||
shift; shift
|
||||
;;
|
||||
--img)
|
||||
img="$2"
|
||||
shift; shift
|
||||
;;
|
||||
--cfg)
|
||||
cfg="$2"
|
||||
shift; shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
######################################################################
|
||||
# guestfish script helpers
|
||||
|
||||
function fish() {
|
||||
echo "#" "$@"
|
||||
guestfish --remote -- "$@" || exit 1
|
||||
}
|
||||
|
||||
function fish_init() {
|
||||
local format
|
||||
|
||||
case "$img" in
|
||||
*.raw) format="raw" ;;
|
||||
*) format="qcow2";;
|
||||
esac
|
||||
|
||||
msg "creating and adding disk image"
|
||||
fish disk-create $img $format 384M
|
||||
fish add $img
|
||||
fish run
|
||||
}
|
||||
|
||||
function fish_fini() {
|
||||
fish umount-all
|
||||
}
|
||||
|
||||
######################################################################
|
||||
# sanity checks
|
||||
|
||||
if test ! -f "$cfg"; then
|
||||
echo "ERROR: cfg not found: $cfg"
|
||||
exit 1
|
||||
fi
|
||||
if test -f "$img"; then
|
||||
if test "$allow_override" = "yes"; then
|
||||
rm -f "$img"
|
||||
else
|
||||
echo "ERROR: image exists: $img"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
######################################################################
|
||||
# go!
|
||||
|
||||
msg "copy files from local folder"
|
||||
BASE="$(dirname $0)"
|
||||
cp -a $BASE/EFI $WORK
|
||||
find "$WORK"
|
||||
|
||||
#msg "[debug] list drivers in EFI/OC"
|
||||
#(cd $WORK/EFI/OC; find driver* -print)
|
||||
|
||||
export LIBGUESTFS_BACKEND=direct
|
||||
eval $(guestfish --listen)
|
||||
if test "$GUESTFISH_PID" = ""; then
|
||||
echo "ERROR: starting guestfish failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fish_init
|
||||
|
||||
msg "partition disk image"
|
||||
fish part-init /dev/sda gpt
|
||||
fish part-add /dev/sda p 2048 300000
|
||||
fish part-add /dev/sda p 302048 -2048
|
||||
fish part-set-gpt-type /dev/sda 1 C12A7328-F81F-11D2-BA4B-00A0C93EC93B
|
||||
fish part-set-bootable /dev/sda 1 true
|
||||
fish mkfs vfat /dev/sda1 label:EFI
|
||||
fish mkfs vfat /dev/sda2 label:OpenCoreBoot
|
||||
fish mount /dev/sda2 /
|
||||
fish mkdir /ESP
|
||||
fish mount /dev/sda1 /ESP
|
||||
|
||||
msg "copy files to disk image"
|
||||
cp -v "$cfg" $WORK/config.plist
|
||||
fish mkdir /ESP/EFI
|
||||
fish mkdir /ESP/EFI/OC
|
||||
fish mkdir /ESP/EFI/OC/Kexts
|
||||
fish mkdir /ESP/EFI/OC/ACPI
|
||||
fish mkdir /ESP/EFI/OC/Resources
|
||||
fish mkdir /ESP/EFI/OC/Tools
|
||||
fish copy-in $WORK/EFI/BOOT /ESP/EFI
|
||||
fish copy-in $WORK/EFI/OC/OpenCore.efi /ESP/EFI/OC
|
||||
fish copy-in $WORK/EFI/OC/Drivers /ESP/EFI/OC/
|
||||
fish copy-in $WORK/EFI/OC/Kexts /ESP/EFI/OC/
|
||||
fish copy-in $WORK/EFI/OC/ACPI /ESP/EFI/OC/
|
||||
fish copy-in $WORK/EFI/OC/Resources /ESP/EFI/OC/
|
||||
fish copy-in $WORK/EFI/OC/Tools /ESP/EFI/OC/
|
||||
|
||||
# Note
|
||||
fish copy-in startup.nsh /
|
||||
|
||||
BASE="$(dirname $0)"
|
||||
fish copy-in "$WORK/config.plist" /ESP/EFI/OC/
|
||||
|
||||
fish find /ESP/
|
||||
fish_fini
|
1
OpenCore-Catalina/startup.nsh
Executable file
|
@ -0,0 +1 @@
|
|||
fs0:\EFI\BOOT\BOOTx64.efi
|
252
README.md
Normal file
|
@ -0,0 +1,252 @@
|
|||
### Note
|
||||
|
||||
This `README.md` documents the process of creating a `Virtual Hackintosh`
|
||||
system.
|
||||
|
||||
Note: All blobs and resources included in this repository are re-derivable (all
|
||||
instructions are included!).
|
||||
|
||||
:green_heart: Looking for **commercial** support with this stuff? I am [available
|
||||
over email](mailto:dhiru.kholia@gmail.com?subject=[GitHub]%20OSX-KVM%20Commercial%20Support%20Request&body=Hi%20-%20We%20are%20interested%20in%20purchasing%20commercial%20support%20options%20for%20your%20project.) for a chat for **commercial support options only**.
|
||||
|
||||
Working with `Proxmox` and macOS? See [Nick's blog for sure](https://www.nicksherlock.com/).
|
||||
|
||||
Yes, we support offline macOS installations now 🎉
|
||||
|
||||
|
||||
### Contributing Back
|
||||
|
||||
This project can always use your help, time and attention. I am looking for
|
||||
help (pull-requests!) with the following work items:
|
||||
|
||||
* Documentation around running macOS on popular cloud providers (Hetzner, GCP,
|
||||
AWS). See the `Is This Legal?` section and associated references.
|
||||
|
||||
* Document (share) how you use this project to build + test open-source
|
||||
projects / get your stuff done.
|
||||
|
||||
* Document how to use this project for XNU kernel debugging and development.
|
||||
|
||||
* Document the process to create and reuse VM snapshots. Instantaneous macOS
|
||||
boots would be nice this way.
|
||||
|
||||
* Document the process to launch a bunch of headless macOS VMs (build farm).
|
||||
|
||||
* Document usage of [munki](https://github.com/munki/munki) to deploy software
|
||||
to such a `build farm`.
|
||||
|
||||
* Enable VNC + SSH support out of the box or more easily.
|
||||
|
||||
* Better support + docs for AMD Ryzen.
|
||||
|
||||
* Robustness improvements are always welcome!
|
||||
|
||||
* (Not so) crazy idea - automate the macOS installation via OpenCV.
|
||||
|
||||
|
||||
### Requirements
|
||||
|
||||
* A modern Linux distribution. E.g. Ubuntu 20.04 LTS 64-bit or later.
|
||||
|
||||
* QEMU >= 4.2.0
|
||||
|
||||
* A CPU with Intel VT-x / AMD SVM support is required (`egrep '(vmx|svm)' /proc/cpuinfo`)
|
||||
|
||||
* A CPU with SSE4.1 support is required for >= macOS Sierra
|
||||
|
||||
* A CPU with AVX2 support is required for >= macOS Mojave
|
||||
|
||||
Note: Older AMD CPU(s) are known to be problematic. AMD FX-8350 works but
|
||||
Phenom II X3 720 does not. Ryzen processors work just fine.
|
||||
|
||||
|
||||
### Installation Preparation
|
||||
|
||||
* KVM may need the following tweak on the host machine to work.
|
||||
|
||||
```
|
||||
echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
|
||||
```
|
||||
|
||||
To make this change permanent, you may use the following command.
|
||||
|
||||
```
|
||||
sudo cp kvm.conf /etc/modprobe.d/kvm.conf # for intel boxes
|
||||
```
|
||||
|
||||
* Install QEMU and other packages.
|
||||
|
||||
```
|
||||
sudo apt-get install qemu uml-utilities virt-manager git \
|
||||
wget libguestfs-tools p7zip-full -y
|
||||
```
|
||||
|
||||
This step may need to be adapted for your Linux distribution.
|
||||
|
||||
* Clone this repository on your QEMU system. Files from this repository are
|
||||
used in the following steps.
|
||||
|
||||
```
|
||||
cd ~
|
||||
|
||||
git clone --depth 1 https://github.com/kholia/OSX-KVM.git
|
||||
|
||||
cd OSX-KVM
|
||||
```
|
||||
|
||||
* Fetch macOS installer.
|
||||
|
||||
```
|
||||
./fetch-macOS-v2.py
|
||||
```
|
||||
|
||||
ATTENTION: Installing `Big Sur` is NOT recommended at this time, unless you
|
||||
are a Hackintosh developer! Let the `Big Sur` setup sit at the `Country
|
||||
Selection` screen and other similar places for a while ;)
|
||||
|
||||
You can choose your desired macOS version here. After executing this step,
|
||||
you should have the `BaseSystem.dmg` file in the current folder.
|
||||
|
||||
Sample run:
|
||||
|
||||
```
|
||||
$ ./fetch-macOS-v2.py
|
||||
1. High Sierra (10.13)
|
||||
2. Mojave (10.14)
|
||||
3. Catalina (10.15) - RECOMMENDED
|
||||
4. Latest (Big Sur - 11)
|
||||
|
||||
Choose a product to download (1-4): 3
|
||||
```
|
||||
|
||||
Note: Modern NVIDIA GPUs are supported on HighSierra but not on later
|
||||
versions.
|
||||
|
||||
* Convert the downloaded `BaseSystem.dmg` file into the `BaseSystem.img` file.
|
||||
|
||||
```
|
||||
qemu-img convert BaseSystem.dmg -O raw BaseSystem.img
|
||||
```
|
||||
|
||||
* Create a virtual HDD image where macOS will be installed. If you change the
|
||||
name of the disk image from `mac_hdd.img` to something else, the boot scripts
|
||||
will need to be updated to point to the new image name.
|
||||
|
||||
```
|
||||
qemu-img create -f qcow2 mac_hdd_ng.img 128G
|
||||
```
|
||||
|
||||
NOTE: Create this HDD image file on a fast SSD/NVMe disk for best results.
|
||||
|
||||
* Now you are ready to install macOS 🚀
|
||||
|
||||
|
||||
### Installation
|
||||
|
||||
- CLI method (primary). Just run the `OpenCore-Boot.sh` script to start the
|
||||
installation process.
|
||||
|
||||
```
|
||||
./OpenCore-Boot.sh
|
||||
```
|
||||
|
||||
Note: This same script works for Big Sur, Catalina, Mojave, and High Sierra.
|
||||
|
||||
- You are all set! 🙌
|
||||
|
||||
- (OPTIONAL) Use this macOS VM disk with libvirt (virt-manager / virsh stuff).
|
||||
|
||||
- Edit `macOS-libvirt-Catalina.xml` file and change the various file paths (search
|
||||
for `CHANGEME` strings in that file). The following command should do the
|
||||
trick usually.
|
||||
|
||||
```
|
||||
sed "s/CHANGEME/$USER/g" macOS-libvirt-Catalina.xml > macOS.xml
|
||||
|
||||
virt-xml-validate macOS.xml
|
||||
```
|
||||
|
||||
- Create a VM by running the following command.
|
||||
|
||||
```bash
|
||||
virsh --connect qemu:///system define macOS.xml
|
||||
```
|
||||
|
||||
- Launch `virt-manager` and start the `macOS` virtual machine.
|
||||
|
||||
Note: You may need to run `sudo ip link delete tap0` command before
|
||||
`virt-manager` is able to start the `macOS` VM.
|
||||
|
||||
|
||||
### Setting Expectations Right
|
||||
|
||||
Nice job on setting up a `Virtual Hackintosh` system! Such a system can be used
|
||||
for a variety of purposes (e.g. software builds, testing, reversing work), and
|
||||
it may be all you need, along with some tweaks documented in this repository.
|
||||
|
||||
However, such a system lacks graphical acceleration, a reliable sound sub-system,
|
||||
USB (3) functionality and other similar things. To enable these things, take a
|
||||
look at our [notes](notes.md). We would like to resume our testing and
|
||||
documentation work around this area. Please [reach out to us](mailto:dhiru.kholia@gmail.com?subject=[GitHub]%20OSX-KVM%20Funding%20Support)
|
||||
if you are able to fund this area of work.
|
||||
|
||||
It is possible to have 'beyond-native-apple-hw' performance but it does require
|
||||
work, patience, and a bit of luck (perhaps?).
|
||||
|
||||
|
||||
### Post-Installation
|
||||
|
||||
* See [networking notes](networking-qemu-kvm-howto.txt) to setup guest networking.
|
||||
|
||||
I have the following commands present in `/etc/rc.local`.
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sudo ip tuntap add dev tap0 mode tap
|
||||
sudo ip link set tap0 up promisc on
|
||||
sudo ip link set dev virbr0 up
|
||||
sudo ip link set dev tap0 master virbr0
|
||||
```
|
||||
|
||||
This has been enough for me so far.
|
||||
|
||||
Note: You may need to [enable the `rc.local` functionality manually on modern Ubuntu versions](https://linuxmedium.com/how-to-enable-etc-rc-local-with-systemd-on-ubuntu-20-04/).
|
||||
|
||||
* To passthrough GPUs and other devices, see [these notes](notes.md).
|
||||
|
||||
* Need a different resolution? Check out the [notes](notes.md) included in this repository.
|
||||
|
||||
* To generate your own SMBIOS, use [GenSMBIOS](https://github.com/corpnewt/GenSMBIOS).
|
||||
|
||||
|
||||
### Is This Legal?
|
||||
|
||||
The "secret" Apple OSK string is widely available on the Internet. It is also included in a public court document [available here](http://www.rcfp.org/sites/default/files/docs/20120105_202426_apple_sealing.pdf). I am not a lawyer but it seems that Apple's attempt(s) to get the OSK string treated as a trade secret did not work out. Due to these reasons, the OSK string is freely included in this repository.
|
||||
|
||||
Please review the ['Legality of Hackintoshing' documentation bits from Dortania's OpenCore Install Guide](https://dortania.github.io/OpenCore-Install-Guide/why-oc.html#legality-of-hackintoshing).
|
||||
|
||||
Gabriel Somlo also has [some thoughts](http://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/) on the legal aspects involved in running macOS under QEMU/KVM.
|
||||
|
||||
You may also find [this 'Announcing Amazon EC2 Mac instances for macOS' article](https://aws.amazon.com/about-aws/whats-new/2020/11/announcing-amazon-ec2-mac-instances-for-macos/
|
||||
) interesting.
|
||||
|
||||
|
||||
### Motivation
|
||||
|
||||
My aim is to enable macOS based educational tasks, builds + testing, kernel
|
||||
debugging, reversing, and macOS security research in an easy, reproducible
|
||||
manner without getting 'invested' in Apple's closed ecosystem (too heavily).
|
||||
|
||||
These `Virtual Hackintosh` systems are not intended to replace the genuine
|
||||
physical macOS systems.
|
||||
|
||||
Personally speaking, this repository has been a way for me to 'exit' the Apple
|
||||
ecosystem. It has helped me to test and compare the interoperability of `Canon
|
||||
CanoScan LiDE 120` scanner, and `Brother HL-2250DN` laser printer. And these
|
||||
devices now work decently enough on modern versions of Ubuntu (Yay for free
|
||||
software). Also, a long time back, I had to completely wipe my (then) brand new
|
||||
`MacBook Pro (Retina, 15-inch, Late 2013)` and install Xubuntu on it - as the
|
||||
`OS X` kernel kept crashing on it!
|
||||
|
||||
Backstory: I was a (poor) student in Canada in a previous life and Apple made [my work on cracking Apple Keychains](https://github.com/openwall/john/blob/bleeding-jumbo/src/keychain_fmt_plug.c) a lot harder than it needed to be. This is how I got interested in Hackintosh systems.
|
7
References.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
### References
|
||||
|
||||
* http://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/
|
||||
|
||||
* https://www.kraxel.org/blog/2017/09/running-macos-as-guest-in-kvm/
|
||||
|
||||
* https://github.com/foxlet/macOS-Simple-KVM
|
78
UNRAID.md
Normal file
|
@ -0,0 +1,78 @@
|
|||
# Setting up OSX-KVM with UNRAID (Unraid OS)
|
||||
Note: SpaceInvaderOne has a community app called `macinabox`, and it is a Docker container that can automate the entire process that creates the VM and disks. This guide aims to provide utility in choosing specific macOS versions or bootloaders, and understanding the process of how this repository's resources can be used in hypervisor types (UNRAID, ESXi, etc.).
|
||||
|
||||
- [Setting up OSX-KVM with UNRAID](#setting-up-osx-kvm-with-unraid)
|
||||
- [Motivation](#motivation)
|
||||
- [Pre-Requisites](#pre-requisites)
|
||||
- [Preparing the VM](#preparing-the-vm)
|
||||
- [Starting the VM](#starting-the-vm)
|
||||
- [Optional Notes](#optional-notes)
|
||||
- [Misc](#misc)
|
||||
- [Resources](#resources)
|
||||
|
||||
## Motivation
|
||||
This guide solely uses the files generated from this repository to construct a VM for use in UNRAID. This means updates to and features of this repository should be compatible with creating VMs in UNRAID. This type of setup also aims to utilize UNRAID's advantages to address items in the [Contributing Back](https://github.com/kholia/OSX-KVM#contributing-back) section of the main repository, including creating/re-using VM snapshots, build farms, VNC+SSH support, and capacity of delivering a bare-metal-like experience for development. Further customization in setting up Hackintosh on KVM is beyond the scope of this documentation, but feel free to provide relevant [supplemental resources](#resources).
|
||||
|
||||
## Pre-Requisites
|
||||
Follow the [Installation Preparation](https://github.com/kholia/OSX-KVM#installation-preparation) guide and have your disk image `mac_hdd_ng.img` and installation media `BaseSystem.dmg` ready.
|
||||
|
||||
Ensure you have VM support and passthrough parameters prepared (VFIO devices, PCI controllers, VNC remote, etc.). You should also have a way of reading/writing to the appropriate locations in your UNRAID server (I use `Krusader`).
|
||||
|
||||
## Preparing the VM
|
||||
Below are sample instructions for setting up the VM. We will keep the necessary files in the same directory for simplicity.
|
||||
* Place these 3 files `BaseSystem.img`, `mac_hdd_ng.img` and `OSX-KVM/OpenCore-Catalina/OpenCore.qcow2` into the directory of your VM
|
||||
* ie: Into `/mnt/user/domains/BigSur`, where domains is the folder for your VMs
|
||||
* Create a new VM and edit the XML. Use the OSX-KVM repository's `macOS-libvirt-Catalina.xml` as a guide
|
||||
* ie: You also have the option to use the GUI to adjust the CPUs, RAM, setting the OS installation media and disk images, as well as the devices you wish to pass into the VM. However, each time the template is edited via the GUI, you must go in the XML editor and paste the qemu args at the bottom of the XML file.
|
||||
* Note: The opencore qcow2 file should be prioritized first, it will contain the EFI boot partition that you can modify after installation using the OpenCore Configurator
|
||||
* Check that the three files' primary vDisk bus is SATA, and verify types:
|
||||
* OpenCore.qcow2 `<driver name='qemu' type='qcow2' cache='writeback'/>`
|
||||
* BaseSystem.img `<driver name='qemu' type='raw' cache='writeback'/>`
|
||||
* mac_hdd_ng.img `<driver name='qemu' type='qcow2' cache='writeback'/>`
|
||||
* After successful installation, the BaseSystem.img entry can be safely deleted from the XML
|
||||
|
||||
## Starting the VM
|
||||
* Initialize the VM, and select the macOS base system when OpenCore prompts
|
||||
* Once the installer boots, go into disk utility and erase the qemu drive that relatively matches the space you've allocated in the qemu-img args
|
||||
* ie: Erase the disk and use these params - APFS, GUID Partition Table
|
||||
* After installation, you may need to change the NIC to `vmxnet3` or `e1000-82545em` to login with your Apple ID or install your apps from the AppStore (consult [Resources](#resources) for other network interface types)
|
||||
* Download OpenCore Configurator and mount the EFI partition called `EFI o` (Tools > Mount EFI)
|
||||
![OpenCore EFI Partitions](screenshots/unraid-oc-efi.png)
|
||||
* Open the plist from Tools > Scan Configurations
|
||||
![OpenCore plist](screenshots/unraid-oc-plist.png)
|
||||
* Customize aml/kext/nvram/drivers and save
|
||||
* Note: Making modifications here will write to the `OpenCore.qcow2` file copied from this repository.
|
||||
|
||||
## Optional Notes
|
||||
In no particular order,
|
||||
* For the RX 5700XT, the boot-args `agdpmod=pikera` is necessary to successfully boot. Change in `NVRAM > UUID > boot-args (right-click) > WhateverGreen > agdpmod=pikera`
|
||||
* Use VNC or another GPU until able to configure the EFI partition, or pre-configure the qcow2 file
|
||||
* Simplify updates by creating another VM template that does not passthrough the GPU (noVNC)
|
||||
* During OS updates, multiple restarts occur. If you use an AMD GPU that has the reset-bug, this process can be jarring
|
||||
* Each restart there will be another boot option alongside your default one (from the update), choose that one until the update is complete
|
||||
* For passing PCIe USB controllers. ensure they work with macOS and ensure its free by vfio-bind them on server boot
|
||||
|
||||
When there is a home for this section, feel free to share optimizations and configurations that require modifications to the qemu args, XML, config plist, etc.
|
||||
|
||||
## Misc
|
||||
|
||||
qemu args
|
||||
```
|
||||
<qemu:commandline>
|
||||
<qemu:arg value='-usb'/>
|
||||
<qemu:arg value='-device'/>
|
||||
<qemu:arg value='usb-kbd,bus=usb-bus.0'/>
|
||||
<qemu:arg value='-device'/>
|
||||
<qemu:arg value='isa-applesmc,osk=ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc'/>
|
||||
<qemu:arg value='-smbios'/>
|
||||
<qemu:arg value='type=2'/>
|
||||
<qemu:arg value='-cpu'/>
|
||||
<qemu:arg value='Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check'/>
|
||||
</qemu:commandline>
|
||||
```
|
||||
|
||||
## Resources
|
||||
|
||||
* [https://forums.unraid.net/topic/84430-hackintosh-tips-to-make-a-bare-metal-macos/](https://forums.unraid.net/topic/84430-hackintosh-tips-to-make-a-bare-metal-macos/)
|
||||
* [SpaceInvaderOne: How to Easily Install macOS Catalina Mojave or HighSierra as a VM on Unraid](https://www.youtube.com/watch?v=g_jk9D2e5q0)
|
||||
* [Macinabox GitHub Repository](https://github.com/SpaceinvaderOne/Macinabox)
|
71
Xcode-Tutorial.md
Normal file
|
@ -0,0 +1,71 @@
|
|||
### Developing on Virtualized macOS
|
||||
|
||||
1. Install Xcode from the Apple App Store or from the [Apple developer website](https://developers.apple.com).
|
||||
|
||||
2. Create an Xcode project as usual.
|
||||
|
||||
3. Connect the `Apple Device` (called `iPhone` from now on) to the macOS VM.
|
||||
This can be done in two ways:
|
||||
|
||||
Method 1: Use USB passthrough technique to connect an entire USB controller
|
||||
(to which `iPhone` is connected) to the macOS VM. This method is covered in
|
||||
these [notes](notes.md#usb-passthrough-notes).
|
||||
|
||||
If USB passthrough is not an option, use `Method 2`.
|
||||
|
||||
Method 2. You can use the [USB Network Gate](https://www.eltima.com/products/usb-over-ethernet/)
|
||||
software to pass USB devices to macOS VMs over the network (LAN / Wi-Fi).
|
||||
|
||||
![USB Network Gate - USB over Ethernet Sharing Software](https://www.eltima.com/imgnew/products/usb-over-ethernet/illustrationShare.png)
|
||||
|
||||
This software comes with a free trial and supports a wide variety of
|
||||
operating systems. If your operating system is not supported directly, you can
|
||||
deploy this software on a Raspberry Pi.
|
||||
|
||||
Once you have it installed on the host computer (the one with the USB device
|
||||
that you will be sharing), you can install it on the macOS VM. Make sure to
|
||||
allow the extension in `System Preferences > Security & Privacy` and reboot.
|
||||
|
||||
Once that is finished, you can open up `USB Network Gate` on the client
|
||||
(macOS VM) and click `Add Server` and type in the IP address of the Raspberry Pi
|
||||
or other device (to which the `iPhone` is connected). Finally, you have to
|
||||
trust the computer on your `iPhone`, and it should be completely set up!
|
||||
|
||||
At this point, the `iPhone` should work as usual - showing up in
|
||||
Finder, Xcode, etc.
|
||||
|
||||
4. At this point, the macOS VM has an Xcode project and has access to the
|
||||
`iPhone`. Continue using Xcode as usual to build, deploy, and test the Xcode
|
||||
project.
|
||||
|
||||
|
||||
### Setup USB Network Gate on Raspberry Pi
|
||||
|
||||
These steps were tested on RPi 3B+ running `Raspberry Pi OS with desktop
|
||||
(August 20th 2020)`.
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
|
||||
sudo reboot
|
||||
|
||||
sudo apt install raspberrypi-kernel-headers
|
||||
|
||||
wget https://cdn.electronic.us/products/usb-over-ethernet/linux/download/eveusb_armv7l.deb
|
||||
|
||||
sudo apt install ./eveusb_armv7l.deb
|
||||
```
|
||||
|
||||
To get proper VNC resolution (for headless systems), insert the following lines
|
||||
in `/boot/config.txt` on the RPi system.
|
||||
|
||||
```
|
||||
dtparam=audio=on # note: existing line
|
||||
hdmi_force_hotplug=1
|
||||
hdmi_group=2
|
||||
hdmi_mode=82
|
||||
```
|
||||
|
||||
Enable VNC on the RPi system using the `sudo raspi-config nonint do_vnc 0`
|
||||
command.
|
453
backups/fetch-macOS.py
Executable file
|
@ -0,0 +1,453 @@
|
|||
#!/usr/bin/env python3
|
||||
# encoding: utf-8
|
||||
#
|
||||
# https://github.com/munki/macadmin-scripts/blob/master/installinstallmacos.py
|
||||
#
|
||||
# Copyright 2017 Greg Neagle.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# Thanks to Tim Sutton for ideas, suggestions, and sample code.
|
||||
#
|
||||
# Updated in May of 2019 by Dhiru Kholia.
|
||||
|
||||
'''installinstallmacos.py
|
||||
A tool to download the parts for an Install macOS app from Apple's
|
||||
softwareupdate servers and install a functioning Install macOS app onto an
|
||||
empty disk image'''
|
||||
|
||||
# https://github.com/foxlet/macOS-Simple-KVM/blob/master/tools/FetchMacOS/fetch-macos.py
|
||||
# is pretty similar.
|
||||
|
||||
|
||||
# Bad hack
|
||||
import warnings
|
||||
|
||||
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
||||
|
||||
import os
|
||||
import gzip
|
||||
import argparse
|
||||
import plistlib
|
||||
import subprocess
|
||||
|
||||
from xml.dom import minidom
|
||||
from xml.parsers.expat import ExpatError
|
||||
|
||||
|
||||
import sys
|
||||
|
||||
if sys.version_info[0] < 3:
|
||||
import urlparse as urlstuff
|
||||
else:
|
||||
import urllib.parse as urlstuff
|
||||
# Quick fix for python 3.9 and above
|
||||
if sys.version_info[0] == 3 and sys.version_info[1] >= 9:
|
||||
from types import MethodType
|
||||
|
||||
def readPlist(self,filepath):
|
||||
with open(filepath, 'rb') as f:
|
||||
p = plistlib._PlistParser(dict)
|
||||
rootObject = p.parse(f)
|
||||
return rootObject
|
||||
# adding the method readPlist() to plistlib
|
||||
plistlib.readPlist = MethodType(readPlist, plistlib)
|
||||
|
||||
# https://github.com/foxlet/macOS-Simple-KVM/blob/master/tools/FetchMacOS/fetch-macos.py (unused)
|
||||
# https://github.com/munki/macadmin-scripts
|
||||
catalogs = {
|
||||
"CustomerSeed": "https://swscan.apple.com/content/catalogs/others/index-10.16customerseed-10.16-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog",
|
||||
"DeveloperSeed": "https://swscan.apple.com/content/catalogs/others/index-10.16seed-10.16-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog",
|
||||
"PublicSeed": "https://swscan.apple.com/content/catalogs/others/index-10.16beta-10.16-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog",
|
||||
"PublicRelease": "https://swscan.apple.com/content/catalogs/others/index-10.16-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog",
|
||||
"20": "https://swscan.apple.com/content/catalogs/others/index-11-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog"
|
||||
}
|
||||
|
||||
|
||||
def get_default_catalog():
|
||||
'''Returns the default softwareupdate catalog for the current OS'''
|
||||
return catalogs["20"]
|
||||
# return catalogs["PublicRelease"]
|
||||
# return catalogs["DeveloperSeed"]
|
||||
|
||||
|
||||
class ReplicationError(Exception):
|
||||
'''A custom error when replication fails'''
|
||||
pass
|
||||
|
||||
|
||||
def cmd_exists(cmd):
|
||||
return subprocess.call("type " + cmd, shell=True,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE) == 0
|
||||
|
||||
|
||||
def replicate_url(full_url,
|
||||
root_dir='/tmp',
|
||||
show_progress=False,
|
||||
ignore_cache=False,
|
||||
attempt_resume=False, installer=False, product_title=""):
|
||||
'''Downloads a URL and stores it in the same relative path on our
|
||||
filesystem. Returns a path to the replicated file.'''
|
||||
|
||||
# hack
|
||||
print("[+] Fetching %s" % full_url)
|
||||
if installer and "BaseSystem.dmg" not in full_url and "Big Sur" not in product_title:
|
||||
return
|
||||
if "Big Sur" in product_title and "InstallAssistant.pkg" not in full_url:
|
||||
return
|
||||
attempt_resume = True
|
||||
# path = urllib.parse.urlsplit(full_url)[2]
|
||||
path = urlstuff.urlsplit(full_url)[2]
|
||||
relative_url = path.lstrip('/')
|
||||
relative_url = os.path.normpath(relative_url)
|
||||
# local_file_path = os.path.join(root_dir, relative_url)
|
||||
local_file_path = relative_url
|
||||
# print("Downloading %s..." % full_url)
|
||||
|
||||
if cmd_exists('wget'):
|
||||
if not installer:
|
||||
download_cmd = ['wget', "-c", "--quiet", "-x", "-nH", full_url]
|
||||
# this doesn't work as there are multiple metadata files with the same name!
|
||||
# download_cmd = ['wget', "-c", "--quiet", full_url]
|
||||
else:
|
||||
download_cmd = ['wget', "-c", full_url]
|
||||
else:
|
||||
if not installer:
|
||||
download_cmd = ['curl', "--silent", "--show-error", "-o", local_file_path, "--create-dirs", full_url]
|
||||
else:
|
||||
local_file_path = os.path.basename(local_file_path)
|
||||
download_cmd = ['curl', "-o", local_file_path, full_url]
|
||||
|
||||
try:
|
||||
subprocess.check_call(download_cmd)
|
||||
except subprocess.CalledProcessError as err:
|
||||
raise ReplicationError(err)
|
||||
return local_file_path
|
||||
|
||||
|
||||
def parse_server_metadata(filename):
|
||||
'''Parses a softwareupdate server metadata file, looking for information
|
||||
of interest.
|
||||
Returns a dictionary containing title, version, and description.'''
|
||||
title = ''
|
||||
vers = ''
|
||||
try:
|
||||
md_plist = plistlib.readPlist(filename)
|
||||
except (OSError, IOError, ExpatError) as err:
|
||||
print('Error reading %s: %s' % (filename, err), file=sys.stderr)
|
||||
return {}
|
||||
vers = md_plist.get('CFBundleShortVersionString', '')
|
||||
localization = md_plist.get('localization', {})
|
||||
preferred_localization = (localization.get('English') or
|
||||
localization.get('en'))
|
||||
if preferred_localization:
|
||||
title = preferred_localization.get('title', '')
|
||||
|
||||
metadata = {}
|
||||
metadata['title'] = title
|
||||
metadata['version'] = vers
|
||||
|
||||
"""
|
||||
{'title': 'macOS Mojave', 'version': '10.14.5'}
|
||||
{'title': 'macOS Mojave', 'version': '10.14.6'}
|
||||
"""
|
||||
return metadata
|
||||
|
||||
|
||||
def get_server_metadata(catalog, product_key, workdir, ignore_cache=False):
|
||||
'''Replicate ServerMetaData'''
|
||||
try:
|
||||
url = catalog['Products'][product_key]['ServerMetadataURL']
|
||||
try:
|
||||
smd_path = replicate_url(
|
||||
url, root_dir=workdir, ignore_cache=ignore_cache)
|
||||
return smd_path
|
||||
except ReplicationError as err:
|
||||
print('Could not replicate %s: %s' % (url, err), file=sys.stderr)
|
||||
return None
|
||||
except KeyError:
|
||||
# print('Malformed catalog.', file=sys.stderr)
|
||||
return None
|
||||
|
||||
|
||||
def parse_dist(filename):
|
||||
'''Parses a softwareupdate dist file, returning a dict of info of
|
||||
interest'''
|
||||
dist_info = {}
|
||||
try:
|
||||
dom = minidom.parse(filename)
|
||||
except ExpatError:
|
||||
print('Invalid XML in %s' % filename, file=sys.stderr)
|
||||
return dist_info
|
||||
except IOError as err:
|
||||
print('Error reading %s: %s' % (filename, err), file=sys.stderr)
|
||||
return dist_info
|
||||
|
||||
titles = dom.getElementsByTagName('title')
|
||||
if titles:
|
||||
dist_info['title_from_dist'] = titles[0].firstChild.wholeText
|
||||
|
||||
auxinfos = dom.getElementsByTagName('auxinfo')
|
||||
if not auxinfos:
|
||||
return dist_info
|
||||
auxinfo = auxinfos[0]
|
||||
key = None
|
||||
value = None
|
||||
children = auxinfo.childNodes
|
||||
# handle the possibility that keys from auxinfo may be nested
|
||||
# within a 'dict' element
|
||||
dict_nodes = [n for n in auxinfo.childNodes
|
||||
if n.nodeType == n.ELEMENT_NODE and
|
||||
n.tagName == 'dict']
|
||||
if dict_nodes:
|
||||
children = dict_nodes[0].childNodes
|
||||
for node in children:
|
||||
if node.nodeType == node.ELEMENT_NODE and node.tagName == 'key':
|
||||
key = node.firstChild.wholeText
|
||||
if node.nodeType == node.ELEMENT_NODE and node.tagName == 'string':
|
||||
value = node.firstChild.wholeText
|
||||
if key and value:
|
||||
dist_info[key] = value
|
||||
key = None
|
||||
value = None
|
||||
return dist_info
|
||||
|
||||
|
||||
def download_and_parse_sucatalog(sucatalog, workdir, ignore_cache=False):
|
||||
'''Downloads and returns a parsed softwareupdate catalog'''
|
||||
try:
|
||||
localcatalogpath = replicate_url(
|
||||
sucatalog, root_dir=workdir, ignore_cache=ignore_cache)
|
||||
except ReplicationError as err:
|
||||
print('Could not replicate %s: %s' % (sucatalog, err), file=sys.stderr)
|
||||
exit(-1)
|
||||
if os.path.splitext(localcatalogpath)[1] == '.gz':
|
||||
with gzip.open(localcatalogpath) as the_file:
|
||||
content = the_file.read()
|
||||
try:
|
||||
catalog = plistlib.readPlistFromString(content)
|
||||
return catalog
|
||||
except ExpatError as err:
|
||||
print('Error reading %s: %s' % (localcatalogpath, err), file=sys.stderr)
|
||||
exit(-1)
|
||||
else:
|
||||
try:
|
||||
catalog = plistlib.readPlist(localcatalogpath)
|
||||
return catalog
|
||||
except (OSError, IOError, ExpatError) as err:
|
||||
print('Error reading %s: %s' % (localcatalogpath, err), file=sys.stderr)
|
||||
exit(-1)
|
||||
|
||||
|
||||
def find_mac_os_installers(catalog):
|
||||
'''Return a list of product identifiers for what appear to be macOS
|
||||
installers'''
|
||||
mac_os_installer_products = []
|
||||
if 'Products' in catalog:
|
||||
for product_key in catalog['Products'].keys():
|
||||
product = catalog['Products'][product_key]
|
||||
try:
|
||||
if product['ExtendedMetaInfo'][
|
||||
'InstallAssistantPackageIdentifiers']:
|
||||
mac_os_installer_products.append(product_key)
|
||||
except KeyError:
|
||||
continue
|
||||
|
||||
return mac_os_installer_products
|
||||
|
||||
|
||||
def os_installer_product_info(catalog, workdir, ignore_cache=False):
|
||||
'''Returns a dict of info about products that look like macOS installers'''
|
||||
product_info = {}
|
||||
installer_products = find_mac_os_installers(catalog)
|
||||
for product_key in installer_products:
|
||||
product_info[product_key] = {}
|
||||
filename = get_server_metadata(catalog, product_key, workdir)
|
||||
if filename:
|
||||
product_info[product_key] = parse_server_metadata(filename)
|
||||
else:
|
||||
# print('No server metadata for %s' % product_key)
|
||||
product_info[product_key]['title'] = None
|
||||
product_info[product_key]['version'] = None
|
||||
|
||||
product = catalog['Products'][product_key]
|
||||
product_info[product_key]['PostDate'] = product['PostDate']
|
||||
distributions = product['Distributions']
|
||||
dist_url = distributions.get('English') or distributions.get('en')
|
||||
try:
|
||||
dist_path = replicate_url(
|
||||
dist_url, root_dir=workdir, ignore_cache=ignore_cache)
|
||||
except ReplicationError as err:
|
||||
print('Could not replicate %s: %s' % (dist_url, err),
|
||||
file=sys.stderr)
|
||||
else:
|
||||
dist_info = parse_dist(dist_path)
|
||||
product_info[product_key]['DistributionPath'] = dist_path
|
||||
product_info[product_key].update(dist_info)
|
||||
if not product_info[product_key]['title']:
|
||||
product_info[product_key]['title'] = dist_info.get('title_from_dist')
|
||||
if not product_info[product_key]['version']:
|
||||
product_info[product_key]['version'] = dist_info.get('VERSION')
|
||||
|
||||
return product_info
|
||||
|
||||
|
||||
def replicate_product(catalog, product_id, workdir, ignore_cache=False, product_title=""):
|
||||
'''Downloads all the packages for a product'''
|
||||
product = catalog['Products'][product_id]
|
||||
for package in product.get('Packages', []):
|
||||
# TO-DO: Check 'Size' attribute and make sure
|
||||
# we have enough space on the target
|
||||
# filesystem before attempting to download
|
||||
if 'URL' in package:
|
||||
try:
|
||||
replicate_url(
|
||||
package['URL'], root_dir=workdir,
|
||||
show_progress=True, ignore_cache=ignore_cache,
|
||||
attempt_resume=(not ignore_cache), installer=True, product_title=product_title)
|
||||
except ReplicationError as err:
|
||||
print('Could not replicate %s: %s' % (package['URL'], err), file=sys.stderr)
|
||||
exit(-1)
|
||||
if 'MetadataURL' in package:
|
||||
try:
|
||||
replicate_url(package['MetadataURL'], root_dir=workdir,
|
||||
ignore_cache=ignore_cache, installer=True)
|
||||
except ReplicationError as err:
|
||||
print('Could not replicate %s: %s' % (package['MetadataURL'], err), file=sys.stderr)
|
||||
exit(-1)
|
||||
|
||||
|
||||
def find_installer_app(mountpoint):
|
||||
'''Returns the path to the Install macOS app on the mountpoint'''
|
||||
applications_dir = os.path.join(mountpoint, 'Applications')
|
||||
for item in os.listdir(applications_dir):
|
||||
if item.endswith('.app'):
|
||||
return os.path.join(applications_dir, item)
|
||||
return None
|
||||
|
||||
|
||||
def determine_version(version, title, product_info):
|
||||
if version:
|
||||
if version == 'latest':
|
||||
from distutils.version import StrictVersion
|
||||
latest_version = StrictVersion('0.0.0')
|
||||
for index, product_id in enumerate(product_info):
|
||||
if not title or product_info[product_id]['title'] == title:
|
||||
d = product_info[product_id]['version']
|
||||
if d > latest_version:
|
||||
latest_version = d
|
||||
|
||||
if latest_version == StrictVersion("0.0.0"):
|
||||
print("Could not find latest version {}")
|
||||
exit(1)
|
||||
|
||||
version = str(latest_version)
|
||||
|
||||
for index, product_id in enumerate(product_info):
|
||||
v = product_info[product_id]['version']
|
||||
if v == version:
|
||||
return product_id, product_info[product_id]['title']
|
||||
|
||||
print("Could not find version {}. Versions available are:".format(version))
|
||||
for _, pid in enumerate(product_info):
|
||||
print("- {}".format(product_info[pid]['version']))
|
||||
|
||||
exit(1)
|
||||
|
||||
# display a menu of choices (some seed catalogs have multiple installers)
|
||||
print('%2s %12s %10s %11s %s' % ('#', 'ProductID', 'Version',
|
||||
'Post Date', 'Title'))
|
||||
for index, product_id in enumerate(product_info):
|
||||
print('%2s %12s %10s %11s %s' % (
|
||||
index + 1,
|
||||
product_id,
|
||||
product_info[product_id]['version'],
|
||||
product_info[product_id]['PostDate'].strftime('%Y-%m-%d'),
|
||||
product_info[product_id]['title']
|
||||
))
|
||||
|
||||
answer = input(
|
||||
'\nChoose a product to download (1-%s): ' % len(product_info))
|
||||
try:
|
||||
index = int(answer) - 1
|
||||
if index < 0:
|
||||
raise ValueError
|
||||
product_id = list(product_info.keys())[index]
|
||||
return product_id, product_info[product_id]['title']
|
||||
except (ValueError, IndexError):
|
||||
pass
|
||||
|
||||
print('Invalid input provided.')
|
||||
exit(0)
|
||||
|
||||
|
||||
def main():
|
||||
'''Do the main thing here'''
|
||||
"""
|
||||
if os.getuid() != 0:
|
||||
sys.exit('This command requires root (to install packages), so please '
|
||||
'run again with sudo or as root.')
|
||||
"""
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--workdir', metavar='path_to_working_dir',
|
||||
default='.',
|
||||
help='Path to working directory on a volume with over '
|
||||
'10G of available space. Defaults to current working '
|
||||
'directory.')
|
||||
parser.add_argument('--version', metavar='version',
|
||||
default=None,
|
||||
help='The version to download in the format of '
|
||||
'"$major.$minor.$patch", e.g. "10.15.4". Can '
|
||||
'be "latest" to download the latest version.')
|
||||
parser.add_argument('--title', metavar='title',
|
||||
default=None,
|
||||
help='When using "--version latest", you can use '
|
||||
'this to filter the search to only products with '
|
||||
'this title')
|
||||
parser.add_argument('--compress', action='store_true',
|
||||
help='Output a read-only compressed disk image with '
|
||||
'the Install macOS app at the root. This is now the '
|
||||
'default. Use --raw to get a read-write sparse image '
|
||||
'with the app in the Applications directory.')
|
||||
parser.add_argument('--raw', action='store_true',
|
||||
help='Output a read-write sparse image '
|
||||
'with the app in the Applications directory. Requires '
|
||||
'less available disk space and is faster.')
|
||||
parser.add_argument('--ignore-cache', action='store_true',
|
||||
help='Ignore any previously cached files.')
|
||||
args = parser.parse_args()
|
||||
|
||||
su_catalog_url = get_default_catalog()
|
||||
if not su_catalog_url:
|
||||
print('Could not find a default catalog url for this OS version.', file=sys.stderr)
|
||||
exit(-1)
|
||||
|
||||
# download sucatalog and look for products that are for macOS installers
|
||||
catalog = download_and_parse_sucatalog(
|
||||
su_catalog_url, args.workdir, ignore_cache=args.ignore_cache)
|
||||
product_info = os_installer_product_info(
|
||||
catalog, args.workdir, ignore_cache=args.ignore_cache)
|
||||
|
||||
if not product_info:
|
||||
print('No macOS installer products found in the sucatalog.', file=sys.stderr)
|
||||
exit(-1)
|
||||
|
||||
product_id, product_title = determine_version(args.version, args.title, product_info)
|
||||
print(product_id, product_title)
|
||||
|
||||
# download all the packages for the selected product
|
||||
replicate_product(catalog, product_id, args.workdir, ignore_cache=args.ignore_cache, product_title=product_title)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
74
boot-macOS-headless.sh
Executable file
|
@ -0,0 +1,74 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Special thanks to:
|
||||
# https://github.com/Leoyzen/KVM-Opencore
|
||||
# https://github.com/thenickdude/KVM-Opencore/
|
||||
# https://github.com/qemu/qemu/blob/master/docs/usb2.txt
|
||||
#
|
||||
# qemu-img create -f qcow2 mac_hdd_ng.img 128G
|
||||
#
|
||||
# echo 1 | sudo tee -a /sys/module/kvm/parameters/ignore_msrs # this is required
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# $ boot-macOS-headless.sh
|
||||
#
|
||||
# (qemu) change vnc password
|
||||
# Password: ********
|
||||
#
|
||||
# Note: Using RealVNC client, connect to `<localhost:5901>`.
|
||||
# E.g. `vncviewer localhost:5901`
|
||||
#
|
||||
# Note: After installation, start using the `OpenCore-nopicker.qcow2` image.
|
||||
|
||||
############################################################################
|
||||
# NOTE: Tweak the "MY_OPTIONS" line in case you are having booting problems!
|
||||
############################################################################
|
||||
|
||||
# Changelog:
|
||||
# - Add support for 'savevm'
|
||||
# - Fix cpuid related warning on EPYC
|
||||
# - Fix 'savevm' support
|
||||
|
||||
MY_OPTIONS="+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check"
|
||||
|
||||
# This script works for Catalina as well as Mojave. Tested with macOS 10.14.6 and macOS 10.15.6.
|
||||
|
||||
ALLOCATED_RAM="3072" # MiB
|
||||
CPU_SOCKETS="1"
|
||||
CPU_CORES="2"
|
||||
CPU_THREADS="4"
|
||||
|
||||
REPO_PATH="."
|
||||
OVMF_DIR="."
|
||||
|
||||
# for snapshots
|
||||
export TMPDIR=$PWD
|
||||
|
||||
# shellcheck disable=SC2054
|
||||
args=(
|
||||
-enable-kvm -m "$ALLOCATED_RAM" -cpu Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,"$MY_OPTIONS"
|
||||
-machine q35
|
||||
-usb -device usb-kbd -device usb-tablet
|
||||
-smp "$CPU_THREADS",cores="$CPU_CORES",sockets="$CPU_SOCKETS"
|
||||
-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
|
||||
-drive if=pflash,format=raw,readonly,snapshot=off,file="$REPO_PATH/$OVMF_DIR/OVMF_CODE.fd"
|
||||
-drive if=pflash,format=raw,snapshot=on,file="$REPO_PATH/$OVMF_DIR/OVMF_VARS-1024x768.fd"
|
||||
-smbios type=2
|
||||
-device ich9-ahci,id=sata
|
||||
# -drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file="$REPO_PATH/OpenCore-Catalina/OpenCore.qcow2"
|
||||
-drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file="$REPO_PATH/OpenCore-Catalina/OpenCore-nopicker.qcow2"
|
||||
-device ide-hd,bus=sata.2,drive=OpenCoreBoot
|
||||
-device ide-hd,bus=sata.3,drive=InstallMedia
|
||||
-drive id=InstallMedia,if=none,file="$REPO_PATH/BaseSystem.img",format=raw
|
||||
# -drive id=MacHDD,if=none,snapshot=on,file="$REPO_PATH/mac_hdd_ng.img",format=qcow2
|
||||
-drive id=MacHDD,if=none,snapshot=off,file="$REPO_PATH/mac_hdd_ng.img",format=qcow2
|
||||
-device ide-hd,bus=sata.4,drive=MacHDD
|
||||
-netdev user,id=net0 -device vmxnet3,netdev=net0,id=net0,mac=52:54:00:c9:18:27
|
||||
-monitor stdio
|
||||
-vga vmware
|
||||
-display none
|
||||
-vnc 0.0.0.0:1,password -k en-us
|
||||
)
|
||||
|
||||
qemu-system-x86_64 "${args[@]}"
|
59
boot-passthrough.sh
Executable file
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Special thanks to:
|
||||
# https://github.com/Leoyzen/KVM-Opencore
|
||||
# https://github.com/thenickdude/KVM-Opencore/
|
||||
# https://github.com/qemu/qemu/blob/master/docs/usb2.txt
|
||||
#
|
||||
# qemu-img create -f qcow2 mac_hdd_ng.img 128G
|
||||
#
|
||||
# echo 1 > /sys/module/kvm/parameters/ignore_msrs (this is required)
|
||||
|
||||
############################################################################
|
||||
# NOTE: Tweak the "MY_OPTIONS" line in case you are having booting problems!
|
||||
############################################################################
|
||||
|
||||
MY_OPTIONS="+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check"
|
||||
|
||||
# This script works for Big Sur, Catalina, Mojave, and High Sierra. Tested with
|
||||
# macOS 10.15.6, macOS 10.14.6, and macOS 10.13.6
|
||||
|
||||
ALLOCATED_RAM="3072" # MiB
|
||||
CPU_SOCKETS="1"
|
||||
CPU_CORES="2"
|
||||
CPU_THREADS="4"
|
||||
|
||||
REPO_PATH="./"
|
||||
OVMF_DIR="."
|
||||
|
||||
# Note: This script assumes that you are doing CPU + GPU passthrough. This
|
||||
# script will need to be modified for your specific needs!
|
||||
#
|
||||
# We recommend doing the initial macOS installation without using passthrough
|
||||
# stuff. In other words, don't use this script for the initial macOS
|
||||
# installation.
|
||||
|
||||
# shellcheck disable=SC2054
|
||||
args=(
|
||||
-enable-kvm -m "$ALLOCATED_RAM" -cpu host,vendor=GenuineIntel,kvm=on,vmware-cpuid-freq=on,+invtsc,+hypervisor
|
||||
-machine pc-q35-2.9
|
||||
-smp "$CPU_THREADS",cores="$CPU_CORES",sockets="$CPU_SOCKETS"
|
||||
-vga none
|
||||
-device pcie-root-port,bus=pcie.0,multifunction=on,port=1,chassis=1,id=port.1
|
||||
-device vfio-pci,host=01:00.0,bus=port.1,multifunction=on
|
||||
-device vfio-pci,host=01:00.1,bus=port.1
|
||||
-usb -device usb-kbd -device usb-tablet
|
||||
-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
|
||||
-drive if=pflash,format=raw,readonly,file="$REPO_PATH/$OVMF_DIR/OVMF_CODE.fd"
|
||||
-drive if=pflash,format=raw,file="$REPO_PATH/$OVMF_DIR/OVMF_VARS-1024x768.fd"
|
||||
-smbios type=2
|
||||
-drive id=MacHDD,if=none,file=./mac_hdd_ng.img
|
||||
-device ide-drive,bus=sata.2,drive=MacHDD
|
||||
-drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file="$REPO_PATH/OpenCore-Catalina/OpenCore-Passthrough.qcow2"
|
||||
-device ide-hd,bus=sata.3,drive=OpenCoreBoot
|
||||
-netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,id=net0,mac=52:54:00:c9:18:27
|
||||
-monitor stdio
|
||||
-display none
|
||||
)
|
||||
|
||||
qemu-system-x86_64 "${args[@]}"
|
1
bridge.conf
Normal file
|
@ -0,0 +1 @@
|
|||
allow virbr0
|
491
fetch-macOS-v2.py
Executable file
|
@ -0,0 +1,491 @@
|
|||
#!/usr/bin/env python3
|
||||
# pylint: disable=C0301,C0116,C0103,R0903
|
||||
|
||||
"""
|
||||
Gather recovery information for Macs.
|
||||
|
||||
Copyright (c) 2019, vit9696
|
||||
|
||||
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.
|
||||
|
||||
Upstream: https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/macrecovery
|
||||
pylint -> Your code has been rated at -0.08/10 ;(
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import random
|
||||
import argparse
|
||||
|
||||
try:
|
||||
from urllib.request import Request, urlopen
|
||||
from urllib.parse import urlparse
|
||||
except ImportError:
|
||||
from urllib2 import Request, urlopen
|
||||
from urlparse import urlparse
|
||||
|
||||
SELF_DIR = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
RECENT_MAC = 'Mac-7BA5B2D9E42DDD94'
|
||||
MLB_ZERO = '00000000000000000'
|
||||
MLB_VALID = 'C02749200YGJ803AX'
|
||||
MLB_PRODUCT = '00000000000J80300'
|
||||
|
||||
TYPE_SID = 16
|
||||
TYPE_K = 64
|
||||
TYPE_FG = 64
|
||||
|
||||
INFO_PRODUCT = 'AP'
|
||||
INFO_IMAGE_LINK = 'AU'
|
||||
INFO_IMAGE_HASH = 'AH'
|
||||
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]
|
||||
|
||||
|
||||
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')
|
||||
else:
|
||||
data = None
|
||||
|
||||
req = Request(url=url, headers=headers, data=data)
|
||||
response = urlopen(req)
|
||||
if raw:
|
||||
return response
|
||||
return dict(response.info()), response.read()
|
||||
|
||||
|
||||
def generate_id(itype, nid=None):
|
||||
valid_chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
|
||||
if nid is None:
|
||||
return ''.join(random.choice(valid_chars) for i in range(itype))
|
||||
return nid
|
||||
|
||||
|
||||
def product_mlb(mlb):
|
||||
return '00000000000' + mlb[11] + mlb[12] + mlb[13] + mlb[14] + '00'
|
||||
|
||||
|
||||
def mlb_from_eeee(eeee):
|
||||
if len(eeee) != 4:
|
||||
print('ERROR: Invalid EEEE code length!')
|
||||
sys.exit(1)
|
||||
|
||||
return '00000000000' + eeee + '00'
|
||||
|
||||
def get_session(args):
|
||||
headers = {
|
||||
'Host': 'osrecovery.apple.com',
|
||||
'Connection': 'close',
|
||||
'User-Agent': 'InternetRecovery/1.0',
|
||||
}
|
||||
|
||||
headers, output = run_query('http://osrecovery.apple.com/', headers)
|
||||
|
||||
if args.verbose:
|
||||
print('Session headers:')
|
||||
for header in headers:
|
||||
print('{}: {}'.format(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
|
||||
|
||||
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',
|
||||
'Connection': 'close',
|
||||
'User-Agent': 'InternetRecovery/1.0',
|
||||
'Cookie': session,
|
||||
'Content-Type': 'text/plain',
|
||||
}
|
||||
|
||||
post = {
|
||||
'cid': generate_id(TYPE_SID, cid),
|
||||
'sn': mlb,
|
||||
'bid': bid,
|
||||
'k': generate_id(TYPE_K),
|
||||
'fg': generate_id(TYPE_FG)
|
||||
}
|
||||
|
||||
if diag:
|
||||
url = 'http://osrecovery.apple.com/InstallationPayload/Diagnostics'
|
||||
else:
|
||||
url = 'http://osrecovery.apple.com/InstallationPayload/RecoveryImage'
|
||||
post['os'] = os_type
|
||||
|
||||
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:
|
||||
continue
|
||||
|
||||
for k in INFO_REQURED:
|
||||
if k not in info:
|
||||
raise RuntimeError('Missing key ' + k)
|
||||
|
||||
return info
|
||||
|
||||
|
||||
def save_image(url, sess, filename='', directory=''):
|
||||
purl = urlparse(url)
|
||||
headers = {
|
||||
'Host': purl.hostname,
|
||||
'Connection': 'close',
|
||||
'User-Agent': 'InternetRecovery/1.0',
|
||||
'Cookie': '='.join(['AssetToken', sess])
|
||||
}
|
||||
|
||||
if filename == '':
|
||||
filename = os.path.basename(purl.path)
|
||||
if filename.find('/') >= 0 or filename == '':
|
||||
raise RuntimeError('Invalid save path ' + filename)
|
||||
|
||||
print('Saving ' + url + ' to ' + filename + '...')
|
||||
|
||||
with open(os.path.join(directory, filename), 'wb') as fhandle:
|
||||
response = run_query(url, headers, raw=True)
|
||||
|
||||
total_size = int(response.headers['content-length']) / float(2 ** 20)
|
||||
# print(total_size)
|
||||
if total_size < 1:
|
||||
total_size = response.headers['content-length']
|
||||
print("Note: The total download size is %s bytes" % total_size)
|
||||
else:
|
||||
print("Note: The total download size is %0.2f MB" % total_size)
|
||||
size = 0
|
||||
while True:
|
||||
chunk = response.read(2 ** 20)
|
||||
if not chunk:
|
||||
break
|
||||
fhandle.write(chunk)
|
||||
size += len(chunk)
|
||||
print('\r{} MBs downloaded...'.format(size / (2 ** 20)), end='')
|
||||
sys.stdout.flush()
|
||||
print('\rDownload complete!' + ' ' * 32)
|
||||
|
||||
|
||||
def action_download(args):
|
||||
"""
|
||||
Reference information for queries:
|
||||
|
||||
Recovery latest:
|
||||
cid=3076CE439155BA14
|
||||
sn=...
|
||||
bid=Mac-E43C1C25D4880AD6
|
||||
k=4BE523BB136EB12B1758C70DB43BDD485EBCB6A457854245F9E9FF0587FB790C
|
||||
os=latest
|
||||
fg=B2E6AA07DB9088BE5BDB38DB2EA824FDDFB6C3AC5272203B32D89F9D8E3528DC
|
||||
|
||||
Recovery default:
|
||||
cid=4A35CB95FF396EE7
|
||||
sn=...
|
||||
bid=Mac-E43C1C25D4880AD6
|
||||
k=0A385E6FFC3DDD990A8A1F4EC8B98C92CA5E19C9FF1DD26508C54936D8523121
|
||||
os=default
|
||||
fg=B2E6AA07DB9088BE5BDB38DB2EA824FDDFB6C3AC5272203B32D89F9D8E3528DC
|
||||
|
||||
Diagnostics:
|
||||
cid=050C59B51497CEC8
|
||||
sn=...
|
||||
bid=Mac-E43C1C25D4880AD6
|
||||
k=37D42A8282FE04A12A7D946304F403E56A2155B9622B385F3EB959A2FBAB8C93
|
||||
fg=B2E6AA07DB9088BE5BDB38DB2EA824FDDFB6C3AC5272203B32D89F9D8E3528DC
|
||||
"""
|
||||
|
||||
session = get_session(args)
|
||||
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'
|
||||
save_image(info[INFO_IMAGE_LINK], info[INFO_IMAGE_SESS], dmgname, args.outdir)
|
||||
cnkname = '' if args.basename == '' else args.basename + '.chunklist'
|
||||
save_image(info[INFO_SIGN_LINK], info[INFO_SIGN_SESS], cnkname, args.outdir)
|
||||
return 0
|
||||
|
||||
|
||||
def action_selfcheck(args):
|
||||
"""
|
||||
Sanity check server logic for recovery:
|
||||
|
||||
if not valid(bid):
|
||||
return error()
|
||||
ppp = get_ppp(sn)
|
||||
if not valid(ppp):
|
||||
return latest_recovery(bid = bid) # Returns newest for bid.
|
||||
if valid(sn):
|
||||
if os == 'default':
|
||||
return default_recovery(sn = sn, ppp = ppp) # Returns oldest for sn.
|
||||
else:
|
||||
return latest_recovery(sn = sn, ppp = ppp) # Returns newest for sn.
|
||||
return default_recovery(ppp = ppp) # Returns oldest.
|
||||
"""
|
||||
|
||||
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')
|
||||
|
||||
if args.verbose:
|
||||
print(valid_default)
|
||||
print(valid_latest)
|
||||
print(product_default)
|
||||
print(product_latest)
|
||||
print(generic_default)
|
||||
print(generic_latest)
|
||||
|
||||
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]))
|
||||
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]))
|
||||
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]))
|
||||
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]))
|
||||
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]))
|
||||
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()
|
||||
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)
|
||||
print(uvalid_default)
|
||||
print(uvalid_latest)
|
||||
print(uproduct_default)
|
||||
|
||||
# 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))
|
||||
return 0
|
||||
|
||||
print('UNKNOWN: Run selfcheck, check your board-id, or try again later!')
|
||||
|
||||
# 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))
|
||||
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]))
|
||||
return 0
|
||||
print('UNKNOWN: {} MLB can be valid if very new and using special builds!'.format(args.mlb))
|
||||
return 0
|
||||
|
||||
|
||||
def action_guess(args):
|
||||
"""
|
||||
Attempt to guess which model does this MLB belong.
|
||||
"""
|
||||
|
||||
mlb = args.mlb
|
||||
anon = mlb.startswith('000')
|
||||
|
||||
with open(args.board_db, 'r') as fhandle:
|
||||
db = json.load(fhandle)
|
||||
|
||||
supported = {}
|
||||
|
||||
session = get_session(args)
|
||||
|
||||
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')
|
||||
|
||||
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]))
|
||||
continue
|
||||
|
||||
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_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)))
|
||||
|
||||
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]))
|
||||
return 0
|
||||
|
||||
print('UNKNOWN: Failed to determine supported models for MLB {}!'.format(mlb))
|
||||
|
||||
|
||||
# https://stackoverflow.com/questions/2280334/shortest-way-of-creating-an-object-with-arbitrary-attributes-in-python
|
||||
class gdata:
|
||||
"""
|
||||
A string to make pylint happy ;)
|
||||
"""
|
||||
def __init__(self, **kwargs):
|
||||
self.__dict__.update(kwargs)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Gather recovery information for Macs')
|
||||
parser.add_argument('--action', choices=['download', 'selfcheck', 'verify', 'guess'], default='',
|
||||
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('-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)
|
||||
parser.add_argument('-m', '--mlb', type=str, default=MLB_ZERO,
|
||||
help='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)
|
||||
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'),
|
||||
help='use custom board list for checking, defaults to boards.json')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.code != '':
|
||||
args.mlb = mlb_from_eeee(args.code)
|
||||
|
||||
if len(args.mlb) != 17:
|
||||
print('ERROR: Cannot use MLBs in non 17 character format!')
|
||||
sys.exit(1)
|
||||
|
||||
if args.action == 'download':
|
||||
return action_download(args)
|
||||
if args.action == 'selfcheck':
|
||||
return action_selfcheck(args)
|
||||
if args.action == 'verify':
|
||||
return action_verify(args)
|
||||
if args.action == 'guess':
|
||||
return action_guess(args)
|
||||
|
||||
# No action specified, so present a download menu instead
|
||||
products = [
|
||||
{"name": "High Sierra (10.13)", "b": "Mac-7BA5B2D9E42DDD94", "m": "00000000000J80300"},
|
||||
{"name": "Mojave (10.14)", "b": "Mac-7BA5B2DFE22DDD8C", "m": "00000000000KXPG00"},
|
||||
{"name": "Catalina (10.15) - RECOMMENDED", "b": "Mac-00BE6ED71E35EB86", "m": "00000000000000000"},
|
||||
# {"name": "Latest (Big Sur - 11)", "b": "Mac-E43C1C25D4880AD6", "m": "00000000000000000", "os_type": "latest"}
|
||||
{"name": "Latest (Big Sur - 11)", "b": "Mac-E43C1C25D4880AD6", "m": "00000000000000000", "os_type": "default"}
|
||||
]
|
||||
|
||||
for index, product in enumerate(products):
|
||||
name = product["name"]
|
||||
print('%s. %12s' % (index + 1, name))
|
||||
|
||||
answer = input('\nChoose a product to download (1-%s): ' % len(products))
|
||||
try:
|
||||
index = int(answer) - 1
|
||||
if index < 0:
|
||||
raise ValueError
|
||||
except (ValueError, IndexError):
|
||||
pass
|
||||
|
||||
# action
|
||||
product = products[index]
|
||||
try:
|
||||
os_type = product["os_type"]
|
||||
except:
|
||||
os_type = "default"
|
||||
args = gdata(mlb = product["m"], board_id = product["b"], diagnostics =
|
||||
False, os_type = os_type, verbose=False, basename="", outdir=".")
|
||||
action_download(args)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
33
kernel-debugging-notes.txt
Normal file
|
@ -0,0 +1,33 @@
|
|||
1. How do I symbolicate kernel panic traces?
|
||||
|
||||
Just add keepsyms=1 to either the Kernel Flags setting in /Library/Preferences/SystemConfiguration/com.apple.Boot.plist,
|
||||
or to the boot-args NVRAM variable. Reboot, and any subsequent panics will be automatically symbolicated. You can run
|
||||
mangled C++ symbols through the c++filt command line utility to get the proper C++ function signatures.
|
||||
|
||||
$ sudo nvram boot-args="-v keepsyms=1"
|
||||
|
||||
Thanks for Phil Dennis-Jordan for this great tip.
|
||||
|
||||
2. Debugging a AVX related crash which occurs at bootup.
|
||||
|
||||
$ nm /System/Library/Extensions/corecrypto.kext/Contents/MacOS/corecrypto | grep avx
|
||||
0000000000001840 T _ccsha256_vng_intel_avx1_compress
|
||||
0000000000036708 T _ccsha256_vng_intel_avx2_compress
|
||||
0000000000026973 T _ccsha512_vng_intel_avx1_compress
|
||||
00000000000327cb T _ccsha512_vng_intel_avx2_compress
|
||||
000000000001d960 T _gcmDecrypt_avx1
|
||||
000000000001c980 T _gcmEncrypt_avx1
|
||||
|
||||
$ gdb /System/Library/Extensions/corecrypto.kext/Contents/MacOS/corecrypto
|
||||
(gdb) x/16i 0x0000000000001840
|
||||
0x1840: push %rbp
|
||||
0x1841: mov %rsp,%rbp
|
||||
0x1844: push %rbx
|
||||
0x1845: push %r12
|
||||
0x1847: push %r13
|
||||
0x1849: push %r14
|
||||
0x184b: push %r15
|
||||
0x184d: sub $0x168,%rsp
|
||||
0x1854: lea 0x60(%rsp),%rax
|
||||
0x1859: and $0xffffffffffffffe0,%rax
|
||||
0x185d: vmovdqa %ymm0,(%rax) <--- the crash occurs here due to lack of "xsave" support
|
3
kvm.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
options kvm_intel nested=1
|
||||
options kvm_intel emulate_invalid_guest_state=0
|
||||
options kvm ignore_msrs=1 report_ignored_msrs=0
|
4
macOS-Cloud.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
Add notes from Constantin Jacob.
|
||||
|
||||
Note: This pretty much violates everything hardware-wise in the macOS EULA that
|
||||
one could violate.
|
211
macOS-libvirt-Catalina.xml
Normal file
|
@ -0,0 +1,211 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
|
||||
<!--
|
||||
macOS libvirt XML configuration.
|
||||
|
||||
Run "virt-xml-validate macOS-libvirt-Catalina.xml" to validate this file.
|
||||
|
||||
To install this file, you may place it at ~/.config/libvirt/qemu/
|
||||
and run: virsh define macOS-libvirt.xml.
|
||||
|
||||
This configuration has been tested in Ubuntu 20.04 with stock QEMU-KVM.
|
||||
|
||||
Move/rename images and loader/nvmram files and paths as you wish.
|
||||
|
||||
!!! Don't forget to replace CHANGEME with your values !!!
|
||||
|
||||
Adjust memory and currentMemory to 3145728 if you want only 3 GiB.
|
||||
|
||||
Consider removing some cpu features if your hardware lacks support.
|
||||
|
||||
Replace spice with vnc if you prefer it.
|
||||
|
||||
Current network configuration is a local bridge (192.157.12x.x).
|
||||
Change it to if you prefer a public bridge instead:
|
||||
Change interface to <interface type='user'>
|
||||
and remove the <source bridge='virbr0'/>
|
||||
Or use virt-manager to edit this line instead of virsh edit.
|
||||
|
||||
Note: Default configuration caused severe clock problems
|
||||
under Fedora 27 w/ i7-5820K. This is because Darwin uses
|
||||
tsc (time since last tick) for time, and for me did not
|
||||
fall back to rtc in the event of a clock mismatch with
|
||||
libvirt's default time source. Therefore we must explicitly
|
||||
give the clock a tsc timer for kvm to pass to the guest.
|
||||
See comments on the <kvm> and <clock> attributes.
|
||||
-->
|
||||
<name>macOS</name>
|
||||
<uuid>2aca0dd6-cec9-4717-9ab2-0b7b13d111c3</uuid>
|
||||
<title>macOS</title>
|
||||
<memory unit='KiB'>4194304</memory>
|
||||
<currentMemory unit='KiB'>4194304</currentMemory>
|
||||
<vcpu placement='static'>4</vcpu>
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc-q35-4.2'>hvm</type>
|
||||
<!-- We don't need patched OVMF anymore when using latest OpenCore, stock one is okay -->
|
||||
<loader readonly='yes' type='pflash'>/home/CHANGEME/OSX-KVM/OVMF_CODE.fd</loader>
|
||||
<nvram>/home/CHANGEME/OSX-KVM/OVMF_VARS-1024x768.fd</nvram>
|
||||
</os>
|
||||
<features>
|
||||
<acpi/>
|
||||
<apic/>
|
||||
</features>
|
||||
<clock offset='utc'>
|
||||
<timer name='rtc' tickpolicy='catchup'/>
|
||||
<timer name='pit' tickpolicy='delay'/>
|
||||
<timer name='hpet' present='no'/>
|
||||
</clock>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>restart</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='qcow2' cache='writeback' io='threads'/>
|
||||
<source file='/home/CHANGEME/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2'/>
|
||||
<target dev='sda' bus='sata'/>
|
||||
<boot order='2'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='qcow2' cache='writeback' io='threads'/>
|
||||
<source file='/home/CHANGEME/OSX-KVM/mac_hdd_ng.img'/>
|
||||
<target dev='sdb' bus='sata'/>
|
||||
<boot order='1'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
|
||||
</disk>
|
||||
<disk type="file" device="disk">
|
||||
<driver name="qemu" type="raw" cache="writeback"/>
|
||||
<source file="/home/CHANGEME/OSX-KVM/BaseSystem.img"/>
|
||||
<target dev="sdc" bus="sata"/>
|
||||
<boot order="3"/>
|
||||
<address type="drive" controller="0" bus="0" target="0" unit="2"/>
|
||||
</disk>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='pci' index='0' model='pcie-root'/>
|
||||
<controller type='pci' index='1' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='1' port='0x8'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
|
||||
</controller>
|
||||
<controller type='pci' index='2' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='2' port='0x9'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
</controller>
|
||||
<controller type='pci' index='3' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='3' port='0xa'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='pci' index='4' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='4' port='0xb'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>
|
||||
</controller>
|
||||
<controller type='pci' index='5' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='5' port='0xc'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/>
|
||||
</controller>
|
||||
<controller type='pci' index='6' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='6' port='0xd'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x5'/>
|
||||
</controller>
|
||||
<controller type='pci' index='7' model='pcie-root-port'>
|
||||
<model name='pcie-root-port'/>
|
||||
<target chassis='7' port='0xe'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x6'/>
|
||||
</controller>
|
||||
<controller type='virtio-serial' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='usb' index='0' model='ich9-ehci1'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x7'/>
|
||||
</controller>
|
||||
<controller type='usb' index='0' model='ich9-uhci1'>
|
||||
<master startport='0'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0' multifunction='on'/>
|
||||
</controller>
|
||||
<controller type='usb' index='0' model='ich9-uhci2'>
|
||||
<master startport='2'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x1'/>
|
||||
</controller>
|
||||
<controller type='usb' index='0' model='ich9-uhci3'>
|
||||
<master startport='4'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x2'/>
|
||||
</controller>
|
||||
<!-- Make sure you put your nic in bus 0x0 and slot 0x0y(y is numeric), this will make nic built-in and apple-store work-->
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:8e:e2:66'/>
|
||||
<source bridge='virbr0'/>
|
||||
<target dev='tap0'/>
|
||||
<model type='vmxnet3'/>
|
||||
</interface>
|
||||
<serial type='pty'>
|
||||
<target type='isa-serial' port='0'>
|
||||
<model name='isa-serial'/>
|
||||
</target>
|
||||
</serial>
|
||||
<console type='pty'>
|
||||
<target type='serial' port='0'/>
|
||||
</console>
|
||||
<channel type='unix'>
|
||||
<target type='virtio' name='org.qemu.guest_agent.0'/>
|
||||
<address type='virtio-serial' controller='0' bus='0' port='1'/>
|
||||
</channel>
|
||||
<graphics type='spice' autoport='yes'>
|
||||
<listen type='address'/>
|
||||
</graphics>
|
||||
<video>
|
||||
<model type="vga" vram="65536" heads="1" primary="yes"/>
|
||||
</video>
|
||||
<!-- If you wanna passthrough GPU, make sure the gfx and audio are in the same bus (like 0x01) but different function (0x00 and 0x01)-->
|
||||
<!-- <hostdev mode='subsystem' type='pci' managed='yes'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0000' bus='0x2d' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<rom file='/mnt/disks/backups/BIOS/RX580/Ellesmere.rom'/>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0' multifunction='on'/>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci' managed='yes'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0000' bus='0x2d' slot='0x00' function='0x1'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
|
||||
</hostdev> -->
|
||||
<!-- If you wanna passthrough onboard audio(like 30:00.4), make sure you put it in bus 0x00 and slot 0x0y(y is numeric), otherwise AppleALC won't recognized it -->
|
||||
<!-- <hostdev mode='subsystem' type='pci' managed='yes'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0000' bus='0x30' slot='0x00' function='0x4'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
|
||||
</hostdev> -->
|
||||
<memballoon model='none'/>
|
||||
</devices>
|
||||
<!-- Note: Enable the next line when SELinux is enabled -->
|
||||
<!-- seclabel type='dynamic' model='selinux' relabel='yes'/> -->
|
||||
<qemu:commandline>
|
||||
<qemu:arg value='-device'/>
|
||||
<qemu:arg value='isa-applesmc,osk=ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc'/>
|
||||
<qemu:arg value='-smbios'/>
|
||||
<qemu:arg value='type=2'/>
|
||||
<qemu:arg value='-device'/>
|
||||
<qemu:arg value='usb-tablet'/>
|
||||
<qemu:arg value='-device'/>
|
||||
<qemu:arg value='usb-kbd'/>
|
||||
<qemu:arg value='-cpu'/>
|
||||
<qemu:arg value='Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check'/>
|
||||
<!-- <qemu:arg value='Penryn,vendor=GenuineIntel,+hypervisor,+invtsc,kvm=on,+fma,+avx,+avx2,+aes,+ssse3,+sse4_2,+popcnt,+sse4a,+bmi1,+bmi2'/> -->
|
||||
<!-- If you wanna use cpu host-passthrough mode, uncomments below-->
|
||||
<!-- <qemu:arg value='host,vendor=GenuineIntel,+hypervisor,+invtsc,kvm=on,+fma,+avx,+avx2,+aes,+ssse3,+sse4_2,+popcnt,+sse4a,+bmi1,+bmi2'/> -->
|
||||
<!-- If you wanna use cpu emulating mode like Skylake-Server, uncomments below-->
|
||||
<!-- <qemu:arg value='Skylake-Server,vendor=GenuineIntel,+hypervisor,+invtsc,kvm=on,+fma,+avx,+avx2,+aes,+ssse3,+sse4_2,+popcnt,+sse4a,+bmi1,+bmi2'/> -->
|
||||
</qemu:commandline>
|
||||
</domain>
|
98
networking-qemu-kvm-howto.txt
Normal file
|
@ -0,0 +1,98 @@
|
|||
There are two main ways to set up networking on OS X / macOS, as it does not
|
||||
function with what QEMU defaults to for network settings:
|
||||
|
||||
-----------------------------------
|
||||
User Mode Networking (Easier Setup)
|
||||
-----------------------------------
|
||||
|
||||
By default, QEMU uses user mode networking (SLiRP). This networking mode is the
|
||||
slowest and is not visible via the outside network, but requires no host-side
|
||||
setup, so it's perfect if you just want internet but don't care about latency
|
||||
or about connecting to the VM from an external source.
|
||||
|
||||
In order to do this, change the line in your qemu-system-x86_64 command (found
|
||||
in boot-macOS.sh) to the following:
|
||||
|
||||
-netdev user,id=net0 -device network_adapter,netdev=net0,id=net0,mac=52:54:00:c9:18:27 \
|
||||
|
||||
Once you set network_adapter to the preferred adapter, no further setup is required; your
|
||||
internet should Just Werk™ in your virtual machine!
|
||||
|
||||
For further information on detailed configuration options, see QEMU's
|
||||
documentation on networking ( http://wiki.qemu.org/Documentation/Networking )
|
||||
|
||||
Here is the list of network adapters supported by macOS,
|
||||
|
||||
e1000-82545em - The problem that we run into here is that OS X is nitpicky
|
||||
about what emulated networking devices it is willing to accept. The
|
||||
e1000-82545em is a known adapter that can be used on pretty much any version of
|
||||
MacOS.
|
||||
|
||||
To use this adapter, replace network_adapter with e1000-82545em
|
||||
|
||||
vmxnet3 - An alternative solution to e1000 is to use vmxnet3 instead. Unlike
|
||||
the e1000, vmxnet3 is a paravirtualized NIC, which can allow for better
|
||||
performance (in theory). The only catch is that the you need to have a recent
|
||||
version of MacOS (10.11 or later).
|
||||
|
||||
To use this adapter, replace network_adapter with vmxnet3
|
||||
|
||||
|
||||
-----------------------------------
|
||||
Tap Networking (Better Performance)
|
||||
-----------------------------------
|
||||
|
||||
Installing "virt-manager" automagically creates the "virbr0" local private bridge :-)
|
||||
|
||||
sudo apt-get install uml-utilities virt-manager
|
||||
|
||||
sudo ip tuntap add dev tap0 mode tap
|
||||
sudo ip link set tap0 up promisc on
|
||||
sudo brctl addif virbr0 tap0
|
||||
|
||||
sudo ip link set dev virbr0 up # as needed
|
||||
sudo ip link set dev tap0 master virbr0
|
||||
|
||||
Note: If `virbr0` network interface is not present on your system, it may
|
||||
have been deactivated. Try enabling it by using the following commands,
|
||||
|
||||
virsh net-start default
|
||||
virsh net-autostart default
|
||||
|
||||
Add "-netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:c9:18:27 \"
|
||||
to your qemu-system-x86_64 command.
|
||||
|
||||
QEMU networking tip
|
||||
-------------------
|
||||
|
||||
# printf '52:54:00:AB:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256)) # generates QEMU compatible mac addresses!
|
||||
|
||||
|
||||
------------------
|
||||
Bridged Networking
|
||||
------------------
|
||||
|
||||
QEMU defaults to using NAT for its guests. It has a built-in DHCP server that
|
||||
provides addresses from the 192.168.12x.0 subnet. However, this configuration
|
||||
makes file sharing, printer sharing, and other common networking activities
|
||||
harder to use in a home network.
|
||||
|
||||
Bridged networking allows your QEMU guest to get an address on the same subnet
|
||||
as the host computer. For example, many home networks let the wireless router
|
||||
handle IP assignment via DHCP. Here are the steps for setting up the bridge.
|
||||
|
||||
To setup bridged networking from the command line, refer to this documentation
|
||||
at the Ubuntu website. https://help.ubuntu.com/community/KVM/Networking
|
||||
|
||||
Ultimately, the script for booting the QEMU guest will need a line similar to
|
||||
the following to enable bridged networking in the guest:
|
||||
|
||||
-netdev bridge,id=net0,br=virbr0,"helper=/usr/lib/qemu/qemu-bridge-helper"
|
||||
|
||||
On some systems the `qemu-bridge-helper` file has incorrect permissions. For it
|
||||
to work, it needs to be setuid root. This can be accomplished with this command:
|
||||
|
||||
$ sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper
|
||||
|
||||
Note that this is sometimes viewed as a security hole. Be careful and understand
|
||||
what you are doing before running this command.
|
598
notes.md
Normal file
|
@ -0,0 +1,598 @@
|
|||
### App Store problems
|
||||
|
||||
Do you see the "Your device or computer could not be verified" message when you
|
||||
try to login to the App Store? If yes, here are the steps to fix it.
|
||||
|
||||
* Make sure that your wired ethernet connection is called "en0" (and not "en1" or
|
||||
something else). Use "ifconfig" command to verify this.
|
||||
|
||||
* If the wired ethernet connection is not called "en0", then then go to Network
|
||||
in System Preferences and delete all the devices, and apply the changes. Next,
|
||||
go to the console and type in `sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist`.
|
||||
Finally reboot, and then use the App Store without problems.
|
||||
|
||||
This fix was found by `Glnk2012` of https://www.tonymacx86.com/ site.
|
||||
|
||||
Also tweaking the `smbios.plist` file can help (?).
|
||||
|
||||
|
||||
### Change resolution in OpenCore
|
||||
|
||||
```diff
|
||||
diff --git a/OpenCore-Catalina/config.plist b/OpenCore-Catalina/config.plist
|
||||
index 4754e8c..489570f 100644
|
||||
--- a/OpenCore-Catalina/config.plist
|
||||
+++ b/OpenCore-Catalina/config.plist
|
||||
@@ -692,7 +692,7 @@
|
||||
<key>ConsoleMode</key>
|
||||
<string></string>
|
||||
<key>Resolution</key>
|
||||
- <string>Max</string>
|
||||
+ <string>1920x1080</string>
|
||||
<key>ClearScreenOnModeSwitch</key>
|
||||
<false/>
|
||||
<key>IgnoreTextInGraphics</key>
|
||||
```
|
||||
|
||||
Ensure that the OVMF resolution is set equal to resolution set in your OpenCore
|
||||
qcow2 file (default is 1024x768). This can be done via the OVMF menu, which you
|
||||
can reach with a press of the ESC button during the OVMF boot logo (before
|
||||
OpenCore boot screen appears). In the OVMF menu settings, set Device Manager ->
|
||||
OVMF Platform Configuration -> Change Preferred Resolution for Next Boot to the
|
||||
desired value (default is 1024x768). Commit changes and exit the OVMF menu.
|
||||
|
||||
Note: The macOS VM's resolution can be changed via `Settings -> Displays`
|
||||
option easily.
|
||||
|
||||
|
||||
### GPU passthrough notes
|
||||
|
||||
These steps will need to be adapted for your particular setup. A host machine
|
||||
with IOMMU support is required. Consult the Arch Wiki article linked to at the
|
||||
bottom of this file for exact requirements and other details.
|
||||
|
||||
I am running Ubuntu 17.04 on Intel i5-6500 + ASUS Z170-AR motherboard + NVIDIA
|
||||
1050 Ti.
|
||||
|
||||
Tip: Use https://github.com/Benjamin-Dobell/nvidia-update to install nVidia
|
||||
drivers on macOS.
|
||||
|
||||
* Enable IOMMU support on the host machine.
|
||||
|
||||
Append the given line to `GRUB_CMDLINE_LINUX_DEFAULT` in `/etc/default/grub`.
|
||||
|
||||
##### Intel Systems
|
||||
|
||||
`iommu=pt intel_iommu=on rd.driver.pre=vfio-pci video=vesafb:off,efifb:off`
|
||||
|
||||
##### AMD Systems
|
||||
|
||||
`iommu=pt amd_iommu=on rd.driver.pre=vfio-pci video=vesafb:off,efifb:off`
|
||||
|
||||
* Uninstall NVIDIA drivers from the host machine and blacklist the required modules.
|
||||
|
||||
```
|
||||
$ cat /etc/modprobe.d/blacklist.conf
|
||||
... <existing stuff>
|
||||
|
||||
blacklist radeon
|
||||
blacklist nouveau
|
||||
blacklist nvidia
|
||||
```
|
||||
|
||||
* Enable the required kernel modules.
|
||||
|
||||
```
|
||||
# echo "vfio" >> /etc/modules
|
||||
# echo "vfio_iommu_type1" >> /etc/modules
|
||||
# echo "vfio_pci" >> /etc/modules
|
||||
# echo "vfio_virqfd" >> /etc/modules
|
||||
```
|
||||
|
||||
* Isolate the passthrough PCIe devices with vfio-pci, with the help of `lspci
|
||||
-nnk` command. Adapt these commands to suit your hardware setup.
|
||||
|
||||
```
|
||||
$ lspci -nn
|
||||
...
|
||||
01:00.0 ... NVIDIA Corporation [GeForce GTX 1050 Ti] [10de:1c82]
|
||||
01:00.1 Audio device: NVIDIA Corporation Device [10de:0fb9]
|
||||
03:00.0 USB controller: ASMedia ASM1142 USB 3.1 Host Controller [1b21:1242]
|
||||
```
|
||||
|
||||
```
|
||||
# echo "options vfio-pci ids=10de:1c82,10de:0fb9 disable_vga=1" > /etc/modprobe.d/vfio.conf
|
||||
```
|
||||
|
||||
* Update initramfs, GRUB and then reboot.
|
||||
|
||||
```
|
||||
$ sudo update-grub2
|
||||
$ sudo update-initramfs -k all -u
|
||||
```
|
||||
|
||||
* Verify that the IOMMU is enabled, and vfio_pci is working as expected.
|
||||
Consult Arch Wiki again for help on this. (Often running `lspci -vvv` and
|
||||
verifying that the expected devices are using `vfio-pci` as their `Kernel driver in use` is sufficient)
|
||||
|
||||
* On the macOS VM, install a NVIDIA Web Driver version which is appropriate for
|
||||
the macOS version. Consult http://www.macvidcards.com/drivers.html for more
|
||||
information.
|
||||
|
||||
For example, macOS 10.12.5 requires version `378.05.05.15f01` whereas macOS
|
||||
10.12.6 requires version `378.05.05.25f01`.
|
||||
|
||||
* Updating SMBIOS for the macOS to `iMac14,2` might be required. I did not do
|
||||
so myself.
|
||||
|
||||
* To reuse the keyboard and mouse devices from the host, setup "Automatic
|
||||
login" in System Preferences in macOS and configure Synergy software.
|
||||
|
||||
Note: Many AMD GPU devices (e.g. AMD RX 480 & RX 580) should be natively
|
||||
supported in macOS High Sierra.
|
||||
|
||||
|
||||
### USB passthrough notes
|
||||
|
||||
These steps will need to be adapted for your particular setup.
|
||||
|
||||
* Isolate the passthrough PCIe devices with vfio-pci, with the help of `lspci
|
||||
-nnk` command.
|
||||
|
||||
```
|
||||
$ lspci -nn
|
||||
...
|
||||
01:00.0 ... NVIDIA Corporation [GeForce GTX 1050 Ti] [10de:1c82]
|
||||
01:00.1 Audio device: NVIDIA Corporation Device [10de:0fb9]
|
||||
03:00.0 USB controller: ASMedia ASM1142 USB 3.1 Host Controller [1b21:1242]
|
||||
```
|
||||
|
||||
Add `1b21:1242` to `/etc/modprobe.d/vfio.conf` file in the required format.
|
||||
|
||||
* Update initramfs, and then reboot.
|
||||
|
||||
```
|
||||
$ sudo update-initramfs -k all -u
|
||||
```
|
||||
|
||||
* Use the helper scripts to isolate the USB controller.
|
||||
|
||||
```
|
||||
$ scripts/lsgroup.sh
|
||||
### Group 7 ###
|
||||
00:1c.0 PCI bridge: Intel Corporation Sunrise ...
|
||||
### Group 15 ###
|
||||
06:00.0 Audio device: Creative Labs Sound Core3D ...
|
||||
### Group 5 ###
|
||||
00:17.0 SATA controller: Intel Corporation Sunrise ...
|
||||
### Group 13 ###
|
||||
03:00.0 USB controller: ASMedia ASM1142 USB 3.1 Host Controller
|
||||
```
|
||||
|
||||
```
|
||||
$ scripts/vfio-group.sh 13
|
||||
```
|
||||
|
||||
* Add `-device vfio-pci,host=03:00.0,bus=pcie.0 \` line to `boot-passthrough.sh`.
|
||||
|
||||
* Boot the VM, and devices attached to the ASMedia USB controller should just work under macOS.
|
||||
|
||||
|
||||
### Synergy Notes
|
||||
|
||||
* Get Synergy from https://sourceforge.net/projects/synergy-stable-builds.
|
||||
|
||||
I installed "synergy-v1.8.8-stable-MacOSX-x86_64.dmg" on the macOS guest and
|
||||
configured it as a client.
|
||||
|
||||
For automatically starting Synergy on macOS, add Synergy to "Login Items",
|
||||
System Preferences -> Users & Groups -> Select your user account -> Login Items
|
||||
-> Add a login item
|
||||
|
||||
* On the Linux host machine, install "synergy-v1.8.8-stable-Linux-x86_64.deb"
|
||||
or newer, configure `~/.synergy.conf` and run `synergys` command.
|
||||
|
||||
* The included `.synergy.conf` will need to be adapted according to your setup.
|
||||
|
||||
|
||||
### Accelerated Graphics
|
||||
|
||||
See `UEFI/README.md` for GPU passthrough notes.
|
||||
|
||||
Note: There is no working QXL driver for macOS so far.
|
||||
|
||||
Links:
|
||||
|
||||
- https://www.kraxel.org/blog/2019/09/display-devices-in-qemu/
|
||||
- https://www.kraxel.org/blog/2019/06/macos-qemu-guest/
|
||||
|
||||
|
||||
### Virtual Sound Device
|
||||
|
||||
*Warning: The OpenCore distribution that comes with OSX-KVM already has
|
||||
`VoodooHDA OC`. Do NOT mix VoodooHDA with AppleALC. You may want to consider
|
||||
HDA passthrough if it is practical or use HDMI audio instead*
|
||||
|
||||
Note: The emulated sound output can be choppy, and distorted. Use Sound Card /
|
||||
USB Sound Card passthrough instead.
|
||||
|
||||
Note: It seems that playback of Flash videos requires an audio device to be
|
||||
present.
|
||||
|
||||
|
||||
### Building QEMU from source
|
||||
|
||||
See http://wiki.qemu-project.org/Hosts/Linux for help.
|
||||
|
||||
```
|
||||
$ git clone https://github.com/qemu/qemu.git
|
||||
|
||||
$ cd qemu
|
||||
|
||||
$ mkdir build; cd build
|
||||
|
||||
$ ../configure --prefix=/home/$(whoami)/QEMU --enable-trace-backend=simple \
|
||||
--enable-debug --target-list=x86_64-softmmu,aarch64-softmmu --audio-drv-list=pa
|
||||
|
||||
$ make -j8; make install
|
||||
```
|
||||
|
||||
|
||||
### Connect iPhone / iPad to macOS guest
|
||||
|
||||
Please passthrough a PCIe USB card to the virtual machine to be able to connect
|
||||
iDevices (iPhone / iPad) to it.
|
||||
|
||||
|
||||
### Exposing AES-NI instructions to macOS
|
||||
|
||||
Add `+aes` argument to the `-cpu` option in `boot-macOS.sh` file.
|
||||
|
||||
``` diff
|
||||
diff --git a/boot-macOS.sh b/boot-macOS.sh
|
||||
index 5948b8a..3acc123 100755
|
||||
--- a/boot-macOS.sh
|
||||
+++ b/boot-macOS.sh
|
||||
@@ -18,7 +18,7 @@
|
||||
# Use "-device usb-tablet" instead of "-device usb-mouse" for better mouse
|
||||
# behaviour. This requires QEMU >= 2.9.0.
|
||||
|
||||
-qemu-system-x86_64 -enable-kvm -m 3072 -cpu Penryn,kvm=off,vendor=GenuineIntel \
|
||||
+qemu-system-x86_64 -enable-kvm -m 3072 -cpu Penryn,kvm=off,vendor=GenuineIntel,+aes \
|
||||
-machine pc-q35-2.4 \
|
||||
-smp 4,cores=2 \
|
||||
-usb -device usb-kbd -device usb-mouse \
|
||||
```
|
||||
|
||||
Other host CPU features can be similarly exposed to the macOS guest.
|
||||
|
||||
The following command can be used on macOS to verify that AES-NI instructions are exposed,
|
||||
|
||||
```
|
||||
sysctl -a | grep machdep.features
|
||||
```
|
||||
|
||||
On machines with OpenSSL installed, the following two commands can be used to
|
||||
check AES-NI performance,
|
||||
|
||||
```
|
||||
openssl speed aes-128-cbc
|
||||
|
||||
openssl speed -evp aes-128-cbc # uses AES-NI
|
||||
```
|
||||
|
||||
|
||||
### Exposing AVX and AVX2 instructions to macOS
|
||||
|
||||
Exposing AVX and AVX2 instructions to macOS requires support for these
|
||||
instructions on the host CPU.
|
||||
|
||||
The `boot-clover.sh` script already exposes AVX and AVX2 instructions to the
|
||||
macOS guest by default. Modify or comment out the `MY_OPTIONS` line in
|
||||
`boot-clover.sh` file in case you are having problems.
|
||||
|
||||
To enable AVX2, do the following change,
|
||||
|
||||
`Clover boot menu -> Options -> Binaries patching -> Fake CPUID -> 0x0306C0 # for Haswell`
|
||||
|
||||
For details, see [this wiki](https://clover-wiki.zetam.org/Configuration/KernelAndKextPatches) page.
|
||||
|
||||
Once enabled, the following commands can be used to confirm the presence of AVX
|
||||
and AVX2 instructions on the macOS guest.
|
||||
|
||||
```
|
||||
$ sysctl -a | grep avx
|
||||
hw.optional.avx2_0: 1
|
||||
hw.optional.avx1_0: 1
|
||||
|
||||
$ sysctl -a | grep leaf7
|
||||
machdep.cpu.leaf7_features: SMEP BMI1 AVX2 BMI2
|
||||
machdep.cpu.leaf7_feature_bits: 424
|
||||
```
|
||||
|
||||
|
||||
### Enabling Hypervisor.Framework (Nested Virtualization / Docker for Mac / Android Emulator / etc)
|
||||
|
||||
Docker for Mac, the Android Emulator and other virtualization products require
|
||||
nested virtualization in the form of the `Hypervisor Framework` to work on
|
||||
macOS.
|
||||
|
||||
Use the `sysctl kern.hv_support` (output `1` is good) command to check if
|
||||
`Hypervisor` is enabled within the macOS VM.
|
||||
|
||||
If `Hypervisor` is not enabled, check that you have the required CPU features.
|
||||
Run the `sysctl -a | grep machdep.cpu.features` command and look for the
|
||||
presence of `VMX` flag.
|
||||
|
||||
If the `VMX` flag is missing, use the following steps to enable it:
|
||||
|
||||
- Make sure that `kvm_intel` module is loaded properly. This is documented in our
|
||||
[main documentation](./README.md).
|
||||
|
||||
- Make sure the VM is booted with VMX support passed through using one of the
|
||||
two below strategies:
|
||||
|
||||
- You may add `vmx,rdtscp` arguments to the `-cpu` option in `boot-macOS.sh`
|
||||
file (easier option).
|
||||
|
||||
- You may add `+vmx,` to the front of `MY_OPTIONS` in the boot script while
|
||||
changing `-cpu Penryn` to `-cpu Skylake-Client` or [any other suitable supported CPU](https://manpages.ubuntu.com/manpages/disco/man7/qemu-cpu-models.7.html).
|
||||
|
||||
Note: Host CPU passthrough is troublesome and not generally recommended.
|
||||
|
||||
Note: You may need to `Reset NVRAM` on the next reboot, but after that you
|
||||
should see a `1` when you re-check `sysctl kern.hv_support`.
|
||||
|
||||
|
||||
### Using virtio-blk-pci with macOS
|
||||
|
||||
Newer macOS (namely Mojave+) have support for some virtio drivers.
|
||||
|
||||
This can be enabled by applying the following change to `boot-macOS-NG.sh` to
|
||||
get some performance gain.
|
||||
|
||||
```diff
|
||||
- -device ide-hd,bus=sata.4,drive=MacHDD \
|
||||
+ -device virtio-blk-pci,drive=MacHDD \
|
||||
```
|
||||
|
||||
|
||||
### Permission problems with libvirt / qemu?
|
||||
|
||||
```
|
||||
sudo setfacl -m u:libvirt-qemu:rx <path> # fix virt-manager perm problems
|
||||
```
|
||||
|
||||
|
||||
### Extract .pkg files
|
||||
|
||||
* http://mackyle.github.io/xar/ is unmaintained and may fail for many `.pkg` files.
|
||||
|
||||
* Use a modern version of `7-Zip` instead.
|
||||
|
||||
```
|
||||
7z l example.pkg
|
||||
|
||||
7z x example.pkg
|
||||
|
||||
gunzip -c <something>.pkg/Payload | cpio -i
|
||||
```
|
||||
|
||||
|
||||
### QEMU quits with `gtk initialization failed`
|
||||
|
||||
Append the `display=none` argument to your QEMU execution script (this has
|
||||
already been done for `boot-passthrough.sh`)
|
||||
|
||||
|
||||
### ISO/DMG (`createinstallmedia` generated) install medium not detected
|
||||
|
||||
In OpenCore's `config.plist` and set `ScanPolicy` to `0` ([For more information, check the Dortania Troubleshooting Guide](https://dortania.github.io/OpenCore-Install-Guide/troubleshooting/troubleshooting.html#can-t-see-macos-partitions))
|
||||
|
||||
|
||||
### Attach physical drive to QEMU VM
|
||||
|
||||
*Note: If using NVMe, passing the controller may be a better option then passing it as a block device*
|
||||
|
||||
Run `ls -la /dev/disk/by-id/` to get the unique mapping for the device you want to attach to the VM (like `sda`, `sdb`, `nvme0n1`, while you can attach only a partition like `sda1`, this is not recommended)
|
||||
|
||||
```
|
||||
$ ls -la /dev/disk/by-id
|
||||
total 0
|
||||
drwxr-xr-x 2 root root 360 Jul 29 08:14 .
|
||||
drwxr-xr-x 8 root root 160 Jul 29 08:14 ..
|
||||
lrwxrwxrwx 1 root root 9 Jul 29 08:14 ata-ST2000FFFFF-FFFFFF_FFFFFFFF -> ../../sda
|
||||
lrwxrwxrwx 1 root root 10 Jul 29 08:14 ata-ST2000FFFFF-FFFFFF_FFFFFFFF-part1 -> ../../sda1
|
||||
lrwxrwxrwx 1 root root 10 Jul 29 08:14 ata-ST2000FFFFF-FFFFFF_FFFFFFFF-part2 -> ../../sda2
|
||||
lrwxrwxrwx 1 root root 13 Jul 29 08:14 nvme-eui.ffffffffffffffff -> ../../nvme0n1
|
||||
lrwxrwxrwx 1 root root 15 Jul 29 08:14 nvme-eui.ffffffffffffffff-part1 -> ../../nvme0n1p1
|
||||
lrwxrwxrwx 1 root root 15 Jul 29 08:14 nvme-eui.ffffffffffffffff-part2 -> ../../nvme0n1p2
|
||||
lrwxrwxrwx 1 root root 13 Jul 29 08:14 nvme-Samsung_SSD_960_EVO_512GB_FFFFFFFFFFFFFFF -> ../../nvme0n1
|
||||
lrwxrwxrwx 1 root root 15 Jul 29 08:14 nvme-Samsung_SSD_960_EVO_512GB_FFFFFFFFFFFFFFF-part1 -> ../../nvme0n1p1
|
||||
lrwxrwxrwx 1 root root 15 Jul 29 08:14 nvme-Samsung_SSD_960_EVO_512GB_FFFFFFFFFFFFFFF-part2 -> ../../nvme0n1p2
|
||||
lrwxrwxrwx 1 root root 9 Jul 29 08:14 wwn-0xffffffffffffffff -> ../../sda
|
||||
lrwxrwxrwx 1 root root 10 Jul 29 08:14 wwn-0xffffffffffffffff-part1 -> ../../sda1
|
||||
lrwxrwxrwx 1 root root 10 Jul 29 08:14 wwn-0xffffffffffffffff-part2 -> ../../sda2
|
||||
```
|
||||
|
||||
Then edit your QEMU launch script and add these lines (adapt to it your
|
||||
hardware), then launch the script using `sudo` (because you cannot write to a
|
||||
block device without `root` permissions)
|
||||
|
||||
```
|
||||
-drive id=NVMeDrive,if=none,file=/dev/disk/by-id/nvme-Samsung_SSD_960_EVO_512GB_FFFFFFFFFFFFFFF,format=raw \
|
||||
-device ide-hd,bus=sata.4,drive=NVMeDrive \
|
||||
```
|
||||
|
||||
|
||||
### Run the Virtual Machine on Boot
|
||||
|
||||
* Edit your QEMU launch script and set the absolute path of `OSX-KVM` as the
|
||||
value of `REPO_PATH`
|
||||
|
||||
* Edit `/etc/rc.local` and add the absolute path of the script (with or without
|
||||
`sudo` depending on your needs) to the bottom of the script.
|
||||
|
||||
|
||||
### Setup SSH for internal remote access
|
||||
|
||||
Presuming your network interface has a statically defined internal IP (on Ubuntu).
|
||||
|
||||
```
|
||||
$ sudo apt install openssh-server -y
|
||||
$ sudo ufw allow ssh
|
||||
$ sudo update-rc.d ssh defaults
|
||||
$ sudo systemctl enable ssh
|
||||
$ sudo systemctl enable ssh.socket
|
||||
$ sudo systemctl enable ssh.service
|
||||
```
|
||||
|
||||
|
||||
### AMD GPU Notes
|
||||
|
||||
- https://www.nicksherlock.com/2020/11/working-around-the-amd-gpu-reset-bug-on-proxmox/
|
||||
|
||||
- Consider using CMMChris's [RadeonBoost.kext](https://forums.macrumors.com/threads/tired-of-low-geekbench-scores-use-radeonboost.2231366/)
|
||||
for the RX480, RX580, RX590 and Radeon VII GPUs.
|
||||
|
||||
|
||||
### USB passthrough notes
|
||||
|
||||
#### USB 3.0 flash drive
|
||||
|
||||
The following USB configuration works for usb passthrough of a USB 3.0 flash
|
||||
drive to Fedora 25 guest.
|
||||
|
||||
-device nec-usb-xhci,id=xhci \
|
||||
-device usb-host,bus=xhci.0,vendorid=0x0781,productid=0x5590 \
|
||||
-usb -device usb-mouse,bus=usb-bus.0 -device usb-kbd,bus=usb-bus.0 \
|
||||
...
|
||||
|
||||
#### Moto G3 phone
|
||||
|
||||
The following USB configuration works for usb passthrough of a Moto G3 phone to
|
||||
Fedora 25 guest.
|
||||
|
||||
-device usb-host,bus=usb-bus.0,vendorid=0x22b8,productid=0x002e \
|
||||
-usb -device usb-mouse,bus=usb-bus.0 -device usb-kbd,bus=usb-bus.0 \
|
||||
...
|
||||
|
||||
#### CoolerMaster keyboard
|
||||
|
||||
The following USB configuration works for usb passthrough of a CoolerMaster
|
||||
keyboard to macOS Sierra guest!
|
||||
|
||||
-device usb-host,bus=usb-bus.0,vendorid=0x2516,productid=0x0004 \
|
||||
-usb -device usb-tablet,bus=usb-bus.0 -device usb-kbd,bus=usb-bus.0 \
|
||||
...
|
||||
|
||||
|
||||
#### Virtual USB disk
|
||||
|
||||
The following USB configuration works for attaching a virtual USB disk to macOS
|
||||
Sierra guest. Use "qemu-img" to create "disk.raw" virtual disk.
|
||||
|
||||
-drive if=none,id=usbstick,file=disk.raw,format=raw \
|
||||
-device usb-storage,bus=usb-bus.0,drive=usbstick \
|
||||
...
|
||||
|
||||
However USB passthrough of EHCI, and XHCI (USB 3.0) devices does not work with
|
||||
macOS Sierra. See https://bugs.launchpad.net/qemu/+bug/1509336 for
|
||||
confirmation. According to this bug report, USB passthrough does not work with
|
||||
versions >= Mac OS X El Capitan guests.
|
||||
|
||||
It seems that this problem can be fixed by using OVMF + Clover.
|
||||
|
||||
Update: OVMF + Clover doesn't help. It seems that macOS is missing the required
|
||||
drivers for the EHCI, and XHCI controllers that are exposed by QEMU.
|
||||
|
||||
|
||||
### Generate macOS Mojave / Catalina installation ISO.
|
||||
|
||||
This step currently needs to be run on an existing macOS system.
|
||||
|
||||
```
|
||||
cd ~/OSX-KVM/scripts
|
||||
|
||||
./create_dmg_catalina.sh
|
||||
```
|
||||
|
||||
|
||||
### Tweaks for macOS
|
||||
|
||||
1. Disable `Energy Saver` in `System Preferences`.
|
||||
|
||||
2. Disable `Screen Saver` in `System Preferences -> Desktop & Screen Saver`.
|
||||
|
||||
3. Turn off indexing using the following command.
|
||||
|
||||
```
|
||||
sudo mdutil -a -i off
|
||||
```
|
||||
|
||||
4. Enable `Remote Login` (aka SSH) via `System Preferences -> Sharing`.
|
||||
|
||||
|
||||
### Snapshot Debugging Tips
|
||||
|
||||
- Get `savevm` to work:
|
||||
|
||||
```
|
||||
(qemu) savevm
|
||||
Error while writing VM state: No space left on device
|
||||
```
|
||||
|
||||
Ensure that you have plenty of free space in `/var/tmp` and `/`.
|
||||
|
||||
|
||||
To use a separate storage location for storing snapshots, use the following
|
||||
trick (from `zimbatm`):
|
||||
|
||||
```
|
||||
export TMPDIR=$PWD/tmp
|
||||
```
|
||||
|
||||
|
||||
### 'Fix' weird boot problems
|
||||
|
||||
```
|
||||
cp OVMF_VARS-1024x768.fd.bak OVMF_VARS-1024x768.fd
|
||||
```
|
||||
|
||||
|
||||
### 'Fix' time drift problems
|
||||
|
||||
Run the following command periodically from root's crontab:
|
||||
|
||||
```
|
||||
sntp -S pool.ntp.org
|
||||
```
|
||||
|
||||
|
||||
### Pass through all CPU cores / threads
|
||||
|
||||
macOS requires a core count that is a power of 2, but some modern CPUs have odd
|
||||
counts - like 6 cores and 12 threads.
|
||||
|
||||
So how can we harness the entire CPU in the VM?
|
||||
|
||||
There are strategies that mix smp/sockets/cores/threads/maxcpu arguments and
|
||||
use odd socket counts to arrive at even core counts, and even let you specify
|
||||
that some of the cores are hyperthreaded.
|
||||
|
||||
Specifically for the case of an Intel i7 processor with 6 cores and 12 total
|
||||
threads, altering the boot script to contain these variables and the following
|
||||
modified SMP line results in a full CPU core/thread pass through:
|
||||
|
||||
```
|
||||
CPU_SOCKETS="3"
|
||||
CPU_CORES="2"
|
||||
CPU_THREADS="2"
|
||||
CPU_TOTAL="12"
|
||||
```
|
||||
|
||||
The `-smp line` should read something like the following:
|
||||
|
||||
```
|
||||
-smp "$CPU_TOTAL",cores="$CPU_CORES",sockets="$CPU_SOCKETS",threads="$CPU_THREADS",maxcpus="$CPU_TOTAL"
|
||||
```
|
12
resources/.synergy.conf
Normal file
|
@ -0,0 +1,12 @@
|
|||
# Run "synergys" on Linux host
|
||||
|
||||
section: screens
|
||||
uber:
|
||||
mac:
|
||||
end
|
||||
section: links
|
||||
uber:
|
||||
right = mac
|
||||
mac:
|
||||
left = uber
|
||||
end
|
BIN
resources/20120105_202426_apple_sealing.pdf
Normal file
BIN
resources/OVMF_VARS.fd
Normal file
1
resources/OcBinaryData
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 9446405e44d7e17a84655c335ae5efe47d81608d
|
8
resources/README.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
Use `idadif.py` to apply the `kernel.dif` patch to the macOS `kernel` binary.
|
||||
|
||||
|
||||
```
|
||||
$ sha256sum kernel*
|
||||
be90edb9653be25e1747cefc1ec9fd452b90dd917ba9eb391a76f260f84cd9f0 kernel <-- patched 10.15.4 kernel
|
||||
ac2fc51e53519a3147359e2b25dd8aa6b1fa79d41f92091cc058b2aab7e901d6 kernel.bak <-- original 10.15.4 kernel
|
||||
```
|
47
resources/idadif.py
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# Small IDA .dif patcher - https://stalkr.net/files/ida/idadif.py
|
||||
|
||||
import re
|
||||
from sys import argv,exit
|
||||
|
||||
def patch(file, dif, revert=False):
|
||||
code = open(file,'rb').read()
|
||||
dif = open(dif,'r').read()
|
||||
m = re.findall('([0-9a-fA-F]+): ([0-9a-fA-F]+) ([0-9a-fA-F]+)', dif)
|
||||
for offset,orig,new in m:
|
||||
o, orig, new = int(offset,16), orig.decode('hex'), new.decode('hex')
|
||||
if revert:
|
||||
if code[o]==new:
|
||||
code = code[:o]+orig+code[o+1:]
|
||||
else:
|
||||
raise Exception("patched byte at %s is not %02X" % (offset, ord(new)))
|
||||
else:
|
||||
if code[o]==orig:
|
||||
code = code[:o]+new+code[o+1:]
|
||||
else:
|
||||
raise Exception("original byte at %s is not %02X" % (offset, ord(orig)))
|
||||
open(file,'wb').write(code)
|
||||
|
||||
def main():
|
||||
if len(argv)<3:
|
||||
print("Usage: %s <binary> <IDA.dif file> [revert]" % (argv[0]))
|
||||
print("Applies given IDA .dif file to patch binary; use revert to revert patch.")
|
||||
exit(0)
|
||||
|
||||
file, dif, revert = argv[1], argv[2], False
|
||||
if len(argv)>3:
|
||||
revert = True
|
||||
print("Reverting patch %r on file %r" % (dif, file))
|
||||
else:
|
||||
print("Patching file %r with %r" % (file, dif))
|
||||
|
||||
try:
|
||||
patch(file, dif, revert)
|
||||
print("Done")
|
||||
except Exception as e:
|
||||
print("Error: %s" % str(e))
|
||||
exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
8
resources/kernel.dif
Normal file
|
@ -0,0 +1,8 @@
|
|||
This difference file was created by IDA
|
||||
|
||||
kernel
|
||||
0000000000787C73: E8 90
|
||||
0000000000787C74: 78 90
|
||||
0000000000787C75: E8 90
|
||||
0000000000787C76: AA 90
|
||||
0000000000787C77: FF 90
|
95
resources/kernel_autopatcher.py
Executable file
|
@ -0,0 +1,95 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# NOTE -> https://github.com/kholia/OSX-KVM/blob/master/reversing-notes.md
|
||||
#
|
||||
# https://github.com/radareorg/radare2-r2pipe/blob/master/python/examples/libgraph.py
|
||||
# https://github.com/radareorg/radare2-r2pipe/tree/master/python
|
||||
#
|
||||
# https://www.hex-rays.com/wp-content/uploads/2019/12/xnu_debugger_primer.pdf
|
||||
# https://geosn0w.github.io/Debugging-macOS-Kernel-For-Fun/
|
||||
#
|
||||
# sudo apt-get install radare2 # Ubuntu 20.04 LTS
|
||||
# pip install r2pipe
|
||||
#
|
||||
# This software is Copyright (c) 2020, Dhiru Kholia. This program is provided
|
||||
# for educational, research, and non-commercial personal use only.
|
||||
# !!! ATTENTION !!! Any commercial usage against the Apple EULA is at your own
|
||||
# risk!
|
||||
#
|
||||
# Note: Commercial usage and redistribution is forbidden (not allowed).
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> 'AS IS' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
# EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# $ ./kernel_autopatcher.py kernel
|
||||
# [+] Processing <kernel> file...
|
||||
# [+] Patching done!
|
||||
#
|
||||
# (Re)Tested against the default "kernel" from macOS Catalina 10.15.7 in
|
||||
# October, 2020.
|
||||
#
|
||||
# Note: Disable SIP on the macOS VM (We do it via OpenCore's config.plist)
|
||||
# `00000000` - SIP completely enabled
|
||||
# `30000000` - Allow unsigned kexts and writing to protected fs locations
|
||||
# `67000000` - SIP completely disabled
|
||||
#
|
||||
# Note: sudo mount -uw /
|
||||
#
|
||||
# Kernel location (Catalina): /System/Library/Kernels/kernel
|
||||
#
|
||||
# $ md5sum kernel*
|
||||
# 3966d407c344708d599500c60c1194c0 kernel
|
||||
# 8530d3422795652ed320293ecc127770 kernel.patched
|
||||
#
|
||||
# Test command -> sudo /usr/bin/AssetCacheManagerUtil activate
|
||||
|
||||
import r2pipe
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
|
||||
def patcher(fname):
|
||||
target_symbol = "sym._cpuid_get_feature_names"
|
||||
|
||||
# analysis code
|
||||
# r2 = r2pipe.open(fname, ["-2"]) # -2 -> disable stderr messages
|
||||
r2 = r2pipe.open(fname, ["-2", "-w"]) # -2 -> disable stderr messages
|
||||
print("[+] Processing <%s> file..." % fname)
|
||||
r2.cmd('aa')
|
||||
# print(r2.cmd("pdf @ sym._cpuid_get_feature_names"))
|
||||
result = r2.cmdj("axtj %s" % target_symbol)
|
||||
if not result:
|
||||
print("[!] Can't find xrefs to <%s>. Aborting!" % target_symbol)
|
||||
sys.exit(2)
|
||||
# print(result)
|
||||
r2.cmd("s `axt sym._cpuid_get_feature_names~[1]`") # jump to the function call site
|
||||
result = r2.cmdj("pdj 1")
|
||||
if not result:
|
||||
print("[!] Can't disassemble instruction at function call site. Aborting!")
|
||||
sys.exit(3)
|
||||
opcode_size = result[0]["size"]
|
||||
assert (opcode_size == 5) # sanity check, call sym._cpuid_get_feature_name -> 5 bytes
|
||||
|
||||
# patching code
|
||||
# > pa nop
|
||||
r2.cmd("\"wa nop;nop;nop;nop;nop\"")
|
||||
r2.quit()
|
||||
print("[+] Patching done!")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) > 1:
|
||||
path = sys.argv[1]
|
||||
patcher(path)
|
||||
else:
|
||||
print("Usage: %s [path-to-kernel-file]" % (sys.argv[0]))
|
||||
sys.exit(1)
|
583
reversing-notes.md
Normal file
|
@ -0,0 +1,583 @@
|
|||
#### Problem
|
||||
|
||||
On a macOS virtual machine,
|
||||
|
||||
```
|
||||
$ sudo /usr/bin/AssetCacheManagerUtil activate
|
||||
AssetCacheManagerUtil[] Failed to activate content caching: Error Domain=ACSMErrorDomain Code=5 "virtual machine"...
|
||||
```
|
||||
|
||||
It seems that the `Content Caching` functionality is not available when macOS
|
||||
is running in a virtual machine. How can we enable this feature on our macOS
|
||||
VM?
|
||||
|
||||
|
||||
#### April 2020 Update
|
||||
|
||||
I was able to patch the Catalina 10.15.4 kernel to disable the VMM detection.
|
||||
|
||||
Original function:
|
||||
|
||||
![Original function](screenshots/macOS-kernel-patching-1.png)
|
||||
|
||||
Patched function:
|
||||
|
||||
![Patched function](screenshots/macOS-kernel-patching-2.png)
|
||||
|
||||
|
||||
```
|
||||
static int
|
||||
cpu_features SYSCTL_HANDLER_ARGS
|
||||
{
|
||||
__unused struct sysctl_oid *unused_oidp = oidp;
|
||||
__unused void *unused_arg1 = arg1;
|
||||
__unused int unused_arg2 = arg2;
|
||||
char buf[512];
|
||||
|
||||
buf[0] = '\0';
|
||||
// cpuid_get_feature_names(cpuid_features(), buf, sizeof(buf));
|
||||
cpuid_get_feature_names(cpuid_features(), buf, sizeof(buf)); // NOP this <-- NOTE!
|
||||
|
||||
return SYSCTL_OUT(req, buf, strlen(buf) + 1);
|
||||
}
|
||||
|
||||
...
|
||||
"bsd/dev/i386/sysctl.c" 980 lines --13%--
|
||||
```
|
||||
|
||||
See `bsd/dev/i386/sysctl.c 138: cpuid_get_feature_names(cpuid_features` too.
|
||||
|
||||
Useful commands:
|
||||
|
||||
```
|
||||
sudo mount -uw /
|
||||
|
||||
sudo mv /System/Library/Kernels/kernel /System/Library/Kernels/kernel.bak
|
||||
|
||||
sudo kextcache -i /
|
||||
```
|
||||
|
||||
Update: Use `resources/kernel_autopatcher.py` to patch your kernels! :-)
|
||||
|
||||
|
||||
#### March 2020 Update
|
||||
|
||||
Update: This approach causes the macOS VM to consume multiple CPU(s) 100% on
|
||||
the host!
|
||||
|
||||
See `osfmk/i386/tsc.c 142: if (cpuid_vmm_present()) {` for details.
|
||||
|
||||
Instead of trying to hack things from within the VM, we can turn off VMM
|
||||
detection from the outside.
|
||||
|
||||
See [boot-macOS-Catalina.sh](./boot-macOS-Catalina.sh) to see how it is done.
|
||||
Essentially, we add `hypervisor=off,vmx=on,kvm=off` flags to the QEMU's CPU
|
||||
configuration.
|
||||
|
||||
Once this is done,
|
||||
|
||||
```
|
||||
$ sysctl -a | grep VMM
|
||||
<nothing>
|
||||
|
||||
$ sudo /usr/bin/AssetCacheManagerUtil activate
|
||||
2020-03-14 19:05:21.416 AssetCacheManagerUtil[1313:53576] Content caching activated.
|
||||
2020-03-14 19:05:21.417 AssetCacheManagerUtil[1313:53576] Restart devices to take advantage of content caching immediately
|
||||
|
||||
$ sudo /usr/bin/AssetCacheManagerUtil status
|
||||
2020-03-14 19:10:31.154 AssetCacheManagerUtil[1362:54464] Content caching status: {
|
||||
Activated = 1;
|
||||
Active = 1;
|
||||
CacheDetails = {
|
||||
};
|
||||
CacheFree = 119663451136;
|
||||
CacheLimit = 0;
|
||||
CacheStatus = OK;
|
||||
CacheUsed = 0;
|
||||
Parents = (
|
||||
);
|
||||
Peers = (
|
||||
);
|
||||
PersonalCacheFree = 119663451136;
|
||||
PersonalCacheLimit = 0;
|
||||
PersonalCacheUsed = 0;
|
||||
Port = 49363;
|
||||
PrivateAddresses = (
|
||||
"192.168.100.137"
|
||||
);
|
||||
PublicAddress = "11.XX.YY.ZZ";
|
||||
RegistrationStatus = 1;
|
||||
RestrictedMedia = 0;
|
||||
ServerGUID = "XXX";
|
||||
StartupStatus = OK;
|
||||
TotalBytesAreSince = "2020-03-15 02:05:06 +0000";
|
||||
TotalBytesDropped = 0;
|
||||
TotalBytesImported = 0;
|
||||
TotalBytesReturnedToChildren = 0;
|
||||
TotalBytesReturnedToClients = 0;
|
||||
TotalBytesReturnedToPeers = 0;
|
||||
TotalBytesStoredFromOrigin = 0;
|
||||
TotalBytesStoredFromParents = 0;
|
||||
TotalBytesStoredFromPeers = 0;
|
||||
}
|
||||
```
|
||||
|
||||
w00t!
|
||||
|
||||
I found this technique from [this article](https://superuser.com/questions/1387935/hiding-virtual-machine-status-from-guest-operating-system). Thanks!
|
||||
|
||||
This was tested on macOS Mojave 10.14.6 and on macOS Catalina 10.15.3.
|
||||
|
||||
|
||||
#### CPU flags
|
||||
|
||||
```
|
||||
$ sysctl -a | grep VMM
|
||||
machdep.cpu.features: FPU ... VMM PCID XSAVE OSXSAVE AVX1.0
|
||||
```
|
||||
|
||||
Turning off `kvm=on` flag doesn't help in hiding the `VMM` flag.
|
||||
|
||||
https://github.com/hjuutilainen/adminscripts/blob/master/check-if-virtual-machine.py
|
||||
uses the same trick to detect if macOS is running in a VM.
|
||||
|
||||
|
||||
#### VM detection code in macOS
|
||||
|
||||
This code was found in the `AssetCache` binary.
|
||||
|
||||
```objective-c
|
||||
char __cdecl -[ECConfig runningInVM](ECConfig *self, SEL a2)
|
||||
{
|
||||
void *v2; // rax
|
||||
void *v3; // r15
|
||||
__int64 v4; // r13
|
||||
size_t v5; // r12
|
||||
__int64 v6; // r13
|
||||
int *v7; // rax
|
||||
char *v8; // rax
|
||||
bool v9; // bl
|
||||
__int64 v10; // r12
|
||||
__int64 v11; // r12
|
||||
int *v12; // rax
|
||||
char *v13; // rax
|
||||
__int64 v14; // rbx
|
||||
size_t v15; // rcx
|
||||
void *v16; // rax
|
||||
void *v17; // r14
|
||||
char result; // al
|
||||
__int64 *v19; // [rsp+0h] [rbp-40h]
|
||||
size_t v20; // [rsp+8h] [rbp-38h]
|
||||
__int64 v21; // [rsp+10h] [rbp-30h]
|
||||
|
||||
v20 = 0LL;
|
||||
*__error() = 0;
|
||||
if ( sysctlbyname("machdep.cpu.features", 0LL, &v20, 0LL, 0LL) || v20 - 1 > 0xF423F )
|
||||
{
|
||||
v10 = qword_100394620;
|
||||
if ( (unsigned __int8)os_log_type_enabled(qword_100394620, 16LL) )
|
||||
{
|
||||
v11 = objc_retain(v10);
|
||||
v12 = __error();
|
||||
v13 = strerror(*v12);
|
||||
*((_DWORD *)&v19 - 8) = 134218242;
|
||||
*(__int64 **)((char *)&v19 - 28) = 0LL;
|
||||
*((_WORD *)&v19 - 10) = 2080;
|
||||
*(__int64 **)((char *)&v19 - 18) = (__int64 *)v13;
|
||||
_os_log_error_impl(&_mh_execute_header, v11, 16LL, aSysctlMachdepC, &v19 - 4, 22LL);
|
||||
objc_release(v11);
|
||||
v9 = 0;
|
||||
goto LABEL_21;
|
||||
}
|
||||
LABEL_12:
|
||||
v9 = 0;
|
||||
goto LABEL_21;
|
||||
}
|
||||
v2 = malloc(v20);
|
||||
v3 = v2;
|
||||
if ( !v2 )
|
||||
{
|
||||
v14 = qword_100394620;
|
||||
if ( (unsigned __int8)os_log_type_enabled(qword_100394620, 16LL) )
|
||||
{
|
||||
v15 = v20;
|
||||
*((_DWORD *)&v19 - 4) = 134217984;
|
||||
*(__int64 **)((char *)&v19 - 12) = (__int64 *)v15;
|
||||
_os_log_error_impl(&_mh_execute_header, v14, 16LL, aOutOfMemoryLd, &v19 - 2, 12LL);
|
||||
v9 = 0;
|
||||
goto LABEL_21;
|
||||
}
|
||||
goto LABEL_12;
|
||||
}
|
||||
if ( sysctlbyname("machdep.cpu.features", v2, &v20, 0LL, 0LL) )
|
||||
{
|
||||
v4 = qword_100394620;
|
||||
if ( (unsigned __int8)os_log_type_enabled(qword_100394620, 16LL) )
|
||||
{
|
||||
v19 = (__int64 *)&v19;
|
||||
v5 = v20;
|
||||
v6 = objc_retain(v4);
|
||||
v7 = __error();
|
||||
v8 = strerror(*v7);
|
||||
*((_DWORD *)&v19 - 8) = 134218242;
|
||||
*(__int64 **)((char *)&v19 - 28) = (__int64 *)v5;
|
||||
*((_WORD *)&v19 - 10) = 2080;
|
||||
*(__int64 **)((char *)&v19 - 18) = (__int64 *)v8;
|
||||
_os_log_error_impl(&_mh_execute_header, v6, 16LL, aSysctlMachdepC, &v19 - 4, 22LL);
|
||||
objc_release(v6);
|
||||
}
|
||||
v9 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
v16 = objc_msgSend(&OBJC_CLASS___NSString, "stringWithUTF8String:", v3);
|
||||
v17 = (void *)objc_retainAutoreleasedReturnValue(v16);
|
||||
v9 = (unsigned __int8)objc_msgSend(v17, "isEqualToString:", CFSTR("VMM"))
|
||||
|| (unsigned __int8)objc_msgSend(v17, "hasPrefix:", CFSTR("VMM "))
|
||||
|| (unsigned __int8)objc_msgSend(v17, "hasSuffix:", CFSTR(" VMM"))
|
||||
|| (unsigned __int8)objc_msgSend(v17, "containsString:", CFSTR(" VMM "));
|
||||
objc_release(v17);
|
||||
}
|
||||
free(v3);
|
||||
LABEL_21:
|
||||
result = __stack_chk_guard;
|
||||
if ( __stack_chk_guard == v21 )
|
||||
result = v9;
|
||||
return result;
|
||||
}
|
||||
```
|
||||
|
||||
The following code was found in `AssetCacheManagerService` binary,
|
||||
|
||||
```objective-c
|
||||
char __cdecl -[ACMSManager _canActivateWithReason:](ACMSManager *self, SEL a2, id *a3)
|
||||
{
|
||||
__int64 v3; // rax
|
||||
id *v4; // r14
|
||||
OS_os_log *v5; // rax
|
||||
__int64 v6; // rbx
|
||||
char v7; // bl
|
||||
__int64 v8; // r15
|
||||
struct objc_object *v9; // rax
|
||||
void *v10; // r12
|
||||
void *v11; // rax
|
||||
OS_os_log *v12; // rax
|
||||
__int64 v13; // rbx
|
||||
char result; // al
|
||||
__int64 v15; // [rsp+0h] [rbp-30h]
|
||||
|
||||
v15 = v3;
|
||||
v4 = a3;
|
||||
if ( (unsigned __int8)-[ACMSManager runningInVM](self, "runningInVM", v3) )
|
||||
{
|
||||
v5 = -[ACMSManager logHandle](self, "logHandle");
|
||||
v6 = objc_retainAutoreleasedReturnValue(v5);
|
||||
if ( (unsigned __int8)os_log_type_enabled(v6, 0LL) )
|
||||
{
|
||||
*((_WORD *)&v15 - 8) = 0;
|
||||
_os_log_impl(&_mh_execute_header, v6, 0LL, aRunninginvm_2, &v15 - 2, 2LL);
|
||||
}
|
||||
objc_release(v6);
|
||||
if ( v4 )
|
||||
{
|
||||
objc_retainAutorelease(CFSTR("virtual machine"));
|
||||
*v4 = (id)CFSTR("virtual machine");
|
||||
}
|
||||
v7 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
v8 = _kACSMSettingsDenyActivationKey;
|
||||
v9 = -[ACMSManager _managedPrefSettingForKey:](self, "_managedPrefSettingForKey:", _kACSMSettingsDenyActivationKey);
|
||||
v10 = (void *)objc_retainAutoreleasedReturnValue(v9);
|
||||
v11 = objc_msgSend(&OBJC_CLASS___NSNumber, "class");
|
||||
if ( !(unsigned __int8)objc_msgSend(v10, "isKindOfClass:", v11) )
|
||||
{
|
||||
objc_release(v10);
|
||||
v10 = 0LL;
|
||||
}
|
||||
if ( (unsigned __int8)objc_msgSend(v10, "boolValue") == 1 )
|
||||
{
|
||||
v12 = -[ACMSManager logHandle](self, "logHandle");
|
||||
v13 = objc_retainAutoreleasedReturnValue(v12);
|
||||
if ( (unsigned __int8)os_log_type_enabled(v13, 0LL) )
|
||||
{
|
||||
*((_DWORD *)&v15 - 4) = 138412290;
|
||||
*(__int64 *)((char *)&v15 - 12) = v8;
|
||||
_os_log_impl(&_mh_execute_header, v13, 0LL, asc_10000E438, &v15 - 2, 12LL);
|
||||
}
|
||||
objc_release(v13);
|
||||
if ( v4 )
|
||||
{
|
||||
objc_retainAutorelease(CFSTR("disabled by your system administrator"));
|
||||
*v4 = (id)CFSTR("disabled by your system administrator");
|
||||
}
|
||||
v7 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
v7 = 1;
|
||||
if ( v4 )
|
||||
*v4 = 0LL;
|
||||
}
|
||||
objc_release(v10);
|
||||
}
|
||||
result = __stack_chk_guard;
|
||||
if ( __stack_chk_guard == v15 )
|
||||
result = v7;
|
||||
return result;
|
||||
}
|
||||
```
|
||||
|
||||
```objective-c
|
||||
ACMSManager *__cdecl -[ACMSManager init](ACMSManager *self, SEL a2)
|
||||
{
|
||||
...
|
||||
if ( sysctlbyname("machdep.cpu.features", 0LL, &v59, 0LL, 0LL) || v59 - 1 > 0xF423F )
|
||||
{
|
||||
v33 = objc_msgSend(v26, "logHandle");
|
||||
v34 = objc_retainAutoreleasedReturnValue(v33);
|
||||
if ( (unsigned __int8)os_log_type_enabled(v34, 0LL) )
|
||||
{
|
||||
v35 = *__error();
|
||||
*((_DWORD *)&v45 - 8) = 134218240;
|
||||
*(__int64 *)((char *)&v45 - 28) = 0LL;
|
||||
*((_WORD *)&v45 - 10) = 1024;
|
||||
*(_DWORD *)((char *)&v45 - 18) = v35;
|
||||
_os_log_impl(&_mh_execute_header, v34, 0LL, aSysctlMachdepC, &v45 - 4, 18LL);
|
||||
}
|
||||
v36 = v34;
|
||||
}
|
||||
else
|
||||
{
|
||||
v27 = malloc(v59);
|
||||
v28 = v27;
|
||||
if ( v27 )
|
||||
{
|
||||
if ( sysctlbyname("machdep.cpu.features", v27, &v59, 0LL, 0LL) )
|
||||
{
|
||||
v29 = objc_msgSend(v26, "logHandle");
|
||||
v30 = objc_retainAutoreleasedReturnValue(v29);
|
||||
if ( (unsigned __int8)os_log_type_enabled(v30, 0LL) )
|
||||
{
|
||||
v58 = &v45;
|
||||
v31 = v59;
|
||||
v32 = *__error();
|
||||
*((_DWORD *)&v45 - 8) = 134218240;
|
||||
*(__int64 *)((char *)&v45 - 28) = v31;
|
||||
*((_WORD *)&v45 - 10) = 1024;
|
||||
*(_DWORD *)((char *)&v45 - 18) = v32;
|
||||
_os_log_impl(&_mh_execute_header, v30, 0LL, aSysctlMachdepC, &v45 - 4, 18LL);
|
||||
}
|
||||
objc_release(v30);
|
||||
v2 = v60;
|
||||
}
|
||||
else
|
||||
{
|
||||
v40 = ((__int64 (__fastcall *)(void *, const char *, void *))objc_msgSend)(
|
||||
&OBJC_CLASS___NSString,
|
||||
"stringWithUTF8String:",
|
||||
v28);
|
||||
v41 = objc_retainAutoreleasedReturnValue(v40);
|
||||
v42 = (void *)v41;
|
||||
v43 = ((__int64 (__fastcall *)(__int64, const char *, const __CFString *))objc_msgSend)(
|
||||
v41,
|
||||
"isEqualToString:",
|
||||
CFSTR("VMM"));
|
||||
v2 = v60;
|
||||
if ( v43
|
||||
|| (unsigned __int8)objc_msgSend(v42, "hasPrefix:", CFSTR("VMM "))
|
||||
|| (unsigned __int8)objc_msgSend(v42, "hasSuffix:", CFSTR(" VMM"))
|
||||
|| (unsigned __int8)objc_msgSend(v42, "containsString:", CFSTR(" VMM ")) )
|
||||
{
|
||||
objc_msgSend(v26, "setRunningInVM:", 1LL);
|
||||
}
|
||||
objc_release(v42);
|
||||
}
|
||||
free(v28);
|
||||
goto LABEL_23;
|
||||
}
|
||||
v37 = objc_msgSend(v26, "logHandle");
|
||||
v38 = objc_retainAutoreleasedReturnValue(v37);
|
||||
if ( (unsigned __int8)os_log_type_enabled(v38, 0LL) )
|
||||
{
|
||||
v39 = v59;
|
||||
*((_DWORD *)&v45 - 4) = 134217984;
|
||||
*(__int64 *)((char *)&v45 - 12) = v39;
|
||||
_os_log_impl(&_mh_execute_header, v38, 0LL, aOutOfMemoryLd, &v45 - 2, 12LL);
|
||||
}
|
||||
v36 = v38;
|
||||
}
|
||||
```
|
||||
|
||||
The `AssetCacheManagerService` binary seems to be our target.
|
||||
|
||||
I ran the following queries to spot these binaries,
|
||||
|
||||
```
|
||||
$ find / -name "*AssetCache*" -exec grep -i "virtual machine" {} \; 2>/dev/null
|
||||
|
||||
$ find / -exec grep -Hn "ACSMErrorDomain" {} \; 2>/dev/null
|
||||
```
|
||||
|
||||
Running `http://newosxbook.com/tools/XPoCe2.html` indicates that
|
||||
`/usr/bin/AssetCacheManagerUtil` talks with `AssetCacheManagerService`.
|
||||
|
||||
|
||||
After attaching `lldb` to `AssetCacheManagerService`,
|
||||
|
||||
```
|
||||
$ nm AssetCacheManagerService | grep VM
|
||||
000000010000bb97 t -[ACMSManager runningInVM]
|
||||
000000010000bbaa t -[ACMSManager setRunningInVM:]
|
||||
0000000100012928 s _OBJC_IVAR_$_ACMSManager._runningInVM
|
||||
|
||||
(lldb) break set --name '-[ACMSManager setRunningInVM:]'
|
||||
Breakpoint 1: where = AssetCacheManagerService`-[ACMSManager setRunningInVM:], address = 0x0000000105bf5baa
|
||||
(lldb) break set --name '-[ACMSManager _canActivateWithReason:]'
|
||||
Breakpoint 2: where = AssetCacheManagerService`-[ACMSManager _canActivateWithReason:], address = 0x0000000105bf33f4
|
||||
(lldb) break set --name '-[ACMSManager runningInVM]'
|
||||
Breakpoint 3: where = AssetCacheManagerService`-[ACMSManager runningInVM], address = 0x0000000105bf5b97
|
||||
Process 940 stopped
|
||||
* thread #3, queue = 'com.apple.AssetCacheManagerService.ACMSManager.workQueue', stop reason = breakpoint 2.1
|
||||
frame #0: 0x0000000105bf33f4 AssetCacheManagerService`-[ACMSManager _canActivateWithReason:]
|
||||
AssetCacheManagerService`-[ACMSManager _canActivateWithReason:]:
|
||||
-> 0x105bf33f4 <+0>: pushq %rbp
|
||||
0x105bf33f5 <+1>: movq %rsp, %rbp
|
||||
0x105bf33f8 <+4>: pushq %r15
|
||||
0x105bf33fa <+6>: pushq %r14
|
||||
Target 0: (AssetCacheManagerService) stopped.
|
||||
```
|
||||
|
||||
|
||||
#### Fix ideas
|
||||
|
||||
* Patch `AssetCacheManagerService` binary?
|
||||
|
||||
* Kernel patching - change the way `sysctlbyname` behaves?
|
||||
|
||||
* Manipulate function execution using Frida?
|
||||
|
||||
|
||||
#### Patch #1
|
||||
|
||||
![Patching runningInVM method](screenshots/ida-patch.png?raw=true "Patching runningInVM()")
|
||||
|
||||
After this binary patch is applied, `activation` seems to be working ;)
|
||||
|
||||
```
|
||||
$ sudo /usr/bin/AssetCacheManagerUtil activate
|
||||
... Failed to activate content caching: Error Domain=ACSMErrorDomain Code=3 "already activated"...
|
||||
```
|
||||
|
||||
However, `sudo /usr/bin/AssetCacheManagerUtil status` fails to work just yet.
|
||||
|
||||
```
|
||||
$ sudo /usr/bin/AssetCacheManagerUtil status
|
||||
2018-11-10 19:29:24.051 AssetCacheManagerUtil[419:3473] Content caching status: {
|
||||
Activated = 0;
|
||||
Active = 0;
|
||||
CacheDetails = {
|
||||
};
|
||||
CacheFree = 2000000000;
|
||||
CacheLimit = 2000000000;
|
||||
CacheStatus = OK;
|
||||
CacheUsed = 0;
|
||||
Parents = (
|
||||
);
|
||||
Peers = (
|
||||
);
|
||||
PersonalCacheFree = 2000000000;
|
||||
PersonalCacheLimit = 2000000000;
|
||||
PersonalCacheUsed = 0;
|
||||
Port = 0;
|
||||
RegistrationError = "NOT_ACTIVATED";
|
||||
RegistrationResponseCode = 403;
|
||||
RegistrationStatus = "-1";
|
||||
RestrictedMedia = 0;
|
||||
ServerGUID = "XXX";
|
||||
StartupStatus = FAILED;
|
||||
TotalBytesAreSince = "2018-11-11 03:27:25 +0000";
|
||||
TotalBytesDropped = 0;
|
||||
TotalBytesImported = 0;
|
||||
TotalBytesReturnedToChildren = 0;
|
||||
TotalBytesReturnedToClients = 0;
|
||||
TotalBytesReturnedToPeers = 0;
|
||||
TotalBytesStoredFromOrigin = 0;
|
||||
TotalBytesStoredFromParents = 0;
|
||||
TotalBytesStoredFromPeers = 0;
|
||||
}
|
||||
```
|
||||
|
||||
It seems more patching of the involved binaries (`/usr/libexec/AssetCache/AssetCache`) is required?
|
||||
|
||||
Note: The `AssetCacheManagerService.dif` included in this repository was
|
||||
derived on a macOS 10.14.1 system.
|
||||
|
||||
|
||||
#### Patch #2
|
||||
|
||||
Change the four `VMM` strings to `XXX` in the `/usr/libexec/AssetCache/AssetCache` binary.
|
||||
|
||||
```
|
||||
$ pwd
|
||||
/usr/libexec/AssetCache
|
||||
|
||||
$ sudo codesign --remove-signature AssetCache
|
||||
|
||||
$ sudo /usr/bin/AssetCacheManagerUtil status
|
||||
2018-11-10 23:40:07.459 AssetCacheManagerUtil[973:21653] Content caching status: {
|
||||
Activated = 1;
|
||||
Active = 0;
|
||||
CacheDetails = {
|
||||
};
|
||||
CacheFree = 2000000000;
|
||||
CacheLimit = 2000000000;
|
||||
CacheStatus = OK;
|
||||
CacheUsed = 0;
|
||||
Parents = (
|
||||
);
|
||||
Peers = (
|
||||
);
|
||||
PersonalCacheFree = 2000000000;
|
||||
PersonalCacheLimit = 2000000000;
|
||||
PersonalCacheUsed = 0;
|
||||
Port = 49181;
|
||||
RegistrationStarted = "2018-11-11 07:38:48 +0000";
|
||||
RegistrationStatus = 0;
|
||||
RestrictedMedia = 0;
|
||||
ServerGUID = "XXX";
|
||||
StartupStatus = PENDING;
|
||||
TotalBytesAreSince = "2018-11-11 07:38:48 +0000";
|
||||
TotalBytesDropped = 0;
|
||||
TotalBytesImported = 0;
|
||||
TotalBytesReturnedToChildren = 0;
|
||||
TotalBytesReturnedToClients = 0;
|
||||
TotalBytesReturnedToPeers = 0;
|
||||
TotalBytesStoredFromOrigin = 0;
|
||||
TotalBytesStoredFromParents = 0;
|
||||
TotalBytesStoredFromPeers = 0;
|
||||
}
|
||||
```
|
||||
|
||||
A bit of progress I think ;)
|
||||
|
||||
Note: However, it seems that more reversing and patching work is required.
|
||||
|
||||
|
||||
#### Questions
|
||||
|
||||
* I haven't been able to see this `sysctlbyname("machdep.cpu.features"...` call
|
||||
being hit in `lldb`.
|
||||
|
||||
Maybe this call is executed once at program startup?
|
||||
|
||||
* Can we use DTrace on macOS to trace execution of this call in a system-wide
|
||||
fashion?
|
||||
|
||||
|
||||
### References
|
||||
|
||||
* https://geosn0w.github.io/Debugging-macOS-Kernel-For-Fun/
|
||||
|
||||
* https://www.hex-rays.com/wp-content/uploads/2019/12/xnu_debugger_primer.pdf
|
47
run-diagnostics.sh
Executable file
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# run-diagnostics.sh: checks common virtualization programs, modules and
|
||||
# options. Written by Foxlet <foxlet@furcode.co>. Modified by Dhiru for OSX-KVM
|
||||
# project.
|
||||
#
|
||||
# Note: This script is borrowed from https://github.com/foxlet/macOS-Simple-KVM
|
||||
# project.
|
||||
|
||||
echo "== Distro Info ==" >&2
|
||||
lsb_release -a 2>/dev/null
|
||||
|
||||
echo -e "\n== Loaded Modules ==" >&2
|
||||
lsmod | grep kvm
|
||||
lsmod | grep amd_iommu
|
||||
lsmod | grep intel_iommu
|
||||
v=$(cat /sys/module/kvm/parameters/ignore_msrs)
|
||||
if [ "$v" != "Y" ]; then
|
||||
echo -e "\nATTENTION: /sys/module/kvm/parameters/ignore_msrs setting seems to be incorrect!"
|
||||
fi
|
||||
|
||||
echo -e "\n== Installed Binaries ==" >&2
|
||||
if [ -x "$(command -v qemu-system-x86_64)" ]; then
|
||||
qemu-system-x86_64 --version
|
||||
else
|
||||
echo -e "qemu is not installed." >&2
|
||||
fi
|
||||
|
||||
if [ -x "$(command -v virt-manager)" ]; then
|
||||
echo -e "virt-manager version $(virt-manager --version)"
|
||||
else
|
||||
echo -e "virt-manager is not installed." >&2
|
||||
fi
|
||||
|
||||
if [ -x "$(command -v python)" ]; then
|
||||
python --version
|
||||
else
|
||||
echo -e "python is not installed." >&2
|
||||
fi
|
||||
|
||||
echo -e "\n== Networking ==" >&2
|
||||
ip link show virbr0 >/dev/null 2>&1
|
||||
if [ "$?" != 0 ]; then
|
||||
echo -e "Interface virbr0 doesn't seem to exist. Check your networking configuration." >&2
|
||||
else
|
||||
echo -e "Found virbr0. Good."
|
||||
fi
|
BIN
screenshots/ida-patch.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
screenshots/macOS+QEMU+AVX.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
screenshots/macOS-Sierra-KVM.png
Normal file
After Width: | Height: | Size: 935 KiB |
BIN
screenshots/macOS-expose-AVX2.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
screenshots/macOS-kernel-patching-1.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
screenshots/macOS-kernel-patching-2.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
screenshots/unraid-oc-efi.png
Normal file
After Width: | Height: | Size: 43 KiB |