Richard W.M. Jones
2020-Feb-06 16:16 UTC
Re: [Libguestfs] [PATCH v2] launch: add support for autodetection of appliance image format
On Tue, Jun 27, 2017 at 07:42:20PM +0300, Pavel Butsykin wrote:> This feature allows you to use different image formats for the fixed > appliance. The raw format is used by default.I wonder if you're stil using this feature? Unfortunately because of a recent change in libvirt it is no longer possible to have a backing file where libvirt will autodetect the format. See: https://bugzilla.redhat.com/show_bug.cgi?id=1798148#c3 Therefore the only way to actually do this now would be either for libguestfs to detect the format (there is an API for this: guestfs_disk_format), or else to hard code the format in the ./configure option. In any case I will need to revert this until we can think of something else (if you still need the feature) because it will simply break with libvirt >= 6.0. Rich.> Signed-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com> > --- > lib/launch-direct.c | 2 ++ > lib/launch-libvirt.c | 19 ++++++++++++------- > m4/guestfs_appliance.m4 | 11 +++++++++++ > 3 files changed, 25 insertions(+), 7 deletions(-) > > diff --git a/lib/launch-direct.c b/lib/launch-direct.c > index 0be662e25..b9b54857a 100644 > --- a/lib/launch-direct.c > +++ b/lib/launch-direct.c > @@ -592,7 +592,9 @@ launch_direct (guestfs_h *g, void *datav, const char *arg) > append_list ("id=appliance"); > append_list ("cache=unsafe"); > append_list ("if=none"); > +#ifndef APPLIANCE_FMT_AUTO > append_list ("format=raw"); > +#endif > } end_list (); > start_list ("-device") { > append_list ("scsi-hd"); > diff --git a/lib/launch-libvirt.c b/lib/launch-libvirt.c > index 4adb2cfb3..030ea6911 100644 > --- a/lib/launch-libvirt.c > +++ b/lib/launch-libvirt.c > @@ -212,9 +212,10 @@ get_source_format_or_autodetect (guestfs_h *g, struct drive *drv) > > /** > * Create a qcow2 format overlay, with the given C<backing_drive> > - * (file). The C<format> parameter, which must be non-NULL, is the > - * backing file format. This is used to create the appliance overlay, > - * and also for read-only drives. > + * (file). The C<format> parameter is the backing file format. > + * The C<format> parameter can be NULL, in this case the backing > + * format will be determined automatically. This is used to create > + * the appliance overlay, and also for read-only drives. > */ > static char * > make_qcow2_overlay (guestfs_h *g, const char *backing_drive, > @@ -223,8 +224,6 @@ make_qcow2_overlay (guestfs_h *g, const char *backing_drive, > char *overlay; > struct guestfs_disk_create_argv optargs; > > - assert (format != NULL); > - > if (guestfs_int_lazy_make_tmpdir (g) == -1) > return NULL; > > @@ -232,8 +231,10 @@ make_qcow2_overlay (guestfs_h *g, const char *backing_drive, > > optargs.bitmask = GUESTFS_DISK_CREATE_BACKINGFILE_BITMASK; > optargs.backingfile = backing_drive; > - optargs.bitmask |= GUESTFS_DISK_CREATE_BACKINGFORMAT_BITMASK; > - optargs.backingformat = format; > + if (format) { > + optargs.bitmask |= GUESTFS_DISK_CREATE_BACKINGFORMAT_BITMASK; > + optargs.backingformat = format; > + } > > if (guestfs_disk_create_argv (g, overlay, "qcow2", -1, &optargs) == -1) { > free (overlay); > @@ -461,7 +462,11 @@ launch_libvirt (guestfs_h *g, void *datav, const char *libvirt_uri) > > /* Note that appliance can be NULL if using the old-style appliance. */ > if (appliance) { > +#ifdef APPLIANCE_FMT_AUTO > + params.appliance_overlay = make_qcow2_overlay (g, appliance, NULL); > +#else > params.appliance_overlay = make_qcow2_overlay (g, appliance, "raw"); > +#endif > if (!params.appliance_overlay) > goto cleanup; > } > diff --git a/m4/guestfs_appliance.m4 b/m4/guestfs_appliance.m4 > index 81c43879f..4e1ec8135 100644 > --- a/m4/guestfs_appliance.m4 > +++ b/m4/guestfs_appliance.m4 > @@ -139,3 +139,14 @@ AC_SUBST([GUESTFS_DEFAULT_PATH]) > > AC_DEFINE_UNQUOTED([GUESTFS_DEFAULT_PATH], ["$GUESTFS_DEFAULT_PATH"], > [Define guestfs default path.]) > + > +AC_ARG_ENABLE([appliance-fmt-auto], > + [AS_HELP_STRING([--enable-appliance-fmt-auto], > + [enable autodetection of appliance image format @<:@default=no@:>@])], > + [ENABLE_APPLIANCE_FMT_AUTO="$enableval"], > + [ENABLE_APPLIANCE_FMT_AUTO=no]) > + > +if test "x$ENABLE_APPLIANCE_FMT_AUTO" = "xyes"; then > + AC_DEFINE([APPLIANCE_FMT_AUTO], [1], > + [Define to 1 if enabled autodetection of appliance image format.]) > +fi > -- > 2.13.0 > > _______________________________________________ > Libguestfs mailing list > Libguestfs@redhat.com > https://www.redhat.com/mailman/listinfo/libguestfs-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org
Richard W.M. Jones
2020-Feb-06 16:29 UTC
Re: [Libguestfs] [PATCH v2] launch: add support for autodetection of appliance image format
On Thu, Feb 06, 2020 at 04:16:46PM +0000, Richard W.M. Jones wrote:> On Tue, Jun 27, 2017 at 07:42:20PM +0300, Pavel Butsykin wrote: > > This feature allows you to use different image formats for the fixed > > appliance. The raw format is used by default. > > I wonder if you're stil using this feature? > > Unfortunately because of a recent change in libvirt it is no longer > possible to have a backing file where libvirt will autodetect the > format. See: > > https://bugzilla.redhat.com/show_bug.cgi?id=1798148#c3 > > Therefore the only way to actually do this now would be either for > libguestfs to detect the format (there is an API for this: > guestfs_disk_format), or else to hard code the format in the > ./configure option. > > In any case I will need to revert this until we can think of something > else (if you still need the feature) because it will simply break with > libvirt >= 6.0.Actually I can think of a way where we wouldn't need to revert this. However I'm still interested in whether you are using this feature or not. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://people.redhat.com/~rjones/virt-df/
Apparently Analagous Threads
- Re: [PATCH 1/2] launch: add support for autodetection of appliance image format
- Re: [PATCH 2/2] build: add ./configure --enable-appliance-fmt-auto option
- [PATCH] launch: libvirt: Autodetect backing format for drive overlays (RHBZ#1354335).
- Re: [PATCH v1 2/2] build: add ./configure --with-guestfs-path option
- [PATCH 6/6] lib: Use guestfs_int_make_temp_path in a few more places.