Some general comments on using the patch: * For libguestfs I chose to add -compat deprecated-input=reject,deprecated-output=hide This is only enabled in developer builds of libguestfs when we are running qemu directly (not via libvirt). The patch for this is attached. * What's the point/difference in having reject vs crash? * I hope that by hiding deprecated QAPI fields we may detect errors in libguestfs, but I suspect what'll happen is it'll cause fall-back behaviour which might be harder to detect. * Be *really* good to have this for command line parameters! Notes on the attached patch: * https://libguestfs.org/guestfs-building.1.html * Simple test: LIBGUESTFS_BACKEND=direct \ LIBGUESTFS_HV=~/d/qemu/build/x86_64-softmmu/qemu-system-x86_64 \ ./run libguestfs-test-tool * Run the full test suite: LIBGUESTFS_HV=~/d/qemu/build/x86_64-softmmu/qemu-system-x86_64 \ make -k check-direct Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW
>From 90df6dc8a3278800f9f9dc23f626df5fa00b5950 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" <rjones@xxxxxxxxxx> Date: Mon, 21 Sep 2020 13:18:05 +0100 Subject: [PATCH] lib: direct: Pass qemu -compat to detect deprecated features. In developer versions of libguestfs only, pass the qemu -compat option which will reject deprecated qemu features, giving us early warning if we are using something that may be removed in future. This does not affect stable branch builds or old versions of qemu which did not have this flag. --- lib/guestfs-internal.h | 3 +++ lib/launch-direct.c | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h index d7ec7215d..4ad1cd125 100644 --- a/lib/guestfs-internal.h +++ b/lib/guestfs-internal.h @@ -33,6 +33,9 @@ #include <pcre.h> +/* Is this a developer version of libguestfs? */ +#define IS_DEVELOPER_VERSION ((PACKAGE_VERSION_MINOR & 1) == 1) + /* Minimum required version of libvirt for the libvirt backend. * * This is also checked at runtime because you can dynamically link diff --git a/lib/launch-direct.c b/lib/launch-direct.c index b6ed9766f..3e42609ff 100644 --- a/lib/launch-direct.c +++ b/lib/launch-direct.c @@ -501,6 +501,17 @@ launch_direct (guestfs_h *g, void *datav, const char *arg) if (guestfs_int_qemu_supports (g, data->qemu_data, "-enable-fips")) flag ("-enable-fips"); + /* In non-stable versions of libguestfs, pass the -compat option to + * qemu so we can look for potentially deprecated features. + */ + if (IS_DEVELOPER_VERSION && + guestfs_int_qemu_supports (g, data->qemu_data, "-compat")) { + start_list ("-compat") { + append_list ("deprecated-input=reject"); + append_list ("deprecated-output=hide"); + } end_list (); + } + /* Newer versions of qemu (from around 2009/12) changed the * behaviour of monitors so that an implicit '-monitor stdio' is * assumed if we are in -nographic mode and there is no other -- 2.28.0.rc2