In an effort to create an easy-to-manage VM environment that I can use on the go, even with spotty internet, I decided to try running Proxmox on my Apple Silicon MacBook Air. I could use Parallels or VMware Fusion, but I instead chose Proxmox to support open-source software. Should the need arise to run production-level workloads, I can always purchase a Proxmox license and deploy it on a dedicated server. The challenging part was that Proxmox doesn’t distribute itself for arm64/aarch64, so I needed to find a way how to do that.

Getting Started

Since Proxmox is an OS in and of itself (based on Debian Linux), and doesn’t come packaged for arm64, I needed a way to get a VM for it up and running. Since it is based on Debian Linux, a Debian install could be converted to Proxmox, and there are many guides on how to do this for x86_64, so I decided to attempt this route.

UTM has a great interface for working with Apple’s Hypervisor, and QEMU. Using QEMU directly was definitely an option, but UTM’s user-friendly interface made the setup process much smoother and more intuitive for me. After installing UTM, I created a Debian VM using an image provided directly by UTM from their gallery of several pre-made VM images. This was quick and easy, as the presets were all configured so everything worked out of the box.

Converting Debian to Proxmox

Now that I had a Debian VM, I needed to convert it to a Proxmox VM. Since Proxmox doesn’t support Arm or distribute their packages for Arm I would have to build those myself. Luckily, some other kind soul already did this and published them.

Warning: I’m installing packages from an unofficial source. My risk level is fine with this, but if you are considering doing this, I strongly recommend you evaluate the choice carefully. If you are not comfortable, you can build the packages from source.

To use those pre-made packages I’ll need to configure a few things with the VM first. First, you’ll need to make sure your VMs hostname can be resolved using /etc/hosts. Since the VM already has debian as the hostname, I figured I’d keep that, and so I added 192.168.64.11 debian to the end of the hosts file. This is so that the VM can resolve its own hostname, and so that the Proxmox installer can resolve the hostname as well.

Update: These packages depended on OpenSSL 1.1, which is now removed from Debian, and so you’ll need to build from source and link the packages to OpenSSL 3+

Now that the VM has the prerequisite configuration, we can get started with installing Proxmox.

# Add the 3rd party repository
echo "deb https://global.mirrors.apqa.cn/proxmox/debian/pve bullseye port">/etc/apt/sources.list.d/pveport.list

# Download/Trust the key that signs the 3rd party packages
curl https://global.mirrors.apqa.cn/proxmox/debian/pveport.gpg -o /etc/apt/trusted.gpg.d/pveport.gpg 

# pull the latest updates from the repositories, and update the system
apt update && apt full-upgrade

# install ifupdown2, which is required for Proxmox
apt install ifupdown2

# and finally, install Proxmox
apt install proxmox-ve postfix open-iscsi

After running through all these steps, I rebooted the VM, and then I was able to browse the Proxmox admin interface at https://YOUR_IP_HERE:8006

Running Proxmox

Now, you are running a standard install of Proxmox and can do anything with it that you would on any other install. The only difference is that you need to ensure any container or VM you run uses an arm64/aarch64-based image.

Alternatives considered

A non-exhaustive list of options considered, include Parallels and VMWare Fusion as mentioned above, but also just running Asahi Linux and running VMs directly on the host without having to use a hypervisor for Proxmox itself. Using a separate device was also an option, but this would require lugging around that device when I’m out and about. Keeping it as something on my laptop, without disrupting my day-to-day desktop environment, was most preferable for me.

Conclusion

Running Proxmox on the M1 MacBook Air was surprisingly smooth, even with the base model specifications. The system handled the virtualization tasks well, with minimal noticeable lag. The user experience was better than what I would expect on an x86_64 system with similar specs. I also wasn’t running any serious workload, but was able to run several VMs and containers without much of a performance hit.

Future enhancements could include using Terraform to automate environment setup or exploring integrations with the Proxmox API to script operations. For now, I’m happy with the setup and will continue to experiment with it.

Disclaimer

Editor’s Note: This setup is not recommended for production use. The aarch64/arm64 packages I’m using are not officially supported or provided by Proxmox, and running production workloads on an M1 MacBook Air is not advisable, as it’s not meant to be a server.