================= Create an arm* VM ================= Create a stretch/buster-elts armhf VM, to debug a failing package build or testsuite. This works from an amd64 host, but isn't very useful, see limitations below and :doc:`arm-debug` for a more practical native solution. .. code:: bash sudo apt install arch-test uidmap binfmt-support \ qemu-system-arm qemu-user-static DIST=stretch # or buster, bullseye, etc. ARCH=armhf # or arm64 (>= buster) debvm-create -r $DIST -o $DIST-$ARCH.ext4 \ --size=3G -k ~/.ssh/id_xxx.pub \ -- \ --architecture=$ARCH \ --keyring=/publicly/readable/freexian-archive-key.gpg \ --include=freexian-archive-keyring \ --include=linux-image-5.10-XXX \ http://archive.debian.org/debian/ \ "deb http://deb.freexian.com/extended-lts $DIST-lts main" # Note: the initramfs step may take several minutes Using an ELTS 5.10 kernel backport may be required to boot, typically for stretch/armhf or from an amd64 host. Replace XXX by the kernel for your target architecture (``armmp`` for armhf, ``arm64`` for arm64). 6.1 backports are also available. See `<../technical-workflows.html#debvm>`_ for further useful configuration. Further customization possible, see ``man debvm-create``. Now run the VM: .. code:: bash debvm-run -i $DIST-$ARCH.ext4 --sshport 2222 -- -m 2G ssh -p 2222 -o StrictHostKeyChecking=no root@localhost Limitations: * The VM is not hardware-accelerated and quite slow on amd64 (CPU and I/O, 10-20x slower). This increases timeout-related issues. Using ``eatmydata`` helps a little, same for ``mount -t tmpfs none /mnt/workdir -o size=2G``, but the main bottleneck appears to be the CPU more than the disk. * The VM does not behave exactly like the real buildd hardware, different errors may occur. --------------- Troubleshooting --------------- * *passwd: Cannot determine your user name.* (bookworm/0.2.10) Apply https://salsa.debian.org/helmutg/debvm/-/commit/e4ecc7f745c54a765eff8eff59fc2e9a03371f2e * init fails to mount disk, ``/dev/vda`` not present; or boot just stalls Upgrade to a kernel backport: ``--include=linux-image-5.10-armmp`` (armhf) or ``--include=linux-image-5.10-arm64``. --------------- Other resources --------------- Pre-built images, with external kernel and initrd: * https://people.debian.org/~aurel32/qemu/ (squeeze, wheezy) * https://people.debian.org/~gio/dqib/ (sid) Manual install from ISO: * https://quantum5.ca/2020/12/26/how-to-make-an-arm-virtual-machine-armhf-aarch64/ (external kernel and initrd) * https://quantum5.ca/2022/03/19/how-to-make-better-arm-virtual-machine-armhf-aarch64-uefi/ (UEFI, text-based Debian installer)