Installing macOS 12 “Monterey” on Proxmox 7

This tutorial for installing macOS 12 Monterey has been adapted for Proxmox from Kholia’s OSX-KVM project and Leoyzen’s OpenCore configuration for KVM. You can get the full sourcecode of my OpenCore release on my GitHub here.


I’ll assume you already have Proxmox 7 installed. You also need a real Mac available in order to fetch the OSK key.

Your Proxmox host computer’s CPU must support SSE 4.2, so for Intel your CPU must be at least as new as Nehalem, which was the first CPU generation to bear the “Core” i5/i7 branding. Older CPUs will cause Illegal Instruction crashes when apps/extensions attempt to use these missing instructions.

Modern AMD CPUs also support SSE 4.2 and will work with this guide.

First step: Create an installation ISO

Download my copy of the OSX-KVM repository using the download button, and unzip it:

First we need to install some build requirements. If you will be building the installer ISO on macOS, open up the Terminal and run this command to install the commandline tools:

xcode-select --install

If you’re building the ISO on Linux, you instead need to run this command (these are the package names for Ubuntu or similar distributions, they may need adjustment on other distributions):

sudo apt install qemu-utils make

Now in the Terminal, from the root of OSX-KVM, run:

cd scripts/monterey
make Monterey-recovery.img

This will download the Monterey installer from Apple’s software distribution servers and build a Monterey-recovery.img file for you. Upload this file to your Proxmox’s ISO store directory (typically /var/lib/vz/template/iso). Although we’re putting it in the ISO directory so that we can use it with Proxmox’s ISO picker later, this a raw disk image rather than a true ISO.

If you’re building the installer on macOS, you can build a full installer instead of just a recovery, which will mean that macOS won’t have to download Monterey files during installation, and so won’t require an Internet connection. Simply ask it to build Monterey-full.img instead:

cd scripts/monterey
make Monterey-full.img

This option is not available when building the installer on Linux.

Prepare an OpenCore image

Download the OpenCore.iso.gz file from the newest release in my repository (you want v15 or newer), double click it to unpack it, and upload it to Proxmox’s ISO store at /var/lib/vz/template/iso. Although it has a .iso file extension, this is actually a hard disk image.

Fetch the OSK authentication key

macOS checks that it is running on real Mac hardware, and refuses to boot on third-party hardware. You can get around this by reading an authentication key out of your real Mac hardware (the OSK key). Save the first block of C code from this page as smc_read.c. In a command prompt, change into the same directory as that file and run:

xcode-select --install # If you don't already have gcc
gcc -o smc_read smc_read.c -framework IOKit

It’ll print out the 64 character OSK for you. Make a note of it.

Every Mac uses the same OSK, so don’t be surprised that it doesn’t look like a random string!

Create the VM

From the Proxmox web UI, create a new virtual machine as shown below.

In the Options page for the VM, ensure that “use tablet for pointer” is set to “Yes” (this is the default).

In the Hardware page for the VM, add a second DVD drive at IDE0, set it to use your Monterey-full.img or Monterey-recovery.img.

Don’t try to start the VM just yet. First, SSH into your Proxmox server so we can make some edits to the configuration files.

Edit /etc/pve/qemu-server/YOUR-VM-ID-HERE.conf (e.g. with nano or vim). Add this line, being sure to substitute the OSK you extracted earlier into the right place:

args: -device isa-applesmc,osk="THE-OSK-YOU-EXTRACTED-GOES-HERE" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off

A USB keyboard is added here because macOS doesn’t support QEMU’s default PS/2 keyboard.

MSI has been disabled for the USB controller to fix QEMU panics when USB 3 devices are passed through.

ACPI PCIe hotplug support needs to be disabled for VMs with passthrough devices since QEMU Q35 machine model 6.1, which is what that final argument does. (You could instead choose Q35 6.0 for your Machine type on the Hardware tab). If you haven’t updated your QEMU to version 6.1 yet then remove this argument from the args. (Proxmox 7 ships with 6.0 and updated to 6.1 later on)

Ensure the args are all on a single line!

We also need to add a -cpu argument. If your host CPU is Intel, add this to the end of the “args” line:

-cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc

This will pass through all of the features that your CPU supports. OpenCore’s config will pretend to macOS that the CPU’s model name is Penryn for compatibility.

If your host CPU is AMD, or the above argument doesn’t work for you, use this more-compatible alternative:

-cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+fma4,+bmi1,+bmi2,+xsave,+xsaveopt,+rdrand,check

This pretends that your CPU is Penryn, which will keep macOS happy even if your host CPU is AMD, and adds a bunch of newer required and optional CPU features on top. Features that your host CPU doesn’t support will be ignored (a warning will be printed to the console during launch with qm start 1xx), but note that macOS won’t work without SSE4.2 support.

You can remove the “+invtsc” feature from the list if your CPU doesn’t support it, or if you want to be able to migrate a running VM between Proxmox nodes.

Now find the lines that define the two “ISOs” (ide0 and ide2), and remove the “,media=cdrom” part from them. Add “,cache=unsafe” in its place. This will treat these as hard disks rather than DVD drives.

Save your changes, return to the Options tab, and change the boot order to put IDE2 (the OpenCore image) first. Your final VM configuration file should resemble this:

args: -device isa-applesmc,osk="..." -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off
agent: 1
balloon: 0
bios: ovmf
boot: order=ide2
cores: 4
cpu: Penryn
efidisk0: vms-ssd-enc:vm-171-disk-1,efitype=4m,size=1M
ide0: isos:iso/Monterey-full.img,cache=unsafe,size=14G
ide2: isos:iso/OpenCore-v15.img,cache=unsafe,size=150M
machine: q35
memory: 4096
name: macos-monterey
net0: virtio=...,bridge=vmbr0,firewall=1
numa: 1
ostype: other
virtio0: vms:vm-171-disk-0,cache=unsafe,discard=on,size=64G
scsihw: virtio-scsi-pci
smbios1: uuid=...
sockets: 1
vga: vmware

Configure Proxmox

On Proxmox, run “echo 1 > /sys/module/kvm/parameters/ignore_msrs” to avoid a bootloop during macOS boot. To make this change persist across Proxmox reboots, run:

