This is a practical companion to ARM VPS Explained: Advantages and Limitations. It covers how to install common software on an ARM64 (aarch64) VPS and how to handle packages that do not ship ARM builds.
Standard Packages: Nothing Changes
Debian, Ubuntu, AlmaLinux, and Rocky all provide full ARM64 package repositories. Day-to-day usage is identical to x86:
apt install nginx mariadb-server php-fpm # Debian/Ubuntu dnf install nginx mariadb-server php-fpm # AlmaLinux/Rocky
If it is in the distro's repositories, it works on ARM. No special steps.
Docker on ARM
Install Docker the usual way (the official install script detects ARM automatically):
curl -fsSL https://get.docker.com | sh
Most official images are multi-arch and pull the arm64 variant automatically. To verify an image supports ARM before pulling:
docker manifest inspect IMAGE_NAME | grep architecture
Look for "architecture": "arm64" in the output, or check the "OS/ARCH" list on the image's Docker Hub page.
If an image is x86-only, your options in order of preference:
- Look for a community arm64 build (search Docker Hub for
IMAGE_NAME arm64) - Build the image yourself from the project's Dockerfile on your VPS
- Run under emulation as a last resort (significant performance penalty):
docker run --platform linux/amd64 IMAGE_NAME
(requires qemu binfmt:docker run --privileged --rm tonistiigi/binfmt --install amd64)
Downloading Binaries from Project Release Pages
When a project offers direct downloads, pick the file labeled arm64, aarch64, or armv8, not amd64/x86_64. Example naming you will see:
tool-1.2.3-linux-amd64.tar.gz <- wrong (x86) tool-1.2.3-linux-arm64.tar.gz <- correct (ARM)
If a wrong-architecture binary is run, you will get an error like:
cannot execute binary file: Exec format error
That error almost always means an x86 binary on an ARM system (or vice versa).
Language Runtimes
All major runtimes ship native ARM64 builds and behave identically:
- Node.js - via NodeSource repo or
nvm - Python - in distro repos; nearly all pip packages have arm64 wheels (rare scientific packages may compile from source, which just takes longer)
- Java - OpenJDK/Temurin arm64 builds; Minecraft Java servers run natively
- Go / Rust - full first-class ARM support; both also cross-compile easily
- PHP - in distro repos and third-party repos (sury.org, remi) with arm64 packages
Control Panels
Verify current ARM64 support on the panel's website before installing; support changes over time. As a general rule at the time of writing: several modern panels and lightweight panels support ARM, while some legacy commercial panels remain x86-only. If a panel is a hard requirement and only runs on x86, choose an x86_64 plan instead.
Game Servers
- Minecraft (Java Edition): runs natively and very well on ARM. Use an arm64 JDK.
- Steam/x86-only dedicated servers: most SteamCMD-based servers are x86-only. Tools like
box64can run some of them, but performance and stability vary widely; for these, an x86_64 plan is the reliable choice.
Quick Compatibility Checklist
uname -mshowsaarch64? You are on ARM.- Is the software in your distro's repos? It works.
- Docker image lists
linux/arm64? It works. - Release page has an arm64/aarch64 download? It works.
- None of the above? Consider building from source, or use an x86_64 plan.