Howto: VMware ESXi Hackintosh Host mit Passthrough RX480 und Eingabegeräte

  • Ich kann vermelden, dass ich die Monterey VM in ESXi 7.0U3g-20328353 nun vollkommen lauffähig eingerichtet bekommen habe. (Siehe Bilder 1, 5, 10, 10.5, 11, 12, 13, 14)

    • RX480 passthrough via HDMI wird nativ erkannt und ist voll Metal unterstützt. Es hängt mit nativer Auflösung und 60Hz an einem 34" 21:9 Monitor.
    • VMware default VGA device habe ich im VMKernel lahm gelegt, die dann zwar die herkömmliche Bedienung der DCUI deaktiviert. Das ist aber nach initialer Einrichtung eh hinfällig, und wenn absolut notwendig schnell wieder Rückgängig zu machen.
    • Zwei RX480 passthrough configuration flags, insb. das für den path des VBIOS dumps habe ich der vmx hinzugefügt.
    • RX480 HDMI sound passthrough funktioniert auch problemlos.
    • Apple Keyboard (USB) und MX Master 3 Maus (USB Receiver) habe ich ebenso via passthrough über die vendor und device ID quirks in der boot.cfg, vmware config file und in der vmx eingetragen und der VM Konfiguration lauffähig hinzugefügt (btw. beide input devices hängen gar an einem manuellen USB Hub).
    • USB 3.1 passthrough funktioniert auch anstandslos.
    • Snapshots funktionieren entgegen so mancher Hinweise mit Passthrough VMs einwandfrei

    Das Ganze ohne irgendwelche OC, extra kext oder sonstige OSX verarztungen. Vorhin habe ich auch das letzt aktuelle Overlay auf 12.6.2 drüber gebügelt. Die VM habe ich mir so eingerichtet dass ich sie direkt am Monitor über die Infrastruktur nutzen kann, oder via ARD. ESXi steuere ich via WebUI, oder zentralisiert über das vCenter.


    Jetzt könnte man noch darüber nachdenken den Hypervisor anzuweisen die OSX VM nach Systemstart -> Hypervisor wird initialisiert -> VM wird initialisiert -> passthrough ist aktiv - automagisch starten zu lassen, um dem Nutzer den Eindruck einer physischen Workstation mit single major release zu vermitteln.

    Was in den layern drum herum läuft, bekäme derjenige nicht mit. Im Prinzip wäre dass das wie es der Hackintosh klassisch vermittelte. Das ist ist alles in der ESXi bzw. VM Verwaltung einfach einzurichten.

    Man müsse sich nur die administrative Umsetzung durch den Kopf gehen lassen wie der Hypervisor reagiert, würde der Nutzer die OSX VM ausschalten und erwarten, dass die Workstation (eigentlich Host) sich ebenso wie ein fat-client verhält und sich ebenso ausschaltet.

    Da der Host vor dem Herunterfahren in den Wartungsmodus geschaltet werden sollte, müsste das per script geregelt werden (wenn man das will).


    Im Prinzip sind die Schritte schnell und einfach zu erledigen.

    (wer kein Passthrough anwenden will ist schon nach Punkt 7 fertig)

    1. ESXi installieren und grundlegend einrichten (getestet habe ich dies mit 7.0U3g-20328353 und 8.0-20513097. Bilder zeigen 7.0U3g).
    2. Passenden ESXi unlocker für die ESXi Version besorgen und anwenden (frei Verfügbar in David Parsons GitHub repository https://github.com/DrDonk/esxi-unlocker).
    3. Gezogenes OSX Major release in ISO konvertieren (hier eine nette Anleitung für Monterey, gilt aber auch modeliert für Ventura https://nishtahir.com/how-to-create-a-macos-iso).
    4. VMware Storage einrichten.
    5. VM erstellen und grundlegend einrichten. Nicht vergessen den NIC der VM als Adaptertyp mit VMXNET 3 zu versehen.
    6. OSX Image ausrollen und grundlegend einrichten, und aktuelle VMware Tools für OSX manuell ziehen, und unter OSX installieren.
    7. ARD übers LAN auf der VM aktivieren.
    8. Ich empfehle präventiv über Verwalten -> System -> Erweiterte Einstellungen über die Suche pcie zu bemühen und den Schlüssel VMkernel.Boot.disableACSCheck auf true zu setzen um die PCIe Funktionsprüfung bei Systemstart außer Kraft zu setzen. (siehe Bild 2).
    9. VMKernel VGA Treiber via ESXCLI command lahmlegen, damit die passthrough GPU devices nicht nach jedem Neustart wieder manuell aktiviert werden müssen. Via SSH auf dem Host folgende Syntax: esxcli system settings kernel set -s vga -v FALSE (Vorsicht, ab dem Punkt quittiert die DCUI mit einem black screen s.o.) -> Neustart.
    10. Überprüfen ob in der Hypervisor Geräte Verwaltung die gewünschten passthrough Geräte aktiv sind, falls nicht manuell setzen -> Neustart (siehe Bild 3).
    11. In der VM Konfiguration die PCIe passthrough GPU als PCIe device hinzufügen. Nicht die dynamische PCIe Variante nutzen. Dies hat zumindest direkt über den Hypervisor nicht funktioniert. (siehe Bild 4).
    12. **ANMERKUNG: SIEHE UNTEN** svga.present in der vmx auf FALSE setzen (Vorsicht, ab hier funktioniert die VM Webkonsole nicht mehr. Ist aber auch nicht wichtig da ARD aktiv ist, und zusätzlich passthrough eingerichtet wird).
    13. Passenden VBIOS dump besorgen oder eigenen auslesen (hier gibts passende, aber genau auf die Spezifikation achten. Beispiel hier: https://www.techpowerup.com/vg…ercolor-rx480-8192-160923).
    14. VBIOS dump am besten direkt ohne großartige Verzeichnis Verschachtelungen auf dem VM Storage ablegen.
    15. Neuen Parameter pciPassthru0.opromEnabled in der vmx auf TRUE setzen (siehe Bild 9)
    16. Neuen Parameter pciPassthru0.filename in der vmx mit dem richtigen Pfad zum VBIOS dump auf dem VM Storage setzen. Beispiel: ../Powercolor.RX480.8192.160923.rom (siehe Bild 9).
    17. VM Starten, PCIe passthrough sollte nun funktionieren nachdem der Monitor auf den richtigen Port gesetzt wurde. Ich will es nur erwähnen, ich habe gelesen dass PCIe GPU passthrough angeblich nur via HDMI und nicht via DP möglich ist. Ich kann das aktuell nicht überprüfen. HDMI funktioniert bei mir mit einem 7m Kabel.
    18. Ggf. weitere PCIe passthrough Geräte wie beispeilsweise HDMI sound oder USB 3.1 (falls vorhanden) in der VM Konfiguration als PCIe device hinzufügen. Welche Geräte vom Gesamtsystem überhaupt passthrough fähig und unterstützt sind, sieht man in der ESXi Geräte Verwaltung. (siehe Bild 3).

    Das wärs eigentlich. Wer jetzt noch gewisse HID USB Geräte wie Maus und Tastatur (bei mir Apple USB Kabel und Logitech MX Master 3 USB Receiver) via passthrough durschleifen will macht hier weiter....

    • Via SSH auf den Hypervisor einloggen und mittels lsusb -v | grep -E '(^Bus|HID)' die vendor und device ID für die gewünschten HID passthrough USB Geräte ermitteln. Bei der Lesart sind die Werte nach der ID entscheidend (vendorID:deviceID). (siehe Bild 6).

    Beispiel:

    Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub

    • Wichtig: im folgenden bekommen die Werte ein 0x vorgeschoben. Z.B. 0xXXXX = vendorId und 0xYYYY = deviceId.
    • /etc/vmware/config mit vi konfigurieren und die eigenen ermittelte Werte nach folgenden Schema eintragen und speichern... (siehe Bild 8).

    Beispiel:

    usb.quirks.device0 = "0x05ac:0x0250 allow"

    usb.quirks.device1 = "0x046d:0xc52b allow"

    • Nun muss dem VMKernel mitgeteilt werden nicht ständig die USB Eingabegeräte für sich zu proklamieren. Dazu wird ein vi auf /bootbank/boot.cfg gemacht und die kernelopt Zeile anvisiert. (siehe Bild 7).

    Beispiel:

    kernelopt=autoPartition=FALSE


    Dort wird direkt dahinter mit einem space mit der eigenen ermittelten vendor und device ID folgende Lesart hinterlegt vendorID:deviceID:minRevision:maxRevision:quirkName


    Beispiel für ein Gerät:

    CONFIG./USB/quirks=0x05ac:0x0250:0x0000:0xffff:UQ_KBD_IGNORE


    Beispiel für zwei Geräte:

    CONFIG./USB/quirks=0x05ac:0x0250:0x0000:0xffff:UQ_KBD_IGNORE:0x046d:0xc52b:0x0000:0xffff:UQ_KBD_IGNORE


    Beispiel der ganzen kernelopt Zeile anhand zwei Geräte:

    kernelopt=autoPartition=FALSE CONFIG./USB/quirks=0x05ac:0x0250:0x0000:0xffff:UQ_KBD_IGNORE:0x046d:0xc52b:0x0000:0xffff:UQ_KBD_IGNORE

    • Der VM muss das passthrough der USB HID Geräte ebenso anhand der vendor und device ID mitgeteilt werden. Dies kann via ESXi WebUI in der erweiterten Konfiguration der VM, oder shell gemacht werden. Hier können die Werte wie zuvor in der /etc/vmware/config eingetragen übernommen werden. Die vmx findet man in der shell unter /vmfs/volumes/VM Storage (share)/..... (siehe Bild 9 und **ANMERKUNG** unten).

    Beispiel Auszug der vmx mit den neu eingetragenen Werte in der shell:

    usb.generic.allowHID = "TRUE"

    usb.quirks.device0 = "0x05ac:0x0250 allow"

    usb.quirks.device1 = "0x046d:0xc52b allow"

    • Hypervisor Neustart
    • Zuletzt muss der VM Konfiguration noch die neuen USB HID Geräte in der ESXi WebUI hinzugefügt werden. (siehe Bild 4).

    Danach ist alles erledigt und sollte den ganz oben genannten Stand mit allen PCIe + USB HID passthrough Geräte entsprechen.


    **ANMERKUNG**

    Ab Punkt 11 erwähne ich stets die vmx. Damit ist u.a. die Konfiguration der VM gemeint. Es gibt prinzipiell zwei Vorgehensweisen diese zu editieren. Über die ESXi WebUI in der GUI -> VM -> bearbeiten -> VM Optionen -> Erweitert -> Konfigurationsparameter -> Konfiguration bearbeiten.

    Oder in der shell im Verzeichnis der VM selber /vmfs/volumes/VM Storage (share)/...../ .... .vmx

    Wichtig hierbei sind zwei Dinge. Egal ob in der GUI oder in der shell -> es sollte penibel auf die Syntax geachtet werden. Ein space zu viel, ein Schreibfehler ist schnell gemacht, man sieht den Wald vor lauter Bäumen nicht - es funktioniert nicht, oder die VM startet nicht oder verhält sich komisch. Auch sollte klar sein, dass wie die Parameter eingetragen werden sich von der GUI zur shell und anders herum, unterscheiden. Dass obwohl sie beide in der vmx landen.

    Es gibt hier nicht "den richtigen Weg". Je nach situation ist mal der Eine, oder der Andere Weg besser.


    Beispiel mit selben Parameter...


    über die WebUI:

    pciPassthru0.opromEnabled TRUE

    pciPassthru0.filename ../Powercolor.RX480.8192.160923.rom


    über die shell in der .vmx:

    pciPassthru0.opromEnabled = "TRUE"

    pciPassthru0.filename = "../Powercolor.RX480.8192.160923.rom"


    Ich hoffe das hilft jemanden weiter. Und immer schön den Hypervisor in den Wartungsmodus setzen bevor Neu gestartet oder heruntergefahren wird! :)


    Bilder zum HowTo hängen anbei.

  • Das HowTo richtet sich in erster Linie an diejenigen die zumindest grundlegende Erfahrungen mit Typ 1 Hypervisor haben.

    Ich hoffe dass derjenige der sich dafür interessiert die Dimension erkennt die es mit der Vorgehensweise eröffnet.

    Weitere Optimierungen oder Änderungen stehen ja jedem in der Entwicklung der Sache frei.


    Bottom Line:

    Das mittlerweile 5 Jahre alte Hackintosh System, nun Hypervisor Host basiert auf folgenden:

    • GA-Z170X-Gaming 3
    • Intel Skylake i7 4GHz 6700K
    • 32GB RAM
    • PowerColor Red Devil RX480 8GB VRAM
    • diverser SSD und HDD Storage

    Zuletzt wurde noch für 9€ und für die ESXi 7 und 8 Kompatibilität ein PCIe I210-T1 GbE NIC gekauft. Der on board NIC wurde disabled.


    Grundsätzlich empfehle ich den VMware Compability chart zu bemühen: https://www.vmware.com/resources/compatibility/search.php


    Das damalige System wurde angelehnt an einen iMac 17,1 aufgebaut und funktionierte auf herkömmlicher fat-client Hackintosh Art von Sierra bis Mojave wie ich es vor ESXi verwendet habe größtenteils out of the box.

    Da es dass auch jetzt tut werde ich die OSX VM mit den nativen passthrough Geräte weiterhin wie gewohnt als NLE Workstation und Foto editing Box produktiv nutzen. Das System ist keine Spielwiese. :)

  • *** VENTURA UPDATE ***


    Auch die neue Ventura VM läuft, wie zuvor die Monterey VM samt allen passthrough Geräte anstandslos. GPU mit Metal Unterstützung, USB 3.1, HDMI Audio, Maus + Keyboard passthrough alles out of the Box.

    An OSX wurde wie immer nach der Installation nichts verändert. Und das gar mit obsolete Skylake Architektur, dank dem Hypervisor layer, wie immer ohne irgend etwas wie kexts, OC oder sonstwas hinzugefügt zu haben.

    Die Prozedur war dieselbe wie bei Monterey.

    Bilder als Proof anbei.

  • eldxmgw


    Mit welcher Lizenz arbeitest Du? Free oder diesem Teil

    Data Center Virtualization & Cloud Infrastructure

    VMware vSphere Essentials Kit Term


    Price: $268.00 ?


    Ich habe nur Lizenzen für Fusion for Mac und VMWare Würgstation ansonsten setze ich ProxMox ein.

  • Mein Infrastruktur Cluster in Sinne seiner Hosts ist was das vSphere Paket für ESXi angeht vSphere 7 Enterprise Plus mit Add-on für Kubernetes lizensiert.

    Für den Vorgang mit dem System wie unter #2 habe ich dieselbe genutzt.


    ESXi hat jedoch eine 60 day full evaluation period time. Da ist erstmal keine Lizenz notwendig.

    Soweit ich mich erinnere, und nicht komplett falsch liege, ist die "free Variante" mit keinem wirklichen Hindernis versehen, die das o.g. irgendwo hemmen würde.

    Gut max. 8vCPUs in der free Variante, aber ist das wirklich ein Limit? :)

    Alles andere in Gegensatz zu den paid Varianten ist für die meisten user und das Vorhaben eh unrelevant, da der Fokus da auf Infrastrukturelle Angelegenheiten liegt.


    Evtl. hilft die Aufstellung ein wenig weiter: https://www.ubackup.com/enterp…sxi-free-limitations.html