tests: Search multiple places for aarch64 EDK2 bios image

Apparently qemu's ARM virt machine needs to be explicitly given a firmware
image, rather than just supplying a sane default.  Unfortunately the EDK2
firmware image we need isn't in the same place on all host distros.

Currently the test scripts hardcode the Debian location, meaning it will
break on hosts that have it somewhere else.  This patch searches multiple
locations for the firmware, and creates a local link during the asset build
phase, which the tests can then use.

For now it only searches the locations used by Debian and Fedora, but
that's a small improvement in robustness already, and can be later improved
further if we need to.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
David Gibson 2022-07-06 17:29:01 +10:00 committed by Stefano Brivio
parent 2297637251
commit b44e16ed6c
6 changed files with 30 additions and 13 deletions

1
test/.gitignore vendored
View file

@ -2,3 +2,4 @@ perf.js
test_logs/ test_logs/
mbuto/ mbuto/
*.img *.img
QEMU_EFI.fd

View file

@ -6,7 +6,7 @@
# Author: David Gibson <david@gibson.dropbear.id.au> # Author: David Gibson <david@gibson.dropbear.id.au>
DOWNLOAD_ASSETS = mbuto DOWNLOAD_ASSETS = mbuto
LOCAL_ASSETS = mbuto.img LOCAL_ASSETS = mbuto.img QEMU_EFI.fd
ASSETS = $(DOWNLOAD_ASSETS) $(LOCAL_ASSETS) ASSETS = $(DOWNLOAD_ASSETS) $(LOCAL_ASSETS)
@ -18,6 +18,9 @@ mbuto:
mbuto.img: passt.mbuto mbuto mbuto.img: passt.mbuto mbuto
./mbuto/mbuto -p ./$< -c lz4 -f $@ ./mbuto/mbuto -p ./$< -c lz4 -f $@
QEMU_EFI.fd:
./find-arm64-firmware.sh $@
check: assets check: assets
./run ./run

View file

@ -136,7 +136,7 @@ host guestfish --rw -a __IMG__ -i rm /etc/init.d/cloud-init
host guestfish --rw -a __IMG__ -i rm /etc/init.d/cloud-init-local host guestfish --rw -a __IMG__ -i rm /etc/init.d/cloud-init-local
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nographic -serial stdio -nodefaults -no-reboot -nographic -vga none __IMG__ -net socket,fd=5 -net nic,model=virtio host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nographic -serial stdio -nodefaults -no-reboot -nographic -vga none __IMG__ -net socket,fd=5 -net nic,model=virtio
host PS1='$ ' host PS1='$ '
sleep 2 sleep 2
host apt-get update host apt-get update
@ -222,7 +222,7 @@ host guestfish --rw -a __IMG__ -i rm /etc/init.d/cloud-init
host guestfish --rw -a __IMG__ -i rm /etc/init.d/cloud-init-local host guestfish --rw -a __IMG__ -i rm /etc/init.d/cloud-init-local
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nographic -serial stdio -nodefaults -no-reboot -nographic -vga none __IMG__ -net socket,fd=5 -net nic,model=virtio host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nographic -serial stdio -nodefaults -no-reboot -nographic -vga none __IMG__ -net socket,fd=5 -net nic,model=virtio
sleep 2 sleep 2
host apt-get update host apt-get update
host apt-get -y install make gcc netcat-openbsd host apt-get -y install make gcc netcat-openbsd
@ -296,7 +296,7 @@ host wget https://cloud.debian.org/images/cloud/sid/daily/latest/debian-sid-nocl
host virt-edit -a __IMG__ /usr/lib/systemd/system/serial-getty@.service -e 's/ExecStart=.*/ExecStart=\/sbin\/agetty --autologin root -8 --keep-baud 115200,38400,9600 %I $TERM/g' host virt-edit -a __IMG__ /usr/lib/systemd/system/serial-getty@.service -e 's/ExecStart=.*/ExecStart=\/sbin\/agetty --autologin root -8 --keep-baud 115200,38400,9600 %I $TERM/g'
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nographic -serial stdio -nodefaults -no-reboot -nographic -vga none __IMG__ -net socket,fd=5 -net nic,model=virtio host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nographic -serial stdio -nodefaults -no-reboot -nographic -vga none __IMG__ -net socket,fd=5 -net nic,model=virtio
sleep 2 sleep 2
host apt-get update host apt-get update
host apt-get -y install make gcc netcat-openbsd host apt-get -y install make gcc netcat-openbsd

