diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-06-12 15:31:35 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-06-12 16:02:10 +0100 |
commit | 295d6af48d1d8c5238d1536b0c6a2ece42b0b445 (patch) | |
tree | e4f3d32121290c6428e18828b1bb51c0d1138193 | |
parent | 7652b5aece3ac8fba5f34dc630fa772b3b63211f (diff) | |
download | libguestfs-295d6af48d1d8c5238d1536b0c6a2ece42b0b445.tar.gz libguestfs-295d6af48d1d8c5238d1536b0c6a2ece42b0b445.tar.xz libguestfs-295d6af48d1d8c5238d1536b0c6a2ece42b0b445.zip |
Require QEMU >= 1.0.
QEMU 1.0 was released at the end of 2011.
Remove all the cruft about detecting broken -machine type which
was only required for QEMU 0.15.
This also reverts commit 30ecbf3ec2ada68f7e125a180553e31b069033b7.
Even on ARM you can pass -machine accel=kvm:tcg and qemu does the
right thing, so I'm not sure why we wanted to disable that.
-rw-r--r-- | README | 2 | ||||
-rw-r--r-- | configure.ac | 68 | ||||
-rw-r--r-- | src/launch.c | 27 |
3 files changed, 27 insertions, 70 deletions
@@ -46,7 +46,7 @@ For basic functionality and the C tools: - look at appliance/packagelist.in and install as many of the packages that apply to your distro as possible -- recent QEMU >= 0.13 (0.14 or later is better) with virtio-serial support +- QEMU >= 1.0. - kernel >= 2.6.34 with virtio-serial support enabled. diff --git a/configure.ac b/configure.ac index 69da9a5d..ca0f9f1b 100644 --- a/configure.ac +++ b/configure.ac @@ -568,55 +568,29 @@ working. ]) fi - AS_IF([test "x$QEMU_OPTIONS" = "x"],[ - dnl qemu 0.15 was released with broken support for '-machine', - dnl requiring you to add the machine type: '-machine pc,[...]'. - dnl The problem is that 'pc' is only applicable for PC-like - dnl hardware, so we cannot do this as a general solution. Since - dnl qemu 0.15, this problem has been fixed so now the default - dnl machine type is chosen (qemu commit 2645c6dcaf6ea2a51a). - dnl - dnl We need to work out if this qemu is the broken version, so we - dnl can add 'pc' just for this broken version. - dnl - dnl Note that old qemu didn't support the '-machine' option at all. - dnl - dnl We use the -kernel option for testing this, because this option - dnl is processed very late, after qemu has set up the machine. - AC_MSG_CHECKING([for broken '-machine accel=tcg' option in $QEMU]) - LC_ALL=C $QEMU -nographic -machine accel=tcg -kernel /NO_SUCH_FILE \ - > config1.tmp 2>&1 - LC_ALL=C $QEMU -nographic -machine pc,accel=tcg -kernel /NO_SUCH_FILE \ - > config2.tmp 2>&1 - if cmp -s config1.tmp config2.tmp; then - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - AC_DEFINE([QEMU_MACHINE_TYPE_IS_BROKEN],[1],[qemu -machine accel=tcg option is broken (in qemu 0.15 only)]) - fi - rm config1.tmp config2.tmp - - dnl See if the '-machine [pc,]accel=tcg' option is required in - dnl order to run the virtio-serial test below. This happens when - dnl we run qemu-kvm inside a VM without forcing TCG: - dnl - dnl Could not access KVM kernel module: No such file or directory - dnl failed to initialize KVM: No such file or directory - dnl No accelerator found! - AC_MSG_CHECKING([if -machine @<:@pc,@:>@accel=tcg option is required to test virtio-serial feature]) - if $QEMU -nographic -device \? >/dev/null 2>&1; then - : - elif $QEMU -machine accel=tcg -nographic -device \? >/dev/null 2>&1; then - QEMU_OPTIONS_FOR_TEST="-machine accel=tcg" - elif $QEMU -machine pc,accel=tcg -nographic -device \? >/dev/null 2>&1; then - QEMU_OPTIONS_FOR_TEST="-machine pc,accel=tcg" - # else nothing ... it'll fail below. - fi - AC_MSG_RESULT([$QEMU_OPTIONS_FOR_TEST]) - ]) + AC_MSG_CHECKING([that $QEMU -version works]) + if $QEMU -version >&AS_MESSAGE_LOG_FD 2>&1; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_FAILURE( +[$QEMU -version: command failed. + +This could be a very old version of qemu, or qemu might not be +working. +]) + fi + + AC_MSG_CHECKING([for $QEMU version >= 1]) + if $QEMU -version | grep -sq 'version @<:@1-@:>@'; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([$QEMU version must be >= 1.0.]) + fi AC_MSG_CHECKING([for virtio-serial support in $QEMU]) - if $QEMU $QEMU_OPTIONS $QEMU_OPTIONS_FOR_TEST -nographic -device \? 2>&1 | grep -sq virtio-serial; then + if $QEMU $QEMU_OPTIONS -machine accel=kvm:tcg -device \? 2>&1 | grep -sq virtio-serial; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) diff --git a/src/launch.c b/src/launch.c index 7bc913b0..e175dd96 100644 --- a/src/launch.c +++ b/src/launch.c @@ -678,29 +678,13 @@ launch_appliance (guestfs_h *g) add_cmdline_shell_unquoted (g, QEMU_OPTIONS); } - /* The #if on the next line should really be "architectures for - * which KVM is commonly available. - */ -#if defined(__i386__) || defined(__x86_64__) /* The qemu -machine option (added 2010-12) is a bit more sane * since it falls back through various different acceleration * modes, so try that first (thanks Markus Armbruster). */ if (qemu_supports (g, "-machine")) { add_cmdline (g, "-machine"); -#if QEMU_MACHINE_TYPE_IS_BROKEN - /* Workaround for qemu 0.15: We have to add the '[type=]pc' - * since there is no default. This is not a permanent solution - * because this only works on PC-like hardware. Other platforms - * like ppc would need a different machine type. - * - * This bug is fixed in qemu commit 2645c6dcaf6ea2a51a, and was - * not a problem in qemu < 0.15. - */ - add_cmdline (g, "pc,accel=kvm:tcg"); -#else add_cmdline (g, "accel=kvm:tcg"); -#endif } else { /* qemu sometimes needs this option to enable hardware * virtualization, but some versions of 'qemu-kvm' will use KVM @@ -718,7 +702,6 @@ launch_appliance (guestfs_h *g) is_openable (g, "/dev/kvm", O_RDWR|O_CLOEXEC)) add_cmdline (g, "-enable-kvm"); } -#endif /* i386 or x86-64 */ if (g->smp > 1) { snprintf (buf, sizeof buf, "%d", g->smp); @@ -1339,11 +1322,11 @@ test_qemu (guestfs_h *g) snprintf (cmd, sizeof cmd, "LC_ALL=C '%s' -nographic -help", g->qemu); - /* qemu -help should always work (qemu -version OTOH wasn't - * supported by qemu 0.9). If this command doesn't work then it - * probably indicates that the qemu binary is missing. + /* If this command doesn't work then it probably indicates that the + * qemu binary is missing. */ if (test_qemu_cmd (g, cmd, &g->qemu_help) == -1) { + qemu_error: error (g, _("command failed: %s\n\nIf qemu is located on a non-standard path, try setting the LIBGUESTFS_QEMU\nenvironment variable. There may also be errors printed above."), cmd); return -1; @@ -1352,8 +1335,8 @@ test_qemu (guestfs_h *g) snprintf (cmd, sizeof cmd, "LC_ALL=C '%s' -nographic -version 2>/dev/null", g->qemu); - /* Intentionally ignore errors from qemu -version. */ - ignore_value (test_qemu_cmd (g, cmd, &g->qemu_version)); + if (test_qemu_cmd (g, cmd, &g->qemu_version) == -1) + goto qemu_error; return 0; } |