Run macOS Sequoia on Proxmox VE with GPU Passthrough
Learn to run macOS on Proxmox VE with a prebuilt OpenCore ISO and GPU passthrough. Get an accelerated macOS Sequoia guest booted and usable in an afternoon.

On this page
Running a macOS virtual machine on Proxmox VE used to mean a nightmare of kext patches and boot flags, but a dead-simple path now exists: a prebuilt OpenCore ISO plus GPU passthrough gets you an accelerated macOS guest in well under an hour. Follow this walkthrough and you'll have macOS Sequoia (or Ventura) booted and usable on your homelab node by the end of the afternoon.
Key Takeaways
- Prebuilt ISOs win: An OpenCore-based macOS ISO ships with the kexts and config preloaded, so you skip most of the manual patching.
- CPU flags are the make-or-break: Adding
tsc,vmxto akvm64guest is what actually gets macOS past the boot loop. - GPU passthrough needs host work first: IOMMU has to be enabled in the kernel before the VM can claim the GPU.
- Passthrough is exclusive: Once the GPU belongs to the VM, the host display on that card is gone.
- VirtIO still helps: Point the disk and network at VirtIO to reclaim a chunk of the performance you paid for.
What You'll Need Before You Start
You don't need a Mac to build a Mac. Here's the minimum:
- A Proxmox VE node (8.x) with a CPU that supports IOMMU (Intel VT-d or AMD-Vi)
- A spare GPU or iGPU for passthrough (optional, but this is what gives you real acceleration)
- A prebuilt OpenCore macOS ISO (the hackintosh4me community ISOs cover Catalina through Sequoia, built on OpenCore 1.0)
- A blank target disk of at least 60 GB for the macOS install
- A console connection, which the built-in web console handles fine
How to Enable IOMMU and GPU Passthrough on the Host
GPU passthrough is a host-level operation, so you configure it before the VM even exists.
First, enable IOMMU in the BIOS. On AMD that's "IOMMU" or "AMD Vi"; on Intel it's "VT-d".
Then tell the kernel to use it. Edit /etc/default/grub and add the right flag for your vendor:
# AMD systems
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
# Intel systems
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
Apply the changes and load the VFIO drivers so the IOMMU can remap devices:
echo "vfio" >> /etc/modules
echo "vfio_pci" >> /etc/modules
echo "vfio_iommu_type1" >> /etc/modules
update-initramfs -u -k all
update-grub
Reboot the node, then confirm IOMMU is actually live:
dmesg | grep -i iommu
You should see lines like AMD-Vi: Interrupt remapping or intel-viommu initialized. If that output is empty, the kernel parameters didn't take and the passthrough will fail much later, which wastes a lot of time.
Next, find the GPU you want to hand over:
lspci | grep -E 'VGA|3D'
Say the Mac's GPU shows up as 01:00.0. That address is what you'll reference when you attach it to the VM.
How to Create the macOS VM
Now build the guest. The CPU setting is the single most important choice in the whole process.
qm create 500 --name macos --memory 8192 --cores 4 --cpu kvm64 --numa 1 --scsihw virtio-scsi-single
Why kvm64 and not host? macOS needs the tsc timestamp flag exposed to the guest, and the documented way to force that flag is --cpuflags, which Proxmox only honors with the kvm64 CPU type. Using host is faster in theory, but it won't accept the flags you need, which is exactly why so many first-time installs boot-loop forever.
Force the flags:
qm set 500 --cpuflags tsc,vmx
vmx exposes the Intel virtualization extensions to the guest, which some macOS kernels check for before they'll boot.
Import the OpenCore ISO and attach it as the boot disk:
qm importdisk 500 OpenCore-Sequoia.iso local-zfs --format qcow2
qm set 500 --scsi0 local-zfs:500/vm-500-disk-0.qcow2
Then create the blank target disk for the macOS install and attach it:
qm disk add 500 scsi1 --size 60G
Add the EFI disk and set the boot order so the VM opens OpenCore first:
qm set 500 --efidisk0 local-zfs:128,format=raw,efitype=4m
qm set 500 --boot c
qm set 500 --bootdisk scsi0
Give yourself a console so you can watch the OpenCore menu actually appear:
qm set 500 --vnc 0
The 0 tells Proxmox to pick an unused VNC port automatically, and you'll reach it from the web console under the VM's Console tab.
Finally, attach the GPU:
qm set 500 --hostpci0 01:00.0,pcie=1,x-vga=1
qm set 500 --hostpci1 01:00.1,pcie=1
The second command passes the GPU's HDMI/DisplayPort audio function, which macOS needs for sound to work at all.
Choosing a Prebuilt OpenCore Image vs Building Your Own
You can grab a community-made ISO or assemble your own OpenCore build from scratch. Here's the honest tradeoff:
| Feature | Prebuilt OpenCore ISO | Build-Your-Own OpenCore |
|---|---|---|
| Setup time | ~15 minutes | 1–2 hours |
| GPU acceleration | Pre-configured and working | Manual, easy to break |
| macOS version | One per ISO | Any version you add |
| Maintenance | Download new ISOs | Edit your own config.plist |
| Best for | Beginners who want it working | Tweak enthusiasts |
The prebuilt route is the right call for most homelabbers. Projects like hackintosh4me ship ISOs with the correct kexts, SMBIOS, and boot arguments already baked in, so the GPU and network come out of the box working. You'll still want to give the disk and network a VirtIO treatment to match the principle in our Windows VM performance tuning guide, since swapping emulated devices for VirtIO is one of the biggest raw-speed wins on any KVM guest.
Booting and Installing macOS
Start the VM and open the console:
qm start 500
You'll see the OpenCore logo and a small menu. Navigate with the keyboard arrows, pick your installer volume, and watch it boot. The first boot is slow — budget roughly 20 minutes for the kernel to warm up and the installer to appear on screen.
Once in the installer, open Disk Utility and format your target volume as APFS. If you're installing on a real disk, use the Mac HDD/SSD GUID layout; for the virtual disk, pick the APFS option. Then run the install and let it finish.
Here's the gotcha that trips up nearly everyone on the first try: if the VM hangs on a black screen with just a blinking cursor, it's almost always the missing tsc flag. Double-check with qm get 500 | grep cpuflags that it shows tsc,vmx, fix the flag if needed, and reboot.
After the install completes, shut the VM down. The OpenCore ISO stays attached as the boot disk, so you don't need to detach anything — just power it back on and it'll boot straight into the installed system.
Performance Tuning and Final Notes
Once macOS is up and running, a few tunings pay off:
- VirtIO disk and network: If you haven't already, move the disk and NIC to VirtIO. This mirrors the advice in our Windows VM performance tuning guide — emulated devices like the IDE controller or RTL8139 NIC are simple but slow, while VirtIO gets you close to bare-metal speed.
- Storage choice: If your VM lives on a pool you're still sizing, the guidance in our ZFS on Proxmox best-practices guide applies just as well to a macOS guest as it does to any other VM. A ZFS dataset with compression on can shave space on the large system files without much CPU cost.
- Networking: Isolate the guest's traffic with a tagged VLAN so the Hackintosh doesn't share a broadcast domain with your other lab gear. Our VLAN tagging guide covers the bridges and firewall rules to set that up.
One honest tradeoff to keep in mind: GPU passthrough gives you real acceleration, but it's exclusive. The moment you pass the GPU to the VM, that card no longer serves the host. Plan your hardware so the host has a separate display output, or you'll lose the console on that node entirely.
Also consider the CPU: once you're comfortable, you can experiment with --cpu host on a clone of this VM, but verify the tsc flag still works first or you'll be back to boot-looping from square one.
Conclusion
Running macOS on Proxmox VE is no longer a months-long grind — a prebuilt OpenCore ISO, a couple of CPU flags, and GPU passthrough get you an accelerated guest in a single afternoon. Your next step is to enable IOMMU on the host and create the VM, then come back and tune the disk and network with VirtIO once the system is stable.