View file

@ -158,7 +158,7 @@ host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init-local.se
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci
host PS1='$ ' host PS1='$ '
sleep 2 sleep 2
host yum -y install make gcc nmap-ncat host yum -y install make gcc nmap-ncat
@ -213,7 +213,7 @@ host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init-local.se
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci
host PS1='$ ' host PS1='$ '
sleep 2 sleep 2
host yum -y install make gcc nmap-ncat host yum -y install make gcc nmap-ncat
@ -268,7 +268,7 @@ host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init-local.se
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci
host PS1='$ ' host PS1='$ '
sleep 2 sleep 2
host yum -y install make gcc nmap-ncat host yum -y install make gcc nmap-ncat
@ -323,7 +323,7 @@ host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init-local.se
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci
host PS1='$ ' host PS1='$ '
sleep 2 sleep 2
host yum -y install make gcc nmap-ncat host yum -y install make gcc nmap-ncat
@ -378,7 +378,7 @@ host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init-local.se
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci
host PS1='$ ' host PS1='$ '
sleep 2 sleep 2
host yum -y install make gcc nmap-ncat host yum -y install make gcc nmap-ncat
@ -433,7 +433,7 @@ host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init-local.se
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci
host PS1='$ ' host PS1='$ '
sleep 2 sleep 2
host yum -y install make gcc nmap-ncat host yum -y install make gcc nmap-ncat
@ -488,7 +488,7 @@ host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init-local.se
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci
host PS1='$ ' host PS1='$ '
sleep 2 sleep 2
host yum -y install make gcc nmap-ncat host yum -y install make gcc nmap-ncat
@ -543,7 +543,7 @@ host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init-local.se
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-pci
host PS1='$ ' host PS1='$ '
sleep 2 sleep 2
host yum -y install make gcc nmap-ncat host yum -y install make gcc nmap-ncat

View file

@ -130,7 +130,7 @@ host wget http://download.opensuse.org/ports/aarch64/tumbleweed/appliances/openS
host virt-edit -a __IMG__ -m /dev/sda3 /usr/lib/systemd/system/serial-getty@.service -e 's/ExecStart=.*/ExecStart=\/sbin\/agetty --timeout 5000 --autologin root -i -8 --keep-baud 115200,38400,9600 %I $TERM/g' host virt-edit -a __IMG__ -m /dev/sda3 /usr/lib/systemd/system/serial-getty@.service -e 's/ExecStart=.*/ExecStart=\/sbin\/agetty --timeout 5000 --autologin root -i -8 --keep-baud 115200,38400,9600 %I $TERM/g'
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/ host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio host ./qrap 5 qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios __BASEPATH__/QEMU_EFI.fd -nodefaults -nographic -vga none -serial stdio __IMG__ -net socket,fd=5 -net nic,model=virtio
host PS1='$ ' host PS1='$ '
host ip link set enp0s1 up host ip link set enp0s1 up
sleep 10 sleep 10

13
test/find-arm64-firmware.sh Executable file
View file

@ -0,0 +1,13 @@
#! /bin/sh
LOCATIONS="/usr/share/qemu-efi-aarch64 /usr/share/edk2/aarch64"
for l in $LOCATIONS; do
if [ -f "$l/QEMU_EFI.fd" ]; then
ln -s "$l/QEMU_EFI.fd" "$1"
exit 0
fi
done
echo "Couldn't find QEMU_EFI.fd" >&2
exit 1