DEV Community

Cover image for Setting Up ARM VM on Proxmox VE
Viktor Vodnev
Viktor Vodnev

Posted on • Edited on

Setting Up ARM VM on Proxmox VE

Running ARM64 virtual machines on Proxmox VE is now possible with the addition of ARM64 emulation support. This guide will walk you through the steps needed to create and run an ARM64 VM on Proxmox VE, whether for testing, development, or other purposes.

Disclaimer: ARM emulation on Proxmox VE is an experimental feature and not fully supported or extensively tested by Proxmox. Users may encounter errors or issues that are not covered in this guide.

Prerequisites

First, ensure the pve-edk2-firmware-aarch64 package is installed. This package provides the (U)EFI firmware necessary for ARM64 VM integration. Note that this package isn't installed automatically during upgrades, so you'll need to install it manually.

apt update
apt install pve-edk2-firmware-aarch64
Enter fullscreen mode Exit fullscreen mode

Upload the ARM64 ISO to Proxmox VE

You'll need an ARM64 ISO image, and for this guide, we'll use Debian 12 "Bookworm". Ensure you're using the AArch64 ISO, the official name for the 64-bit ARM architecture. Upload the ISO to your Proxmox VE storage.

Upload ISO to Proxmox VE

Create a New VM

To create a new VM, click on the "Create VM" button in the Proxmox VE interface. Assign a name and ID to your VM.

Create VM

In the OS tab, disable the CD/DVD Drive by selecting "Do not use any media."

OS Tab

In the System tab, set the Graphic card to "Serial terminal 0," change the BIOS to "OVMF (UEFI)," and disable EFI Disk creation by unchecking the box "Add EFI Disk" (we will create it later manually). Ensure the SCSI Controller is set to "VirtIO SCSI."

System Tab

Next, in the Disks tab, choose the storage and space allocation for your VM, ensuring "IO thread" is disabled by unchecking the box.

Disks Tab

In the CPU tab, do not add a CPU type, leave it as default.

CPU Tab

Allocate the desired amount of RAM in the Memory tab, and no changes are needed in the Network tab.

Confirm Tab

Modify VM Hardware

After creating the VM, go to the hardware settings to remove the existing CD/DVD drive. Then, add a new one by choosing "SCSI" as the Bus/Device and selecting the Debian ISO image you uploaded earlier.

Hardware

Edit the VM Configuration File

Edit the configuration file located at /etc/pve/qemu-server/<vm_id>.conf by adding and modifying the lines as follows:

nano /etc/pve/qemu-server/<vm_id>.conf
Enter fullscreen mode Exit fullscreen mode

Add arch: aarch64 at the bottom of the file:

arch: aarch64
Enter fullscreen mode Exit fullscreen mode

Comment out the line that starts with vmgenid: by adding a # at the beginning:

#vmgenid: <value>
Enter fullscreen mode Exit fullscreen mode

Remove the line that starts with cpu:, if it exists:

cpu: <value>
Enter fullscreen mode Exit fullscreen mode

Adjust Boot Order

Go to the VM "Options" and change the "Boot Order" to place the CD/DVD drive with the Debian ISO as the first boot device.

Boot Order

Create an EFI Disk

Run the following command to create an EFI disk for your VM, replacing <VM_ID> with your actual VM ID and <STORAGE_NAME> with your storage name (e.g., 'local-lvm' for the default):

qm set <VM_ID> --efidisk0 <STORAGE_NAME>:1,efitype=4m,format=raw
Enter fullscreen mode Exit fullscreen mode

Launch the VM and Install the OS

Start the VM and follow the prompts to complete the Debian installation. It's highly recommended to use the xterm.js option in the Proxmox VE interface to connect to the VM for a smoother installation experience.

Launch VM

Post-Installation

After the OS installation is complete, go to the VM hardware settings, remove the CD/DVD drive, and change Display to VNC. Then restart the VM to ensure it boots correctly from the installed OS. Congratulations! You now have an ARM64 VM running on Proxmox VE.

Troubleshooting

If you encounter the following error:

qemu-system-aarch64: -drive if=pflash,unit=1,id=drive-efidisk0,format=raw,file=/dev/second/vm-104-disk-1,size=67108864: The sum of offset (0) and size (0) has to be smaller or equal to the actual size of the containing file (4194304)
Enter fullscreen mode Exit fullscreen mode

Follow these steps to resolve it:

  1. Remove the EFI Disk by going to the VM's "Hardware" tab, selecting the EFI disk, and clicking "Remove."
  2. Recreate the EFI Disk with the following command, replacing <VM_ID> with your actual VM ID and <STORAGE_NAME> with your storage name (e.g., 'local-lvm' for the default):

    qm set <VM_ID> --efidisk0 <STORAGE_NAME>:1,efitype=4m,format=raw
    
  3. Start the VM again.

That's all! I hope you enjoyed this content and using ARM VM on Proxmox.

Top comments (7)

Collapse
 
taosecurity profile image
Richard Bejtlich

This was REALLY helpful. The only stumble I had involved this command:

qm set -efidisk0 second:1,efitype=4m,format=raw

I think your storage is named "second"? Mine was the default, local-lvm. Also, I think I had to use two dashes instead of one. Anyway, thanks a lot!

Collapse
 
duelnm profile image
Viktor Vodnev

Thanks for your feedback! You're right about the storage name and the double dash. I've corrected both. Glad the article was helpful!

Collapse
 
the_dude_69420 profile image
The Dude

Install gets stuck at 83%... Tried restarting the process multiple times, but it doesn't go past it.

Collapse
 
the_dude_69420 profile image
The Dude

Never mind, third time's the charm.

Collapse
 
duelnm profile image
Viktor Vodnev

Unfortunately, ARM emulation performance is really poor, so things like this can happen.

Collapse
 
suurt8ll profile image
suurt8ll

You are a lifesaver man 🙏

Collapse
 
dnl profile image
dnL tiN

I needed to add the testing repo before I could install package:

deb http://download.proxmox.com/debian/pve bookworm pvetest

to: /etc/apt/sources.list

pve.proxmox.com/pve-docs/pve-admin...