Proxmox VE · OpenCore · macOS 26 Tahoe

macOS Tahoe on Proxmox,
in one command.

Run it as root on the Proxmox host. It checks the machine, picks the best virtual CPU your host can present, downloads the official Apple recovery and hands you a fully configured VM — on any Intel or AMD host, with or without AVX2.

# curl -fsSL https://raw.githubusercontent.com/devfrp/macos-tahoe-proxmox/main/install.sh | bash
00

The whole VM, prepared for you

Building a macOS VM on Proxmox by hand means hunting an OpenCore image, patching a plausible SMBIOS into it, fetching a recovery from Apple, converting it, and guessing which virtual CPU the guest will accept. This script does all of it in one pass — and picks the CPU model from what your host actually supports, so the same command works on an AVX2 Xeon and on an old AMD box.

01

What the script does

Five steps, on the Proxmox host, as root.

1 · checksVerifies Proxmox VE and VT-x/AMD-V, then picks the best virtual CPU the host can present — works on any Intel or AMD CPU, with or without AVX2
2 · kvmConfigures KVM: ignore_msrs=1, made persistent
3 · opencoreDownloads the OpenCore ISO, generates a fresh random SMBIOS (serial, MLB, UUID) matching the chosen macOS version and patches it in — on non-AVX2 hosts it also injects CryptexFixup so Tahoe still installs
4 · recoveryDownloads the official macOS recovery from Apple's servers, through macrecovery
5 · vmConverts it and creates the VM: q35, OVMF, VirtIO disk and network
02

Options

Run it in a terminal and it asks for the essentials — macOS version, storage, RAM, disk size — with Enter accepting the defaults. Every setting is also an environment variable, which skips its question; with no terminal the defaults apply, so automation stays non-interactive.

VariableDefaultWhat it sets
VMIDnext free idProxmox VM id
VM_NAMEmacos-tahoeVM name
CORES4CPU cores
RAM8192RAM in MiB
DISK80Main disk size in GiB
STORAGElocal-lvmStorage for the VM disks
ISO_STORAGElocalStorage for the ISOs
BRIDGEvmbr0Network bridge
START1Start the VM at the end (0 to disable)
CPU_MODELautoVirtual CPU model presented to macOS — auto-picked from host capabilities
VERSIONtahoemacOS version: tahoe, sequoia, sonoma, ventura
INTERACTIVE10 disables the terminal questions
03

Install

Proxmox VE 7.2 or later, a 64-bit Intel/AMD host with virtualization enabled and at least SSE4.2 (AVX2 recommended), ~5 GB free on the ISO storage plus the VM disk, and internet access on the host and in the VM.

One line

# as root on the Proxmox host
curl -fsSL https://raw.githubusercontent.com/devfrp/macos-tahoe-proxmox/main/install.sh | bash

# with settings, no questions asked
curl -fsSL …/install.sh | \
  VMID=990 CORES=8 RAM=16384 DISK=120 STORAGE=local-zfs bash

Uninstall

qm destroy <VMID>
rm -rf /root/macos-tahoe-installer

After the script

# 1. the VM starts on its own (unless START=0)
# 2. open the console, let OpenCore boot
#    macOS Base System
# 3. Disk Utility → erase the large VirtIO disk
#    (APFS, GUID partition map)
# 4. quit, then Install macOS Tahoe
#    (30-60 min, several reboots — always let
#     OpenCore pick the default entry)
# 5. on the desktop, detach the recovery disk:
qm set <VMID> --delete sata0

Keep the OpenCore boot disk (sata1) attached — the VM boots through it.

04

Make the VM standalone

Once macOS is installed, this copies OpenCore to the VM's own EFI partition, detaches the installer media and reboots the VM from its disk — run it on the Proxmox host.

One command

curl -fsSL https://raw.githubusercontent.com/devfrp/macos-tahoe-proxmox/main/install.sh \
  | bash -s -- finalize <VMID>

Manual alternative

# from inside macOS
sudo diskutil mount disk0s1
cp -R /Volumes/LongQT-OpenCore/EFI_RELEASE/EFI /Volumes/EFI/

# then on the host
qm set <VMID> --delete ide2 --delete sata0 --delete sata1
qm set <VMID> --boot order=virtio0
04.1

iCloud / iMessage (optional)

The script already generates a random SMBIOS per VM — enough for the installer and Software Update. Apple services additionally need a hidden hypervisor: add VMHide to EFI/OC/Kexts and to config.plist, with vmhState=enabled in boot-args, then reboot the VM before signing in. Check the generated serial on Apple's coverage page first — signing in to Apple services from a VM may violate Apple's terms, and a serial that happens to resemble a real device should be regenerated with GenSMBIOS.

05

Troubleshooting

The five things that actually go wrong.

  • VIRTUAL CPU
    Auto-selected · a generic Intel virtual CPU matching what the host can provide — Haswell-noTSX-IBRS with AVX2, SandyBridge-IBRS with AVX only, Nehalem-IBRS with SSE4.2. Force one with CPU_MODEL=… (e.g. CPU_MODEL=host).
  • UPDATE ERROR
    "An error occurred preparing the software update" · the stock OpenCore ISO ships a placeholder SMBIOS (iMac19,1, all-zero serial) that Apple's installer rejects. The script now always generates a real one — delete the cached /root/macos-tahoe-installer/opencore-boot-<version>.img and re-run to regenerate it if you built the VM before this fix.
  • NON-AVX2
    Host without AVX2 · the VM boots through a small OpenCore boot disk (sata1) carrying CryptexFixup — no ISO rebuild involved, and finalize folds it into the VM's own EFI partition. Delta updates are not available; update via full installers.
  • BOOT LOOP
    Instant reset · check that cat /sys/module/kvm/parameters/ignore_msrs returns Y — reboot the host after the first install if needed.
  • CONSOLE
    No mouse/keyboard, slow display · use the noVNC console; USB passthrough can be added afterwards. A slow display is normal — the VM has no GPU acceleration. GPU passthrough is possible but out of scope here.