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
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.
What the script does
Five steps, on the Proxmox host, as root.
ignore_msrs=1, made persistentOptions
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.
| Variable | Default | What it sets |
|---|---|---|
| VMID | next free id | Proxmox VM id |
| VM_NAME | macos-tahoe | VM name |
| CORES | 4 | CPU cores |
| RAM | 8192 | RAM in MiB |
| DISK | 80 | Main disk size in GiB |
| STORAGE | local-lvm | Storage for the VM disks |
| ISO_STORAGE | local | Storage for the ISOs |
| BRIDGE | vmbr0 | Network bridge |
| START | 1 | Start the VM at the end (0 to disable) |
| CPU_MODEL | auto | Virtual CPU model presented to macOS — auto-picked from host capabilities |
| VERSION | tahoe | macOS version: tahoe, sequoia, sonoma, ventura |
| INTERACTIVE | 1 | 0 disables the terminal questions |
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.
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
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.
Troubleshooting
The five things that actually go wrong.
- VIRTUAL CPUAuto-selected · a generic Intel virtual CPU matching what the host can provide —
Haswell-noTSX-IBRSwith AVX2,SandyBridge-IBRSwith AVX only,Nehalem-IBRSwith SSE4.2. Force one withCPU_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>.imgand re-run to regenerate it if you built the VM before this fix. - NON-AVX2Host without AVX2 · the VM boots through a small OpenCore boot disk (
sata1) carrying CryptexFixup — no ISO rebuild involved, andfinalizefolds it into the VM's own EFI partition. Delta updates are not available; update via full installers. - BOOT LOOPInstant reset · check that
cat /sys/module/kvm/parameters/ignore_msrsreturnsY— reboot the host after the first install if needed. - CONSOLENo 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.