summaryrefslogtreecommitdiffstats
path: root/test/run-qemu
diff options
context:
space:
mode:
Diffstat (limited to 'test/run-qemu')
-rwxr-xr-xtest/run-qemu74
1 files changed, 74 insertions, 0 deletions
diff --git a/test/run-qemu b/test/run-qemu
new file mode 100755
index 0000000..41d458a
--- /dev/null
+++ b/test/run-qemu
@@ -0,0 +1,74 @@
+#!/bin/bash
+# Check which virtualization technology to use
+# We prefer kvm, kqemu, userspace in that order.
+
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
+ARCH="${ARCH-$(uname -m)}"
+QEMU_CPU="${QEMU_CPU:-max}"
+
+[[ -x /usr/bin/qemu ]] && BIN=/usr/bin/qemu && ARGS=(-cpu "$QEMU_CPU")
+(lsmod | grep -q '^kqemu ') && BIN=/usr/bin/qemu && ARGS=(-kernel-kqemu -cpu host)
+[[ -z ${NO_KVM-} && -c /dev/kvm && -x /usr/bin/kvm ]] && BIN=/usr/bin/kvm && ARGS=(-cpu host)
+[[ -z ${NO_KVM-} && -c /dev/kvm && -x /usr/bin/qemu-kvm ]] && BIN=/usr/bin/qemu-kvm && ARGS=(-cpu host)
+[[ -z ${NO_KVM-} && -c /dev/kvm && -x /usr/libexec/qemu-kvm ]] && BIN=/usr/libexec/qemu-kvm && ARGS=(-cpu host)
+[[ -x "/usr/bin/qemu-system-${ARCH}" ]] && BIN="/usr/bin/qemu-system-${ARCH}" && ARGS=(-cpu "$QEMU_CPU")
+[[ -z ${NO_KVM-} && -c /dev/kvm && -x "/usr/bin/qemu-system-${ARCH}" ]] && BIN="/usr/bin/qemu-system-${ARCH}" && ARGS=(-enable-kvm -cpu host)
+
+[[ $BIN ]] || {
+ echo "Could not find a working KVM or QEMU to test with!" >&2
+ echo "Please install kvm or qemu." >&2
+ exit 1
+}
+
+case "$ARCH" in
+ aarch64 | arm64)
+ ARGS+=(-M "virt,gic-version=max")
+ ;;
+ amd64 | i?86 | x86_64)
+ ARGS+=(-M q35)
+ ;;
+ arm | armhf | armv7l)
+ ARGS+=(-M virt)
+ ;;
+ ppc64el | ppc64le)
+ ARGS+=(-M "cap-ccf-assist=off,cap-cfpc=broken,cap-ibs=broken,cap-sbbc=broken")
+ ;;
+esac
+
+# Provide rng device sourcing the hosts /dev/urandom and other standard parameters
+ARGS+=(-smp 2 -m 1024 -nodefaults -vga none -display none -no-reboot -device virtio-rng-pci)
+
+if ! [[ $* == *-daemonize* ]] && ! [[ $* == *-daemonize* ]]; then
+ ARGS+=(-serial stdio)
+fi
+
+KVERSION=${KVERSION-$(uname -r)}
+
+VMLINUZ="/lib/modules/${KVERSION}/vmlinuz"
+if ! [ -f "$VMLINUZ" ]; then
+ VMLINUZ="/lib/modules/${KVERSION}/vmlinux"
+fi
+
+if ! [ -f "$VMLINUZ" ]; then
+ [[ -f /etc/machine-id ]] && read -r MACHINE_ID < /etc/machine-id
+
+ if [[ $MACHINE_ID ]] && { [[ -d /boot/${MACHINE_ID} ]] || [[ -L /boot/${MACHINE_ID} ]]; }; then
+ VMLINUZ="/boot/${MACHINE_ID}/$KVERSION/linux"
+ elif [ -f "/boot/vmlinuz-${KVERSION}" ]; then
+ VMLINUZ="/boot/vmlinuz-${KVERSION}"
+ elif [ -f "/boot/vmlinux-${KVERSION}" ]; then
+ VMLINUZ="/boot/vmlinux-${KVERSION}"
+ else
+ echo "Could not find a Linux kernel version $KVERSION to test with!" >&2
+ echo "Please install linux." >&2
+ exit 1
+ fi
+fi
+
+# only set -kernel if -initrd is specified
+if [[ $* == *-initrd* ]]; then
+ ARGS+=(-kernel "$VMLINUZ")
+fi
+
+echo "${0##*/}: $BIN ${ARGS[*]@Q} ${*@Q}"
+exec "$BIN" "${ARGS[@]}" "$@"