blob: 149a4079d3e94a9c34b50605ae7fd4b4bf6d5a3c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#!/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)}"
case "$ARCH" in
amd64 | i?86 | x86_64)
QEMU_CPU="IvyBridge-v2"
;;
esac
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 i6300esb -watchdog-action poweroff -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}"
elif [ -f "/boot/kernel-${KVERSION}" ]; then
VMLINUZ="/boot/kernel-${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[@]}" "$@"
|