diff --git a/.github/workflows/qemu.yaml b/.github/workflows/qemu.yaml new file mode 100644 index 00000000..bad6d0eb --- /dev/null +++ b/.github/workflows/qemu.yaml @@ -0,0 +1,78 @@ +name: QEMU environment + +on: + push: + branches: + - main + pull_request: + branches: + - main + release: + types: + - published + +jobs: + build-linux-arm64: + runs-on: ubuntu-22.04 + steps: + - name: Enable KVM group perms + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + - name: Install VM dependencies + run: | + sudo apt-get update + sudo apt-get install -y qemu-system-arm qemu-efi-aarch64 qemu-utils cloud-image-utils wget + - name: Provision VM + run: | + wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-arm64.img + + qemu-img create -f qcow2 -F qcow2 \ + -b jammy-server-cloudimg-arm64.img \ + jammy-snapshot.qcow2 200G + + cat >"user-data" << EOF + #cloud-config + password: passw0rd + chpasswd: { expire: False } + ssh_pwauth: True + EOF + cloud-localds user-data.img user-data + + cp /usr/share/AAVMF/AAVMF_CODE.fd . + cp /usr/share/AAVMF/AAVMF_VARS.fd . + + qemu-system-aarch64 \ + -m 2048 \ + -cpu max -smp 4 \ + -machine virt,gic-version=max \ + -display none \ + -drive if=pflash,format=raw,readonly=on,file=AAVMF_CODE.fd \ + -drive if=pflash,format=raw,file=AAVMF_VARS.fd \ + -drive if=none,file=jammy-server-cloudimg-arm64.img,id=hd0,cache=unsafe \ + -device virtio-blk-device,drive=hd0 \ + -drive file=user-data.img,format=raw,media=cdrom,if=none,id=cd0 \ + -device virtio-blk-device,drive=cd0 \ + -netdev type=user,id=net0,hostfwd=tcp::22225-:22 \ + -device virtio-net-device,netdev=net0 \ + -daemonize + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y sshpass + - name: Check ssh connectivity + run: | + set +e + while true; do + echo Trying to connect + sshpass -p passw0rd ssh -v -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 22225 ubuntu@localhost whoami + if [ $? -eq 0 ]; then + break + fi + ps -axf | grep qemu + netstat -tnlp + sudo dmesg + sleep 10 + done + exit 0