from Alexander Graf's script: http://www.spinics.net/lists/kvm/msg72389.html --- Hi,
It adds a little script which try to find a QEMU binary on the system and enable kvm if it's available. This script is used when running QEMU in the tests. (We can also specify a different kernel and initramfs) Ronny TODO | 1 - test/README.testsuite | 19 ++++- test/TEST-01-BASIC/test.sh | 6 +- test/TEST-02-CRYPTSETUP/test.sh | 6 +- test/TEST-03-JOBS/test.sh | 6 +- test/run-qemu.sh | 150 ++++++++++++++++++++++++++++++++++++++++ test/test-functions | 10 +-- 7 files changed, 170 insertions(+), 28 deletions(-) create mode 100755 test/run-qemu.sh diff --git a/TODO b/TODO index 9698082..f493dbb 100644 --- a/TODO +++ b/TODO @@ -168,7 +168,6 @@ Features: * test/: - add 'set -e' to scripts in test/ - make stuff in test/ work with separate output dir - - qemu wrapper script: http://www.spinics.net/lists/kvm/msg72389.html * systemctl delete x.snapshot leaves no trace in logs (at least at default level). diff --git a/test/README.testsuite b/test/README.testsuite index 54d0eaa..3b841cd 100644 --- a/test/README.testsuite +++ b/test/README.testsuite @@ -25,11 +25,24 @@ $ make all $ cd test/TEST-01-BASIC $ sudo make clean setup run +QEMU +==== + If you want to log in the testsuite virtual machine, you can specify -additional kernel command line parameter with $DEBUGFAIL. +additional kernel command line parameter with $KERNEL_APPEND. -$ sudo make DEBUGFAIL="systemd.unit=multi-user.target" clean setup run +$ sudo make KERNEL_APPEND="systemd.unit=multi-user.target" clean setup run you can even skip the "clean" and "setup" if you want to run the machine again. -$ sudo make DEBUGFAIL="systemd.unit=multi-user.target" run +$ sudo make KERNEL_APPEND="systemd.unit=multi-user.target" run + +You can specify a different kernel and initramfs with $KERNEL_BIN and $INITRD. +(Fedora's default kernel path and initramfs are used by default) + +$ sudo make KERNEL_BIN=/boot/vmlinuz-foo INITRD=/boot/initramfs-bar clean check + +A script will try to find your QEMU binary. If you want to specify a different +one you can use $QEMU_BIN. + +$ sudo make QEMU_BIN=/path/to/qemu/qemu-kvm clean check diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh index aaf63f4..c598af9 100755 --- a/test/TEST-01-BASIC/test.sh +++ b/test/TEST-01-BASIC/test.sh @@ -5,9 +5,6 @@ TEST_DESCRIPTION="Basic systemd setup" . $TEST_BASE_DIR/test-functions -# Uncomment this to debug failures -#DEBUGFAIL="systemd.unit=multi-user.target" - check_result_qemu() { ret=1 mkdir -p $TESTDIR/root @@ -23,8 +20,7 @@ check_result_qemu() { } test_run() { - if check_qemu ; then - run_qemu + if run_qemu; then check_result_qemu || return 1 else dwarn "can't run qemu-kvm, skipping" diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh index 86617df..b9161e7 100755 --- a/test/TEST-02-CRYPTSETUP/test.sh +++ b/test/TEST-02-CRYPTSETUP/test.sh @@ -5,9 +5,6 @@ TEST_DESCRIPTION="cryptsetup systemd setup" . $TEST_BASE_DIR/test-functions -# Uncomment this to debug failures -#DEBUGFAIL="systemd.unit=multi-user.target" - check_result_qemu() { ret=1 mkdir -p $TESTDIR/root @@ -28,8 +25,7 @@ check_result_qemu() { test_run() { - if check_qemu ; then - run_qemu + if run_qemu; then check_result_qemu || return 1 else dwarn "can't run qemu-kvm, skipping" diff --git a/test/TEST-03-JOBS/test.sh b/test/TEST-03-JOBS/test.sh index 6303258..9190eb0 100755 --- a/test/TEST-03-JOBS/test.sh +++ b/test/TEST-03-JOBS/test.sh @@ -5,9 +5,6 @@ TEST_DESCRIPTION="Job-related tests" . $TEST_BASE_DIR/test-functions -# Uncomment this to debug failures -#DEBUGFAIL="systemd.unit=multi-user.target" - check_result_qemu() { ret=1 mkdir -p $TESTDIR/root @@ -23,8 +20,7 @@ check_result_qemu() { } test_run() { - if check_qemu ; then - run_qemu + if run_qemu; then check_result_qemu || return 1 else dwarn "can't run qemu-kvm, skipping" diff --git a/test/run-qemu.sh b/test/run-qemu.sh new file mode 100755 index 0000000..17708da --- /dev/null +++ b/test/run-qemu.sh @@ -0,0 +1,150 @@ +#!/bin/bash +# +# based on: http://www.spinics.net/lists/kvm/msg72389.html +# + +# Uncomment this to debug failures +#KERNEL_APPEND="systemd.unit=multi-user.target" +KERNEL_VER=${KERNEL_VER-$(uname -r)} +[ "$KERNEL_BIN" ] || KERNEL_BIN=/boot/vmlinuz-$KERNEL_VER +[ "$INITRD" ] || INITRD=/boot/initramfs-${KERNEL_VER}.img +[ "$SMP" ] || SMP=1 +BASENAME=$(basename "$0") +IMAGE= + +function usage() { + echo "$BASENAME IMAGE -- [QEMU_OPTIONS]" +} + +function verify_qemu() { + QEMU="$(which $1 2>/dev/null)" + + # binary exists? + [ -x "$QEMU" ] || exit 1 + + # we need a version that knows -machine + if ! "$QEMU" --help | grep -q -- '-machine'; then + exit 1 + fi + + echo "$QEMU" + exit 0 +} + +function find_qemu_bin() { + # Try to find the KVM accelerated QEMU binary + + # SUSE and Red Hat call the binary qemu-kvm + [ "$QEMU_BIN" ] && return || QEMU_BIN=$(verify_qemu qemu-kvm) + + # Debian and Gentoo call it kvm + [ "$QEMU_BIN" ] && return || QEMU_BIN=$(verify_qemu kvm) + + [ "$ARCH" ] || ARCH=$(uname -m) + case $ARCH in + x86_64) + # QEMU's own build system calls it qemu-system-x86_64 + [ "$QEMU_BIN" ] || QEMU_BIN=$(verify_qemu qemu-system-x86_64) + ;; + i*86) + # new i386 version of QEMU + [ "$QEMU_BIN" ] || QEMU_BIN=$(verify_qemu qemu-system-i386) + + # i386 version of QEMU + [ "$QEMU_BIN" ] || QEMU_BIN=$(verify_qemu qemu) + ;; + esac + + if [ ! -e "$QEMU_BIN" ]; then + echo "\ +Could not find a usable QEMU binary. Please install one from \ +your distro or from source code using: + +$ git clone git://git.qemu.org/qemu.git +$ cd qemu +$ ./configure +$ make -j +$ sudo make install + +or point this script to a working version of qemu using + +$ export QEMU_BIN=/path/to/qemu-kvm +" >&2 + exit 1 + fi + + # The binaries without kvm in their name can be too old to support KVM, so + # check for that before the user gets confused + if [ ! "$(echo $QEMU_BIN | grep kvm)" -a \ + ! "$($QEMU_BIN --help | egrep '^-machine')" ]; then + echo "Your QEMU binary is too old, please update to at least 0.15." >&2 + exit 1 + fi +} + +GETOPT=`getopt -o h --long help -n "$(basename \"$0\")" -- "$@"` + +if [ $? != 0 ]; then + echo "Terminating..." >&2 + exit 1 +fi + +eval set -- "$GETOPT" + +while true; do + case "$1" in + -h|--help) + usage + exit 0 + ;; + --) + shift + break + ;; + *) + echo "Could not parse option: $1" >&2 + exit 1 + ;; + esac + shift +done +IMAGE=$1 +shift + +if [ ! -e "$KERNEL_BIN" ]; then + echo "Could not find kernel binary: $KERNEL_BIN" >&2 + exit 1 +fi + +if [ ! -e "$IMAGE" ]; then + echo "Could not find image: $IMAGE" >&2 + exit 1 +fi + +find_qemu_bin + +KERNEL_APPEND="root=/dev/sda1 \ +systemd.log_level=debug \ +raid=noautodetect \ +loglevel=2 \ +init=/usr/lib/systemd/systemd \ +ro \ +console=ttyS0 \ +selinux=0 \ +$KERNEL_APPEND \ +" + +QEMU_OPTIONS="-machine accel=kvm:tcg \ +-smp $SMP \ +-net none \ +-m 512M \ +-nographic \ +-kernel $KERNEL_BIN \ +" + +if [ "$INITRD" ]; then + QEMU_OPTIONS="$QEMU_OPTIONS -initrd $INITRD" +fi + +echo "$QEMU_BIN $QEMU_OPTIONS -append \"$KERNEL_APPEND\" $@ $IMAGE" +$QEMU_BIN $QEMU_OPTIONS -append "$KERNEL_APPEND" "$@" $IMAGE diff --git a/test/test-functions b/test/test-functions index a184ed7..da3bd07 100644 --- a/test/test-functions +++ b/test/test-functions @@ -11,11 +11,7 @@ BASICTOOLS="sh bash setsid loadkeys setfont login sushell sulogin gzip sleep ech DEBUGTOOLS="df free ls stty cat ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort" run_qemu() { - qemu-kvm \ - -hda $TESTDIR/rootdisk.img \ - -m 512M -nographic \ - -net none -kernel /boot/vmlinuz-$KERNEL_VER \ - -append "root=/dev/sda1 systemd.log_level=debug raid=noautodetect loglevel=2 init=/usr/lib/systemd/systemd ro console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" || return 1 + ../run-qemu.sh $TESTDIR/rootdisk.img || return 1 } run_nspawn() { @@ -1043,10 +1039,6 @@ inst_libdir_file() { fi } -check_qemu() { - command -v qemu-kvm &>/dev/null && [[ -c /dev/kvm ]] -} - check_nspawn() { [[ -d /sys/fs/cgroup/systemd ]] } -- 1.8.4.2 _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
