Meine beiden Proxmox-Instanzen laufen beide auf einer Intel-Architektur, da die Hostsysteme jeweils Intel NUCs sind. Manchmal gibt es jedoch gute Gründe, auf ARM-Virtualisierung zurückzugreifen.
Für mich war ein entscheidender Grund, dass ich meine ntopng-Umgebung so erweitern wollte, dass von meinen diversen OpenWRT-Routern auch die netFlows an die zentrale ntopng-Instanz gemeldet und dort ausgewertet werden können. Dabei bin ich gerne bereit, den Entwickler auch finanziell zu unterstützen, aber für die nötige nProbe-Lizenz werden unter Nicht-Embedded-Systemen gleich knapp 300€ fällig und Updates gibt es auch nur begrenzt für 1 Jahr. Eine nProbe-Pro-Embedded Lizenz kostet aber bei sonst gleichen Bedingungen und leicht eingeschränkter Funktionalität „nur“ knapp 100€. Ich stand also vor der Herausforderung, wie ich eine ARM-Architektur unter Proxmox virtualisieren kann, denn ich wollte dafür keinen Raspberry Pi aufsetzen und ein weiteres Gerät permanent mit Strom versorgen. Aber dazu mehr in einem anderen Tutorial.
Grundsätzlich ist es nicht möglich, einen Container (CT) mit ARM-Spezifikation direkt auf einer Intel X86-Architektur unter Proxmox aufzusetzen. Dies hat folgende Gründe
Die Ausführung von ARM-Systemen auf X86-Hardware erfordert eine vollständige Virtualisierung und keine Container-Virtualisierung Container teilen sich den Kernel mit dem Host-System. Da der Kernel auf einem X86-System für diese Architektur kompiliert wird, kann er keine ARM-Binaries ausführen Proxmox verwendet LXC (Linux Containers) für die Container-Virtualisierung, die keine Architektur-Emulation bieten.
Es ist jedoch möglich, eine vollständige virtuelle Maschine (VM) mit ARM-Emulation zu erstellen. Dies erfordert zusätzliche Konfigurationsschritte und die Verwendung von QEMU für die Emulation der Architektur. Für bestimmte Anwendungsfälle, wie das Testen des Raspberry Pi OS, kannst du spezielle 32-Bit-ISOs verwenden, die auf Intel/AMD-Systemen laufen.
Beachte jedoch, dass die Leistung bei der Emulation von ARM auf X86 deutlich geringer sein wird als bei der nativen Ausführung.
Nun aber zu den einzelnen Schritten:
Vorbereitungen
Proxmox bietet native Unterstützung für die ARM64-Architektur, indem du einfach den folgenden Befehl als root oder per sudo auf der Proxmox-Kommandozeile ausführst:
apt update && apt install pve-edk2-firmware-aarch64
Dann lade ein ARM-kompatibles Image herunter und füge es zu deiner Proxmox-ISO-Bibliothek hinzu:

In das folgende Dialogfeld fügst du unter URL folgenden Link ein: https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/debian-12.10.0-arm64-netinst.iso und klickst auf Query URL.

Und schon kann der Download beginnen:

VM erstellen und installieren
Als erstes klickst du in deiner Proxmox-Web-GUI oben rechts auf (nicht Create CT!). Gib deiner VM einen aussagekräftigen Namen (hier DebianARM64):

Im nächsten Schritt wählst du das heruntergeladene ARM-ISO-Image aus.

Als nächstes ändern wir das SeaBIOS (Default) auf das OVMF (UEFI) BIOS und entfernen das Häkchen bei „Add EFI DIsk“. Wir werden das später manuell nachholen.

Die Einstellungen unter Disk habe ich so belassen:

Im Reiter CPU sollte man auf jeden Fall mehr als einen Core auswählen (ich hatte es beim ersten Test bei einem belassen und weiß jetzt, was für eine dumme Idee das war, denn bei so viel Virtualisierung ist der virtuelle Prozessor schon bei der Installation permanent am Anschlag). Viel wichtiger ist es aber, das kleine x im Type-Feld neben dem Default Type anzuklicken, so dass dann Default (kvm64) sichtbar wird.

Memory und Network kannst du deinen lokalen Gegebenheiten anpassen, bei mir haben 2GB RAM und die Standardnetzwerkeinstellungen für den Anfang gereicht. Achte darauf, dass der Haken vor „Start after created“ entfernt ist, bevor du auf Finish klickst, denn vorher gibt es noch ein paar Dinge zu erledigen.

Konfiguration ARM64 VM
Gehe zur Registerkarte Hardware deiner neuen VM und wähle Serial Port aus, nachdem du auf Add geklickt hast:

Belasse es bei der Null und klicke auf OK

Mache anschließend einen Doppelklick auf Display und ändere die Graphic Card auf das neue Serial Interface „Serial terminal 0“

Nach einem erneuten Klick auf Add wählst du EFI-Disk aus:

Wähle dort ein für dich passenden EFI-Storage aus (bei mir local-lvm):

Anschließend wählst du das CD/DVD Drive aus und klickst auf REMOVE…

…um es im nächsten Schritt mit leicht geänderten Einstellungen wieder hinzuzufügen, dazu Add -> CD/DVD Drive und hier SCSI auswählen und aus deinem Storage das vor kurzem heruntergeladene ARM64-ISO-Image.

Dann klickst du auf dem Options-Tab, machst einen Doppelklick auf Boot Order und schiebst das CD/DVD-Laufwerk ganz nach oben.

Im (vor)letzten Schritt gehst du auf deine Proxmox-Shell und gibst folgendes Kommando ein (ersetzte dabei die „virtual_machine_id“ durch die Nummer der ARM64-VM (bei mir hier in den Screenshots 102 bzw. 103)
nano /etc/pve/qemu-server/virtual_machine_id.conf
Kommentiere die Zeile vmgenid mit einer # aus und füge als neue Zeile den Eintrag arch: aarch64
hinzu

Mit CTRL-X bzw. STRG-X gefolgt von einem Y kannst du den Editor verlassen und die Datei gleichzeitig speichern
Anschließend kannst du die VM durch Klick auf den START-Button ausführenund mittels Klick auf Console auf selbige zugreifen
Für den Fall, das du eine Fehlermeldung bekommst öffne erneut die Proxmox-Shell und ändere die Größe der EFI-Disk auf 64MB
qm set 103 --efidisk0 local-lvm:vm-102-disk-new,size=64M

Anschließend geht du erneut auf den Hardware-Tab, löscht die EFI-Disk und fügst eine neue EFI-Disk hinzu (Screenshots siehe oben). Dann machst du einen Doppelklick auf den SCSI-Controller und änderst die Einstellung auf VirtIO SCSI (also ohne single).

Anschließend startest du die VM erneut und klickst auf Console,

Sollte die Anzeige bei „starting serial terminal…“ hängen bleiben, drücke einfach Enter (Neustart der VM hilft auch)

Dann kannst du Debian wie gewohnt installieren und am Ende neu starten (das führe ich jetzt hier nicht explizit aus)

und nutzen:

Gasterweiterung
Möchtest du die Gasterweiterung installieren…

…öffnest du erneut den Editor auf der Proxmox-Shell mit (virtual_machine_id erneut durch deine dreistellige ID deiner ARM-VM ersetzen)…
nano /etc/pve/qemu-server/virtual_machine_id.conf
…und fügst die Zeile agent: 1
hinzu. Editor wie oben beendet mit speichern…

Anschließend mit qm reboot <virtual_machine_id>
oder über die GUI die VM neu starten.
Im Ergebnis sollte das dann so aussehen:

1 thought on “Virtualisierung von ARM-Architektur unter Proxmox”