echo "options kvm ignore_msrs=Y" >> /etc/modprobe.d/kvm.conf && update-initramfs -k all -u

Install Monterey

Now start up your VM, it should boot to the OpenCore boot picker:

Press enter to boot the “Install macOS Monterey” entry and the installer should appear. (If your keyboard isn’t working, leave the Proxmox Console page and re-enter it)

OpenCore’s “OpenCanopy” boot picker

If you built a recovery installer, the icon will instead be an image of a hard disk and be labelled “MacOS Base System”.

Our virtual hard drive needs to be erased/formatted before we can install to it, so select the Disk Utility option. Follow the steps below to format the disk:

Now you can quit Disk Utility from the top menu (Disk Utility > Quit Disk Utility), and we’re ready to begin installation!

After the first stage of installation, the VM will reboot 2 or 3 times in quick succession, and each time you must manually pick the “macOS Installer” entry (the second one here, with the hard disk icon) to continue installation. It will not be selected for you automatically:

If your keyboard isn’t responding on this screen, exit the Console tab in Proxmox and re-enter it. If you get a “prohibited” sign like this appearing, hit the Reset button on the VM to try again:

Now the installation is nearly complete and the macOS Installer entry disappears, so pick the name of your main disk to boot (mine’s called Main).

There’s just one more reboot to come. Afterwards pick the “Main” entry again and this time you’ll finally boot into Monterey!

Answer the initial install questions, and you’ll be logged on! Note that you will want to hold off on logging into your Apple ID until you’ve configured your Mac’s serial number in OpenCore (because otherwise a Mac with the default shared serial number in my OpenCore image will be added to your Apple ID).

It works!

Note that it will be really sluggish for a few minutes after the first boot while the system performs housekeeping tasks.

Make the OpenCore install permanent

We’re currently booting using OpenCore from the attached OpenCore ISO. Let’s install that to the hard drive instead. Pop open Terminal and run “diskutil list” to see what drives we have available.

Use “sudo dd if=<source> of=<dest>” to copy the “EFI” partition from the OpenCore CD and overwrite the EFI partition on the hard disk. The OpenCore CD is the small disk (~150MB) that only has an EFI partition on it, and the main hard disk is the one with the large (>30GB) Apple_APFS “Container” partition on it.

In my case these EFI partitions ended up being called disk1s1 and disk0s1 respectively, so I ran “sudo dd if=/dev/disk1s1 of=/dev/disk0s1” (note that if you get these names wrong, you will overwrite the wrong disk and you’ll have to start the installation over again!).

Now shut down the VM, and remove both the OpenCore and the Monterey installer drives from the Hardware tab. On the Options tab, edit the boot order to place your virtio0 disk as the first disk. Boot up. If everything went well, you should see the OpenCore boot menu, and you can select your “Main” disk to boot Monterey:

Sleep management

I found that I was unable to wake Monterey from sleep using my mouse or keyboard. If you encounter the same problem, you can either disable system sleep in Monterey’s Energy Saver settings to avoid the issue, or you can manually wake the VM up from sleep from Proxmox by running:

qm monitor YOUR-VM-ID-HERE 

Editing your OpenCore/EFI settings

The Configuration.pdf that explains the OpenCore config.plist file can be found along with the OpenCore release on my GitHub.

To mount your EFI partition in macOS so you can edit your config.plist, first check the “identifier” of your EFI partition in the terminal:

~$ diskutil list
/dev/disk0 (external, physical):
   #:                   TYPE NAME              SIZE       IDENTIFIER
   0:  GUID_partition_scheme                  *512.1 GB   disk0
   1:                    EFI EFI               209.7 MB   disk0s1
   2:             Apple_APFS Container disk1   511.9 GB   disk0s2

Then you can mount it like so:

sudo mkdir /Volumes/EFI
sudo mount -t msdos /dev/disk0s1 /Volumes/EFI

Now you can edit /Volumes/EFI/OC/config.plist with your favourite text editor to make your changes. (TextEdit is not a great choice because it likes to insert curly quotes into the file and otherwise break things, there are some dedicated plist editors available such as XCode).

If you’re unable to boot macOS, you can edit the config.plist using the “UEFI Shell” option in the OpenCore boot menu instead.

Enter “FS0:” and press enter to open up the first available filesystem, then run “edit EFI\OC\config.plist” (if the file isn’t found, try switching to another filesystem like fs1:). When you’re done editing, press control+Q to exit, “Y” to save, then run “exit” to return to the OpenCore menu. You need to reboot for your changes to take effect.

If you prefer, you can edit config.plist from the comfort of your Proxmox host instead. If you’re booting from an attached OpenCore.img file, you can mount that file as a disk on the host. If you’re booting from the VM’s disk instead, it must be in raw format in order to be mounted (e.g. typical LVM or ZFS usage) rather than qcow2.

# Mount an OpenCore image:
losetup --partscan /dev/loop0 /var/lib/vz/template/iso/OpenCore-v15.img
# or a VM boot disk:
losetup --partscan /dev/loop0 /dev/zvol/tank/vms/vm-100-disk-1

mount /dev/loop0p1 /mnt

Now the contents of that first partition are available in /mnt, so you can edit /mnt/EFI/OC/config.plist in your favourite editor. When you’re done, do this to unmount the disk:

umount /mnt
losetup --detach /dev/loop0

Automatic boot

In config.plist, you can set Misc/Boot/Timeout to a non-zero value to allow the default boot option be chosen automatically after that delay in seconds. I’ve disabled this by default because it causes the installer ISO to re-enter its main menu instead of continuing the second stage of installation.

You can set the default boot option by pressing control+enter on it.

Verbose boot

To boot macOS in Verbose mode to diagnose boot problems, at the OpenCore boot menu press Cmd+V before pressing enter to boot macOS (you don’t need to hold it down).

If there is a kernel panic during boot and it reboots too quickly to be read, edit config.plist to add “debug=0x100” to the kernel arguments.

Changing screen resolution

To change macOS’ screen resolution, you need to edit the UEFI/Output/Resolution setting in config.plist, the default is 1920×1080@32.

