From a9ef589cc2bbfeaa27052aa458e6739879c10967 Mon Sep 17 00:00:00 2001 From: Dhiru Kholia Date: Tue, 26 Oct 2021 10:22:43 +0530 Subject: [PATCH] OSX-KVM - October 2021 Batch Update #2 --- OpenCore-Boot.sh | 2 +- README.md | 35 +++++++++++++++------- References.md | 8 +++++ boot-linux-for-debugging.sh | 60 +++++++++++++++++++++++++++++++++++++ boot-passthrough.sh | 9 +++++- fetch-macOS-v2.py | 9 +++--- notes.md | 8 ++++- 7 files changed, 114 insertions(+), 17 deletions(-) create mode 100755 boot-linux-for-debugging.sh diff --git a/OpenCore-Boot.sh b/OpenCore-Boot.sh index db82e71..e4f4ef6 100755 --- a/OpenCore-Boot.sh +++ b/OpenCore-Boot.sh @@ -40,7 +40,7 @@ args=( # -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=true,file="$REPO_PATH/$OVMF_DIR/OVMF_CODE.fd" + -drive if=pflash,format=raw,readonly=on,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 diff --git a/README.md b/README.md index a9455a3..a29bd33 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ 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**. +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**. Note: Project sponsors get access to the `Private OSX-KVM` repository, and direct support. Working with `Proxmox` and macOS? See [Nick's blog for sure](https://www.nicksherlock.com/). @@ -78,10 +78,11 @@ Phenom II X3 720 does not. Ryzen processors work just fine. This step may need to be adapted for your Linux distribution. -* Add user to the `kvm` group (might be needed). +* Add user to the `kvm` and `libvirt` groups (might be needed). ``` sudo usermod -aG kvm $(whoami) + sudo usermod -aG libvirt $(whoami) ``` Note: Re-login after executing this command. @@ -97,6 +98,14 @@ Phenom II X3 720 does not. Ryzen processors work just fine. cd OSX-KVM ``` + Repository updates can be pulled via the following command: + + ``` + git pull --rebase + ``` + + This repository uses rebase based workflows heavily. + * Fetch macOS installer. ``` @@ -106,7 +115,7 @@ Phenom II X3 720 does not. Ryzen processors work just fine. You can choose your desired macOS version here. After executing this step, you should have the `BaseSystem.dmg` file in the current folder. - ATTENTION: Let the `Big Sur` setup sit at the `Country Selection` screen, and + ATTENTION: Let `>= Big Sur` setup sit at the `Country Selection` screen, and other similar places for a while if things are being slow. The initial macOS setup wizard will eventually succeed. @@ -116,10 +125,11 @@ Phenom II X3 720 does not. Ryzen processors work just fine. $ ./fetch-macOS-v2.py 1. High Sierra (10.13) 2. Mojave (10.14) - 3. Catalina (10.15) - RECOMMENDED - 4. Latest (Big Sur - 11) + 3. Catalina (10.15) + 4. Big Sur (11.6) - RECOMMENDED + 5. Monterey (latest) - Choose a product to download (1-4): 3 + Choose a product to download (1-5): ``` Note: Modern NVIDIA GPUs are supported on HighSierra but not on later @@ -157,6 +167,8 @@ Phenom II X3 720 does not. Ryzen processors work just fine. - You are all set! 🙌 +- TIP: Using a non-APFS filesystem is recommended. + - (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 @@ -184,9 +196,6 @@ Phenom II X3 720 does not. Ryzen processors work just fine. - 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 @@ -195,7 +204,7 @@ 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 +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. @@ -245,6 +254,12 @@ Gabriel Somlo also has [some thoughts](http://www.contrib.andrew.cmu.edu/~somlo/ 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. +Note: It is your responsibility to understand, and accept (or not accept) the +Apple EULA. + +Note: This is not legal advice, so please make the proper assessments yourself +and discuss with your lawyers if you have any concerns (Text credit: Dortania) + ### Motivation diff --git a/References.md b/References.md index efb37d0..34b1c23 100644 --- a/References.md +++ b/References.md @@ -5,3 +5,11 @@ * https://www.kraxel.org/blog/2017/09/running-macos-as-guest-in-kvm/ * https://github.com/foxlet/macOS-Simple-KVM + +* https://support.apple.com/en-us/HT211683 (How to get old versions of macOS) + +* https://github.com/sickcodes/Docker-OSX/issues/341#issuecomment-919913745 (awesome qemu automation) + +* https://github.com/ofawx/VmAssetCacheEnable + +* https://dortania.github.io/OpenCore-Install-Guide/troubleshooting/extended/post-issues.html diff --git a/boot-linux-for-debugging.sh b/boot-linux-for-debugging.sh new file mode 100755 index 0000000..6bcc041 --- /dev/null +++ b/boot-linux-for-debugging.sh @@ -0,0 +1,60 @@ +#!/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="+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 host,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=on,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/OpenCore.qcow2" + -device ide-hd,bus=sata.3,drive=OpenCoreBoot + -device ide-hd,bus=sata.2,drive=InstallMedia + -drive id=InstallMedia,if=none,file="$REPO_PATH/linux.iso",format=raw # archlinux-2021.10.01-x86_64.iso works nicely! + -drive id=MacHDD,if=none,file="$REPO_PATH/linux_hdd.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 virtio-net-pci,netdev=net0,id=net0,mac=52:54:00:c9:18:27 + -monitor stdio + -device VGA,vgamem_mb=128 +) + +qemu-system-x86_64 "${args[@]}" diff --git a/boot-passthrough.sh b/boot-passthrough.sh index 4d2c410..800e30d 100755 --- a/boot-passthrough.sh +++ b/boot-passthrough.sh @@ -41,15 +41,22 @@ args=( -smp "$CPU_THREADS",cores="$CPU_CORES",sockets="$CPU_SOCKETS" -device usb-ehci,id=ehci -vga none + # 01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev ef) + # Subsystem: Sapphire Technology Limited Nitro+ Radeon RX 570/580/590 [1da2:e366] + # 01:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1002:aaf0] + # Subsystem: Sapphire Technology Limited Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1da2:aaf0] -device vfio-pci,host=01:00.0,multifunction=on -device vfio-pci,host=01:00.1 + # ASMedia ASM1142 USB 3.1 Host Controller (comment out as needed) + # 03:00.0 USB controller [0c03]: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller [1b21:1242] + -device vfio-pci,host=03:00.0,bus=pcie.0 -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/OpenCore.qcow2" + -drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file="$REPO_PATH/OpenCore/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 diff --git a/fetch-macOS-v2.py b/fetch-macOS-v2.py index b177b25..ae395d8 100755 --- a/fetch-macOS-v2.py +++ b/fetch-macOS-v2.py @@ -456,13 +456,14 @@ def main(): return action_guess(args) # No action specified, so present a download menu instead + # https://github.com/acidanthera/OpenCorePkg/blob/master/Utilities/macrecovery/boards.json 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"} - ] + {"name": "Catalina (10.15)", "b": "Mac-00BE6ED71E35EB86", "m": "00000000000000000"}, + {"name": "Big Sur (11.6) - RECOMMENDED", "b": "Mac-2BD1B31983FE1663", "m": "00000000000000000"}, + {"name": "Monterey (latest)", "b": "Mac-7BA5B2D9E42DDD94", "m": "00000000000000000", "os_type": "latest"} + ] for index, product in enumerate(products): name = product["name"] diff --git a/notes.md b/notes.md index 0c97527..33cc95b 100644 --- a/notes.md +++ b/notes.md @@ -158,6 +158,8 @@ AMD RX 570 GPU (May 2021). ``` @kvm soft memlock unlimited @kvm hard memlock unlimited + @libvirt soft memlock unlimited + @libvirt hard memlock unlimited ``` Thanks to `Heiko Sieger` for this solution. @@ -168,6 +170,10 @@ AMD RX 570 GPU (May 2021). * To reuse the keyboard and mouse devices from the host, setup "Automatic login" in System Preferences in macOS and configure Synergy software. +UPDATE: Project sponsors get access to the `Private OSX-KVM repository`, and +direct support. This private repository has a playbook to automate 95% of this +work in a rugged, consistent manner. + ### USB passthrough notes @@ -209,7 +215,7 @@ These steps will need to be adapted for your particular setup. $ scripts/vfio-group.sh 13 ``` -* Add `-device vfio-pci,host=03:00.0,bus=pcie.0 \` line to `boot-passthrough.sh`. +* 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.