Skip to main content
  1. 2024/
  2. Posts from July/

Arm64 Guests in Proxmox

ARM64 Guests in ProxMox? neat!

What are we trying to do #

Run an arm64/aarch64 vm within proxmox.

How to get from A to Z #

This SEEMS fairly straight forward.

Find the iso storage location for current proxmox #

/mnt/pve/cephfs

Grab the latest Ubuntu cloud image #

There’s also the live-server variant, but these don’t do cloud-init afaik.

cloud image download
cd /mnt/pve/cephfs/iso;
wget -c https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-arm64.img
wget -c https://cdimage.ubuntu.com/releases/noble/release/ubuntu-24.04-live-server-arm64+largemem.iso&&
wget -c https://cdimage.ubuntu.com/releases/noble/release/ubuntu-24.04-live-server-arm64.iso

Create a VM host via proxmox’s qm tool #

Some work was described elsewhere around how they got it to work:

qemu create
qemu-system-aarch64 -M virt -cpu cortex-a57 -m 1024 \
-drive file=debian-arm64.img,if=none,id=drive0  -device virtio \
-blk-device,drive=drive0 -device virtio-net-device,netdev=net0 \
-netdev user,id=net0 -nographic -serial mon:stdio

I tried something similar:

qm create
qm create 8 --description ubuARM64 --bios ovmf --memory 8192 \
--net0 virtio,bridge=vmbr0 --arch aarch64 --name arm --ostype l26 \
--boot order=scsi0 --cipassword saltypass --ciuser userhere \
--efidisk0 pool:vm-1-d-1,efitype=4m,pre-enrolled-keys=1,size=64M \
--hotplug disk,network,usb,cpu --keyboard en-us --vga virtio \
--scsihw virtio-scsi-pci --serial0 socket --scsi0 \
pool_disks:0,size=200G,import-from=/noble-server-cloudimg-arm64.img

Aaand profit… ? Shit. NOPE! #

Well, of course there’s some problems.

Well hell… #

EFI Disk #
 EFI Base image `/usr/share/pve-edk2-firmware/AAVMF_CODE.fd` not found (500)

This seemed problematic. FORTUNATELY,

efi base firmware for aarch64
apt-get install pve-edk2-firmware-aarch64

VirtIO-GL #

Then, I thought I needed virtio-gl video.
So I installed the needful…

Install all the things you don't need
apt-get install libegl1 libvirglrenderer1 libvirglrenderer-dev \
libglx0 virgl-server libegl-mesa0 libegl1 libgl1 libgl1-mesa-dri \
libgl1 libglapi-mesa libglvnd0 libglx-mesa0 libxcb-glx0 libxxf86vm1
However, this wasn’t really all that helpful, as I’m not giving the VM a graphics card…

TPM #

This, I’ve yet to address.

qemu-system-aarch64: -device tpm-tis,tpmdev=tpmdev: 'tpm-tis' is not a valid device model name

so… now that it… y’know… works.. (mostly) how is it?

in a nutshell?

💩BAD:

The charts below show geekbench5 scores comparing:

A Raspberry Pi4

  • 4 arm cores
  • 4GB ram
  • one hampster on a treadmill
  • An ARM64 VM
    Running on a Dell R730xd
    512GB of DDR4 ram
    E5-2699v4 Cores

Geekbench 5 Score #

Resource Arm64 VM Raspi 4b
cores 8 4
memory 32 gb 4 gb

Yes… You’re reading this right…

a Raspberry pi TROUNCES an ARM VM.

¯\_(ツ)_/¯

Maybe this will change in time?

Thoughts about the process #

I’d REALLY like to see one of two things happen.

  • ARM64 VMs on proxmox x86_64 NOT sucking this badly

  • Proxmox supporting vm truck style work nodes to support alt arch… ¯\_(ツ)_/¯

until next time, y’all!