You should be able to change this to any of the modes that the system OVMF menu offers (hit F2 at the start of guest boot and choose “Device Manager/OVMF Platform Configuration” to see which resolutions are available).

Video performance

Because there is no guest video acceleration available for macOS, video performance is poor.

In Google Chrome in the guest you will need to toggle off the setting to “use hardware acceleration when available” to improve issues with elements not being drawn or flickering (especially video). Safari may be a better choice.

macOS’s built in “Screen Sharing” feature offers dramatically better framerates and latency than Proxmox’s browser-based VNC console, so if you have a real Mac to act as a viewing console, you can enable that in the VM’s “Sharing” settings and connect to the VM using the Screen Sharing app from your Mac instead:

Apparently Screen Sharing is also compatible with VNC clients like RealVNC, so you should be able to connect to it from Linux or Windows consoles using RealVNC.

The real magic bullet for video performance is to pass through a compatible video card using PCIe passthrough (though note that macOS now only supports a handful of very old NVidia cards). This offers near-native performance. You can read more about how I’m using PCIe passthrough on my own installation here.

USB passthrough

Since I want to use this as my primary computer, I want to use a USB keyboard and mouse plugged directly into Proxmox, rather than sending my input through the web VNC console.

Proxmox has good documentation for USB passthrough. Basically, run “qm monitor YOUR-VM-ID-HERE”, then “info usbhost” to get a list of the USB devices connected to Proxmox:

qm> info usbhost
Bus 3, Addr 12, Port 6, Speed 480 Mb/s
Class 00: USB device 8564:1000, Mass Storage Device
Bus 3, Addr 11, Port 5.4, Speed 12 Mb/s
Class 00: USB device 04d9:0141, USB Keyboard
Bus 3, Addr 10, Port 5.1.2, Speed 12 Mb/s
Class 00: USB device 046d:c52b, USB Receiver
Bus 3, Addr 9, Port 14.4, Speed 12 Mb/s
Class 00: USB device 046d:c227, G15 GamePanel LCD
Bus 3, Addr 8, Port 14.1, Speed 1.5 Mb/s
Class 00: USB device 046d:c226, G15 Gaming Keyboard

In this case I can add my keyboard and mouse to USB passthrough by quitting qm, then running:

qm set YOUR-VM-ID-HERE -usb1 host=04d9:0141
qm set YOUR-VM-ID-HERE -usb2 host=046d:c52b

This saves the devices to the VM configuration for you. You need to reboot to have the new settings apply.

You can also pass through USB devices by passing through an entire USB controller using Proxmox’s PCIe passthrough feature, which gives much better compatibility.

Odd core counts

If your host CPU is AMD, you might have a core count which is divisible by 3, like 6 cores. macOS doesn’t like it if the core count isn’t a power of 2 (1, 2, 4, 8), but it doesn’t mind odd socket counts.

So in order to pass 6 total cores, configure the VM for 3 sockets and 2 cores per socket.

Fixing “guest boots to UEFI shell”

If your guest ends up booting to the UEFI shell instead of showing the OpenCore boot menu, especially if you’ve just updated OpenCore to a new version, you’ll need to edit the guest’s UEFI boot entries to fix this.

At the very start of guest boot, hit F2 to enter guest UEFI settings.

First we’ll remove the old entries. Choose the Boot Maintenance option, then Boot Options -> Delete Boot Option. Use the spacebar to tick any old Clover or OpenCore entries (avoid ticking the EFI Internal Shell option, you want to keep that!). Select “Commit Changes and Exit”.

Now we’ll add the correct entry for OpenCore back in. Select Add Boot Option. Navigate through the device tree to EFI/OC/OpenCore.efi and select it, name this new option “OpenCore” or similar. Again Commit Changes and Exit.

Go to the Change Boot Order and move OpenCore to the top. Commit Changes and Exit.

Now back out to the main menu and choose Reset, and you should successfully boot into OpenCore this time.

Fixing iMessage

iCloud and the App Store should already be working for you, but for iMessage support you must follow these steps to mark your network adapter as built-in:

Disabling SIP (System Integrity Protection)

You can disable SIP by selecting the Recovery option from the OpenCore boot menu, then use the top menu to open the Terminal and run csrutil disable --no-internal. Then reboot.

This may be needed to run unsigned kexts or perform other hacks.

Upgrading OpenCore

Sometimes you need to update OpenCore to a new release in order to support a new macOS update. I’ll assume you don’t have any customisations to config.plist you want to save.

First take a snapshot! It’s great to be able to roll back if something goes wrong.

If you’re still able to boot macOS, you can update it from within the guest. Follow the instructions in the “Editing your OpenCore/EFI settings” section to mount your EFI partition. Then you can delete the EFI folder in there and replace it with the one from the file from my OpenCore release (you’ll probably need to empty the trash first to make room for the new folder). You’re done!

If you aren’t able to boot macOS, unpack and upload the new OpenCore ISO to Proxmox’s ISO store instead. Add a new CD drive to the VM that uses that ISO. Then in Proxmox’s terminal edit the VM’s config (in /etc/pve/qemu-server) to replace “media=cdrom” with “cache=unsafe” for the OpenCore drive. Now on the “Options” tab, change the boot order to put the new OpenCore drive first.

Start the VM and boot into macOS using the new OpenCore drive. From within macOS you can now follow the instructions from the “Make the OpenCore install permanent” section to install the new OpenCore image to your main macOS disk, after which the OpenCore drive can be detached from the VM.

Upgrading from macOS Big Sur

First make a backup or snapshot of your system! Being able to roll back when the upgrade goes wrong is a real lifesaver.

You’ll need to update OpenCore to my v15 release before the upgrade. You can follow the instructions in the “Editing your OpenCore settings” section above to mount your EFI disk. Then you can replace the OpenCore files in the mounted “EFI” disk with the ones from the file in my newest OpenCore release.

Reboot to make sure that you can still boot Big Sir.

If you’re using any PCIe passthrough devices (particularly video cards) you’ll want to disable those and set “vga: vmware” instead, so you can install using Proxmox’s web console from a different machine during the upgrade. This avoids installer problems triggered by flaky video card passthrough, especially host lockups caused by the AMD Reset Bug.

