Proxmox VE · OpenCore · macOS 26 Tahoe

macOS Tahoe sur Proxmox,
en une commande.

À lancer en root sur l'hôte Proxmox. Le script vérifie la machine, choisit le meilleur CPU virtuel que ton hôte peut présenter, télécharge la recovery officielle Apple et te rend une VM entièrement configurée — sur n'importe quel hôte Intel ou AMD, avec ou sans AVX2.

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

Toute la VM, préparée pour toi

Monter une VM macOS sur Proxmox à la main, c'est chercher une image OpenCore, y greffer un SMBIOS crédible, récupérer une recovery chez Apple, la convertir, et deviner quel CPU virtuel l'invité acceptera. Ce script fait tout d'une traite — et choisit le modèle de CPU d'après ce que ton hôte sait réellement fournir, si bien que la même commande marche sur un Xeon AVX2 comme sur une vieille machine AMD.

01

Ce que fait le script

Cinq étapes, sur l'hôte Proxmox, en root.

1 · contrôlesVérifie Proxmox VE et VT-x/AMD-V, puis choisit le meilleur CPU virtuel que l'hôte peut présenter — fonctionne sur tout CPU Intel ou AMD, avec ou sans AVX2
2 · kvmConfigure KVM : ignore_msrs=1, rendu persistant
3 · opencoreTélécharge l'ISO OpenCore, génère un SMBIOS aléatoire neuf (numéro de série, MLB, UUID) correspondant à la version de macOS choisie et l'y injecte — sur les hôtes sans AVX2 il ajoute aussi CryptexFixup pour que Tahoe s'installe quand même
4 · recoveryTélécharge la recovery macOS officielle depuis les serveurs Apple, via macrecovery
5 · vmLa convertit et crée la VM : q35, OVMF, disque et réseau VirtIO
02

Options

Lancé dans un terminal, il demande l'essentiel — version de macOS, stockage, RAM, taille du disque — Entrée acceptant les valeurs par défaut. Chaque réglage est aussi une variable d'environnement, qui saute la question correspondante ; sans terminal, les valeurs par défaut s'appliquent, donc l'automatisation reste non interactive.

VariableDéfautCe qu'elle règle
VMIDpremier id libreIdentifiant de la VM Proxmox
VM_NAMEmacos-tahoeNom de la VM
CORES4Cœurs CPU
RAM8192RAM en Mio
DISK80Taille du disque principal en Gio
STORAGElocal-lvmStockage des disques de la VM
ISO_STORAGElocalStockage des ISO
BRIDGEvmbr0Bridge réseau
START1Démarrer la VM à la fin (0 pour désactiver)
CPU_MODELautoModèle de CPU virtuel présenté à macOS — choisi automatiquement selon l'hôte
VERSIONtahoeVersion de macOS : tahoe, sequoia, sonoma, ventura
INTERACTIVE10 désactive les questions dans le terminal
03

Installer

Proxmox VE 7.2 ou plus récent, un hôte Intel/AMD 64 bits avec la virtualisation activée et au moins SSE4.2 (AVX2 recommandé), ~5 Go libres sur le stockage des ISO plus le disque de la VM, et un accès Internet sur l'hôte et dans la VM.

En une ligne

# en root sur l'hôte Proxmox
curl -fsSL https://raw.githubusercontent.com/devfrp/macos-tahoe-proxmox/main/install.sh | bash

# avec des réglages, sans aucune question
curl -fsSL …/install.sh | \
  VMID=990 CORES=8 RAM=16384 DISK=120 STORAGE=local-zfs bash

Désinstaller

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

Après le script

# 1. la VM démarre seule (sauf START=0)
# 2. ouvrir la console, laisser OpenCore booter
#    macOS Base System
# 3. Utilitaire de disque → effacer le gros
#    disque VirtIO (APFS, table GUID)
# 4. quitter, puis Installer macOS Tahoe
#    (30-60 min, plusieurs redémarrages —
#     toujours laisser OpenCore choisir l'entrée
#     par défaut)
# 5. sur le bureau, détacher le disque recovery :
qm set <VMID> --delete sata0

Garde le disque de boot OpenCore (sata1) attaché — c'est par lui que la VM démarre.

04

Rendre la VM autonome

Une fois macOS installé, ceci copie OpenCore sur la partition EFI de la VM, détache les supports d'installation et redémarre la VM depuis son disque — à lancer sur l'hôte Proxmox.

Une commande

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

Alternative manuelle

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

# puis sur l'hôte
qm set <VMID> --delete ide2 --delete sata0 --delete sata1
qm set <VMID> --boot order=virtio0
04.1

iCloud / iMessage (facultatif)

Le script génère déjà un SMBIOS aléatoire par VM — suffisant pour l'installeur et les mises à jour logicielles. Les services Apple exigent en plus un hyperviseur masqué : ajoute VMHide dans EFI/OC/Kexts et dans config.plist, avec vmhState=enabled dans les boot-args, puis redémarre la VM avant de te connecter. Vérifie d'abord le numéro de série généré sur la page de couverture Apple — se connecter aux services Apple depuis une VM peut enfreindre les conditions d'Apple, et un numéro qui ressemblerait à celui d'un vrai appareil doit être régénéré avec GenSMBIOS.

05

Dépannage

Les cinq choses qui coincent vraiment.

  • CPU VIRTUEL
    Choisi automatiquement · un CPU virtuel Intel générique correspondant à ce que l'hôte peut fournir — Haswell-noTSX-IBRS avec AVX2, SandyBridge-IBRS avec AVX seul, Nehalem-IBRS avec SSE4.2. On peut en forcer un avec CPU_MODEL=… (ex. CPU_MODEL=host).
  • MISE À JOUR
    « An error occurred preparing the software update » · l'ISO OpenCore d'origine embarque un SMBIOS bouche-trou (iMac19,1, série à zéro) que l'installeur Apple refuse. Le script en génère désormais toujours un vrai — supprime le cache /root/macos-tahoe-installer/opencore-boot-<version>.img et relance pour le régénérer si la VM a été créée avant ce correctif.
  • SANS AVX2
    Hôte sans AVX2 · la VM démarre par un petit disque de boot OpenCore (sata1) porteur de CryptexFixup — aucune reconstruction d'ISO, et finalize le replie dans la partition EFI de la VM. Les mises à jour delta ne sont pas disponibles ; mettre à jour via les installeurs complets.
  • BOUCLE DE BOOT
    Redémarrage immédiat · vérifie que cat /sys/module/kvm/parameters/ignore_msrs renvoie Y — redémarre l'hôte après la première installation si besoin.
  • CONSOLE
    Pas de souris/clavier, affichage lent · utilise la console noVNC ; le passthrough USB peut s'ajouter ensuite. Un affichage lent est normal — la VM n'a pas d'accélération GPU. Le passthrough GPU est possible mais hors sujet ici.