https://github.com/HathewayWill/Ubuntu_Server_QEMU_Guide
Over the past week I built a repeatable way to run a full Ubuntu Server hashtag#ARM64 <https://www.linkedin.com/search/results/all/?keywords=%23arm64&origin=HASH_TAG_FROM_FEED> stack under QEMU on a clean hashtag#Ubuntu <https://www.linkedin.com/search/results/all/?keywords=%23ubuntu&origin=HASH_TAG_FROM_FEED> x86_64 host, and I published it as a start to finish user guide. If you have ever needed an ARM64 environment for systems work without dedicated hardware, you know the usual pain points: older distro QEMU builds missing features you assumed were standard, UEFI boot state that feels fragile, confusing installer interaction when you are headless, and networking that breaks the moment a backend is not compiled in. The method in this guide is designed to remove that friction by making every step explicit and verifiable. First, it starts from an Ubuntu host and installs the full set of build dependencies needed to compile hashtag#QEMU <https://www.linkedin.com/search/results/all/?keywords=%23qemu&origin=HASH_TAG_FROM_FEED> from source, including libslirp. That last piece is important because it enables user mode networking, which is what makes -netdev user and hostfwd work. If you have ever seen the error that the user network backend is not compiled into a custom QEMU binary, this guide is built to prevent it by construction and then confirm it with a simple help output check. Second, it uses UEFI in a way that is stable across reboots. Instead of treating firmware as a black box, it creates two persistent pflash images: one containing the UEFI firmware code, mounted read only, and one acting as the variable store. Keeping the variable store is what makes boot entries and firmware settings persist, which is the difference between a predictable VM and constantly falling back into installer flows. Third, it provides two QEMU command lines that match real usage. One boots the Ubuntu Server installer with a VNC console so the installer is easy to drive. The other boots the installed system with a terminal first workflow and SSH port forwarding so you can treat the guest like a normal server. The guide includes example outputs for each major command so you can sanity check that you are on track. Finally, the guide explains every QEMU flag line by line. It describes what each option maps to in the virtual hardware, why it is there, and which options you can safely remove once you understand your goals. That part is the core of the write up because copying a long QEMU command line you do not understand is a recipe for brittle setups. Once you know which flags define the machine model, the CPU, the memory, the UEFI flash devices, the disk, and the networking backend, you can tune the VM confidently. There is also a practical section on adjusting cores and memory with -smp and -m, and a quick host versus guest architecture sanity check using uname and dpkg. If you are doing kernel, boot, firmware, or virtualization work, or you just need a reproducible ARM64 server on an x86 laptop or workstation, this approach has been a big quality of life improvement.