Now you can upgrade to Monterey using Software Update or from the App Store like you would on a real Mac.

If the update fails to appear, your SIP mode might be set to “Apple Internal”. You can check this by running “csrutil status” in the Terminal.

To fix this, reboot your VM and at the OpenCore menu select Recovery. Open up the Terminal, and in there run “csrutil enable --no-internal” (“csrutil disable --no-internal” is fine too), then reboot back into macOS and try again.

278 thoughts on “Installing macOS 12 “Monterey” on Proxmox 7”

  1. I’m running a custom built desktop with an AMD FX-8350, RX580 and 16GB DDR3 for Proxmox. I have PM setup and running fine, followed the guide to install Monterey, and the only options I get upon booting the VM is “UEFI Shell” and “Reset NVRAM” no option to install Monterey. The args I’m running match yours. What could I be doing wrong?

    1. Most likely you didn’t follow my instructions to build the installer ISO, and instead grabbed one from an external source. The “ISO” must be a hard disk image formatted GPT to appear, which my tutorial does.

    2. #I just instaled Big Sur with Proxmox on a mid 11 27″ IMac #with an ISO I had created with “gitMacOS”.
      #You can start the Instaler just like me over the Shell:
      #First Choose the Disk =>
      #It might be a nother one for you, depending in how you #configured the boot

  2. Hi Nick,

    Did I do something wrong? On my Mac Pro (2013 style) running the latests Monterey, when I run the command to read smc I get: … (Nick: removed this)

    Did I miss something??

  3. very nice! Installing guide is very clear. Everything works fine. Happy coding.
    PVE host is a PC built with intel i5-10500(6 cores, 12 logic cores), 16G mem, 512G nvme SSD as booting disk, 1T SATA HD as storage. Had created two vms: one is Windows 11 which is 4 cores cpu, 4G mem, the other is Monterey which is 4 cores cpu, 6G mem. The Monterey runs a bit slow. So I change it to 6 cores cpu. But no luck. Monterey can not boot. When it boots, It just shows the Apple logo and breezes. It works fine in 4 cores. So I am beginning to buy a old HP workstation with dual E5-2680v4 for my pve and Monterey. 😀

    1. Adding cores won’t really improve the speed, you need a compatible passthrough GPU to get a real improvement in interactive performance.

      You should be able to give it 8 “cores” though (really 8 host threads, but they will look like cores to the guest).

      1. Today I deleted my macOS vm in Proxmox and decide to reinstall it. But this time I have no luck with it. I created the vm and modified the vm conf file. When it boot to the OpenCore boot picker, the install macOS option on boot screen just disappeared. There are only FEI shell and reset NVram. The Monterey img file has been loaded in CDROM drive at IDE0.
        This is strange. What’s wrong with it?
        After some googling, somebody say that it should modify the a value in config.plist. But it does not make sense for me. Because the config.plist file is in OpenCore-v15.iso. I don’t modify it.
        I recreated the vm. Still the same problem.
        Help please!

        1. Either you forgot to edit the VM config to replace “media=cdrom” with “cache=unsafe”, or you are using an installer in the wrong format (it must be a GPT-formatted hard disk image like my guide suggests, not an ISO 9660 CD image or an MBR hard disk image).

          1. You are right. It is indeed that the installation ISO is corrupted.

            It is strange that the ISO image works in the first installation. But after that the ISO Image was damaged. I try to find the cause for it. I rebuilt it and upload it to the Proxmox server. But it still does not work. I eventually reinstalled the proxmox server and rebuilt the ISO image. In the end I had to give up.

            Finally I have to modify the config.plist to open the USB scanning function and created a USB installation media. I used it to install macOS vm successfully.

            Thank you! This tutorial help me much!

  4. Is it possible to pass through an nvme drive prior to installing the os and put everything including the EFI partition on there so not use the Proxmox default drive at all?

    I’m curious how this should be done to set up the VM from the proxmox ui because it requires me to select a drive.

    1. Yes, you can PCIe passthrough an NVMe drive by adding it from the hardware tab. Not sure what you mean about the UI.

  5. Is the “““”update-initramfs -k all -u” command not “pve-efiboot-tool refresh” now on Proxmox 7 with an EFI installation?

  6. I followed you post which worked great! I can no screen-share into the VM and get the session. What I’d like to do is get the VM to have the primary display on the externally connected monitor if that is possible.


  7. I’m passing thru my usb 3.0 pcie card for my kvm montior switch (have tried passing thru usb only but doesnt work), however everytime I shut down the macos vm I get the following error on host which requires host reboot. I do this same thing with a windows vm and it resets the card just fine and no host reboot required….please help…

    host error:
    [572.645745] vfio-pci can’t change power state from d0 to d3hot (config space inaccessible)

    1. There are various Linux kernel commandline options available for disabling features like PCIe power saving, you might attack it from that direction. There’s also an option for changing the way the config space is accessed but I forget what it’s called.

  8. After wrapping my head around GPU passthrough for days, I’d like to share an insight.
    On all MacOS versions (all OC, Proxmox 7), Catalina to Monterey I was facing the issue of UI lockup during boot, before login, often VM remained accessible via ssh / screen share.
    I always had output on first DP of my RX580 though. Until switch from pre-boot to Apple logo.
    Vendor_Reset has no impact.
    Solution: do not pass as pcie device. Untick that. Rom-BAR, Primary, Multifunction don’t really matter.
    BTW: of course it works to pass with pci-e to a Linux VM. It is not a general setup issue of my host.

      1. correct. I am. Given your hint it is clear why it works with Linux ootb. applies that arg internally in sub qemu_created_version_fixups {} if Linux OS is set.
        For type ‘other’ it does not.

  9. hello, thanks for your post. Here I have a problem that there are two monitors in my computer when Monterey login, I did the GPU passthrough, I think the another display is set qeum configs, but if I set none, the OS can’t boot. do you know how to fix it. thanks!

    1. If you remove the emulated VGA device, does your passthrough GPU successfully show the “Proxmox” boot logo during initial guest power-on? If not, your GPU is failing to be initialised by UEFI, check that it has UEFI support.

  10. Hi.
    I can’t passthrough my RX 5700XT. I get the EB LOG EXITBS:START error after booting. I’m on Proxmox 7.1 and QEMU 6.1 with Ryzen 3700X. The strange thing is that it seems that Monterey is loaded even with the error since the qemu agent shows an IP for Monterey, only without video. Passthrough under Linux works fine. Under boot-args I set agdpmod=pikera, -v, debug=0x100.

    Any help? Thanks.

    1. Do you have that acpi option on the end of your args? It’s required for passthrough on macOS on QEMU 6.1

      1. Here is my args: -device isa-applesmc,osk=”key” -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+fma4,+bmi1,+bmi2,+xsave,+xsaveopt,+rdrand,check.

        Could the cause be in the ROM file for the GPU? I used the same ROM file for Catalina and passthrough worked.

        In the past I used this OpenCore because your OC with my 5700XT never worked. But I don’t know if the linked OC is ready for Monterey. I tried it but did not work.

        1. OK, it was my fault and fixed the problem. In verbose mode I can see now that macOS is booting but when it should jump to the login screen I get a black screen. So it seems that my OC config is missing something or I do not have a perfect BIOS config.

          Any clue? Thanks.

  11. Love your guides! Just wanted to throw out there that I was able to make the recovery image in Linux Subsystem for Windows, just download ubuntu from the Windows Store, enable WSL, and then follow same Linux instructions, then grab the img file out from the admin share \\wsl$

    Beats bringing up a VM or separate machine for Linux

  12. Hello!
    I am at the installation stage, but every time I click “Reinstall MacOS Monterey,” it says “An Internet connection is required to install macOS.” I followed the instructions exactly. How do I fix this?
    Thank you!

    1. The recovery installer requires a DHCP server to be avaliable on your local network so it can get an IP and connect to the Internet.

      1. I gave the VM access to the vmbr0 bridge which is used by Proxmox for internet access, is there something else I need to do? I also checked the ifconfig in the terminal, which showed the inet as while the ip assigned to vmbr0 is

        1. You need a DHCP server on your local network handing out IP addresses, e.g. typical Internet routers provide this service. Proxmox doesn’t provide this service by default.

          1. I have this DHCP server, which is where my Proxmox server is connected via ethernet. How come adding the vmbr0 interface to the macOS VM doesn’t give internet access to the VM though?

              1. It seems like everything is working fine with that command… Other VMs and containers are able to use vmbr0, and they all receive internet access. That’s why I find it strange that this VM cannot.

  13. I’m going to assume you didn’t accidentally tick the “disconnected” tickbox in your VM’s hardware tab?

    1. Actually, I just spun up a quick Ubuntu VM to test it out again, and it did not automatically connect to the internet. I had to manually set the ip, network, dns, and gateway. Is there a way to do this from macOS recovery?

  14. Hello Nick,
    I used to run a USB Bluetooth adapter for audio output (tp-link ub400). Since Monterey, it no longer works. Can you recommend me a suitable one?

  15. Hello Nick,

    Thanks for the extensive guide!

    I had tried upgrading my osx vm from big sur and it went through. But passing a GPU to it doesn’t work for some reason. I had tried both rx 570 4gb and my new rx 6600 XT 8gb. Both yielding the same result – freeze on the boot loading screen. What is interesting is that the VM boots up just the GPU is frozen in time, I am able to remote into the VM – the system properties do not show any GPU being present and the GPU output monitor is frozen on the boot loading screen (apple logo).

    Any ideas on what might cause the issue? I had tried adding “agdpmod=pikera” to my boot-args. I had updated both Lilu and WhateverGreen kexts to latest releases.

    Anything else I could try would be greatly appreciated 🙂

    1. I had resurrected the old big sur VM backup which was booting before on Proxmox 6.

      Similar boot problem is observed on that VM as well now… I am still able to remote into each of the VMs just fine.

      Ok so what has changed when updating to Proxmox 7? Checking the VM’s configuration I can notice the new versions of machine q35? I had it set to latest. So setting this to q35-6.0 boots my big sur. Lets try the same thing with the monterey 12.1 beta VM. Unfotunately still not booting, the loading starts but in the middle of it, the screen starts turning on/off. The VM gets an IP but I am no longer to remote into the VM.

        1. Thank you, I had edited this in the VM config file but to no avail. I did try to boot with RX 570 and it booted fine, the GPU showed up in the about this mac and all. The RX 6600 XT however has the same behavior as before, GPU freezing during boot loading screen turning on/off.

          The dortania guide hints that it should be supported, but not sure anymore (Monterey 12.1 beta)

          1. Tried spoofing the device-id with ““`0x73AF or ““`0x73AE. Same results still.

            Windows 11 boots and works fine, no monitor flickering. So there must be something wrong with my config.plist or boot arguments that I am missing.

            1. Actively following this thread as I am having the exact same issue as the first port – Frozen host screen iGPU and unable to access the rx 6600 XT. I am able to access the host with HTTPS while the display is frozen.

              1. I am glad I am not the only one faced by the same issue 🙂

                I had still not figured out a working solution unfortunately.

  16. Hey Nick, thanks for the awesome article — I was able to follow through and got one running. I stumbled upon this video recently and was wondering if you can shed some light on how to configure something like that — booting the host automatically boots 3 VMs, each VM seems to have its own GPU or GPU port and monitor, while sharing the keyboard and mouse and 3 VMs, though running Linux, MacOS and Windows, seems to integrate quite seamlessly, at least in terms of mouse and keyboard functions:

  17. I had very bad clock drift in my macOS guest on AMD host, which I tried to control with chrony (a configurable clock sync client and server), but the drift was so severe that even chrony couldn’t fix it without resetting the clock a few times per minute, which caused other issues.

    Turns out it was due to the “+invtsc” CPU flag. It’s not supported on AMD, and seems to be actively harmful. I would suggest removing it from the AMD instructions.

  18. Hello. I passed through my RX460 to Monterey and works beautifully using this guide, thanks so much! Question. How do I control the GPU fan speeds, I assume I will need some kext or something? I tried Macsfancontrol app but it doesnt detect the GPU fan only the temperature. Any ideas?

  19. Don’t know if anyone has experienced this, or even if it a reproducible issue, but I installed 12.1 last night and today the system froze, with screens turned on, but black.

    I have RX580 passthrough.

    1. Tried to upgrade to 12.1 too, system updated and booted but would freeze soon after displaying login screen… (on first reboot I could pass login screen and reach desktop…)… I had to revert to snapshot for now…

  20. Nick, thanks for the guide, have a perfect (almost; no wifi (Intel AX200)) Monterey install with RX580 and USB controllers passed through.
    As I did this as an experiment to see have the performance was against a bare metal install, I only assigned 64G to the hard drive following your guide.
    I’ve resized the drive within Proxmox using ‘qm resize ‘ and the Disk utility see’s the expanded drive but I’m unable to expand the partition into the new space. Any hints on how to do this? I just get an error when I try expanding the Virtue Block Media partition

  21. After successful install and reboot of the VM, the Apple logo appears, then a black screen appears with a mouse cursor and a constant spinning refresh wheel. It never boots. This is the 5th or 6th install. It might be me, but I am fairly sure I am giving up!

  22. I am using a laptop where I installed proxmox and also macos as a VM. I dont hv any graphics card in this laptop. To get a near local experience, can I launch macos desktop directly from proxmox shell, without needing another computer to the vnc from. THANKS.

  23. Hi, I am trying to passthrough a second NVME m.2 disk that I just installed.

    I can see it shows up in ioreg but is otherwise not recognised by macos. Boot disk is Samsung 970 EVO and it works.

    This new one is WD SN750.

    Any ideas? Does it need to be injected into opencore? NVME kext needed?


  24. OK. Give up. Can’t even get to OpenCore. Just get, every time:

    UEFI Interactive Shell v2.2
    EDK II
    UEFI v2.70 (EDK II, 0x00010000)
    Mapping Table
    FS1: …


    Tried lots of permutations of args, etc. Same thing.

    1. Remove the EFI disk on your hardware tab and delete it, then re-add it and this time be sure to un-tick the “pre-enroll keys” tickbox

      1. Thank you!! I tried just removing that arg from the conf file and that didn’t work. Have to do it through the UI and actually delete the disk. Thanks again.

  25. Feature request: It would be nice if you could adjust a few config settings on the OpenCore disk picker page — for example the display dimensions. And not have to find and muck with config.plist.

    Alternatively is there an equivalent of VMWare Tools that you could install on the guest?

  26. Great guide, Nick. Thanks.

    You say not to login to your apple account until you have changed the serial number, but you don’t say which key to change in config.plist. Also, what form should the “new” serial number take?

  27. *I offer this in case it might help others with simple solutions to solving the install “PKDownloadError error 8.” and later the Apple “Cannot connect to server” errors.*

    Nick, I carefully followed your steps to install a Monterey Recovery Installer in Proxmox 7.1-5.
    Installation proceeded but eventually failed with a “PKDownloadError error 8.” dialog. And this repeated for several install attempts. I did also change to the “more-compatible alternative” for the -cpu in the args: line without any difference.

    I then changed the VM’s > Hardware > Network Device (net0) > Bridge Model to VMware vmxnet3. This was what worked for me before and you had recommended for a BigSur install. That change solved the “PKDownloadError error 8” problem.

    Next was getting recognition by Apple. I had changed PlatformInfo by following your steps to revise OpenCore/EFI settings. So new serial number, etc., but unable to connect all components of the Apple account; eg, iCloud “Could not connect to server.”

    I do not have wifi and thought that might be the issue with Apple. But I simply changed that Hardware > Network Device (net0) > Bridge Model back to VirtlO (paravisualized). It worked after a reboot!

    Thanks again Nick for your thoroughly helpful and straightforward guides. They’re appreciated by many.

    If you can tolerate yet one more question: What is the proper command to u(n)mount /Volumes/EFI in the guest Monterey OS after making changes to /Volumes/EFI/EFI/OC/config.plist? I could only do this by killing the processes identified as preventing it in umount or diskutil.

    1. Normally you can just click the eject button in Finder. Since you’re going to be shutting the guest down anyway to use the new EFI you can just do that too.

  28. >>>PLEASE DELETE MY PREVIOUS COMMENT – IT WAS PASTED IN AND APPARENTLY LOST THE PARAGRAPH SPACING<< Hardware > Network Device (net0) > Bridge Model to VMware vmxnet3. This was what worked for me before and you had recommended for a BigSur install. That change solved the “PKDownloadError error 8” problem.

    Next was getting recognition by Apple. I had changed PlatformInfo by following your steps to revise OpenCore/EFI settings. So new serial number, etc., but unable to connect all components of the Apple account; eg, iCloud “Could not connect to server.”

    I do not have wifi and thought that might be the issue with Apple. But I simply changed that Hardware > Network Device (net0) > Bridge Model back to VirtlO (paravisualized). It worked after a reboot!

    Thanks again Nick for your thoroughly helpful and straightforward guides. They’re appreciated by many.

    If you can tolerate yet one more question: What is the proper command to u(n)mount /Volumes/EFI in the guest Monterey OS after making changes to /Volumes/EFI/EFI/OC/config.plist? I could only do this by killing the processes identified as preventing it in umount or diskutil.

  29. Hi Nicholas,

    Great work! I am having trouble installing – after installation going on for 15 minutes or so… it suddenly gave me a error message “An error has occurred during update” – does this mean the baseimage has corrupted? this means I have to redo the beginning steps all over again and try again?

    1. Don’t know, sorry, I have never once seen this error before. Make sure your VM disk isn’t too small.

      1. Thanks.. I tried a lot of things… and ran memtest on my computer and seems one of my ram sticks is considered bad… will try again later tonight… thanks for the great work!!

  30. Thanks Nicholas for the great instructions. Everything is working but the USB Bluetooth is still a little finicky.

    Can you provide any insight into performing USB Mapping (within OSX) when using Proxmox? My usual method of installing a device (USB 1/2/3) to map them in Hackintool doesn’t work as Hackintool shows nothing connected to the usb ports. However, as I’m typing on an Apple keyboard and using a Magic mouse, while transferring photos of the iPhone…they are working.

  31. Trying to upgrade from 12.0.1 to 12.1 and get to preparing at 10 min left, sits for awhile and reboots to an error report. During research I’m told to try in safe mode. How do you get to safe mode under promox 7?

  32. Hello Nick,

    thanks for this work. I had an issue when trying to follow.
    OpenCore just didn’t want to start. After some digging I found out, that OVMF has a secure-Boot-Feature (i´m using Proxmox 7.1-7) that has to be disabled in BIOS-Settings.

    To do this. Press ESC-Key while starting up the machine to get into BIOS-Settings. Or type “exit” when in EFI-Shell.
    Then select “Device-Manager” -> “Secure Boot Configuration” and untick “Attempt Secure Boot”. Confirm the Configuration and restart the machine.

    Have fun!

    1. Yes, this is why during adding the EFI disk to the VM I say to un-tick the “pre-enroll keys” option, which avoids that problem

        1. Try pressing Win/CMD+V (and then releasing those keys) at the OpenCore boot screen before selecting the Recovery option so it boots in Verbose Mode, then you may be able to see some useful error messages.

  33. I’m stuck at the beginning, selecting the recovery image, I get stuck at the Apple Logo, I’m running a Threadripper 1920x / Proxmox 7.1-8, any ideas?

    I’m going to try with a full image next.
    I’ve also tried the 6.0 machine, removing the args… same issue.

    I had succesfully installed BigSur on Proxmox 6.4 on Intel before. Wanted to switch to my beefier Threadripper, more RAM, bigger machine (full ATX vs Shuttle XPC for the intel), so I can get both Winblows and MacOS running on the same machine, with an RTX passthrough for Winblows and an AMD passthrough for my Radeon 570 for Monterey (or Big Sur if I can’t make Monterey work)-

    Thx in advance and thank you for the great tutorials.

      1. That was it (quotes, and for good measure put 8 cores instead of 12, not sure if that helped or not, I can always put 12 later… can I put 24 to emulate hyperthreading?)-

        Thanks a lot, you rock,

        1. Yep, you can do 24 by setting core count to 8 and Sockets to 3 in your Proxmox processor config and then adding this to your args:

          -smp 24,sockets=3,cores=4,threads=2

          If you also have NUMA turned on then your RAM setting needs to be divisible by 3, like 6144MB.

  34. Tried creating a full installer from an M1 Mini… got this error message: Couldn’t mount dmg /Applications/Install macOS (error code 110)/Applications/Install macOS does not appear to be a valid OS installer application.
    make: *** [Monterey-full.dmg] Error 253

    I’ll try from another Mac and see if I have more luck, on my MBA M1 I get the same… it stops at downloading the recovery in both dmg and img, and basesystem in dmg… but no go on the full installer. Any reason why?

    Thx in advance

    1. That would have to be due to a truncated download I think, does it give any indication of that? (I can’t remember if it prints the progress to the screen or not)

      1. I think on one machine it showed a progress bar, I did something else and got the error message I pasted on my message. In the end it doesn’t matter I just made the setup with the Recovery and that worked great. However I’ve tried to passthrough my RX 480 and the moment I start the VM, it immediately stops :(.

        I’ve checked my parameters, iommu for amd, ran the commands to make sure interruptions are supported (wasn’t at first then I changed Bios options and that put interruptions enabled). But no luck on doing the passthrough. I did run the unsafe interrupt command though and I don’t know how to cancel / step back from that command:

        echo “options vfio_iommu_type1 allow_unsafe_interrupts=1” > /etc/modprobe.d/iommu_unsafe_interrupts.conf

        I suppose nano that file and remove the line perhaps… I will try that (sorry I’m a Linux newbie).

        Out of curiosity have you run MacOS on ESXi with passthrough and is it simpler or more complicated than on proxmox? I used to be a Windows sysadmin before burning out and becoming an author, but I did install a few ESXi servers. So far I enjoy proxmox, it’s just that it’s a little less a straightforward than vmware (but there’s a good full featured free option).

        Thx in advance,

        1. Yes you can remove that line with a text editor and then re-run “update-initramfs -k all -u”

          Passthrough won’t be easier on ESXi, given that there are only like 3-4 configs to enter for Proxmox to set this up. The rest is hardware problems that aren’t dodged by running different software.

          Check dmesg or the host text console for errors reported during VM launch. Is this your boot GPU? If so you must supply a clean vBIOS file using the romfile parameter to replace the vBIOS that your host already ruined during host boot. And this may be a fatal situation because most AMD GPUs are affected by the AMD Reset Bug and can only be initialised one single time per power cycle.

          1. I’ll try this thank you, and yes right now it’s the boot GPU but I can move that to my RTX2070, but then will the RTX2070 need also a vBIOS for me to pass it through Windows 10 VM? And on my Shuttle XPC Intel rig, I suppose the Intel integrated one is the main one which is why the passthrough seems to be working without a hitch, though I had to keep the vmware compatible one as well, then just mirror them to work, when only the WX Pro 5100 as a GPU on this proxmox 6.4, the machine won’t boot. Kinda strange too. And in the console of that Big Sur VM I see the end of the apple logo filling bar screen stuck sometimes, but get my full GPU access on the connected monitor. Thanks for all the great advice.

            One last question, where do I get this vBIOS?

            1. Ok so I moved the boot GPU to my RTX, no dice, the VM still dies instantly, most of these messages were in RED:

              [ 82.926722] [drm:amdgpu_pci_remove [amdgpu]] *ERROR* Hotplug removal is not supported
              [ 82.928182] amdgpu 0000:42:00.0: amdgpu: amdgpu: finishing device.
              [ 83.036405] BUG: kernel NULL pointer dereference, address: 0000000000000db9
              [ 83.036419] #PF: supervisor write access in kernel mode
              [ 83.036424] #PF: error_code(0x0002) – not-present page
              [ 83.036438] PGD 0 P4D 0

              Any ideas?
              Thx in advance.

              1. Oh and since Big Sur GPU passthrough on my Intel rig worked with my Radeon Pro WX 5100, should I just try and use that one instead of my RX480 perhaps?

                I’ve also tried your workaround (the one that didn’t work for your Rx570)… same result. In that blog post you mention blacklisting the amd gpu so it’s not loaded at startup, what are the commands to do that?

                Thx in advance

              2. That means that the host amdgpu driver is using the card, which will trash it.

                I don’t have a passthrough guide so please seek elsewhere for more instructions.

  35. Hi Nick,

    I am currently running Windows 11 on my main pc. I have a second harddrive where I want the proxmox to run automatically like dualboot on selection. For that I have a few questions:
    1. Is there a way to make the iso from windows 11 or do I need ubuntu or mac for that?
    2. Which code block do you mean for the osk key?
    3. Is it possible to boot the vm automatically on a harddrive when decided to boot from it like in dual boot?
    4. After making the iso for example from a ubuntu distro can I follow the proxmox config just from my windows 11 pc?
    5. I have a ryzen 5 4600x and a gtx 960, is this enough to run this tutorial?

    Sorry for these questions I am a total beginner in this.

    1. 1. You can probably build that from Ubuntu on WSL2.

      2. The big block of C code labelled Figure 1

      3. Yes, there is an option on the VM to start it on boot

      4. Yes

      5. Yes but your GPU won’t be used

      1. Hi Thanks for the answers 🙂 but to point 5, do we not need graphics card to increase video performance? Or how does all the graphical things work?

        1. Yes you do, but macOS doesn’t support your video card model unless you go all the way back to High Sierra. So you’ll have no graphic acceleration.

  36. followed your instruction and booted up. while trying to install the os it says an estimated time of 3 hours. is that supposed to happen?

    1. Yes that one sounds accurate. If you install using the Recovery installer it has to download macOS from Apple during install (about 16GB) and this download seems to be fairly speed throttled.

  37. Hi Nicholas Sherlock
    I installed Monterey OS in PVE according to your method, but I have encountered some unsolvable problems, come to ask you!
    I use your OC boot file to boot BigSur everything works fine, but when booting Monterey it always restarts repeatedly when the Apple Logo progress bar appears a little bit, I have changed many system images and this is the case, even with the installed BigSur online update. If it restarts, what should I do?

    1. Press cmd/win + V and release it before picking the boot option in OpenCore to boot in Verbose mode, and maybe there’ll be a useful error message.

      Which CPU do you have? Also ensure the core count is set to a power of two.

      1. Thanks for your reply:
        I am using Intel’s E5 2660v2 dual-socket, with 8 cores + 4GB memory allocated to the MAC, I used the method you gave to call up the error code, and save the screenshot of the stuck place in Google’s cloud disk, please help I’ll take a look, thank you!

        Here is the code when it gets stuck

        This is the code that appears when reset:

  38. Hey Nick, what’s up?

    In my Proxmox environment (7.1-8, but ocurring in all 7 versions), in macOS Monterey don’t shutdown correctly, when I press shutdown, the VM are rebooted (sometimes shutdown normally).

    Do you have any idea how to solve it?

    I tested with OC 075, 076 and 077…

  39. Install went fine but booting gets stuck at “AppleKeyStore:11150:233: operation failed (sel: 17 ret: e00002c2, -1, 100000). Google says this is related to kexts? Curious that no one in the comments has had this issue.

      1. First letter was capitalized, same issue as I had last time I followed your guide for Catalina. works now!

        I saw in a different comment you don’t want to make a YT video for various reasons. Do you mind if I do and give you full credit?

    1. Seems unlikely to be the cause, are you passing through an NVMe SSD by PCIe passthrough? Because if not macOS can’t tell anything about the “SSD”.

  40. Hello Nick,
    I have an issue with getting to the install of Monterey. I have passed through the GPU, and it hangs at the “AE_NOT_FOUND, ACPI Error: 1 table load failures” and i cant get to the install. ive followed the reset bug as well as all the proxmox GPU passthrough. If i remove the GPU from the VM, it boot fine. Ive hackentoshed this GPU and CPU set up before without many issues, but wanted to have proxmox as my main. Any help would be great or recommendations.

    System Specs:
    Ryzen 9 5950x 16 core
    AMD RX 6900XT
    64gb DDR4 RAM
    ASUS Prime X570-Pro

  41. Thanks Nick for sharing your work. I run the guide successfully in Proxmox 6 and now Proxmox 7 on an AMD processor. I’ve followed your instructions to spoof an Intel processor in the -cpu argument. I’m now trying to run an Android emulator via Android Studio but I can neither install:
    1. HAXM (for Intel). I assume because the physical hardware is AMD
    2. nor WHPX for AMD because the Hackintosh is fooled into thinking it is Intel.

    Any ideas on how to enable virtualization within the Hackintosh? Note: the XCode iOS Simulator works correctly.

    System Specs:
    ASRock X570 Taichi ATX
    CPU AMD Ryzen 7 3700X 8-Core
    32 GB Ram: Kingston KSM26ED8/16ME-DDR4-16 GB (x2)
    MSI Radeon RX 560 4GT LP OC GPU
    Kernel Version Linux 5.13.19-3-pve
    Virtual Environment 7.1-9

    Thank you!

    1. You can’t. Hypervisor.framework doesn’t support AMD virtualisation, so nothing that uses it works on AMD CPUs

  42. Thanks for these instructions Nick! When trying to upgrade my Big Sur VM it executes the update, but when coming back after rebooting it’s still Big Sur and no sign of Monterey… I’ve tried setting ` csrutil enable –no-internal` like you mentioned, but to no avail. I’m rebooting from the main disk and have upgrade to the latest EFI. Any ideas what could be going wrong?

    1. When you reboot you need to manually pick the new macOS Installer boot entry rather than booting from your main disk to continue installation

        1. Fixed it by selecting “Macintosh HD” to boot from after running the Installer (my install is on “Main”). After the first reboot “Macintosh HD” is gone again, so that’s for some reason how the installer is called.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.