summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-06 02:26:06 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-06 02:26:06 +0000
commit5957157a0edfe9f07583bdb7530b172da2d7adfd (patch)
tree3bbe9ee8b02c4b84782d71167ed57549c008ce92
parent568b42b6ea0df8c498b6d8583c24caf101a47dd8 (diff)
automatic import of libguestfsopeneuler24.03_LTS
-rw-r--r--.gitignore3
-rw-r--r--0001-update-common-submodule.patch138
-rw-r--r--0002-update-common-submodule.patch88
-rw-r--r--0003-daemon-selinux-relabel-don-t-exclude-selinux-if-it-s.patch63
-rw-r--r--0004-daemon-selinux-relabel-search-for-invalid-option-in-.patch33
-rw-r--r--0005-daemon-selinux-relabel-run-setfiles-with-T-0-if-supp.patch78
-rw-r--r--0006-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch606
-rw-r--r--0007-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch66
-rw-r--r--0008-Remove-virt-dib.patch63
-rw-r--r--0009-lib-Choose-q35-machine-type-for-x86-64.patch32
-rw-r--r--0010-RHEL-Revert-build-Remove-bundled-copy-of-ocaml-augea.patch1686
-rw-r--r--0011-update-common-submodule.patch203
-rw-r--r--0012-LUKS-on-LVM-inspection-test-rename-VGs-and-LVs.patch97
-rw-r--r--0013-LUKS-on-LVM-inspection-test-test-dev-mapper-VG-LV-tr.patch46
-rw-r--r--0014-Replace-Pervasives.-with-Stdlib.patch119
-rw-r--r--0015-fuse-Don-t-call-fclose-NULL-on-error-paths.patch62
-rw-r--r--0016-ocaml-implicit_close-test-collect-all-currently-unre.patch38
-rw-r--r--0017-ocaml-Replace-old-enter-leave_blocking_section-calls.patch70
-rw-r--r--0018-ocaml-Release-runtime-lock-around-guestfs_close.patch28
-rw-r--r--0019-ocaml-Conditionally-acquire-the-lock-in-callbacks.patch73
-rw-r--r--0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch59
-rw-r--r--0021-ocaml-Use-Caml_state_opt-in-preference-to-caml_state.patch25
-rw-r--r--0022-generator-Add-chown-option-for-virt-customize.patch398
-rw-r--r--0023-lib-remove-guestfs_int_cmd_clear_close_files.patch101
-rw-r--r--0024-docs-fix-broken-link-in-the-guestfs-manual.patch34
-rw-r--r--0025-docs-clarify-sockdir-s-separation.patch75
-rw-r--r--0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch144
-rw-r--r--0027-generator-customize-Add-new-StringTriplet-for-use-by.patch241
-rw-r--r--0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch57
-rw-r--r--0029-ruby-Replace-MiniTest-with-Minitest.patch208
-rw-r--r--0030-ruby-Get-rid-of-old-Test-Unit-compatibility.patch278
-rw-r--r--0031-generator-Sort-virt-customize-options-into-alphabeti.patch63
-rw-r--r--0032-generator-Add-new-virt-customize-tar-in-operation.patch173
-rw-r--r--0033-New-mailing-list-email-address.patch271
-rw-r--r--0034-New-mailing-list-archives.patch590
-rw-r--r--0035-lib-Include-libxml-parser.h-for-xmlReadMemory.patch25
-rw-r--r--0036-ocaml-Use-Gc.finalise-instead-of-a-C-finalizer.patch132
-rw-r--r--0037-ocaml-Nullify-custom-block-before-releasing-runtime-.patch39
-rw-r--r--0038-Update-common-submodule.patch162
-rw-r--r--0039-tests-Test-guestfish-key-all-.-selector.patch35
-rw-r--r--README-replacement.in37
-rwxr-xr-xcopy-patches.sh65
-rw-r--r--guestfish.sh6
-rw-r--r--libguestfs-1.50.1.tar.gz.sig17
-rw-r--r--libguestfs.spec5038
-rw-r--r--sources3
-rw-r--r--yum.conf.in17
47 files changed, 11885 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..38c4d69 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/libguestfs-1.50.1.tar.gz
+/libguestfs-common-1.50.1.tar.gz
+/libguestfs.keyring
diff --git a/0001-update-common-submodule.patch b/0001-update-common-submodule.patch
new file mode 100644
index 0000000..f15d70b
--- /dev/null
+++ b/0001-update-common-submodule.patch
@@ -0,0 +1,138 @@
+From 5c672d1541e7d769e73e6858944d33f66be12f30 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Tue, 14 Mar 2023 14:15:05 +0100
+Subject: [PATCH] update common submodule
+
+Andrey Drobyshev (2):
+ inject_virtio_win: add Virtio_SCSI to block_type
+ inject_virtio_win: write the proper block controller PCI ID to Win registry
+
+Richard W.M. Jones (2):
+ mlcustomize: Fix overlong comment
+ mlcustomize: Add accessors for block driver priority list
+
+Roman Kagan (1):
+ inject_virtio_win: match only vendor/device/revision
+
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+(cherry picked from commit 7414ac40c7df0a8938a05ba50907312b0093d107)
+---
+ common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Submodule common 90e0077e..360e037d:
+diff --git a/common/mlcustomize/inject_virtio_win.ml b/common/mlcustomize/inject_virtio_win.ml
+index 5f4aab72..2a30b200 100644
+--- a/common/mlcustomize/inject_virtio_win.ml
++++ b/common/mlcustomize/inject_virtio_win.ml
+@@ -49,9 +49,12 @@ type t = {
+ of libosinfo. Although this behaviour is documented, IMHO it has
+ always been a bad idea. We should change this in future to allow
+ the user to select where they want to get drivers from. XXX *)
++
++ mutable block_driver_priority : string list
++ (** List of block drivers *)
+ }
+
+-type block_type = Virtio_blk | IDE
++type block_type = Virtio_blk | Virtio_SCSI | IDE
+ and net_type = Virtio_net | E1000 | RTL8139
+ and machine_type = I440FX | Q35 | Virt
+
+@@ -107,13 +110,17 @@ and get_inspection g root =
+ { g; root;
+ i_arch; i_major_version; i_minor_version; i_osinfo;
+ i_product_variant; i_windows_current_control_set; i_windows_systemroot;
+- virtio_win = ""; was_set = false }
++ virtio_win = ""; was_set = false;
++ block_driver_priority = ["virtio_blk"; "vrtioblk"; "viostor"] }
++
++let get_block_driver_priority t = t.block_driver_priority
++let set_block_driver_priority t v = t.block_driver_priority <- v
+
+ let scsi_class_guid = "{4D36E97B-E325-11CE-BFC1-08002BE10318}"
+-let viostor_legacy_pciid = "VEN_1AF4&DEV_1001&SUBSYS_00021AF4&REV_00"
+-let viostor_modern_pciid = "VEN_1AF4&DEV_1042&SUBSYS_11001AF4&REV_01"
+-let vioscsi_legacy_pciid = "VEN_1AF4&DEV_1004&SUBSYS_00081AF4&REV_00"
+-let vioscsi_modern_pciid = "VEN_1AF4&DEV_1048&SUBSYS_11001AF4&REV_01"
++let viostor_legacy_pciid = "VEN_1AF4&DEV_1001&REV_00"
++let viostor_modern_pciid = "VEN_1AF4&DEV_1042&REV_01"
++let vioscsi_legacy_pciid = "VEN_1AF4&DEV_1004&REV_00"
++let vioscsi_modern_pciid = "VEN_1AF4&DEV_1048&REV_01"
+
+ let rec inject_virtio_win_drivers ({ g } as t) reg =
+ (* Copy the virtio drivers to the guest. *)
+@@ -176,14 +183,13 @@ let rec inject_virtio_win_drivers ({ g } as t) reg =
+ else (
+ (* Can we install the block driver? *)
+ let block : block_type =
+- let filenames = ["virtio_blk"; "vrtioblk"; "viostor"] in
+ let viostor_driver = try (
+ Some (
+ List.find (
+ fun driver_file ->
+ let source = driverdir // driver_file ^ ".sys" in
+ g#exists source
+- ) filenames
++ ) t.block_driver_priority
+ )
+ ) with Not_found -> None in
+ match viostor_driver with
+@@ -194,16 +200,22 @@ let rec inject_virtio_win_drivers ({ g } as t) reg =
+ IDE
+
+ | Some driver_name ->
+- (* Block driver needs tweaks to allow booting; the rest is set up by PnP
+- * manager *)
++ (* Block driver needs tweaks to allow booting;
++ * the rest is set up by PnP manager.
++ *)
+ let source = driverdir // (driver_name ^ ".sys") in
+ let target = sprintf "%s/system32/drivers/%s.sys"
+ t.i_windows_systemroot driver_name in
+ let target = g#case_sensitive_path target in
++ let installed_block_type, legacy_pciid, modern_pciid =
++ match driver_name with
++ | "vioscsi" -> Virtio_SCSI, vioscsi_legacy_pciid, vioscsi_modern_pciid
++ | _ -> Virtio_blk, viostor_legacy_pciid, viostor_modern_pciid
++ in
+ g#cp source target;
+- add_guestor_to_registry t reg driver_name viostor_legacy_pciid;
+- add_guestor_to_registry t reg driver_name viostor_modern_pciid;
+- Virtio_blk in
++ add_guestor_to_registry t reg driver_name legacy_pciid;
++ add_guestor_to_registry t reg driver_name modern_pciid;
++ installed_block_type in
+
+ (* Can we install the virtio-net driver? *)
+ let net : net_type =
+diff --git a/common/mlcustomize/inject_virtio_win.mli b/common/mlcustomize/inject_virtio_win.mli
+index 0ced02e8..d14f0497 100644
+--- a/common/mlcustomize/inject_virtio_win.mli
++++ b/common/mlcustomize/inject_virtio_win.mli
+@@ -20,7 +20,7 @@
+
+ type t (** Handle *)
+
+-type block_type = Virtio_blk | IDE
++type block_type = Virtio_blk | Virtio_SCSI | IDE
+ and net_type = Virtio_net | E1000 | RTL8139
+ and machine_type = I440FX | Q35 | Virt
+
+@@ -64,6 +64,16 @@ val from_environment : Guestfs.guestfs -> string -> string -> t
+
+ This should only be used by [virt-v2v] and is considered a legacy method. *)
+
++val get_block_driver_priority : t -> string list
++val set_block_driver_priority : t -> string list -> unit
++(** Get or set the current block driver priority list. This is
++ a list of virtio-win block driver names (eg. ["viostor"]) that
++ we search until we come to the first [name ^ ".sys"] that
++ we find, and that is the block driver which gets installed.
++
++ This module contains a default priority list which should
++ be suitable for most use cases. *)
++
+ val inject_virtio_win_drivers : t -> Registry.t -> virtio_win_installed
+ (** [inject_virtio_win_drivers t reg]
+ installs virtio drivers from the driver directory or driver
diff --git a/0002-update-common-submodule.patch b/0002-update-common-submodule.patch
new file mode 100644
index 0000000..7c86882
--- /dev/null
+++ b/0002-update-common-submodule.patch
@@ -0,0 +1,88 @@
+From 89b6c8b458dcb00de83b543c47a6acb049f63f18 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Tue, 21 Mar 2023 16:55:15 +0100
+Subject: [PATCH] update common submodule
+
+HATAYAMA Daisuke (1):
+ progress: fix segmentation fault when TERM variable is "dumb"
+
+Laszlo Ersek (2):
+ detect_kernels: tighten "try" scope
+ detect_kernels: deal with RHEL's kernel-core / kernel-modules-core split
+
+rwmjones (1):
+ Merge pull request #5 from d-hatayama/fix_segfault_progress_bar
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2175703
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+(cherry picked from commit be11d25b3e2770d86699e94c5087e6625477d5ec)
+---
+ common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Submodule common 360e037d..70c10a07:
+diff --git a/common/mldrivers/linux_kernels.ml b/common/mldrivers/linux_kernels.ml
+index a46146a1..23ff76a5 100644
+--- a/common/mldrivers/linux_kernels.ml
++++ b/common/mldrivers/linux_kernels.ml
+@@ -125,9 +125,9 @@ let detect_kernels (g : G.guestfs) root bootloader apps =
+ *)
+ let modpath, version =
+ let prefix = "/lib/modules/" in
++ let prefix_len = String.length prefix in
+ try
+- let prefix_len = String.length prefix in
+- List.find_map (
++ let modpath, version = List.find_map (
+ fun filename ->
+ let filename_len = String.length filename in
+ if filename_len > prefix_len &&
+@@ -137,17 +137,29 @@ let detect_kernels (g : G.guestfs) root bootloader apps =
+ Some (filename, version)
+ ) else
+ None
+- ) files
++ ) files in
++ (* Fall back to the version in the vmlinuz file name not only if
++ * a candidate pathname couldn't be found under /lib/modules/,
++ * but also in case the candidate pathname doesn't reference a
++ * directory. See RHBZ#2175703.
++ *
++ * Note that this "is_dir" check is deliberately kept outside of
++ * the "find_map"'s mapper function above: we want the first
++ * candidate *to be* a directory, and not the first candidate
++ * *that is* a directory.
++ *)
++ if not (g#is_dir ~followsymlinks:true modpath) then
++ raise Not_found;
++ modpath, version
+ with Not_found ->
+ let version =
+ String.sub vmlinuz 14 (String.length vmlinuz - 14) in
+ let modpath = prefix ^ version in
++ (* Check that the modpath exists. *)
++ if not (g#is_dir ~followsymlinks:true modpath) then
++ raise Not_found;
+ modpath, version in
+
+- (* Check that the modpath exists. *)
+- if not (g#is_dir ~followsymlinks:true modpath) then
+- raise Not_found;
+-
+ (* Find the initramfs which corresponds to the kernel.
+ * Since the initramfs is built at runtime, and doesn't have
+ * to be covered by the RPM file list, this is basically
+diff --git a/common/progress/progress.c b/common/progress/progress.c
+index 4d52b97e..e4b30663 100644
+--- a/common/progress/progress.c
++++ b/common/progress/progress.c
+@@ -318,7 +318,8 @@ progress_bar_set (struct progress_bar *bar,
+ * (b) it's just not possible to use tputs in a sane way here.
+ */
+ /*tputs (UP, 2, putchar);*/
+- fprintf (fp, "%s", UP);
++ if (UP)
++ fprintf (fp, "%s", UP);
+ }
+ bar->count++;
+
diff --git a/0003-daemon-selinux-relabel-don-t-exclude-selinux-if-it-s.patch b/0003-daemon-selinux-relabel-don-t-exclude-selinux-if-it-s.patch
new file mode 100644
index 0000000..dea3fa6
--- /dev/null
+++ b/0003-daemon-selinux-relabel-don-t-exclude-selinux-if-it-s.patch
@@ -0,0 +1,63 @@
+From e58cd8df467e342463d08e3d761c2e322287b13e Mon Sep 17 00:00:00 2001
+From: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
+Date: Wed, 26 Apr 2023 15:59:44 +0300
+Subject: [PATCH] daemon/selinux-relabel: don't exclude "/selinux" if it's
+ non-existent
+
+Since RHBZ#726528, filesystem.rpm doesn't include /selinux. setfiles
+then gives us the warning: "Can't stat exclude path "/sysroot/selinux",
+No such file or directory - ignoring."
+
+Though the warning is harmless, let's get rid of it by checking the
+existence of /selinux directory.
+
+Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
+Reviewed-by: Laszlo Ersek <lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+(cherry picked from commit 9ced5fac8c1f0f8ff7ed2b5671c1c7f5f0bfa875)
+---
+ daemon/selinux-relabel.c | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/daemon/selinux-relabel.c b/daemon/selinux-relabel.c
+index 976cffe3..454486c1 100644
+--- a/daemon/selinux-relabel.c
++++ b/daemon/selinux-relabel.c
+@@ -21,6 +21,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <sys/stat.h>
+
+ #include "guestfs_protocol.h"
+ #include "daemon.h"
+@@ -37,6 +38,17 @@ optgroup_selinuxrelabel_available (void)
+ return prog_exists ("setfiles");
+ }
+
++static int
++dir_exists (const char *dir)
++{
++ struct stat statbuf;
++
++ if (stat (dir, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))
++ return 1;
++ else
++ return 0;
++}
++
+ static int
+ setfiles_has_option (int *flag, char opt_char)
+ {
+@@ -99,8 +111,10 @@ do_selinux_relabel (const char *specfile, const char *path,
+ */
+ ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_dev);
+ ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_proc);
+- ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_selinux);
+ ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_sys);
++ if (dir_exists (s_selinux)) {
++ ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_selinux);
++ }
+
+ /* You have to use the -m option (where available) otherwise
+ * setfiles puts all the mountpoints on the excludes list for no
diff --git a/0004-daemon-selinux-relabel-search-for-invalid-option-in-.patch b/0004-daemon-selinux-relabel-search-for-invalid-option-in-.patch
new file mode 100644
index 0000000..569cd02
--- /dev/null
+++ b/0004-daemon-selinux-relabel-search-for-invalid-option-in-.patch
@@ -0,0 +1,33 @@
+From c1829048c598e11950c9d355fdd5c177a99e046f Mon Sep 17 00:00:00 2001
+From: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
+Date: Wed, 26 Apr 2023 15:59:45 +0300
+Subject: [PATCH] daemon/selinux-relabel: search for "invalid option" in
+ setfiles output
+
+'X' in the setiles' stderr doesn't necessarily mean that option 'X'
+doesn't exist. For instance, when passing '-T' we get: "setfiles:
+option requires an argument -- 'T'".
+
+Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
+Reviewed-by: Laszlo Ersek <lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+(cherry picked from commit 152d6e4bdf2dac88856a4ff83cf73451f897d4d4)
+---
+ daemon/selinux-relabel.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/daemon/selinux-relabel.c b/daemon/selinux-relabel.c
+index 454486c1..60a6f48a 100644
+--- a/daemon/selinux-relabel.c
++++ b/daemon/selinux-relabel.c
+@@ -56,8 +56,9 @@ setfiles_has_option (int *flag, char opt_char)
+
+ if (*flag == -1) {
+ char option[] = { '-', opt_char, '\0' }; /* "-X" */
+- char err_opt[] = { '\'', opt_char, '\'', '\0'}; /* "'X'" */
++ char err_opt[32]; /* "invalid option -- 'X'" */
+
++ snprintf(err_opt, sizeof(err_opt), "invalid option -- '%c'", opt_char);
+ ignore_value (command (NULL, &err, "setfiles", option, NULL));
+ *flag = err && strstr (err, /* "invalid option -- " */ err_opt) == NULL;
+ }
diff --git a/0005-daemon-selinux-relabel-run-setfiles-with-T-0-if-supp.patch b/0005-daemon-selinux-relabel-run-setfiles-with-T-0-if-supp.patch
new file mode 100644
index 0000000..b5bb385
--- /dev/null
+++ b/0005-daemon-selinux-relabel-run-setfiles-with-T-0-if-supp.patch
@@ -0,0 +1,78 @@
+From 3046af080baad9935627ebb671950448cfd0fa7b Mon Sep 17 00:00:00 2001
+From: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
+Date: Wed, 26 Apr 2023 15:59:46 +0300
+Subject: [PATCH] daemon/selinux-relabel: run setfiles with "-T 0", if
+ supported
+
+Since SELinux userspace v3.4 [1], setfiles command supports "-T nthreads"
+option, which allows parallel execution. "-T 0" allows using as many
+threads as there're available CPU cores. This might speed up the process
+of filesystem relabeling in case the appliance is being run with multiple
+vCPUs. The latter is true for at least v2v starting from d2b64ecc67
+("v2v: Set the number of vCPUs to same as host number of pCPUs.").
+
+For instance, when running virt-v2v-in-place on my 12-core Xeon host
+with SSD, with appliance being run with 8 vCPUs (the upper limit specified
+in d2b64ecc67), and on the ~150GiB disk VM (physical size on the host),
+I get the following results:
+
+./in-place/virt-v2v-in-place -i libvirt fedora37-vm -v -x
+
+Without this patch:
+...
+commandrvf: setfiles -F -e /sysroot/dev -e /sysroot/proc -e /sysroot/sys -m -C -r /sysroot -v /sysroot/etc/selinux/targeted/contexts/files/file_contexts /sysroot/^M
+libguestfs: trace: v2v: selinux_relabel = 0
+libguestfs: trace: v2v: rm_f "/.autorelabel"
+guestfsd: => selinux_relabel (0x1d3) took 17.94 secs
+...
+
+With this patch:
+...
+commandrvf: setfiles -F -e /sysroot/dev -e /sysroot/proc -e /sysroot/sys -m -C -T 0 -r /sysroot -v /sysroot/etc/selinux/targeted/contexts/files/file_contexts /sysroot/^M
+libguestfs: trace: v2v: selinux_relabel = 0
+libguestfs: trace: v2v: rm_f "/.autorelabel"
+guestfsd: => selinux_relabel (0x1d3) took 5.88 secs
+...
+
+So in my scenario it's getting 3 times faster.
+
+[1] https://github.com/SELinuxProject/selinux/releases/tag/3.4
+
+Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
+Reviewed-by: Laszlo Ersek <lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+(cherry picked from commit d0d8e6738477148a7b752348f9364a3b8faed67f)
+---
+ daemon/selinux-relabel.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/daemon/selinux-relabel.c b/daemon/selinux-relabel.c
+index 60a6f48a..cfc5a31d 100644
+--- a/daemon/selinux-relabel.c
++++ b/daemon/selinux-relabel.c
+@@ -73,6 +73,7 @@ do_selinux_relabel (const char *specfile, const char *path,
+ {
+ static int flag_m = -1;
+ static int flag_C = -1;
++ static int flag_T = -1;
+ const char *argv[MAX_ARGS];
+ CLEANUP_FREE char *s_dev = NULL, *s_proc = NULL, *s_selinux = NULL,
+ *s_sys = NULL, *s_specfile = NULL, *s_path = NULL;
+@@ -131,6 +132,17 @@ do_selinux_relabel (const char *specfile, const char *path,
+ if (setfiles_has_option (&flag_C, 'C'))
+ ADD_ARG (argv, i, "-C");
+
++ /* If the appliance is being run with multiple vCPUs, running setfiles
++ * in multithreading mode might speeds up the process. Option "-T" was
++ * introduced in SELinux userspace v3.4, and we need to check whether it's
++ * supported. Passing "-T 0" creates as many threads as there're available
++ * vCPU cores.
++ * https://github.com/SELinuxProject/selinux/releases/tag/3.4
++ */
++ if (setfiles_has_option (&flag_T, 'T')) {
++ ADD_ARG (argv, i, "-T"); ADD_ARG (argv, i, "0");
++ }
++
+ /* Relabelling in a chroot. */
+ if (STRNEQ (sysroot, "/")) {
+ ADD_ARG (argv, i, "-r");
diff --git a/0006-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch b/0006-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch
new file mode 100644
index 0000000..d580b3c
--- /dev/null
+++ b/0006-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch
@@ -0,0 +1,606 @@
+From ab7e68dbeefe464734bd63a862a36f612f76d396 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Mon, 29 Jul 2013 14:47:56 +0100
+Subject: [PATCH] RHEL: Disable unsupported remote drive protocols
+ (RHBZ#962113).
+
+This disables support for unsupported remote drive protocols:
+
+ * ftp
+ * ftps
+ * http
+ * https
+ * tftp
+ * gluster
+ * iscsi
+ * sheepdog
+ * ssh
+
+Note 'nbd' is not disabled, and of course 'file' works.
+
+We hope to gradually add some of these back over the lifetime of RHEL.
+---
+ docs/guestfs-testing.pod | 20 -----
+ fish/guestfish.pod | 66 ++--------------
+ fish/test-add-uri.sh | 32 --------
+ generator/actions_core.ml | 50 +------------
+ lib/drives.c | 8 ++
+ lib/guestfs.pod | 100 -------------------------
+ tests/disks/test-qemu-drive-libvirt.sh | 28 -------
+ tests/disks/test-qemu-drive.sh | 60 ---------------
+ 8 files changed, 16 insertions(+), 348 deletions(-)
+
+diff --git a/docs/guestfs-testing.pod b/docs/guestfs-testing.pod
+index 47f381a7..c7b44928 100644
+--- a/docs/guestfs-testing.pod
++++ b/docs/guestfs-testing.pod
+@@ -109,26 +109,6 @@ image. To exit, type C<exit>.
+ If you get an error, try enabling debugging (add C<-v> to the command
+ line). Also make sure that L<libguestfs-test-tool(1)> succeeds.
+
+-=head2 Try to open a remote guest image with guestfish.
+-
+-You may also have to disable libvirt by setting this:
+-
+- export LIBGUESTFS_BACKEND=direct
+-
+-If you have a disk image available over HTTP/FTP, try to open it.
+-
+- guestfish --ro -i --format=raw -a http://www.example.com/disk.img
+-
+-For SSH you will need to make sure that ssh-agent is set up so you
+-don't need a password to log in to the remote machine. Then a command
+-similar to this should work:
+-
+- guestfish --ro -i --format=raw \
+- -a ssh://remote.example.com/path/to/disk.img
+-
+-If you get an error, try enabling debugging (add C<-v> to the command
+-line). Also make sure that L<libguestfs-test-tool(1)> succeeds.
+-
+ =head2 Run virt-alignment-scan on all your guests.
+
+ Run L<virt-alignment-scan(1)> on guests or disk images:
+diff --git a/fish/guestfish.pod b/fish/guestfish.pod
+index ccc0825b..d36cac9d 100644
+--- a/fish/guestfish.pod
++++ b/fish/guestfish.pod
+@@ -131,9 +131,9 @@ To list what is available do:
+
+ =head2 Remote drives
+
+-Access a remote disk using ssh:
++Access a remote disk using NBD:
+
+- guestfish -a ssh://example.com/path/to/disk.img
++ guestfish -a nbd://example.com
+
+ =head2 Remote control
+
+@@ -1129,12 +1129,12 @@ L<guestfs(3)/REMOTE STORAGE>>.
+ On the command line, you can use the I<-a> option to add network
+ block devices using a URI-style format, for example:
+
+- guestfish -a ssh://root@example.com/disk.img
++ guestfish -a nbd://example.com
+
+ URIs I<cannot> be used with the L</add> command. The equivalent
+ command using the API directly is:
+
+- ><fs> add /disk.img protocol:ssh server:tcp:example.com username:root
++ ><fs> add /disk.img protocol:nbd server:tcp:example.com
+
+ The possible I<-a URI> formats are described below.
+
+@@ -1144,40 +1144,6 @@ The possible I<-a URI> formats are described below.
+
+ Add the local disk image (or device) called F<disk.img>.
+
+-=head2 B<-a ftp://[user@]example.com[:port]/disk.img>
+-
+-=head2 B<-a ftps://[user@]example.com[:port]/disk.img>
+-
+-=head2 B<-a http://[user@]example.com[:port]/disk.img>
+-
+-=head2 B<-a https://[user@]example.com[:port]/disk.img>
+-
+-=head2 B<-a tftp://[user@]example.com[:port]/disk.img>
+-
+-Add a disk located on a remote FTP, HTTP or TFTP server.
+-
+-The equivalent API command would be:
+-
+- ><fs> add /disk.img protocol:(ftp|...) server:tcp:example.com
+-
+-=head2 B<-a gluster://example.com[:port]/volname/image>
+-
+-Add a disk image located on GlusterFS storage.
+-
+-The server is the one running C<glusterd>, and may be C<localhost>.
+-
+-The equivalent API command would be:
+-
+- ><fs> add volname/image protocol:gluster server:tcp:example.com
+-
+-=head2 B<-a iscsi://example.com[:port]/target-iqn-name[/lun]>
+-
+-Add a disk located on an iSCSI server.
+-
+-The equivalent API command would be:
+-
+- ><fs> add target-iqn-name/lun protocol:iscsi server:tcp:example.com
+-
+ =head2 B<-a nbd://example.com[:port]>
+
+ =head2 B<-a nbd://example.com[:port]/exportname>
+@@ -1212,35 +1178,13 @@ The equivalent API command would be:
+
+ ><fs> add pool/disk protocol:rbd server:tcp:example.com:port
+
+-=head2 B<-a sheepdog://[example.com[:port]]/volume/image>
+-
+-Add a disk image located on a Sheepdog volume.
+-
+-The server name is optional. Although libguestfs and Sheepdog
+-supports multiple servers, only at most one server can be specified
+-when using this URI syntax.
+-
+-The equivalent API command would be:
+-
+- ><fs> add volume protocol:sheepdog [server:tcp:example.com]
+-
+-=head2 B<-a ssh://[user@]example.com[:port]/disk.img>
+-
+-Add a disk image located on a remote server, accessed using the Secure
+-Shell (ssh) SFTP protocol. SFTP is supported out of the box by all
+-major SSH servers.
+-
+-The equivalent API command would be:
+-
+- ><fs> add /disk protocol:ssh server:tcp:example.com [username:user]
+-
+ Note that the URIs follow the syntax of
+ L<RFC 3986|https://tools.ietf.org/html/rfc3986>: in particular, there
+ are restrictions on the allowed characters for the various components
+ of the URI. Characters such as C<:>, C<@>, and C</> B<must> be
+ percent-encoded:
+
+- $ guestfish -a ssh://user:pass%40word@example.com/disk.img
++ $ guestfish -a rbd://user:pass%40word@example.com[:port]/pool/disk
+
+ In this case, the password is C<pass@word>.
+
+diff --git a/fish/test-add-uri.sh b/fish/test-add-uri.sh
+index 21d42498..ddabeb63 100755
+--- a/fish/test-add-uri.sh
++++ b/fish/test-add-uri.sh
+@@ -40,14 +40,6 @@ function fail ()
+ $VG guestfish -x -a file://$abs_builddir/test-add-uri.img </dev/null >test-add-uri.out 2>&1
+ grep -sq 'add_drive ".*/test-add-uri.img"' test-add-uri.out || fail
+
+-# curl
+-$VG guestfish -x -a ftp://user@example.com/disk.img </dev/null >test-add-uri.out 2>&1
+-grep -sq 'add_drive "/disk.img" "protocol:ftp" "server:tcp:example.com" "username:user"' test-add-uri.out || fail
+-
+-# gluster
+-$VG guestfish -x -a gluster://example.com/disk </dev/null >test-add-uri.out 2>&1
+-grep -sq 'add_drive "disk" "protocol:gluster" "server:tcp:example.com"' test-add-uri.out || fail
+-
+ # NBD
+ $VG guestfish -x -a nbd://example.com </dev/null >test-add-uri.out 2>&1
+ grep -sq 'add_drive "" "protocol:nbd" "server:tcp:example.com"' test-add-uri.out || fail
+@@ -67,29 +59,5 @@ grep -sq 'add_drive "pool/disk" "protocol:rbd" "server:tcp:example.com:6789"' te
+ $VG guestfish -x -a rbd:///pool/disk </dev/null >test-add-uri.out 2>&1
+ grep -sq 'add_drive "pool/disk" "protocol:rbd"' test-add-uri.out || fail
+
+-# sheepdog
+-$VG guestfish -x -a sheepdog:///volume/image </dev/null >test-add-uri.out 2>&1
+-grep -sq 'add_drive "volume/image" "protocol:sheepdog"' test-add-uri.out || fail
+-
+-$VG guestfish -x -a sheepdog://example.com:3000/volume/image </dev/null >test-add-uri.out 2>&1
+-grep -sq 'add_drive "volume/image" "protocol:sheepdog" "server:tcp:example.com:3000"' test-add-uri.out || fail
+-
+-# ssh
+-$VG guestfish -x -a ssh://example.com/disk.img </dev/null >test-add-uri.out 2>&1
+-grep -sq 'add_drive "/disk.img" "protocol:ssh" "server:tcp:example.com"' test-add-uri.out || fail
+-
+-$VG guestfish -x -a ssh://user@example.com/disk.img </dev/null >test-add-uri.out 2>&1
+-grep -sq 'add_drive "/disk.img" "protocol:ssh" "server:tcp:example.com" "username:user"' test-add-uri.out || fail
+-
+-$VG guestfish -x -a ssh://user@example.com:2000/disk.img </dev/null >test-add-uri.out 2>&1
+-grep -sq 'add_drive "/disk.img" "protocol:ssh" "server:tcp:example.com:2000" "username:user"' test-add-uri.out || fail
+-
+-# iSCSI
+-$VG guestfish -x -a iscsi://example.com/iqn.2015-12.com.libguestfs:test1/0 </dev/null >test-add-uri.out 2>&1
+-grep -sq 'add_drive "iqn.2015-12.com.libguestfs:test1/0" "protocol:iscsi" "server:tcp:example.com"' test-add-uri.out || fail
+-
+-$VG guestfish -x -a iscsi://user:password@example.com/iqn.2015-12.com.libguestfs:test2/0 </dev/null >test-add-uri.out 2>&1
+-grep -sq 'add_drive "iqn.2015-12.com.libguestfs:test2/0" "protocol:iscsi" "server:tcp:example.com" "username:user" "secret:password"' test-add-uri.out || fail
+-
+ rm test-add-uri.out
+ rm test-add-uri.img
+diff --git a/generator/actions_core.ml b/generator/actions_core.ml
+index c8d9949b..26c576c7 100644
+--- a/generator/actions_core.ml
++++ b/generator/actions_core.ml
+@@ -350,29 +350,6 @@ F<filename> is interpreted as a local file or device.
+ This is the default if the optional protocol parameter
+ is omitted.
+
+-=item C<protocol = \"ftp\"|\"ftps\"|\"http\"|\"https\"|\"tftp\">
+-
+-Connect to a remote FTP, HTTP or TFTP server.
+-The C<server> parameter must also be supplied - see below.
+-
+-See also: L<guestfs(3)/FTP, HTTP AND TFTP>
+-
+-=item C<protocol = \"gluster\">
+-
+-Connect to the GlusterFS server.
+-The C<server> parameter must also be supplied - see below.
+-
+-See also: L<guestfs(3)/GLUSTER>
+-
+-=item C<protocol = \"iscsi\">
+-
+-Connect to the iSCSI server.
+-The C<server> parameter must also be supplied - see below.
+-The C<username> parameter may be supplied. See below.
+-The C<secret> parameter may be supplied. See below.
+-
+-See also: L<guestfs(3)/ISCSI>.
+-
+ =item C<protocol = \"nbd\">
+
+ Connect to the Network Block Device server.
+@@ -389,22 +366,6 @@ The C<secret> parameter may be supplied. See below.
+
+ See also: L<guestfs(3)/CEPH>.
+
+-=item C<protocol = \"sheepdog\">
+-
+-Connect to the Sheepdog server.
+-The C<server> parameter may also be supplied - see below.
+-
+-See also: L<guestfs(3)/SHEEPDOG>.
+-
+-=item C<protocol = \"ssh\">
+-
+-Connect to the Secure Shell (ssh) server.
+-
+-The C<server> parameter must be supplied.
+-The C<username> parameter may be supplied. See below.
+-
+-See also: L<guestfs(3)/SSH>.
+-
+ =back
+
+ =item C<server>
+@@ -415,13 +376,8 @@ is a list of server(s).
+ Protocol Number of servers required
+ -------- --------------------------
+ file List must be empty or param not used at all
+- ftp|ftps|http|https|tftp Exactly one
+- gluster Exactly one
+- iscsi Exactly one
+ nbd Exactly one
+ rbd Zero or more
+- sheepdog Zero or more
+- ssh Exactly one
+
+ Each list element is a string specifying a server. The string must be
+ in one of the following formats:
+@@ -437,10 +393,10 @@ for the protocol is used (see F</etc/services>).
+
+ =item C<username>
+
+-For the C<ftp>, C<ftps>, C<http>, C<https>, C<iscsi>, C<rbd>, C<ssh>
+-and C<tftp> protocols, this specifies the remote username.
++For the C<rbd>
++protocol, this specifies the remote username.
+
+-If not given, then the local username is used for C<ssh>, and no authentication
++If not given, then no authentication
+ is attempted for ceph. But note this sometimes may give unexpected results, for
+ example if using the libvirt backend and if the libvirt backend is configured to
+ start the qemu appliance as a special user such as C<qemu.qemu>. If in doubt,
+diff --git a/lib/drives.c b/lib/drives.c
+index c5a20846..efb28925 100644
+--- a/lib/drives.c
++++ b/lib/drives.c
+@@ -166,6 +166,7 @@ create_drive_non_file (guestfs_h *g,
+ return drv;
+ }
+
++#if 0 /* DISABLED IN RHEL 8 */
+ static struct drive *
+ create_drive_curl (guestfs_h *g,
+ const struct drive_create_data *data)
+@@ -224,6 +225,7 @@ create_drive_gluster (guestfs_h *g,
+
+ return create_drive_non_file (g, data);
+ }
++#endif /* DISABLED IN RHEL 8 */
+
+ static int
+ nbd_port (void)
+@@ -292,6 +294,7 @@ create_drive_rbd (guestfs_h *g,
+ return create_drive_non_file (g, data);
+ }
+
++#if 0 /* DISABLED IN RHEL 8 */
+ static struct drive *
+ create_drive_sheepdog (guestfs_h *g,
+ const struct drive_create_data *data)
+@@ -392,6 +395,7 @@ create_drive_iscsi (guestfs_h *g,
+
+ return create_drive_non_file (g, data);
+ }
++#endif /* DISABLED IN RHEL 8 */
+
+ /**
+ * Create the special F</dev/null> drive.
+@@ -842,6 +846,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename,
+ drv = create_drive_file (g, &data);
+ }
+ }
++#if 0 /* DISABLED IN RHEL 8 */
+ else if (STREQ (protocol, "ftp")) {
+ data.protocol = drive_protocol_ftp;
+ drv = create_drive_curl (g, &data);
+@@ -866,6 +871,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename,
+ data.protocol = drive_protocol_iscsi;
+ drv = create_drive_iscsi (g, &data);
+ }
++#endif /* DISABLED IN RHEL 8 */
+ else if (STREQ (protocol, "nbd")) {
+ data.protocol = drive_protocol_nbd;
+ drv = create_drive_nbd (g, &data);
+@@ -874,6 +880,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename,
+ data.protocol = drive_protocol_rbd;
+ drv = create_drive_rbd (g, &data);
+ }
++#if 0 /* DISABLED IN RHEL 8 */
+ else if (STREQ (protocol, "sheepdog")) {
+ data.protocol = drive_protocol_sheepdog;
+ drv = create_drive_sheepdog (g, &data);
+@@ -886,6 +893,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename,
+ data.protocol = drive_protocol_tftp;
+ drv = create_drive_curl (g, &data);
+ }
++#endif /* DISABLED IN RHEL 8 */
+ else {
+ error (g, _("unknown protocol ‘%s’"), protocol);
+ drv = NULL; /*FALLTHROUGH*/
+diff --git a/lib/guestfs.pod b/lib/guestfs.pod
+index c6c8cb16..866a4638 100644
+--- a/lib/guestfs.pod
++++ b/lib/guestfs.pod
+@@ -723,70 +723,6 @@ a qcow2 backing file specification, libvirt does not construct an
+ ephemeral secret object from those, for Ceph authentication. Refer to
+ L<https://bugzilla.redhat.com/2033247>.
+
+-=head3 FTP, HTTP AND TFTP
+-
+-Libguestfs can access remote disks over FTP, FTPS, HTTP, HTTPS
+-or TFTP protocols.
+-
+-To do this, set the optional C<protocol> and C<server> parameters of
+-L</guestfs_add_drive_opts> like this:
+-
+- char **servers = { "www.example.org", NULL };
+- guestfs_add_drive_opts (g, "/disk.img",
+- GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
+- GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "http",
+- GUESTFS_ADD_DRIVE_OPTS_SERVER, servers,
+- -1);
+-
+-The C<protocol> can be one of C<"ftp">, C<"ftps">, C<"http">,
+-C<"https"> or C<"tftp">.
+-
+-C<servers> (the C<server> parameter) is a list which must have a
+-single element. The single element is a string defining the web,
+-FTP or TFTP server. The format of this string is documented in
+-L</guestfs_add_drive_opts>.
+-
+-=head3 GLUSTER
+-
+-Libguestfs can access Gluster disks.
+-
+-To do this, set the optional C<protocol> and C<server> parameters of
+-L</guestfs_add_drive_opts> like this:
+-
+- char **servers = { "gluster.example.org:24007", NULL };
+- guestfs_add_drive_opts (g, "volname/image",
+- GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
+- GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "gluster",
+- GUESTFS_ADD_DRIVE_OPTS_SERVER, servers,
+- -1);
+-
+-C<servers> (the C<server> parameter) is a list which must have a
+-single element. The single element is a string defining the Gluster
+-server. The format of this string is documented in
+-L</guestfs_add_drive_opts>.
+-
+-Note that gluster usually requires the client process (ie. libguestfs)
+-to run as B<root> and will give unfathomable errors if it is not
+-(eg. "No data available").
+-
+-=head3 ISCSI
+-
+-Libguestfs can access iSCSI disks remotely.
+-
+-To do this, set the optional C<protocol> and C<server> parameters like
+-this:
+-
+- char **server = { "iscsi.example.org:3000", NULL };
+- guestfs_add_drive_opts (g, "target-iqn-name/lun",
+- GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
+- GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "iscsi",
+- GUESTFS_ADD_DRIVE_OPTS_SERVER, server,
+- -1);
+-
+-The C<server> parameter is a list which must have a single element.
+-The single element is a string defining the iSCSI server. The format
+-of this string is documented in L</guestfs_add_drive_opts>.
+-
+ =head3 NETWORK BLOCK DEVICE
+
+ Libguestfs can access Network Block Device (NBD) disks remotely.
+@@ -849,42 +785,6 @@ L<https://bugs.launchpad.net/qemu/+bug/1155677>
+
+ =back
+
+-=head3 SHEEPDOG
+-
+-Libguestfs can access Sheepdog disks.
+-
+-To do this, set the optional C<protocol> and C<server> parameters of
+-L</guestfs_add_drive_opts> like this:
+-
+- char **servers = { /* optional servers ... */ NULL };
+- guestfs_add_drive_opts (g, "volume",
+- GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
+- GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "sheepdog",
+- GUESTFS_ADD_DRIVE_OPTS_SERVER, servers,
+- -1);
+-
+-The optional list of C<servers> may be zero or more server addresses
+-(C<"hostname:port">). The format of the server strings is documented
+-in L</guestfs_add_drive_opts>.
+-
+-=head3 SSH
+-
+-Libguestfs can access disks over a Secure Shell (SSH) connection.
+-
+-To do this, set the C<protocol> and C<server> and (optionally)
+-C<username> parameters of L</guestfs_add_drive_opts> like this:
+-
+- char **server = { "remote.example.com", NULL };
+- guestfs_add_drive_opts (g, "/path/to/disk.img",
+- GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
+- GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "ssh",
+- GUESTFS_ADD_DRIVE_OPTS_SERVER, server,
+- GUESTFS_ADD_DRIVE_OPTS_USERNAME, "remoteuser",
+- -1);
+-
+-The format of the server string is documented in
+-L</guestfs_add_drive_opts>.
+-
+ =head2 INSPECTION
+
+ Libguestfs has APIs for inspecting an unknown disk image to find out
+diff --git a/tests/disks/test-qemu-drive-libvirt.sh b/tests/disks/test-qemu-drive-libvirt.sh
+index d86a1ecd..cf7d2a0c 100755
+--- a/tests/disks/test-qemu-drive-libvirt.sh
++++ b/tests/disks/test-qemu-drive-libvirt.sh
+@@ -65,34 +65,6 @@ check_output
+ grep -sq -- '-drive file=rbd:abc-def/ghi-jkl:auth_supported=none,' "$DEBUG_QEMU_FILE" || fail ceph2
+ rm "$DEBUG_QEMU_FILE"
+
+-# Gluster.
+-
+-$guestfish -d gluster run ||:
+-check_output
+-grep -sq -- '-drive file=gluster://1.2.3.4:1234/volname/image,' "$DEBUG_QEMU_FILE" || fail gluster
+-rm "$DEBUG_QEMU_FILE"
+-
+-# iSCSI.
+-
+-$guestfish -d iscsi run ||:
+-check_output
+-grep -sq -- '-drive file=iscsi://1.2.3.4:1234/iqn.2003-01.org.linux-iscsi.fedora' "$DEBUG_QEMU_FILE" || fail iscsi
+-rm "$DEBUG_QEMU_FILE"
+-
+-# NBD.
+-
+-$guestfish -d nbd run ||:
+-check_output
+-grep -sq -- '-drive file=nbd:1.2.3.4:1234,' "$DEBUG_QEMU_FILE" || fail nbd
+-rm "$DEBUG_QEMU_FILE"
+-
+-# Sheepdog.
+-
+-$guestfish -d sheepdog run ||:
+-check_output
+-grep -sq -- '-drive file=sheepdog:volume,' "$DEBUG_QEMU_FILE" || fail sheepdog
+-rm "$DEBUG_QEMU_FILE"
+-
+ # Local, stored in a pool.
+
+ $guestfish -d pool1 run ||:
+diff --git a/tests/disks/test-qemu-drive.sh b/tests/disks/test-qemu-drive.sh
+index 12937fb3..b3e4f990 100755
+--- a/tests/disks/test-qemu-drive.sh
++++ b/tests/disks/test-qemu-drive.sh
+@@ -62,45 +62,6 @@ check_output
+ grep -sq -- '-drive file=rbd:abc-def/ghi-jkl:auth_supported=none,' "$DEBUG_QEMU_FILE" || fail
+ rm "$DEBUG_QEMU_FILE"
+
+-# HTTP.
+-
+-guestfish <<EOF ||:
+- add "/disk.img" "format:raw" "protocol:http" "server:www.example.com"
+- run
+-EOF
+-check_output
+-grep -sq -- '-drive file=http://www.example.com/disk.img,' "$DEBUG_QEMU_FILE" || fail
+-rm "$DEBUG_QEMU_FILE"
+-
+-# Gluster.
+-
+-guestfish <<EOF ||:
+- add "volname/image" "format:raw" "protocol:gluster" "server:www.example.com:24007"
+- run
+-EOF
+-check_output
+-grep -sq -- '-drive file=gluster://www.example.com:24007/volname/image,' "$DEBUG_QEMU_FILE" || fail
+-rm "$DEBUG_QEMU_FILE"
+-
+-# iSCSI.
+-
+-guestfish <<EOF ||:
+- add "target-iqn-name/lun" "format:raw" "protocol:iscsi" "server:www.example.com:3000"
+- run
+-EOF
+-check_output
+-grep -sq -- '-drive file=iscsi://www.example.com:3000/target-iqn-name/lun,' "$DEBUG_QEMU_FILE" || fail
+-rm "$DEBUG_QEMU_FILE"
+-
+-guestfish <<EOF ||:
+- add "target-iqn-name/lun" "format:raw" "protocol:iscsi" "server:www.example.com:3000" \
+- "username:user" "secret:pass"
+- run
+-EOF
+-check_output
+-grep -sq -- '-drive file=iscsi://user%pass@www.example.com:3000/target-iqn-name/lun,' "$DEBUG_QEMU_FILE" || fail
+-rm "$DEBUG_QEMU_FILE"
+-
+ # NBD.
+
+ guestfish <<EOF ||:
+@@ -118,24 +79,3 @@ EOF
+ check_output
+ grep -sq -- '-drive file=nbd:unix:/socket,' "$DEBUG_QEMU_FILE" || fail
+ rm "$DEBUG_QEMU_FILE"
+-
+-# Sheepdog.
+-
+-guestfish <<EOF ||:
+- add "volume" "format:raw" "protocol:sheepdog"
+- run
+-EOF
+-check_output
+-grep -sq -- '-drive file=sheepdog:volume,' "$DEBUG_QEMU_FILE" || fail
+-rm "$DEBUG_QEMU_FILE"
+-
+-# SSH.
+-
+-guestfish <<EOF ||:
+- add "/disk.img" "format:raw" "protocol:ssh" "server:example.com" \
+- "username:rich"
+- run
+-EOF
+-check_output
+-grep -sq -- '-drive file=ssh://rich@example.com/disk.img,' "$DEBUG_QEMU_FILE" || fail
+-rm "$DEBUG_QEMU_FILE"
diff --git a/0007-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch b/0007-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch
new file mode 100644
index 0000000..e251a5a
--- /dev/null
+++ b/0007-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch
@@ -0,0 +1,66 @@
+From b74c6c8520773c2ef4a4d69b08b70e5ceeb06964 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 7 Jul 2015 09:28:03 -0400
+Subject: [PATCH] RHEL: Reject use of libguestfs-winsupport features except for
+ virt-* tools (RHBZ#1240276).
+
+Fix the tests: it doesn't let us use guestfish for arbitrary Windows
+edits.
+---
+ generator/c.ml | 16 ++++++++++++++++
+ test-data/phony-guests/make-windows-img.sh | 1 +
+ tests/charsets/test-charset-fidelity.c | 2 ++
+ 3 files changed, 19 insertions(+)
+
+diff --git a/generator/c.ml b/generator/c.ml
+index 447059b8..0391dd3d 100644
+--- a/generator/c.ml
++++ b/generator/c.ml
+@@ -1846,6 +1846,22 @@ and generate_client_actions actions () =
+ check_args_validity c_name style;
+ trace_call name c_name style;
+
++ (* RHEL 8 *)
++ if name = "mount" || name = "mount_ro" || name = "mount_options" ||
++ name = "mount_vfs" then (
++ pr " if (g->program && !STRPREFIX (g->program, \"virt-\")) {\n";
++ pr " CLEANUP_FREE char *vfs_type = guestfs_vfs_type (g, mountable);\n";
++ pr " if (vfs_type && STREQ (vfs_type, \"ntfs\")) {\n";
++ pr " error (g, \"mount: unsupported filesystem type\");\n";
++ pr " if (trace_flag)\n";
++ pr " guestfs_int_trace (g, \"%%s = %%s (error)\",\n";
++ pr " \"%s\", \"-1\");\n" name;
++ pr " return %s;\n" (string_of_errcode errcode);
++ pr " }\n";
++ pr " }\n";
++ pr "\n";
++ );
++
+ (* Calculate the total size of all FileIn arguments to pass
+ * as a progress bar hint.
+ *)
+diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh
+index 16debd12..1c13ddac 100755
+--- a/test-data/phony-guests/make-windows-img.sh
++++ b/test-data/phony-guests/make-windows-img.sh
+@@ -37,6 +37,7 @@ fi
+
+ # Create a disk image.
+ guestfish <<EOF
++set-program virt-testing
+ sparse windows.img-t 512M
+ run
+
+diff --git a/tests/charsets/test-charset-fidelity.c b/tests/charsets/test-charset-fidelity.c
+index 105291dc..5ca4f3b6 100644
+--- a/tests/charsets/test-charset-fidelity.c
++++ b/tests/charsets/test-charset-fidelity.c
+@@ -96,6 +96,8 @@ main (int argc, char *argv[])
+ if (g == NULL)
+ error (EXIT_FAILURE, 0, "failed to create handle");
+
++ guestfs_set_program (g, "virt-testing");
++
+ if (guestfs_add_drive_scratch (g, 1024*1024*1024, -1) == -1)
+ exit (EXIT_FAILURE);
+
diff --git a/0008-Remove-virt-dib.patch b/0008-Remove-virt-dib.patch
new file mode 100644
index 0000000..8137ddc
--- /dev/null
+++ b/0008-Remove-virt-dib.patch
@@ -0,0 +1,63 @@
+From e916ad54c31a725cbf08fb186756d9e968ff20b2 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 7 Feb 2023 13:20:36 +0000
+Subject: [PATCH] Remove virt-dib
+
+The tool only supports an older version of the diskimage-builder
+metadata, and we do not have the time or inclination to update it to a
+newer version.
+
+Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1910039
+(cherry picked from commit 7503eeebede688409b2adf616d71a94e04b7f0d2)
+---
+ appliance/packagelist.in | 30 ------------------------------
+ 1 file changed, 30 deletions(-)
+
+diff --git a/appliance/packagelist.in b/appliance/packagelist.in
+index 585d52ad..20b08c47 100644
+--- a/appliance/packagelist.in
++++ b/appliance/packagelist.in
+@@ -110,7 +110,6 @@ ifelse(ARCHLINUX,1,
+ dnl syslinux has mtools as optional dependency, but in reality it's
+ dnl a hard one:
+ mtools
+- multipath-tools dnl for kpartx
+ nilfs-utils
+ ntfs-3g
+ ntfs-3g-system-compression
+@@ -266,35 +265,6 @@ util-linux-ng
+ xfsprogs
+ zerofree
+
+-dnl tools needed by virt-dib
+-ifelse(REDHAT,1,
+- qemu-img
+- which
+-)
+-ifelse(DEBIAN,1,
+- qemu-utils
+-)
+-ifelse(ARCHLINUX,1,
+- qemu
+- which
+-)
+-ifelse(SUSE,1,
+- qemu-tools
+- which
+-)
+-ifelse(FRUGALWARE,1,
+- qemu
+- which
+-)
+-ifelse(MAGEIA,1,
+- qemu-img
+- which
+-)
+-curl
+-kpartx
+-dnl (virt-dib) tools optionally used for elements
+-debootstrap
+-
+ dnl exFAT is not usually available in free software repos
+ exfat-fuse
+ exfat-utils
diff --git a/0009-lib-Choose-q35-machine-type-for-x86-64.patch b/0009-lib-Choose-q35-machine-type-for-x86-64.patch
new file mode 100644
index 0000000..7c56357
--- /dev/null
+++ b/0009-lib-Choose-q35-machine-type-for-x86-64.patch
@@ -0,0 +1,32 @@
+From e712c4b81cbd2cf0e990d01cb4d1f54734e62de6 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 9 Feb 2023 13:38:50 +0000
+Subject: [PATCH] lib: Choose q35 machine type for x86-64
+
+This machine type is more modern than the older 'pc' type and as most
+qemu development is now focused there we expect it will perform and
+behave better. In almost all respects this change should make no
+difference.
+
+Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2168578
+Acked-by: Laszlo Ersek <lersek@redhat.com>
+See-also: https://listman.redhat.com/archives/libguestfs/2023-February/030645.html
+(cherry picked from commit f0f8e6c5fe0c3f6d5d90534d263bded3a4dc7e8d)
+---
+ lib/guestfs-internal.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h
+index 306f2a2e..fb55e026 100644
+--- a/lib/guestfs-internal.h
++++ b/lib/guestfs-internal.h
+@@ -113,6 +113,9 @@ cleanup_mutex_unlock (pthread_mutex_t **ptr)
+ #define MAX_WINDOWS_EXPLORER_SIZE (4 * 1000 * 1000)
+
+ /* Machine types. */
++#if defined(__x86_64__)
++#define MACHINE_TYPE "q35"
++#endif
+ #ifdef __arm__
+ #define MACHINE_TYPE "virt"
+ #endif
diff --git a/0010-RHEL-Revert-build-Remove-bundled-copy-of-ocaml-augea.patch b/0010-RHEL-Revert-build-Remove-bundled-copy-of-ocaml-augea.patch
new file mode 100644
index 0000000..c21130e
--- /dev/null
+++ b/0010-RHEL-Revert-build-Remove-bundled-copy-of-ocaml-augea.patch
@@ -0,0 +1,1686 @@
+From 73061a7feafcc0a527d00f6e1e2dee3dc84bc044 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 2 Mar 2023 10:12:19 +0000
+Subject: [PATCH] RHEL: Revert "build: Remove bundled copy of ocaml-augeas"
+
+This is temporarily reverted in RHEL 9.3 only until this bug can be
+actioned:
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=2168634
+ "Request for new RHEL 9.3 package: ocaml-augeas"
+
+This reverts commit fbf7fe87933ac24dd78362a16117c42e40da4c0f.
+---
+ .gitignore | 1 +
+ Makefile.am | 5 +-
+ bundled/ocaml-augeas/COPYING.LIB | 515 +++++++++++++++++++++++++
+ bundled/ocaml-augeas/Makefile.am | 82 ++++
+ bundled/ocaml-augeas/augeas-c.c | 579 +++++++++++++++++++++++++++++
+ bundled/ocaml-augeas/augeas.README | 8 +
+ bundled/ocaml-augeas/augeas.ml | 99 +++++
+ bundled/ocaml-augeas/augeas.mli | 164 ++++++++
+ configure.ac | 1 +
+ daemon/Makefile.am | 7 +-
+ docs/guestfs-building.pod | 5 -
+ docs/guestfs-hacking.pod | 14 +
+ m4/guestfs-ocaml.m4 | 8 -
+ ocaml-dep.sh.in | 1 +
+ 14 files changed, 1472 insertions(+), 17 deletions(-)
+ create mode 100644 bundled/ocaml-augeas/COPYING.LIB
+ create mode 100644 bundled/ocaml-augeas/Makefile.am
+ create mode 100644 bundled/ocaml-augeas/augeas-c.c
+ create mode 100644 bundled/ocaml-augeas/augeas.README
+ create mode 100644 bundled/ocaml-augeas/augeas.ml
+ create mode 100644 bundled/ocaml-augeas/augeas.mli
+
+diff --git a/.gitignore b/.gitignore
+index 00e59fb3..ee5ea74d 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -61,6 +61,7 @@ Makefile.in
+ /build-aux/snippet/
+ /build-aux/test-driver
+ /build-aux/ylwrap
++/bundled/ocaml-augeas/.depend
+ /compile
+ /config.cache
+ /config.guess
+diff --git a/Makefile.am b/Makefile.am
+index 59370440..e0a7f084 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -35,6 +35,7 @@ SUBDIRS += include lib docs examples
+
+ # The daemon and the appliance.
+ SUBDIRS += common/mlutils
++SUBDIRS += bundled/ocaml-augeas
+ SUBDIRS += common/mlpcre
+ if ENABLE_DAEMON
+ SUBDIRS += daemon
+@@ -214,7 +215,7 @@ dist-hook: docs/C_SOURCE_FILES po/POTFILES
+ docs/C_SOURCE_FILES: configure.ac
+ rm -f $@ $@-t
+ find $(DIST_SUBDIRS) -name '*.[ch]' | \
+- grep -v -E '^(builder/index-parse\.|builder/index-scan\.|examples/|gobject/|java/com_redhat_et_libguestfs|perl/|php/extension/config\.h|ruby/ext/guestfs/extconf\.h|tests/|test-data/)' | \
++ grep -v -E '^(builder/index-parse\.|builder/index-scan\.|examples/|gobject/|java/com_redhat_et_libguestfs|perl/|php/extension/config\.h|ruby/ext/guestfs/extconf\.h|tests/|test-data/|bundled/)' | \
+ grep -v -E '/(guestfs|rc)_protocol\.' | \
+ grep -v -E '.*/errnostring\.' | \
+ grep -v -E '.*-gperf\.' | \
+@@ -227,7 +228,7 @@ po/POTFILES: configure.ac
+ rm -f $@ $@-t
+ cd $(srcdir); \
+ find $(DIST_SUBDIRS) -name '*.c' | \
+- grep -v -E '^(examples|perl/(blib|examples)|po-docs|tests|test-data)/' | \
++ grep -v -E '^(examples|perl/(blib|examples)|po-docs|tests|test-data|bundled)/' | \
+ grep -v -E '/((guestfs|rc)_protocol\.c|dummy\.c)$$' | \
+ grep -v -E '^python/utils\.c$$' | \
+ grep -v -E '^perl/lib/Sys/Guestfs\.c$$' | \
+diff --git a/bundled/ocaml-augeas/COPYING.LIB b/bundled/ocaml-augeas/COPYING.LIB
+new file mode 100644
+index 00000000..ba2be481
+--- /dev/null
++++ b/bundled/ocaml-augeas/COPYING.LIB
+@@ -0,0 +1,515 @@
++
++ GNU LESSER GENERAL PUBLIC LICENSE
++ Version 2.1, February 1999
++
++ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++[This is the first released version of the Lesser GPL. It also counts
++ as the successor of the GNU Library Public License, version 2, hence
++ the version number 2.1.]
++
++ Preamble
++
++ The licenses for most software are designed to take away your
++freedom to share and change it. By contrast, the GNU General Public
++Licenses are intended to guarantee your freedom to share and change
++free software--to make sure the software is free for all its users.
++
++ This license, the Lesser General Public License, applies to some
++specially designated software packages--typically libraries--of the
++Free Software Foundation and other authors who decide to use it. You
++can use it too, but we suggest you first think carefully about whether
++this license or the ordinary General Public License is the better
++strategy to use in any particular case, based on the explanations
++below.
++
++ When we speak of free software, we are referring to freedom of use,
++not price. Our General Public Licenses are designed to make sure that
++you have the freedom to distribute copies of free software (and charge
++for this service if you wish); that you receive source code or can get
++it if you want it; that you can change the software and use pieces of
++it in new free programs; and that you are informed that you can do
++these things.
++
++ To protect your rights, we need to make restrictions that forbid
++distributors to deny you these rights or to ask you to surrender these
++rights. These restrictions translate to certain responsibilities for
++you if you distribute copies of the library or if you modify it.
++
++ For example, if you distribute copies of the library, whether gratis
++or for a fee, you must give the recipients all the rights that we gave
++you. You must make sure that they, too, receive or can get the source
++code. If you link other code with the library, you must provide
++complete object files to the recipients, so that they can relink them
++with the library after making changes to the library and recompiling
++it. And you must show them these terms so they know their rights.
++
++ We protect your rights with a two-step method: (1) we copyright the
++library, and (2) we offer you this license, which gives you legal
++permission to copy, distribute and/or modify the library.
++
++ To protect each distributor, we want to make it very clear that
++there is no warranty for the free library. Also, if the library is
++modified by someone else and passed on, the recipients should know
++that what they have is not the original version, so that the original
++author's reputation will not be affected by problems that might be
++introduced by others.
++^L
++ Finally, software patents pose a constant threat to the existence of
++any free program. We wish to make sure that a company cannot
++effectively restrict the users of a free program by obtaining a
++restrictive license from a patent holder. Therefore, we insist that
++any patent license obtained for a version of the library must be
++consistent with the full freedom of use specified in this license.
++
++ Most GNU software, including some libraries, is covered by the
++ordinary GNU General Public License. This license, the GNU Lesser
++General Public License, applies to certain designated libraries, and
++is quite different from the ordinary General Public License. We use
++this license for certain libraries in order to permit linking those
++libraries into non-free programs.
++
++ When a program is linked with a library, whether statically or using
++a shared library, the combination of the two is legally speaking a
++combined work, a derivative of the original library. The ordinary
++General Public License therefore permits such linking only if the
++entire combination fits its criteria of freedom. The Lesser General
++Public License permits more lax criteria for linking other code with
++the library.
++
++ We call this license the "Lesser" General Public License because it
++does Less to protect the user's freedom than the ordinary General
++Public License. It also provides other free software developers Less
++of an advantage over competing non-free programs. These disadvantages
++are the reason we use the ordinary General Public License for many
++libraries. However, the Lesser license provides advantages in certain
++special circumstances.
++
++ For example, on rare occasions, there may be a special need to
++encourage the widest possible use of a certain library, so that it
++becomes
++a de-facto standard. To achieve this, non-free programs must be
++allowed to use the library. A more frequent case is that a free
++library does the same job as widely used non-free libraries. In this
++case, there is little to gain by limiting the free library to free
++software only, so we use the Lesser General Public License.
++
++ In other cases, permission to use a particular library in non-free
++programs enables a greater number of people to use a large body of
++free software. For example, permission to use the GNU C Library in
++non-free programs enables many more people to use the whole GNU
++operating system, as well as its variant, the GNU/Linux operating
++system.
++
++ Although the Lesser General Public License is Less protective of the
++users' freedom, it does ensure that the user of a program that is
++linked with the Library has the freedom and the wherewithal to run
++that program using a modified version of the Library.
++
++ The precise terms and conditions for copying, distribution and
++modification follow. Pay close attention to the difference between a
++"work based on the library" and a "work that uses the library". The
++former contains code derived from the library, whereas the latter must
++be combined with the library in order to run.
++^L
++ GNU LESSER GENERAL PUBLIC LICENSE
++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++
++ 0. This License Agreement applies to any software library or other
++program which contains a notice placed by the copyright holder or
++other authorized party saying it may be distributed under the terms of
++this Lesser General Public License (also called "this License").
++Each licensee is addressed as "you".
++
++ A "library" means a collection of software functions and/or data
++prepared so as to be conveniently linked with application programs
++(which use some of those functions and data) to form executables.
++
++ The "Library", below, refers to any such software library or work
++which has been distributed under these terms. A "work based on the
++Library" means either the Library or any derivative work under
++copyright law: that is to say, a work containing the Library or a
++portion of it, either verbatim or with modifications and/or translated
++straightforwardly into another language. (Hereinafter, translation is
++included without limitation in the term "modification".)
++
++ "Source code" for a work means the preferred form of the work for
++making modifications to it. For a library, complete source code means
++all the source code for all modules it contains, plus any associated
++interface definition files, plus the scripts used to control
++compilation
++and installation of the library.
++
++ Activities other than copying, distribution and modification are not
++covered by this License; they are outside its scope. The act of
++running a program using the Library is not restricted, and output from
++such a program is covered only if its contents constitute a work based
++on the Library (independent of the use of the Library in a tool for
++writing it). Whether that is true depends on what the Library does
++and what the program that uses the Library does.
++
++ 1. You may copy and distribute verbatim copies of the Library's
++complete source code as you receive it, in any medium, provided that
++you conspicuously and appropriately publish on each copy an
++appropriate copyright notice and disclaimer of warranty; keep intact
++all the notices that refer to this License and to the absence of any
++warranty; and distribute a copy of this License along with the
++Library.
++
++ You may charge a fee for the physical act of transferring a copy,
++and you may at your option offer warranty protection in exchange for a
++fee.
++
++ 2. You may modify your copy or copies of the Library or any portion
++of it, thus forming a work based on the Library, and copy and
++distribute such modifications or work under the terms of Section 1
++above, provided that you also meet all of these conditions:
++
++ a) The modified work must itself be a software library.
++
++ b) You must cause the files modified to carry prominent notices
++ stating that you changed the files and the date of any change.
++
++ c) You must cause the whole of the work to be licensed at no
++ charge to all third parties under the terms of this License.
++
++ d) If a facility in the modified Library refers to a function or a
++ table of data to be supplied by an application program that uses
++ the facility, other than as an argument passed when the facility
++ is invoked, then you must make a good faith effort to ensure that,
++ in the event an application does not supply such function or
++ table, the facility still operates, and performs whatever part of
++ its purpose remains meaningful.
++
++ (For example, a function in a library to compute square roots has
++ a purpose that is entirely well-defined independent of the
++ application. Therefore, Subsection 2d requires that any
++ application-supplied function or table used by this function must
++ be optional: if the application does not supply it, the square
++ root function must still compute square roots.)
++
++These requirements apply to the modified work as a whole. If
++identifiable sections of that work are not derived from the Library,
++and can be reasonably considered independent and separate works in
++themselves, then this License, and its terms, do not apply to those
++sections when you distribute them as separate works. But when you
++distribute the same sections as part of a whole which is a work based
++on the Library, the distribution of the whole must be on the terms of
++this License, whose permissions for other licensees extend to the
++entire whole, and thus to each and every part regardless of who wrote
++it.
++
++Thus, it is not the intent of this section to claim rights or contest
++your rights to work written entirely by you; rather, the intent is to
++exercise the right to control the distribution of derivative or
++collective works based on the Library.
++
++In addition, mere aggregation of another work not based on the Library
++with the Library (or with a work based on the Library) on a volume of
++a storage or distribution medium does not bring the other work under
++the scope of this License.
++
++ 3. You may opt to apply the terms of the ordinary GNU General Public
++License instead of this License to a given copy of the Library. To do
++this, you must alter all the notices that refer to this License, so
++that they refer to the ordinary GNU General Public License, version 2,
++instead of to this License. (If a newer version than version 2 of the
++ordinary GNU General Public License has appeared, then you can specify
++that version instead if you wish.) Do not make any other change in
++these notices.
++^L
++ Once this change is made in a given copy, it is irreversible for
++that copy, so the ordinary GNU General Public License applies to all
++subsequent copies and derivative works made from that copy.
++
++ This option is useful when you wish to copy part of the code of
++the Library into a program that is not a library.
++
++ 4. You may copy and distribute the Library (or a portion or
++derivative of it, under Section 2) in object code or executable form
++under the terms of Sections 1 and 2 above provided that you accompany
++it with the complete corresponding machine-readable source code, which
++must be distributed under the terms of Sections 1 and 2 above on a
++medium customarily used for software interchange.
++
++ If distribution of object code is made by offering access to copy
++from a designated place, then offering equivalent access to copy the
++source code from the same place satisfies the requirement to
++distribute the source code, even though third parties are not
++compelled to copy the source along with the object code.
++
++ 5. A program that contains no derivative of any portion of the
++Library, but is designed to work with the Library by being compiled or
++linked with it, is called a "work that uses the Library". Such a
++work, in isolation, is not a derivative work of the Library, and
++therefore falls outside the scope of this License.
++
++ However, linking a "work that uses the Library" with the Library
++creates an executable that is a derivative of the Library (because it
++contains portions of the Library), rather than a "work that uses the
++library". The executable is therefore covered by this License.
++Section 6 states terms for distribution of such executables.
++
++ When a "work that uses the Library" uses material from a header file
++that is part of the Library, the object code for the work may be a
++derivative work of the Library even though the source code is not.
++Whether this is true is especially significant if the work can be
++linked without the Library, or if the work is itself a library. The
++threshold for this to be true is not precisely defined by law.
++
++ If such an object file uses only numerical parameters, data
++structure layouts and accessors, and small macros and small inline
++functions (ten lines or less in length), then the use of the object
++file is unrestricted, regardless of whether it is legally a derivative
++work. (Executables containing this object code plus portions of the
++Library will still fall under Section 6.)
++
++ Otherwise, if the work is a derivative of the Library, you may
++distribute the object code for the work under the terms of Section 6.
++Any executables containing that work also fall under Section 6,
++whether or not they are linked directly with the Library itself.
++^L
++ 6. As an exception to the Sections above, you may also combine or
++link a "work that uses the Library" with the Library to produce a
++work containing portions of the Library, and distribute that work
++under terms of your choice, provided that the terms permit
++modification of the work for the customer's own use and reverse
++engineering for debugging such modifications.
++
++ You must give prominent notice with each copy of the work that the
++Library is used in it and that the Library and its use are covered by
++this License. You must supply a copy of this License. If the work
++during execution displays copyright notices, you must include the
++copyright notice for the Library among them, as well as a reference
++directing the user to the copy of this License. Also, you must do one
++of these things:
++
++ a) Accompany the work with the complete corresponding
++ machine-readable source code for the Library including whatever
++ changes were used in the work (which must be distributed under
++ Sections 1 and 2 above); and, if the work is an executable linked
++ with the Library, with the complete machine-readable "work that
++ uses the Library", as object code and/or source code, so that the
++ user can modify the Library and then relink to produce a modified
++ executable containing the modified Library. (It is understood
++ that the user who changes the contents of definitions files in the
++ Library will not necessarily be able to recompile the application
++ to use the modified definitions.)
++
++ b) Use a suitable shared library mechanism for linking with the
++ Library. A suitable mechanism is one that (1) uses at run time a
++ copy of the library already present on the user's computer system,
++ rather than copying library functions into the executable, and (2)
++ will operate properly with a modified version of the library, if
++ the user installs one, as long as the modified version is
++ interface-compatible with the version that the work was made with.
++
++ c) Accompany the work with a written offer, valid for at
++ least three years, to give the same user the materials
++ specified in Subsection 6a, above, for a charge no more
++ than the cost of performing this distribution.
++
++ d) If distribution of the work is made by offering access to copy
++ from a designated place, offer equivalent access to copy the above
++ specified materials from the same place.
++
++ e) Verify that the user has already received a copy of these
++ materials or that you have already sent this user a copy.
++
++ For an executable, the required form of the "work that uses the
++Library" must include any data and utility programs needed for
++reproducing the executable from it. However, as a special exception,
++the materials to be distributed need not include anything that is
++normally distributed (in either source or binary form) with the major
++components (compiler, kernel, and so on) of the operating system on
++which the executable runs, unless that component itself accompanies
++the executable.
++
++ It may happen that this requirement contradicts the license
++restrictions of other proprietary libraries that do not normally
++accompany the operating system. Such a contradiction means you cannot
++use both them and the Library together in an executable that you
++distribute.
++^L
++ 7. You may place library facilities that are a work based on the
++Library side-by-side in a single library together with other library
++facilities not covered by this License, and distribute such a combined
++library, provided that the separate distribution of the work based on
++the Library and of the other library facilities is otherwise
++permitted, and provided that you do these two things:
++
++ a) Accompany the combined library with a copy of the same work
++ based on the Library, uncombined with any other library
++ facilities. This must be distributed under the terms of the
++ Sections above.
++
++ b) Give prominent notice with the combined library of the fact
++ that part of it is a work based on the Library, and explaining
++ where to find the accompanying uncombined form of the same work.
++
++ 8. You may not copy, modify, sublicense, link with, or distribute
++the Library except as expressly provided under this License. Any
++attempt otherwise to copy, modify, sublicense, link with, or
++distribute the Library is void, and will automatically terminate your
++rights under this License. However, parties who have received copies,
++or rights, from you under this License will not have their licenses
++terminated so long as such parties remain in full compliance.
++
++ 9. You are not required to accept this License, since you have not
++signed it. However, nothing else grants you permission to modify or
++distribute the Library or its derivative works. These actions are
++prohibited by law if you do not accept this License. Therefore, by
++modifying or distributing the Library (or any work based on the
++Library), you indicate your acceptance of this License to do so, and
++all its terms and conditions for copying, distributing or modifying
++the Library or works based on it.
++
++ 10. Each time you redistribute the Library (or any work based on the
++Library), the recipient automatically receives a license from the
++original licensor to copy, distribute, link with or modify the Library
++subject to these terms and conditions. You may not impose any further
++restrictions on the recipients' exercise of the rights granted herein.
++You are not responsible for enforcing compliance by third parties with
++this License.
++^L
++ 11. If, as a consequence of a court judgment or allegation of patent
++infringement or for any other reason (not limited to patent issues),
++conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License. If you cannot
++distribute so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you
++may not distribute the Library at all. For example, if a patent
++license would not permit royalty-free redistribution of the Library by
++all those who receive copies directly or indirectly through you, then
++the only way you could satisfy both it and this License would be to
++refrain entirely from distribution of the Library.
++
++If any portion of this section is held invalid or unenforceable under
++any particular circumstance, the balance of the section is intended to
++apply, and the section as a whole is intended to apply in other
++circumstances.
++
++It is not the purpose of this section to induce you to infringe any
++patents or other property right claims or to contest validity of any
++such claims; this section has the sole purpose of protecting the
++integrity of the free software distribution system which is
++implemented by public license practices. Many people have made
++generous contributions to the wide range of software distributed
++through that system in reliance on consistent application of that
++system; it is up to the author/donor to decide if he or she is willing
++to distribute software through any other system and a licensee cannot
++impose that choice.
++
++This section is intended to make thoroughly clear what is believed to
++be a consequence of the rest of this License.
++
++ 12. If the distribution and/or use of the Library is restricted in
++certain countries either by patents or by copyrighted interfaces, the
++original copyright holder who places the Library under this License
++may add an explicit geographical distribution limitation excluding those
++countries, so that distribution is permitted only in or among
++countries not thus excluded. In such case, this License incorporates
++the limitation as if written in the body of this License.
++
++ 13. The Free Software Foundation may publish revised and/or new
++versions of the Lesser General Public License from time to time.
++Such new versions will be similar in spirit to the present version,
++but may differ in detail to address new problems or concerns.
++
++Each version is given a distinguishing version number. If the Library
++specifies a version number of this License which applies to it and
++"any later version", you have the option of following the terms and
++conditions either of that version or of any later version published by
++the Free Software Foundation. If the Library does not specify a
++license version number, you may choose any version ever published by
++the Free Software Foundation.
++^L
++ 14. If you wish to incorporate parts of the Library into other free
++programs whose distribution conditions are incompatible with these,
++write to the author to ask for permission. For software which is
++copyrighted by the Free Software Foundation, write to the Free
++Software Foundation; we sometimes make exceptions for this. Our
++decision will be guided by the two goals of preserving the free status
++of all derivatives of our free software and of promoting the sharing
++and reuse of software generally.
++
++ NO WARRANTY
++
++ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
++WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
++EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
++OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
++KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
++IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
++LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
++THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
++
++ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
++WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
++AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
++FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
++CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
++LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
++RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
++FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
++SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
++DAMAGES.
++
++ END OF TERMS AND CONDITIONS
++^L
++ How to Apply These Terms to Your New Libraries
++
++ If you develop a new library, and you want it to be of the greatest
++possible use to the public, we recommend making it free software that
++everyone can redistribute and change. You can do so by permitting
++redistribution under these terms (or, alternatively, under the terms
++of the ordinary General Public License).
++
++ To apply these terms, attach the following notices to the library.
++It is safest to attach them to the start of each source file to most
++effectively convey the exclusion of warranty; and each file should
++have at least the "copyright" line and a pointer to where the full
++notice is found.
++
++
++ <one line to give the library's name and a brief idea of what it
++does.>
++ Copyright (C) <year> <name of author>
++
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2 of the License, or (at your option) any later version.
++
++ This library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with this library; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++
++Also add information on how to contact you by electronic and paper
++mail.
++
++You should also get your employer (if you work as a programmer) or
++your
++school, if any, to sign a "copyright disclaimer" for the library, if
++necessary. Here is a sample; alter the names:
++
++ Yoyodyne, Inc., hereby disclaims all copyright interest in the
++ library `Frob' (a library for tweaking knobs) written by James
++Random Hacker.
++
++ <signature of Ty Coon>, 1 April 1990
++ Ty Coon, President of Vice
++
++That's all there is to it!
++
++
+diff --git a/bundled/ocaml-augeas/Makefile.am b/bundled/ocaml-augeas/Makefile.am
+new file mode 100644
+index 00000000..b6122eab
+--- /dev/null
++++ b/bundled/ocaml-augeas/Makefile.am
+@@ -0,0 +1,82 @@
++# libguestfs OCaml tools common code
++# Copyright (C) 2011-2020 Red Hat Inc.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++
++include $(top_srcdir)/subdir-rules.mk
++
++EXTRA_DIST = \
++ $(SOURCES_MLI) \
++ $(SOURCES_ML) \
++ $(SOURCES_C) \
++ augeas.README
++
++SOURCES_MLI = \
++ augeas.mli
++
++SOURCES_ML = \
++ augeas.ml
++
++SOURCES_C = \
++ augeas-c.c
++
++# We pretend that we're building a C library. automake handles the
++# compilation of the C sources for us. At the end we take the C
++# objects and OCaml objects and link them into the OCaml library.
++# This C library is never used.
++
++noinst_LIBRARIES = libmlaugeas.a
++
++if !HAVE_OCAMLOPT
++MLAUGEAS_CMA = mlaugeas.cma
++else
++MLAUGEAS_CMA = mlaugeas.cmxa
++endif
++
++noinst_DATA = $(MLAUGEAS_CMA)
++
++libmlaugeas_a_SOURCES = $(SOURCES_C)
++libmlaugeas_a_CPPFLAGS = \
++ -DCAML_NAME_SPACE \
++ -I. \
++ -I$(top_builddir) \
++ -I$(shell $(OCAMLC) -where)
++libmlaugeas_a_CFLAGS = \
++ $(WARN_CFLAGS) $(NO_SNV_CFLAGS) $(NO_UM_CFLAGS) $(WERROR_CFLAGS) \
++ $(AUGEAS_CFLAGS) $(LIBXML2_CFLAGS) \
++ -fPIC
++
++BOBJECTS = $(SOURCES_ML:.ml=.cmo)
++XOBJECTS = $(BOBJECTS:.cmo=.cmx)
++
++OCAMLPACKAGES =
++OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) -ccopt '$(CFLAGS)'
++
++if !HAVE_OCAMLOPT
++OBJECTS = $(BOBJECTS)
++else
++OBJECTS = $(XOBJECTS)
++endif
++
++libmlaugeas_a_DEPENDENCIES = $(OBJECTS)
++
++$(MLAUGEAS_CMA): $(OBJECTS) libmlaugeas.a
++ $(OCAMLFIND) mklib $(OCAMLPACKAGES) \
++ $(OBJECTS) $(libmlaugeas_a_OBJECTS) -cclib -laugeas -o mlaugeas
++
++# Dependencies.
++.depend: $(srcdir)/*.mli $(srcdir)/*.ml
++ $(top_builddir)/ocaml-dep.sh $^
++-include .depend
+diff --git a/bundled/ocaml-augeas/augeas-c.c b/bundled/ocaml-augeas/augeas-c.c
+new file mode 100644
+index 00000000..679bcb50
+--- /dev/null
++++ b/bundled/ocaml-augeas/augeas-c.c
+@@ -0,0 +1,579 @@
++/* Augeas OCaml bindings
++ * Copyright (C) 2008-2017 Red Hat Inc., Richard W.M. Jones
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ *
++ * $Id: augeas_c.c,v 1.1 2008/05/06 10:48:20 rjones Exp $
++ */
++
++#include "config.h"
++
++#include <augeas.h>
++
++#include <caml/alloc.h>
++#include <caml/memory.h>
++#include <caml/mlvalues.h>
++#include <caml/fail.h>
++#include <caml/callback.h>
++#include <caml/custom.h>
++
++#include <stdbool.h>
++
++#ifdef __GNUC__
++ #define NORETURN __attribute__ ((noreturn))
++#else
++ #define NORETURN
++#endif
++
++extern CAMLprim value ocaml_augeas_create (value rootv, value loadpathv, value flagsv);
++extern CAMLprim value ocaml_augeas_close (value tv);
++extern CAMLprim value ocaml_augeas_defnode (value tv, value namev, value exprv, value valv);
++extern CAMLprim value ocaml_augeas_defvar (value tv, value namev, value exprv);
++extern CAMLprim value ocaml_augeas_get (value tv, value pathv);
++extern CAMLprim value ocaml_augeas_exists (value tv, value pathv);
++extern CAMLprim value ocaml_augeas_insert (value tv, value beforev, value pathv, value labelv);
++extern CAMLprim value ocaml_augeas_label (value tv, value pathv);
++extern CAMLprim value ocaml_augeas_mv (value tv, value srcv, value destv);
++extern CAMLprim value ocaml_augeas_rm (value tv, value pathv);
++extern CAMLprim value ocaml_augeas_match (value tv, value pathv);
++extern CAMLprim value ocaml_augeas_count_matches (value tv, value pathv);
++extern CAMLprim value ocaml_augeas_save (value tv);
++extern CAMLprim value ocaml_augeas_load (value tv);
++extern CAMLprim value ocaml_augeas_set (value tv, value pathv, value valuev);
++extern CAMLprim value ocaml_augeas_setm (value tv, value basev, value subv, value valv);
++extern CAMLprim value ocaml_augeas_transform (value tv, value lensv, value filev, value modev);
++extern CAMLprim value ocaml_augeas_source (value tv, value pathv)
++#ifndef HAVE_AUG_SOURCE
++ NORETURN
++#endif
++;
++
++typedef augeas *augeas_t;
++
++/* Map C aug_errcode_t to OCaml error_code. */
++static const int error_map[] = {
++ /* AugErrInternal */ AUG_EINTERNAL,
++ /* AugErrPathX */ AUG_EPATHX,
++ /* AugErrNoMatch */ AUG_ENOMATCH,
++ /* AugErrMMatch */ AUG_EMMATCH,
++ /* AugErrSyntax */ AUG_ESYNTAX,
++ /* AugErrNoLens */ AUG_ENOLENS,
++ /* AugErrMXfm */ AUG_EMXFM,
++ /* AugErrNoSpan */ AUG_ENOSPAN,
++ /* AugErrMvDesc */ AUG_EMVDESC,
++ /* AugErrCmdRun */ AUG_ECMDRUN,
++ /* AugErrBadArg */ AUG_EBADARG,
++ /* AugErrLabel */ AUG_ELABEL,
++ /* AugErrCpDesc */ AUG_ECPDESC,
++};
++static const int error_map_len = sizeof error_map / sizeof error_map[0];
++
++/* Raise an Augeas.Error exception, and optionally close the
++ * specified handle.
++ */
++static void
++raise_error_and_maybe_close (augeas_t t, const char *msg, bool close_handle)
++{
++ const value *exn = caml_named_value ("Augeas.Error");
++ value args[5];
++ const int code = aug_error (t);
++ const char *aug_err_msg;
++ const char *aug_err_minor;
++ const char *aug_err_details;
++ int ocaml_code = -1;
++ int i;
++
++ if (code == AUG_ENOMEM) {
++ if (close_handle)
++ aug_close (t);
++ caml_raise_out_of_memory ();
++ }
++
++ aug_err_msg = aug_error_message (t);
++ aug_err_minor = aug_error_minor_message (t);
++ aug_err_details = aug_error_details (t);
++
++ for (i = 0; i < error_map_len; ++i)
++ if (error_map[i] == code) {
++ ocaml_code = i;
++ break;
++ }
++
++ if (ocaml_code != -1)
++ args[0] = Val_int (ocaml_code);
++ else {
++ args[0] = caml_alloc (1, 0);
++ Store_field (args[0], 0, Val_int (code));
++ }
++ args[1] = caml_copy_string (msg);
++ args[2] = caml_copy_string (aug_err_msg);
++ args[3] = caml_copy_string (aug_err_minor ? : "");
++ args[4] = caml_copy_string (aug_err_details ? : "");
++
++ if (close_handle)
++ aug_close (t);
++
++ caml_raise_with_args (*exn, 5, args);
++}
++#define raise_error(t, msg) raise_error_and_maybe_close(t, msg, false)
++
++static void
++raise_init_error (const char *msg)
++{
++ const value *exn = caml_named_value ("Augeas.Error");
++ value args[5];
++
++ args[0] = caml_alloc (1, 0);
++ Store_field (args[0], 0, Val_int (-1));
++ args[1] = caml_copy_string (msg);
++ args[2] = caml_copy_string ("aug_init failed");
++ args[3] = caml_copy_string ("augeas initialization failed");
++ args[4] = caml_copy_string ("");
++
++ caml_raise_with_args (*exn, 5, args);
++}
++
++static const char *
++Optstring_val (value strv)
++{
++ if (strv == Val_int (0)) /* None */
++ return NULL;
++ else /* Some string */
++ return String_val (Field (strv, 0));
++}
++
++/* Map OCaml flags to C flags. */
++static const int flag_map[] = {
++ /* AugSaveBackup */ AUG_SAVE_BACKUP,
++ /* AugSaveNewFile */ AUG_SAVE_NEWFILE,
++ /* AugTypeCheck */ AUG_TYPE_CHECK,
++ /* AugNoStdinc */ AUG_NO_STDINC,
++ /* AugSaveNoop */ AUG_SAVE_NOOP,
++ /* AugNoLoad */ AUG_NO_LOAD,
++ /* AugNoModlAutoload */ AUG_NO_MODL_AUTOLOAD,
++ /* AugEnableSpan */ AUG_ENABLE_SPAN,
++ /* AugNoErrClose */ AUG_NO_ERR_CLOSE,
++ /* AugTraceModuleLoading */ AUG_TRACE_MODULE_LOADING,
++};
++
++/* Wrap and unwrap augeas_t handles, with a finalizer. */
++#define Augeas_t_val(rv) (*(augeas_t *)Data_custom_val(rv))
++
++static void
++augeas_t_finalize (value tv)
++{
++ augeas_t t = Augeas_t_val (tv);
++ if (t) aug_close (t);
++}
++
++static struct custom_operations custom_operations = {
++ (char *) "augeas_t_custom_operations",
++ augeas_t_finalize,
++ custom_compare_default,
++ custom_hash_default,
++ custom_serialize_default,
++ custom_deserialize_default,
++ custom_compare_ext_default,
++};
++
++static value Val_augeas_t (augeas_t t)
++{
++ CAMLparam0 ();
++ CAMLlocal1 (rv);
++ /* We could choose these so that the GC can make better decisions.
++ * See 18.9.2 of the OCaml manual.
++ */
++ const int used = 0;
++ const int max = 1;
++
++ rv = caml_alloc_custom (&custom_operations,
++ sizeof (augeas_t), used, max);
++ Augeas_t_val(rv) = t;
++
++ CAMLreturn (rv);
++}
++
++#pragma GCC diagnostic ignored "-Wmissing-prototypes"
++
++/* val create : string -> string option -> flag list -> t */
++CAMLprim value
++ocaml_augeas_create (value rootv, value loadpathv, value flagsv)
++{
++ CAMLparam1 (rootv);
++ const char *root = String_val (rootv);
++ const char *loadpath = Optstring_val (loadpathv);
++ int flags = 0, i;
++ augeas_t t;
++
++ /* Convert list of flags to C. */
++ for (; flagsv != Val_int (0); flagsv = Field (flagsv, 1)) {
++ i = Int_val (Field (flagsv, 0));
++ flags |= flag_map[i];
++ }
++
++ /* Pass AUG_NO_ERR_CLOSE so we raise a detailed Augeas.Error. */
++ t = aug_init (root, loadpath, flags | AUG_NO_ERR_CLOSE);
++
++ if (t == NULL)
++ raise_init_error ("Augeas.create");
++
++ if (aug_error (t) != AUG_NOERROR) {
++ raise_error_and_maybe_close (t, "Augeas.init", true);
++ }
++
++ CAMLreturn (Val_augeas_t (t));
++}
++
++/* val close : t -> unit */
++CAMLprim value
++ocaml_augeas_close (value tv)
++{
++ CAMLparam1 (tv);
++ augeas_t t = Augeas_t_val (tv);
++
++ if (t) {
++ aug_close (t);
++ Augeas_t_val(tv) = NULL; /* So the finalizer doesn't double-free. */
++ }
++
++ CAMLreturn (Val_unit);
++}
++
++/* val defnode : t -> string -> string -> string option -> int * bool */
++CAMLprim value
++ocaml_augeas_defnode (value tv, value namev, value exprv, value valv)
++{
++ CAMLparam4 (tv, namev, exprv, valv);
++ CAMLlocal2 (optv, v);
++ augeas_t t = Augeas_t_val (tv);
++ const char *name = String_val (namev);
++ const char *expr = String_val (exprv);
++ const char *val = Optstring_val (valv);
++ int r, created;
++
++ r = aug_defnode (t, name, expr, val, &created);
++ if (r == -1) {
++ raise_error (t, "Augeas.defnode");
++ }
++
++ v = caml_alloc (2, 0);
++ Store_field (v, 0, Val_int (r));
++ Store_field (v, 1, Val_bool (created));
++
++ CAMLreturn (v);
++}
++
++/* val defvar : t -> string -> string option -> int option */
++CAMLprim value
++ocaml_augeas_defvar (value tv, value namev, value exprv)
++{
++ CAMLparam3 (tv, namev, exprv);
++ CAMLlocal2 (optv, v);
++ augeas_t t = Augeas_t_val (tv);
++ const char *name = String_val (namev);
++ const char *expr = Optstring_val (exprv);
++ int r;
++
++ r = aug_defvar (t, name, expr);
++ if (r > 0) { /* Return Some val */
++ v = Val_int (r);
++ optv = caml_alloc (1, 0);
++ Field (optv, 0) = v;
++ } else if (r == 0) /* Return None */
++ optv = Val_int (0);
++ else if (r == -1) /* Error or multiple matches */
++ raise_error (t, "Augeas.defvar");
++ else
++ caml_failwith ("Augeas.defvar: bad return value");
++
++ CAMLreturn (optv);
++}
++
++/* val get : t -> path -> value option */
++CAMLprim value
++ocaml_augeas_get (value tv, value pathv)
++{
++ CAMLparam2 (tv, pathv);
++ CAMLlocal2 (optv, v);
++ augeas_t t = Augeas_t_val (tv);
++ const char *path = String_val (pathv);
++ const char *val;
++ int r;
++
++ r = aug_get (t, path, &val);
++ if (r == 1 && val) { /* Return Some val */
++ v = caml_copy_string (val);
++ optv = caml_alloc (1, 0);
++ Field (optv, 0) = v;
++ } else if (r == 0 || !val) /* Return None */
++ optv = Val_int (0);
++ else if (r == -1) /* Error or multiple matches */
++ raise_error (t, "Augeas.get");
++ else
++ caml_failwith ("Augeas.get: bad return value");
++
++ CAMLreturn (optv);
++}
++
++/* val exists : t -> path -> bool */
++CAMLprim value
++ocaml_augeas_exists (value tv, value pathv)
++{
++ CAMLparam2 (tv, pathv);
++ CAMLlocal1 (v);
++ augeas_t t = Augeas_t_val (tv);
++ const char *path = String_val (pathv);
++ int r;
++
++ r = aug_get (t, path, NULL);
++ if (r == 1) /* Return true. */
++ v = Val_int (1);
++ else if (r == 0) /* Return false */
++ v = Val_int (0);
++ else if (r == -1) /* Error or multiple matches */
++ raise_error (t, "Augeas.exists");
++ else
++ caml_failwith ("Augeas.exists: bad return value");
++
++ CAMLreturn (v);
++}
++
++/* val insert : t -> ?before:bool -> path -> string -> unit */
++CAMLprim value
++ocaml_augeas_insert (value tv, value beforev, value pathv, value labelv)
++{
++ CAMLparam4 (tv, beforev, pathv, labelv);
++ augeas_t t = Augeas_t_val (tv);
++ const char *path = String_val (pathv);
++ const char *label = String_val (labelv);
++ int before;
++
++ before = beforev == Val_int (0) ? 0 : Int_val (Field (beforev, 0));
++
++ if (aug_insert (t, path, label, before) == -1)
++ raise_error (t, "Augeas.insert");
++
++ CAMLreturn (Val_unit);
++}
++
++/* val label : t -> path -> string option */
++CAMLprim value
++ocaml_augeas_label (value tv, value pathv)
++{
++ CAMLparam2 (tv, pathv);
++ CAMLlocal2 (optv, v);
++ augeas_t t = Augeas_t_val (tv);
++ const char *path = String_val (pathv);
++ const char *val;
++ int r;
++
++ r = aug_label (t, path, &val);
++ if (r == 1 && val) { /* Return Some val */
++ v = caml_copy_string (val);
++ optv = caml_alloc (1, 0);
++ Field (optv, 0) = v;
++ } else if (r == 0 || !val) /* Return None */
++ optv = Val_int (0);
++ else if (r == -1) /* Error or multiple matches */
++ raise_error (t, "Augeas.label");
++ else
++ caml_failwith ("Augeas.label: bad return value");
++
++ CAMLreturn (optv);
++}
++
++/* val mv : t -> path -> path -> unit */
++CAMLprim value
++ocaml_augeas_mv (value tv, value srcv, value destv)
++{
++ CAMLparam3 (tv, srcv, destv);
++ augeas_t t = Augeas_t_val (tv);
++ const char *src = String_val (srcv);
++ const char *dest = String_val (destv);
++
++ if (aug_mv (t, src, dest) == -1)
++ raise_error (t, "Augeas.mv");
++
++ CAMLreturn (Val_unit);
++}
++
++/* val rm : t -> path -> int */
++CAMLprim value
++ocaml_augeas_rm (value tv, value pathv)
++{
++ CAMLparam2 (tv, pathv);
++ augeas_t t = Augeas_t_val (tv);
++ const char *path = String_val (pathv);
++ int r;
++
++ r = aug_rm (t, path);
++ if (r == -1)
++ raise_error (t, "Augeas.rm");
++
++ CAMLreturn (Val_int (r));
++}
++
++/* val matches : t -> path -> path list */
++CAMLprim value
++ocaml_augeas_match (value tv, value pathv)
++{
++ CAMLparam2 (tv, pathv);
++ CAMLlocal3 (rv, v, cons);
++ augeas_t t = Augeas_t_val (tv);
++ const char *path = String_val (pathv);
++ char **matches;
++ int r, i;
++
++ r = aug_match (t, path, &matches);
++ if (r == -1)
++ raise_error (t, "Augeas.matches");
++
++ /* Copy the paths to a list. */
++ rv = Val_int (0);
++ for (i = 0; i < r; ++i) {
++ v = caml_copy_string (matches[i]);
++ free (matches[i]);
++ cons = caml_alloc (2, 0);
++ Field (cons, 1) = rv;
++ Field (cons, 0) = v;
++ rv = cons;
++ }
++
++ free (matches);
++
++ CAMLreturn (rv);
++}
++
++/* val count_matches : t -> path -> int */
++CAMLprim value
++ocaml_augeas_count_matches (value tv, value pathv)
++{
++ CAMLparam2 (tv, pathv);
++ augeas_t t = Augeas_t_val (tv);
++ const char *path = String_val (pathv);
++ int r;
++
++ r = aug_match (t, path, NULL);
++ if (r == -1)
++ raise_error (t, "Augeas.count_matches");
++
++ CAMLreturn (Val_int (r));
++}
++
++/* val save : t -> unit */
++CAMLprim value
++ocaml_augeas_save (value tv)
++{
++ CAMLparam1 (tv);
++ augeas_t t = Augeas_t_val (tv);
++
++ if (aug_save (t) == -1)
++ raise_error (t, "Augeas.save");
++
++ CAMLreturn (Val_unit);
++}
++
++/* val load : t -> unit */
++CAMLprim value
++ocaml_augeas_load (value tv)
++{
++ CAMLparam1 (tv);
++ augeas_t t = Augeas_t_val (tv);
++
++ if (aug_load (t) == -1)
++ raise_error (t, "Augeas.load");
++
++ CAMLreturn (Val_unit);
++}
++
++/* val set : t -> -> path -> value option -> unit */
++CAMLprim value
++ocaml_augeas_set (value tv, value pathv, value valuev)
++{
++ CAMLparam3 (tv, pathv, valuev);
++ augeas_t t = Augeas_t_val (tv);
++ const char *path = String_val (pathv);
++ const char *val = Optstring_val (valuev);
++
++ if (aug_set (t, path, val) == -1)
++ raise_error (t, "Augeas.set");
++
++ CAMLreturn (Val_unit);
++}
++
++/* val setm : t -> path -> string option -> value option -> int */
++CAMLprim value
++ocaml_augeas_setm (value tv, value basev, value subv, value valv)
++{
++ CAMLparam4 (tv, basev, subv, valv);
++ augeas_t t = Augeas_t_val (tv);
++ const char *base = String_val (basev);
++ const char *sub = Optstring_val (subv);
++ const char *val = Optstring_val (valv);
++ int r;
++
++ r = aug_setm (t, base, sub, val);
++ if (r == -1)
++ raise_error (t, "Augeas.setm");
++
++ CAMLreturn (Val_int (r));
++}
++
++/* val transform : t -> string -> string -> transform_mode -> unit */
++CAMLprim value
++ocaml_augeas_transform (value tv, value lensv, value filev, value modev)
++{
++ CAMLparam4 (tv, lensv, filev, modev);
++ augeas_t t = Augeas_t_val (tv);
++ const char *lens = String_val (lensv);
++ const char *file = String_val (filev);
++ const int excl = Int_val (modev) == 1 ? 1 : 0;
++
++ if (aug_transform (t, lens, file, excl) == -1)
++ raise_error (t, "Augeas.transform");
++
++ CAMLreturn (Val_unit);
++}
++
++/* val source : t -> path -> path option */
++CAMLprim value
++ocaml_augeas_source (value tv, value pathv)
++{
++#ifdef HAVE_AUG_SOURCE
++ CAMLparam2 (tv, pathv);
++ CAMLlocal2 (optv, v);
++ augeas_t t = Augeas_t_val (tv);
++ const char *path = String_val (pathv);
++ char *file_path;
++ int r;
++
++ r = aug_source (t, path, &file_path);
++ if (r == 0) {
++ if (file_path) { /* Return Some file_path */
++ v = caml_copy_string (file_path);
++ optv = caml_alloc (1, 0);
++ Field (optv, 0) = v;
++ free (file_path);
++ } else /* Return None */
++ optv = Val_int (0);
++ }
++ else /* Error */
++ raise_error (t, "Augeas.source");
++
++ CAMLreturn (optv);
++#else
++ caml_failwith ("Augeas.source: function not implemented");
++#endif
++}
+diff --git a/bundled/ocaml-augeas/augeas.README b/bundled/ocaml-augeas/augeas.README
+new file mode 100644
+index 00000000..938dfd25
+--- /dev/null
++++ b/bundled/ocaml-augeas/augeas.README
+@@ -0,0 +1,8 @@
++The files augeas-c.c, augeas.ml and augeas.mli come from the
++ocaml-augeas library:
++
++ http://git.annexia.org/?p=ocaml-augeas.git
++
++which is released under a compatible license. We try to keep them
++identical, so if you make changes to these files then you must also
++submit the changes to ocaml-augeas, and vice versa.
+\ No newline at end of file
+diff --git a/bundled/ocaml-augeas/augeas.ml b/bundled/ocaml-augeas/augeas.ml
+new file mode 100644
+index 00000000..aa5a1822
+--- /dev/null
++++ b/bundled/ocaml-augeas/augeas.ml
+@@ -0,0 +1,99 @@
++(* Augeas OCaml bindings
++ * Copyright (C) 2008 Red Hat Inc., Richard W.M. Jones
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ *
++ * $Id: augeas.ml,v 1.2 2008/05/06 10:48:20 rjones Exp $
++ *)
++
++type t
++
++type flag =
++ | AugSaveBackup
++ | AugSaveNewFile
++ | AugTypeCheck
++ | AugNoStdinc
++ | AugSaveNoop
++ | AugNoLoad
++ | AugNoModlAutoload
++ | AugEnableSpan
++ | AugNoErrClose
++ | AugTraceModuleLoading
++
++type error_code =
++ | AugErrInternal
++ | AugErrPathX
++ | AugErrNoMatch
++ | AugErrMMatch
++ | AugErrSyntax
++ | AugErrNoLens
++ | AugErrMXfm
++ | AugErrNoSpan
++ | AugErrMvDesc
++ | AugErrCmdRun
++ | AugErrBadArg
++ | AugErrLabel
++ | AugErrCpDesc
++ | AugErrUnknown of int
++
++type transform_mode =
++ | Include
++ | Exclude
++
++exception Error of error_code * string * string * string * string
++
++type path = string
++
++type value = string
++
++external create : string -> string option -> flag list -> t
++ = "ocaml_augeas_create"
++external close : t -> unit
++ = "ocaml_augeas_close"
++external defnode : t -> string -> string -> string option -> int * bool
++ = "ocaml_augeas_defnode"
++external defvar : t -> string -> string option -> int option
++ = "ocaml_augeas_defvar"
++external get : t -> path -> value option
++ = "ocaml_augeas_get"
++external exists : t -> path -> bool
++ = "ocaml_augeas_exists"
++external insert : t -> ?before:bool -> path -> string -> unit
++ = "ocaml_augeas_insert"
++external label : t -> path -> string option
++ = "ocaml_augeas_label"
++external rm : t -> path -> int
++ = "ocaml_augeas_rm"
++external matches : t -> path -> path list
++ = "ocaml_augeas_match"
++external count_matches : t -> path -> int
++ = "ocaml_augeas_count_matches"
++external save : t -> unit
++ = "ocaml_augeas_save"
++external load : t -> unit
++ = "ocaml_augeas_load"
++external mv : t -> path -> path -> unit
++ = "ocaml_augeas_mv"
++external set : t -> path -> value option -> unit
++ = "ocaml_augeas_set"
++external setm : t -> path -> string option -> value option -> int
++ = "ocaml_augeas_setm"
++external transform : t -> string -> string -> transform_mode -> unit
++ = "ocaml_augeas_transform"
++external source : t -> path -> path option
++ = "ocaml_augeas_source"
++
++let () =
++ Callback.register_exception "Augeas.Error" (Error (AugErrInternal, "", "", "", ""))
+diff --git a/bundled/ocaml-augeas/augeas.mli b/bundled/ocaml-augeas/augeas.mli
+new file mode 100644
+index 00000000..8cbeae18
+--- /dev/null
++++ b/bundled/ocaml-augeas/augeas.mli
+@@ -0,0 +1,164 @@
++(** Augeas OCaml bindings *)
++(* Copyright (C) 2008 Red Hat Inc., Richard W.M. Jones
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ *
++ * $Id: augeas.mli,v 1.2 2008/05/06 10:48:20 rjones Exp $
++ *)
++
++type t
++ (** Augeas library handle. *)
++
++type flag =
++ | AugSaveBackup (** Rename original with .augsave *)
++ | AugSaveNewFile (** Save changes to .augnew *)
++ | AugTypeCheck (** Type-check lenses *)
++ | AugNoStdinc
++ | AugSaveNoop
++ | AugNoLoad
++ | AugNoModlAutoload
++ | AugEnableSpan
++ | AugNoErrClose
++ | AugTraceModuleLoading
++ (** Flags passed to the {!create} function. *)
++
++type error_code =
++ | AugErrInternal (** Internal error (bug) *)
++ | AugErrPathX (** Invalid path expression *)
++ | AugErrNoMatch (** No match for path expression *)
++ | AugErrMMatch (** Too many matches for path expression *)
++ | AugErrSyntax (** Syntax error in lens file *)
++ | AugErrNoLens (** Lens lookup failed *)
++ | AugErrMXfm (** Multiple transforms *)
++ | AugErrNoSpan (** No span for this node *)
++ | AugErrMvDesc (** Cannot move node into its descendant *)
++ | AugErrCmdRun (** Failed to execute command *)
++ | AugErrBadArg (** Invalid argument in funcion call *)
++ | AugErrLabel (** Invalid label *)
++ | AugErrCpDesc (** Cannot copy node into its descendant *)
++ | AugErrUnknown of int
++ (** Possible error codes. *)
++
++type transform_mode =
++ | Include
++ | Exclude
++ (** The operation mode for the {!transform} function. *)
++
++exception Error of error_code * string * string * string * string
++ (** This exception is thrown when the underlying Augeas library
++ returns an error. The tuple represents:
++ - the Augeas error code
++ - the ocaml-augeas error string
++ - the Augeas error message
++ - the human-readable explanation of the Augeas error, if available
++ - a string with details of the Augeas error
++ *)
++
++type path = string
++ (** A path expression.
++
++ Note in future we may replace this with a type-safe path constructor. *)
++
++type value = string
++ (** A value. *)
++
++val create : string -> string option -> flag list -> t
++ (** [create root loadpath flags] creates an Augeas handle.
++
++ [root] is a file system path describing the location
++ of the configuration files.
++
++ [loadpath] is an optional colon-separated list of directories
++ which are searched for schema definitions.
++
++ [flags] is a list of flags. *)
++
++val close : t -> unit
++ (** [close handle] closes the handle.
++
++ You don't need to close handles explicitly with this function:
++ they will be finalized eventually by the garbage collector.
++ However calling this function frees up any resources used by the
++ underlying Augeas library immediately.
++
++ Do not use the handle after closing it. *)
++
++val defnode : t -> string -> string -> string option -> int * bool
++ (** [defnode t name expr value] defines [name] whose value is the
++ result of evaluating [expr], which is a nodeset. *)
++
++val defvar : t -> string -> string option -> int option
++ (** [defvar t name expr] defines [name] whose value is the result
++ of evaluating [expr], replacing the old value if existing.
++ [None] as [expr] removes the variable [name]. *)
++
++val get : t -> path -> value option
++ (** [get t path] returns the value at [path], or [None] if there
++ is no value. *)
++
++val exists : t -> path -> bool
++ (** [exists t path] returns true iff there is a value at [path]. *)
++
++val insert : t -> ?before:bool -> path -> string -> unit
++ (** [insert t ?before path label] inserts [label] as a sibling
++ of [path]. By default it is inserted after [path], unless
++ [~before:true] is specified. *)
++
++val label : t -> path -> string option
++ (** [label t path] gets the label of [path].
++
++ Returns [Some value] when [path] matches only one node, and
++ that has an associated label. *)
++
++val rm : t -> path -> int
++ (** [rm t path] removes all nodes matching [path].
++
++ Returns the number of nodes removed (which may be 0). *)
++
++val matches : t -> path -> path list
++ (** [matches t path] returns a list of path expressions
++ of all nodes matching [path]. *)
++
++val mv : t -> path -> path -> unit
++ (** [mv t src dest] moves a node. *)
++
++val count_matches : t -> path -> int
++ (** [count_matches t path] counts the number of nodes matching
++ [path] but does not return them (see {!matches}). *)
++
++val save : t -> unit
++ (** [save t] saves all pending changes to disk. *)
++
++val load : t -> unit
++ (** [load t] loads files into the tree. *)
++
++val set : t -> path -> value option -> unit
++ (** [set t path] sets [value] as new value at [path]. *)
++
++val setm : t -> path -> string option -> value option -> int
++ (** [setm t base sub value] sets [value] as new value for all the
++ nodes under [base] that match [sub] (or all, if [sub] is
++ [None]).
++
++ Returns the number of nodes modified. *)
++
++val transform : t -> string -> string -> transform_mode -> unit
++ (** [transform t lens file mode] adds or removes (depending on
++ [mode]) the transformation of the specified [lens] for [file]. *)
++
++val source : t -> path -> path option
++ (** [source t path] returns the path to the node representing the
++ file to which [path] belongs, or [None] if [path] does not
++ represent any file. *)
+diff --git a/configure.ac b/configure.ac
+index 0db21297..d1397f63 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -195,6 +195,7 @@ AC_CONFIG_FILES([run],
+ AC_CONFIG_FILES([Makefile
+ appliance/Makefile
+ bash/Makefile
++ bundled/ocaml-augeas/Makefile
+ common/errnostring/Makefile
+ common/edit/Makefile
+ common/mlpcre/Makefile
+diff --git a/daemon/Makefile.am b/daemon/Makefile.am
+index bb2e58d0..bd1920c6 100644
+--- a/daemon/Makefile.am
++++ b/daemon/Makefile.am
+@@ -215,9 +215,9 @@ guestfsd_SOURCES = \
+ guestfsd_LDFLAGS = \
+ -L$(shell $(OCAMLC) -where) \
+ -L$(shell $(OCAMLFIND) query hivex) \
+- -L$(shell $(OCAMLFIND) query augeas) \
+ -L../common/mlutils \
+ -L../common/mlstdutils \
++ -L../bundled/ocaml-augeas \
+ -L../common/mlpcre
+ guestfsd_LDADD = \
+ camldaemon.o \
+@@ -353,7 +353,8 @@ BOBJECTS = $(SOURCES_ML:.ml=.cmo)
+ XOBJECTS = $(BOBJECTS:.cmo=.cmx)
+
+ OCAMLPACKAGES = \
+- -package str,unix,augeas,hivex \
++ -package str,unix,hivex \
++ -I $(top_builddir)/bundled/ocaml-augeas \
+ -I $(top_builddir)/common/mlstdutils \
+ -I $(top_builddir)/common/mlutils \
+ -I $(top_builddir)/common/utils/.libs \
+@@ -384,6 +385,7 @@ camldaemon.o: $(OBJECTS)
+ $(OCAMLFIND) $(BEST) -output-obj -o $@ \
+ $(OCAMLFLAGS) $(OCAMLPACKAGES) \
+ -linkpkg \
++ mlaugeas.$(MLARCHIVE) \
+ mlpcre.$(MLARCHIVE) \
+ mlstdutils.$(MLARCHIVE) \
+ mlcutils.$(MLARCHIVE) \
+@@ -442,6 +444,7 @@ OCAMLLINKFLAGS = \
+ mlpcre.$(MLARCHIVE) \
+ mlstdutils.$(MLARCHIVE) \
+ mlcutils.$(MLARCHIVE) \
++ mlaugeas.$(MLARCHIVE) \
+ $(LINK_CUSTOM_OCAMLC_ONLY)
+
+ daemon_utils_tests_DEPENDENCIES = \
+diff --git a/docs/guestfs-building.pod b/docs/guestfs-building.pod
+index 5a7fa40f..b9bc885a 100644
+--- a/docs/guestfs-building.pod
++++ b/docs/guestfs-building.pod
+@@ -172,11 +172,6 @@ I<Required>.
+
+ I<Required>.
+
+-=item ocaml-augeas
+-
+-I<Required>. These are the OCaml bindings for Augeas, found at:
+-L<http://people.redhat.com/~rjones/augeas/>
+-
+ =item xz
+
+ I<Required>.
+diff --git a/docs/guestfs-hacking.pod b/docs/guestfs-hacking.pod
+index e1b47ec1..68cf8292 100644
+--- a/docs/guestfs-hacking.pod
++++ b/docs/guestfs-hacking.pod
+@@ -71,6 +71,20 @@ Various build scripts used by autotools.
+
+ L<virt-builder(1)> command and documentation.
+
++=item F<bundled>
++
++Embedded copies of other libraries, mostly for convenience (and the embedded
++library is not widespread enough).
++
++=over 4
++
++=item F<bundled/ocaml-augeas>
++
++Bindings for the Augeas library. These come from the ocaml-augeas
++library L<http://git.annexia.org/?p=ocaml-augeas.git>
++
++=back
++
+ =item F<cat>
+
+ The L<virt-cat(1)>, L<virt-filesystems(1)>, L<virt-log(1)>,
+diff --git a/m4/guestfs-ocaml.m4 b/m4/guestfs-ocaml.m4
+index 85020717..51072c1a 100644
+--- a/m4/guestfs-ocaml.m4
++++ b/m4/guestfs-ocaml.m4
+@@ -132,14 +132,6 @@ AS_IF([test "x$have_Hivex_OPEN_UNSAFE" = "xno"],[
+ ])
+ AC_SUBST([HIVEX_OPEN_UNSAFE_FLAG])
+
+-if test "x$enable_daemon" = "xyes"; then
+- OCAML_PKG_augeas=no
+- AC_CHECK_OCAML_PKG(augeas)
+- if test "x$OCAML_PKG_augeas" = "xno"; then
+- AC_MSG_ERROR([the OCaml module 'augeas' is required])
+- fi
+-fi
+-
+ # oUnit is optional, used by some tests in common/mlstdutils (that we
+ # should replace with regular tests one day). If used, oUnit >= 2 is
+ # required.
+diff --git a/ocaml-dep.sh.in b/ocaml-dep.sh.in
+index 385a1e6e..c9e9e3e6 100755
+--- a/ocaml-dep.sh.in
++++ b/ocaml-dep.sh.in
+@@ -33,6 +33,7 @@ set -e
+ # directories must have unique names (eg. not ‘Utils’) else
+ # dependencies don't get built right.
+ include_dirs="
++bundled/ocaml-augeas
+ common/mlgettext
+ common/mlpcre
+ common/mlstdutils
diff --git a/0011-update-common-submodule.patch b/0011-update-common-submodule.patch
new file mode 100644
index 0000000..01696ec
--- /dev/null
+++ b/0011-update-common-submodule.patch
@@ -0,0 +1,203 @@
+From 194a48aef32367c45c555a4d93fb1a3375b0dead Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Fri, 19 May 2023 16:08:47 +0200
+Subject: [PATCH] update common submodule
+
+Laszlo Ersek (2):
+ options/keys: key_store_import_key(): un-constify "key" parameter
+ options/keys: introduce unescape_device_mapper_lvm()
+
+Richard W.M. Jones (1):
+ mlcustomize/SELinux_relabel.ml: Use Array.mem
+
+Roman Kagan (1):
+ mlcustomize: skip SELinux relabeling if it's disabled
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2168506
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+Message-Id: <20230519140849.310774-2-lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+(cherry picked from commit 83afd6d3d2c82ee3a8f22079ba12ef7eac38ac34)
+---
+ common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Submodule common 70c10a07..b636c3f2:
+diff --git a/common/mlcustomize/SELinux_relabel.ml b/common/mlcustomize/SELinux_relabel.ml
+index 5ecf7bd7..2f3a09bf 100644
+--- a/common/mlcustomize/SELinux_relabel.ml
++++ b/common/mlcustomize/SELinux_relabel.ml
+@@ -24,10 +24,6 @@ open Printf
+
+ module G = Guestfs
+
+-(* Simple reimplementation of Array.mem, available only with OCaml >= 4.03. *)
+-let array_find a l =
+- List.mem a (Array.to_list l)
+-
+ let rec relabel (g : G.guestfs) =
+ (* Is the guest using SELinux? (Otherwise this is a no-op). *)
+ if is_selinux_guest g then (
+@@ -59,14 +55,24 @@ and use_setfiles g =
+ g#aug_load ();
+ debug_augeas_errors g;
+
++ let config_path = "/files/etc/selinux/config" in
++ let config_keys = g#aug_ls config_path in
++ (* SELinux may be disabled via a setting in config file *)
++ let selinux_disabled =
++ let selinuxmode_path = config_path ^ "/SELINUX" in
++ if Array.mem selinuxmode_path config_keys then
++ g#aug_get selinuxmode_path = "disabled"
++ else
++ false in
++ if selinux_disabled then
++ failwith "selinux disabled";
++
+ (* Get the SELinux policy name, eg. "targeted", "minimum".
+ * Use "targeted" if not specified, just like libselinux does.
+ *)
+ let policy =
+- let config_path = "/files/etc/selinux/config" in
+ let selinuxtype_path = config_path ^ "/SELINUXTYPE" in
+- let keys = g#aug_ls config_path in
+- if array_find selinuxtype_path keys then
++ if Array.mem selinuxtype_path config_keys then
+ g#aug_get selinuxtype_path
+ else
+ "targeted" in
+diff --git a/common/options/keys.c b/common/options/keys.c
+index 48f1bc7c..52b27369 100644
+--- a/common/options/keys.c
++++ b/common/options/keys.c
+@@ -260,8 +260,107 @@ key_store_add_from_selector (struct key_store *ks, const char *selector)
+ return key_store_import_key (ks, &key);
+ }
+
++/* Turn /dev/mapper/VG-LV into /dev/VG/LV, in-place. */
++static void
++unescape_device_mapper_lvm (char *id)
++{
++ static const char dev[] = "/dev/", dev_mapper[] = "/dev/mapper/";
++ const char *input_start;
++ char *output;
++ enum { M_SCAN, M_FILL, M_DONE } mode;
++
++ if (!STRPREFIX (id, dev_mapper))
++ return;
++
++ /* Start parsing "VG-LV" from "id" after "/dev/mapper/". */
++ input_start = id + (sizeof dev_mapper - 1);
++
++ /* Start writing the unescaped "VG/LV" output after "/dev/". */
++ output = id + (sizeof dev - 1);
++
++ for (mode = M_SCAN; mode < M_DONE; ++mode) {
++ char c;
++ const char *input = input_start;
++ const char *hyphen_buffered = NULL;
++ bool single_hyphen_seen = false;
++
++ do {
++ c = *input;
++
++ switch (c) {
++ case '-':
++ if (hyphen_buffered == NULL)
++ /* This hyphen may start an escaped hyphen, or it could be the
++ * separator in VG-LV.
++ */
++ hyphen_buffered = input;
++ else {
++ /* This hyphen completes an escaped hyphen; unescape it. */
++ if (mode == M_FILL)
++ *output++ = '-';
++ hyphen_buffered = NULL;
++ }
++ break;
++
++ case '/':
++ /* Slash characters are forbidden in VG-LV anywhere. If there's any,
++ * we'll find it in the first (i.e., scanning) phase, before we output
++ * anything back to "id".
++ */
++ assert (mode == M_SCAN);
++ return;
++
++ default:
++ /* Encountered a non-slash, non-hyphen character -- which also may be
++ * the terminating NUL.
++ */
++ if (hyphen_buffered != NULL) {
++ /* The non-hyphen character comes after a buffered hyphen, so the
++ * buffered hyphen is supposed to be the single hyphen that separates
++ * VG from LV in VG-LV. There are three requirements for this
++ * separator: (a) it must be unique (we must not have seen another
++ * such separator earlier), (b) it must not be at the start of VG-LV
++ * (because VG would be empty that way), (c) it must not be at the end
++ * of VG-LV (because LV would be empty that way). Should any of these
++ * be violated, we'll catch that during the first (i.e., scanning)
++ * phase, before modifying "id".
++ */
++ if (single_hyphen_seen || hyphen_buffered == input_start ||
++ c == '\0') {
++ assert (mode == M_SCAN);
++ return;
++ }
++
++ /* Translate the separator hyphen to a slash character. */
++ if (mode == M_FILL)
++ *output++ = '/';
++ hyphen_buffered = NULL;
++ single_hyphen_seen = true;
++ }
++
++ /* Output the non-hyphen character (including the terminating NUL)
++ * regardless of whether there was a buffered hyphen separator (which,
++ * by now, we'll have attempted to translate and flush).
++ */
++ if (mode == M_FILL)
++ *output++ = c;
++ }
++
++ ++input;
++ } while (c != '\0');
++
++ /* We must have seen the VG-LV separator. If that's not the case, we'll
++ * catch it before modifying "id".
++ */
++ if (!single_hyphen_seen) {
++ assert (mode == M_SCAN);
++ return;
++ }
++ }
++}
++
+ struct key_store *
+-key_store_import_key (struct key_store *ks, const struct key_store_key *key)
++key_store_import_key (struct key_store *ks, struct key_store_key *key)
+ {
+ struct key_store_key *new_keys;
+
+@@ -278,6 +377,7 @@ key_store_import_key (struct key_store *ks, const struct key_store_key *key)
+ error (EXIT_FAILURE, errno, "realloc");
+
+ ks->keys = new_keys;
++ unescape_device_mapper_lvm (key->id);
+ ks->keys[ks->nr_keys] = *key;
+ ++ks->nr_keys;
+
+diff --git a/common/options/options.h b/common/options/options.h
+index 94573ee0..94e8b9ee 100644
+--- a/common/options/options.h
++++ b/common/options/options.h
+@@ -169,7 +169,8 @@ extern struct matching_key *get_keys (struct key_store *ks, const char *device,
+ const char *uuid, size_t *nr_matches);
+ extern void free_keys (struct matching_key *keys, size_t nr_matches);
+ extern struct key_store *key_store_add_from_selector (struct key_store *ks, const char *selector);
+-extern struct key_store *key_store_import_key (struct key_store *ks, const struct key_store_key *key);
++extern struct key_store *key_store_import_key (struct key_store *ks,
++ struct key_store_key *key);
+ extern bool key_store_requires_network (const struct key_store *ks);
+ extern void free_key_store (struct key_store *ks);
+
diff --git a/0012-LUKS-on-LVM-inspection-test-rename-VGs-and-LVs.patch b/0012-LUKS-on-LVM-inspection-test-rename-VGs-and-LVs.patch
new file mode 100644
index 0000000..b35742b
--- /dev/null
+++ b/0012-LUKS-on-LVM-inspection-test-rename-VGs-and-LVs.patch
@@ -0,0 +1,97 @@
+From c95b3086bdbdf840de8d3b24c3ae5e9b847bf588 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Fri, 19 May 2023 16:08:48 +0200
+Subject: [PATCH] LUKS-on-LVM inspection test: rename VGs and LVs
+
+In preparation for a subsequent patch, rename "VG" to "Volume-Group", and
+"LV<n>" to "Logical-Volume-<n>", in the LUKS-on-LVM inspection test.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2168506
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+Message-Id: <20230519140849.310774-3-lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+(cherry picked from commit 58e26402334a4696fa08730eecc9098fc270ed1c)
+---
+ test-data/phony-guests/make-fedora-img.pl | 30 +++++++++++--------
+ .../test-key-option-inspect-luks-on-lvm.sh | 16 +++++-----
+ 2 files changed, 25 insertions(+), 21 deletions(-)
+
+diff --git a/test-data/phony-guests/make-fedora-img.pl b/test-data/phony-guests/make-fedora-img.pl
+index c0cb5d0b..6362e225 100755
+--- a/test-data/phony-guests/make-fedora-img.pl
++++ b/test-data/phony-guests/make-fedora-img.pl
+@@ -224,23 +224,27 @@ EOF
+
+ # Create the Volume Group on /dev/sda2.
+ $g->pvcreate ('/dev/sda2');
+- $g->vgcreate ('VG', ['/dev/sda2']);
+- $g->lvcreate ('Root', 'VG', 32);
+- $g->lvcreate ('LV1', 'VG', 32);
+- $g->lvcreate ('LV2', 'VG', 32);
+- $g->lvcreate ('LV3', 'VG', 64);
++ $g->vgcreate ('Volume-Group', ['/dev/sda2']);
++ $g->lvcreate ('Root', 'Volume-Group', 32);
++ $g->lvcreate ('Logical-Volume-1', 'Volume-Group', 32);
++ $g->lvcreate ('Logical-Volume-2', 'Volume-Group', 32);
++ $g->lvcreate ('Logical-Volume-3', 'Volume-Group', 64);
+
+ # Format each Logical Group as a LUKS device, with a different password.
+- $g->luks_format ('/dev/VG/Root', 'FEDORA-Root', 0);
+- $g->luks_format ('/dev/VG/LV1', 'FEDORA-LV1', 0);
+- $g->luks_format ('/dev/VG/LV2', 'FEDORA-LV2', 0);
+- $g->luks_format ('/dev/VG/LV3', 'FEDORA-LV3', 0);
++ $g->luks_format ('/dev/Volume-Group/Root', 'FEDORA-Root', 0);
++ $g->luks_format ('/dev/Volume-Group/Logical-Volume-1', 'FEDORA-LV1', 0);
++ $g->luks_format ('/dev/Volume-Group/Logical-Volume-2', 'FEDORA-LV2', 0);
++ $g->luks_format ('/dev/Volume-Group/Logical-Volume-3', 'FEDORA-LV3', 0);
+
+ # Open the LUKS devices. This creates nodes like /dev/mapper/*-luks.
+- $g->cryptsetup_open ('/dev/VG/Root', 'FEDORA-Root', 'Root-luks');
+- $g->cryptsetup_open ('/dev/VG/LV1', 'FEDORA-LV1', 'LV1-luks');
+- $g->cryptsetup_open ('/dev/VG/LV2', 'FEDORA-LV2', 'LV2-luks');
+- $g->cryptsetup_open ('/dev/VG/LV3', 'FEDORA-LV3', 'LV3-luks');
++ $g->cryptsetup_open ('/dev/Volume-Group/Root',
++ 'FEDORA-Root', 'Root-luks');
++ $g->cryptsetup_open ('/dev/Volume-Group/Logical-Volume-1',
++ 'FEDORA-LV1', 'LV1-luks');
++ $g->cryptsetup_open ('/dev/Volume-Group/Logical-Volume-2',
++ 'FEDORA-LV2', 'LV2-luks');
++ $g->cryptsetup_open ('/dev/Volume-Group/Logical-Volume-3',
++ 'FEDORA-LV3', 'LV3-luks');
+
+ # Phony root filesystem.
+ $g->mkfs ('ext2', '/dev/mapper/Root-luks', blocksize => 4096, label => 'ROOT');
+diff --git a/tests/luks/test-key-option-inspect-luks-on-lvm.sh b/tests/luks/test-key-option-inspect-luks-on-lvm.sh
+index 52cd7e98..a8d72b9f 100755
+--- a/tests/luks/test-key-option-inspect-luks-on-lvm.sh
++++ b/tests/luks/test-key-option-inspect-luks-on-lvm.sh
+@@ -30,10 +30,10 @@ skip_unless_phony_guest fedora-luks-on-lvm.img
+ # Volume names.
+ guestfish=(guestfish --listen --ro --inspector
+ --add ../test-data/phony-guests/fedora-luks-on-lvm.img)
+-keys_by_lvname=(--key /dev/VG/Root:key:FEDORA-Root
+- --key /dev/VG/LV1:key:FEDORA-LV1
+- --key /dev/VG/LV2:key:FEDORA-LV2
+- --key /dev/VG/LV3:key:FEDORA-LV3)
++keys_by_lvname=(--key /dev/Volume-Group/Root:key:FEDORA-Root
++ --key /dev/Volume-Group/Logical-Volume-1:key:FEDORA-LV1
++ --key /dev/Volume-Group/Logical-Volume-2:key:FEDORA-LV2
++ --key /dev/Volume-Group/Logical-Volume-3:key:FEDORA-LV3)
+
+ # The variable assignment below will fail, and abort the script, if guestfish
+ # refuses to start up.
+@@ -56,10 +56,10 @@ function cleanup_guestfish
+ trap cleanup_guestfish EXIT
+
+ # Get the UUIDs of the LUKS devices.
+-uuid_root=$(guestfish --remote -- luks-uuid /dev/VG/Root)
+-uuid_lv1=$( guestfish --remote -- luks-uuid /dev/VG/LV1)
+-uuid_lv2=$( guestfish --remote -- luks-uuid /dev/VG/LV2)
+-uuid_lv3=$( guestfish --remote -- luks-uuid /dev/VG/LV3)
++uuid_root=$(guestfish --remote -- luks-uuid /dev/Volume-Group/Root)
++uuid_lv1=$( guestfish --remote -- luks-uuid /dev/Volume-Group/Logical-Volume-1)
++uuid_lv2=$( guestfish --remote -- luks-uuid /dev/Volume-Group/Logical-Volume-2)
++uuid_lv3=$( guestfish --remote -- luks-uuid /dev/Volume-Group/Logical-Volume-3)
+
+ # The actual test.
+ function check_filesystems
diff --git a/0013-LUKS-on-LVM-inspection-test-test-dev-mapper-VG-LV-tr.patch b/0013-LUKS-on-LVM-inspection-test-test-dev-mapper-VG-LV-tr.patch
new file mode 100644
index 0000000..715e658
--- /dev/null
+++ b/0013-LUKS-on-LVM-inspection-test-test-dev-mapper-VG-LV-tr.patch
@@ -0,0 +1,46 @@
+From 15cc20d1f5e0413c1af26c683437995886146eb6 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Fri, 19 May 2023 16:08:49 +0200
+Subject: [PATCH] LUKS-on-LVM inspection test: test /dev/mapper/VG-LV
+ translation
+
+In the LUKS-on-LVM inspection test, call the "check_filesystems" function
+yet another time, now with such "--key" options that exercise the recent
+"/dev/mapper/VG-LV" -> "/dev/VG/LV" translation (unescaping) from
+libguestfs-common.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2168506
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+Message-Id: <20230519140849.310774-4-lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+(cherry picked from commit 32408a9c36165af376f9f42e7d3e158d3da2c76e)
+---
+ .../test-key-option-inspect-luks-on-lvm.sh | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/tests/luks/test-key-option-inspect-luks-on-lvm.sh b/tests/luks/test-key-option-inspect-luks-on-lvm.sh
+index a8d72b9f..932862b1 100755
+--- a/tests/luks/test-key-option-inspect-luks-on-lvm.sh
++++ b/tests/luks/test-key-option-inspect-luks-on-lvm.sh
+@@ -101,3 +101,21 @@ eval "$fish_ref"
+
+ # Repeat the test.
+ check_filesystems
++
++# Exit the current guestfish background process.
++guestfish --remote -- exit
++GUESTFISH_PID=
++
++# Start up another guestfish background process, and specify the keys in
++# /dev/mapper/VG-LV format this time.
++keys_by_mapper_lvname=(
++ --key /dev/mapper/Volume--Group-Root:key:FEDORA-Root
++ --key /dev/mapper/Volume--Group-Logical--Volume--1:key:FEDORA-LV1
++ --key /dev/mapper/Volume--Group-Logical--Volume--2:key:FEDORA-LV2
++ --key /dev/mapper/Volume--Group-Logical--Volume--3:key:FEDORA-LV3
++)
++fish_ref=$("${guestfish[@]}" "${keys_by_mapper_lvname[@]}")
++eval "$fish_ref"
++
++# Repeat the test.
++check_filesystems
diff --git a/0014-Replace-Pervasives.-with-Stdlib.patch b/0014-Replace-Pervasives.-with-Stdlib.patch
new file mode 100644
index 0000000..ae3711f
--- /dev/null
+++ b/0014-Replace-Pervasives.-with-Stdlib.patch
@@ -0,0 +1,119 @@
+From 54a9e48e5e1088a1b781c30b49bce695007e12fc Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Mon, 22 May 2023 16:40:21 +0100
+Subject: [PATCH] Replace Pervasives.* with Stdlib.*
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since OCaml 4.07 (released 2018-07-10) the always-loaded standard
+library module has been called Stdlib. The old Pervasives module was
+finally removed in OCaml 5.
+
+$ perl -pi.bak -e 's/Pervasives\./Stdlib./g' -- `git ls-files`
+
+OCaml >= 4.07 is now required.
+
+Also update the common submodule with:
+
+ commit d61cd820b49e403848d15c5deaccbf8dd7045370
+ Author: Jürgen Hötzel
+ Date: Sat May 20 18:16:40 2023 +0200
+
+ Add support for OCaml 5.0
+
+(cherry picked from commit 3cb094083e61203a8751bcf31dcb56a47dec6840)
+---
+ common | 2 +-
+ daemon/chroot.ml | 2 +-
+ docs/guestfs-building.pod | 2 +-
+ generator/pr.ml | 4 ++--
+ m4/guestfs-ocaml.m4 | 6 +++---
+ 5 files changed, 8 insertions(+), 8 deletions(-)
+
+Submodule common b636c3f2..d61cd820:
+diff --git a/common/mlstdutils/std_utils.ml b/common/mlstdutils/std_utils.ml
+index 0d2fa22f..86b21a7c 100644
+--- a/common/mlstdutils/std_utils.ml
++++ b/common/mlstdutils/std_utils.ml
+@@ -341,12 +341,12 @@ module List = struct
+ | x::xs, y::ys, z::zs -> (x, y, z) :: combine3 xs ys zs
+ | _ -> invalid_arg "combine3"
+
+- let rec assoc_lbl ?(cmp = Pervasives.compare) ~default x = function
++ let rec assoc_lbl ?(cmp = Stdlib.compare) ~default x = function
+ | [] -> default
+ | (y, y') :: _ when cmp x y = 0 -> y'
+ | _ :: ys -> assoc_lbl ~cmp ~default x ys
+
+- let uniq ?(cmp = Pervasives.compare) xs =
++ let uniq ?(cmp = Stdlib.compare) xs =
+ let rec loop acc = function
+ | [] -> acc
+ | [x] -> x :: acc
+diff --git a/daemon/chroot.ml b/daemon/chroot.ml
+index 62f387ee..087b5031 100644
+--- a/daemon/chroot.ml
++++ b/daemon/chroot.ml
+@@ -51,7 +51,7 @@ let f t func arg =
+ try
+ let chan = out_channel_of_descr wfd in
+ output_value chan ret;
+- Pervasives.flush chan;
++ Stdlib.flush chan;
+ Exit._exit 0
+ with
+ exn ->
+diff --git a/docs/guestfs-building.pod b/docs/guestfs-building.pod
+index b9bc885a..33703a96 100644
+--- a/docs/guestfs-building.pod
++++ b/docs/guestfs-building.pod
+@@ -119,7 +119,7 @@ virt tools which are still written in Perl.
+
+ I<Required>. Part of Perl core.
+
+-=item OCaml E<ge> 4.04
++=item OCaml E<ge> 4.07
+
+ =item OCaml findlib
+
+diff --git a/generator/pr.ml b/generator/pr.ml
+index d7e6eba3..ed6e9372 100644
+--- a/generator/pr.ml
++++ b/generator/pr.ml
+@@ -25,7 +25,7 @@ open Std_utils
+ open Utils
+
+ (* Output channel, 'pr' prints to this. *)
+-let chan = ref Pervasives.stdout
++let chan = ref Stdlib.stdout
+
+ (* Number of lines generated. *)
+ let lines = ref 0
+@@ -53,7 +53,7 @@ let output_to ?(perm = 0o444) filename k =
+ chan := open_out filename_new;
+ k ();
+ close_out !chan;
+- chan := Pervasives.stdout;
++ chan := Stdlib.stdout;
+
+ (* Is the new file different from the current file? *)
+ if Sys.file_exists filename && files_equal filename filename_new then
+diff --git a/m4/guestfs-ocaml.m4 b/m4/guestfs-ocaml.m4
+index 51072c1a..e850fb8c 100644
+--- a/m4/guestfs-ocaml.m4
++++ b/m4/guestfs-ocaml.m4
+@@ -38,10 +38,10 @@ AC_ARG_ENABLE([ocaml],
+ [],
+ [enable_ocaml=yes])
+
+-dnl OCaml >= 4.04 is required.
+-ocaml_ver_str=4.04
++dnl OCaml >= 4.07 is required.
++ocaml_ver_str=4.07
+ ocaml_min_major=4
+-ocaml_min_minor=4
++ocaml_min_minor=7
+ AC_MSG_CHECKING([if OCaml version >= $ocaml_ver_str])
+ ocaml_major="`echo $OCAMLVERSION | $AWK -F. '{print $1}'`"
+ ocaml_minor="`echo $OCAMLVERSION | $AWK -F. '{print $2}' | sed 's/^0//'`"
diff --git a/0015-fuse-Don-t-call-fclose-NULL-on-error-paths.patch b/0015-fuse-Don-t-call-fclose-NULL-on-error-paths.patch
new file mode 100644
index 0000000..963b36e
--- /dev/null
+++ b/0015-fuse-Don-t-call-fclose-NULL-on-error-paths.patch
@@ -0,0 +1,62 @@
+From 1cdc22fa656a44320e9c53401130e98f536c9759 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Mon, 22 May 2023 17:15:39 +0100
+Subject: [PATCH] fuse: Don't call fclose(NULL) on error paths
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Various errors like this:
+
+In function ‘test_fuse’,
+ inlined from ‘main’ at test-fuse.c:133:11:
+test-fuse.c:274:5: error: argument 1 null where non-null expected [-Werror=nonnull]
+ 274 | fclose (fp);
+ | ^~~~~~~~~~~
+In file included from test-fuse.c:26:
+/usr/include/stdio.h: In function ‘main’:
+/usr/include/stdio.h:183:12: note: in a call to function ‘fclose’ declared ‘nonnull’
+ 183 | extern int fclose (FILE *__stream) __nonnull ((1));
+ | ^~~~~~
+
+(cherry picked from commit ca20f27cb0898c347e49b543a8acdfb0a8a8fa7e)
+---
+ fuse/test-fuse.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/fuse/test-fuse.c b/fuse/test-fuse.c
+index 9c0db594..90a78dc7 100644
+--- a/fuse/test-fuse.c
++++ b/fuse/test-fuse.c
+@@ -271,7 +271,6 @@ test_fuse (void)
+ fp = fopen ("hello.txt", "r");
+ if (fp == NULL) {
+ perror ("open: hello.txt");
+- fclose (fp);
+ return -1;
+ }
+ if (getline (&line, &len, fp) == -1) {
+@@ -289,7 +288,6 @@ test_fuse (void)
+ fp = fopen ("world.txt", "r");
+ if (fp == NULL) {
+ perror ("open: world.txt");
+- fclose (fp);
+ return -1;
+ }
+ if (getline (&line, &len, fp) == -1) {
+@@ -352,7 +350,6 @@ test_fuse (void)
+ fp = fopen ("new", "w");
+ if (fp == NULL) {
+ perror ("open: new");
+- fclose (fp);
+ return -1;
+ }
+ fclose (fp);
+@@ -615,7 +612,6 @@ test_fuse (void)
+ fp = fopen ("new.txt", "w");
+ if (fp == NULL) {
+ perror ("open: new.txt");
+- fclose (fp);
+ return -1;
+ }
+ for (u = 0; u < 1000; ++u) {
diff --git a/0016-ocaml-implicit_close-test-collect-all-currently-unre.patch b/0016-ocaml-implicit_close-test-collect-all-currently-unre.patch
new file mode 100644
index 0000000..8ad4455
--- /dev/null
+++ b/0016-ocaml-implicit_close-test-collect-all-currently-unre.patch
@@ -0,0 +1,38 @@
+From feb17e93b4e58131cf6875c4ae638a791a875a22 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=BCrgen=20H=C3=B6tzel?= <juergen@archlinux.org>
+Date: Sat, 27 May 2023 15:32:36 +0200
+Subject: [PATCH] ocaml/implicit_close test: collect all currently unreachable
+ blocks
+
+Fixes failing implice_close test on OCaml 5.
+
+RWMJ:
+
+I adjusted this patch so that we continue to call Gc.compact on
+exiting the test, to move all of the heap (hopefully revealing flaws
+in the bindings). This only works on OCaml <= 4, but Gc.compact may
+be fixed/reimplemented later in the 5.x series.
+
+Please see also the lengthy discussion of this patch upstream:
+https://listman.redhat.com/archives/libguestfs/2023-May/thread.html#31639
+https://listman.redhat.com/archives/libguestfs/2023-June/thread.html#31709
+https://discuss.ocaml.org/t/ocaml-heap-fsck-and-forcing-collection-of-unreachable-objects/12281/1
+
+(cherry picked from commit 1274452d225da71f115e0cb8ad435e02670dc4fb)
+---
+ ocaml/t/guestfs_065_implicit_close.ml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ocaml/t/guestfs_065_implicit_close.ml b/ocaml/t/guestfs_065_implicit_close.ml
+index 567e550b..f2dfecbd 100644
+--- a/ocaml/t/guestfs_065_implicit_close.ml
++++ b/ocaml/t/guestfs_065_implicit_close.ml
+@@ -30,7 +30,7 @@ let () =
+ *)
+
+ (* This should cause the GC to close the handle. *)
+-let () = Gc.compact ()
++let () = Gc.full_major ()
+
+ let () = assert (!close_invoked = 1)
+
diff --git a/0017-ocaml-Replace-old-enter-leave_blocking_section-calls.patch b/0017-ocaml-Replace-old-enter-leave_blocking_section-calls.patch
new file mode 100644
index 0000000..3eeb410
--- /dev/null
+++ b/0017-ocaml-Replace-old-enter-leave_blocking_section-calls.patch
@@ -0,0 +1,70 @@
+From dd58abc40175f735f6fe2669c34c67e6190e557d Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 27 Jun 2023 10:17:58 +0100
+Subject: [PATCH] ocaml: Replace old enter/leave_blocking_section calls
+
+Since OCaml 4 the old and confusing caml_enter_blocking_section and
+caml_leave_blocking_section calls have been replaced with
+caml_release_runtime_system and caml_acquire_runtime_system (in that
+order). Use the new names.
+
+(cherry picked from commit 7e1d7c1330185a1f3da2ce2100f59637518c3302)
+---
+ generator/OCaml.ml | 5 +++--
+ ocaml/guestfs-c.c | 5 +++--
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/generator/OCaml.ml b/generator/OCaml.ml
+index 02d9ee2e..07ccd269 100644
+--- a/generator/OCaml.ml
++++ b/generator/OCaml.ml
+@@ -429,6 +429,7 @@ and generate_ocaml_c () =
+ #include <caml/memory.h>
+ #include <caml/mlvalues.h>
+ #include <caml/signals.h>
++#include <caml/threads.h>
+
+ #include <guestfs.h>
+ #include \"guestfs-utils.h\"
+@@ -689,12 +690,12 @@ copy_table (char * const * argv)
+ pr "\n";
+
+ if blocking then
+- pr " caml_enter_blocking_section ();\n";
++ pr " caml_release_runtime_system ();\n";
+ pr " r = %s " c_function;
+ generate_c_call_args ~handle:"g" style;
+ pr ";\n";
+ if blocking then
+- pr " caml_leave_blocking_section ();\n";
++ pr " caml_acquire_runtime_system ();\n";
+
+ (* Free strings if we copied them above. *)
+ List.iter (
+diff --git a/ocaml/guestfs-c.c b/ocaml/guestfs-c.c
+index 3888c945..8c8aa460 100644
+--- a/ocaml/guestfs-c.c
++++ b/ocaml/guestfs-c.c
+@@ -34,6 +34,7 @@
+ #include <caml/mlvalues.h>
+ #include <caml/printexc.h>
+ #include <caml/signals.h>
++#include <caml/threads.h>
+ #include <caml/unixsupport.h>
+
+ #include "guestfs-c.h"
+@@ -395,12 +396,12 @@ event_callback_wrapper (guestfs_h *g,
+ /* Ensure we are holding the GC lock before any GC operations are
+ * possible. (RHBZ#725824)
+ */
+- caml_leave_blocking_section ();
++ caml_acquire_runtime_system ();
+
+ event_callback_wrapper_locked (g, data, event, event_handle, flags,
+ buf, buf_len, array, array_len);
+
+- caml_enter_blocking_section ();
++ caml_release_runtime_system ();
+ }
+
+ value
diff --git a/0018-ocaml-Release-runtime-lock-around-guestfs_close.patch b/0018-ocaml-Release-runtime-lock-around-guestfs_close.patch
new file mode 100644
index 0000000..034dafd
--- /dev/null
+++ b/0018-ocaml-Release-runtime-lock-around-guestfs_close.patch
@@ -0,0 +1,28 @@
+From e2110f72069f184c87df348247e8f3106c81d44a Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 27 Jun 2023 11:36:55 +0100
+Subject: [PATCH] ocaml: Release runtime lock around guestfs_close
+
+When finalizing the handle we call guestfs_close. This function could
+be long-running (eg. it may have to shut down the qemu subprocess), so
+release the runtime lock.
+
+(cherry picked from commit 4a79c023e57e07844c2ac3259aaf9b885e402fdf)
+---
+ ocaml/guestfs-c.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/ocaml/guestfs-c.c b/ocaml/guestfs-c.c
+index 8c8aa460..a1865a72 100644
+--- a/ocaml/guestfs-c.c
++++ b/ocaml/guestfs-c.c
+@@ -77,7 +77,9 @@ guestfs_finalize (value gv)
+ * above, which is why we don't want to delete them before
+ * closing the handle.
+ */
++ caml_release_runtime_system ();
+ guestfs_close (g);
++ caml_acquire_runtime_system ();
+
+ /* Now unregister the global roots. */
+ if (roots && len > 0) {
diff --git a/0019-ocaml-Conditionally-acquire-the-lock-in-callbacks.patch b/0019-ocaml-Conditionally-acquire-the-lock-in-callbacks.patch
new file mode 100644
index 0000000..65d0723
--- /dev/null
+++ b/0019-ocaml-Conditionally-acquire-the-lock-in-callbacks.patch
@@ -0,0 +1,73 @@
+From e42cd859265c34d2013a45b742d4c36bb7617445 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 27 Jun 2023 12:09:12 +0100
+Subject: [PATCH] ocaml: Conditionally acquire the lock in callbacks
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This fix was originally suggested by Jürgen Hötzel (link below) which
+I have lightly modified so it works with OCaml <= 4 too.
+
+Link: https://listman.redhat.com/archives/libguestfs/2023-May/031640.html
+Link: https://discuss.ocaml.org/t/test-caml-state-and-conditionally-caml-acquire-runtime-system-good-or-bad/12489
+(cherry picked from commit 16464878cf980ffab1c1aeada2e438b0281ad1bc)
+---
+ ocaml/guestfs-c.c | 25 +++++++++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/ocaml/guestfs-c.c b/ocaml/guestfs-c.c
+index a1865a72..67dc3547 100644
+--- a/ocaml/guestfs-c.c
++++ b/ocaml/guestfs-c.c
+@@ -19,6 +19,7 @@
+ #include <config.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <stdbool.h>
+ #include <string.h>
+ #include <errno.h>
+
+@@ -36,6 +37,7 @@
+ #include <caml/signals.h>
+ #include <caml/threads.h>
+ #include <caml/unixsupport.h>
++#include <caml/version.h>
+
+ #include "guestfs-c.h"
+
+@@ -397,13 +399,32 @@ event_callback_wrapper (guestfs_h *g,
+ {
+ /* Ensure we are holding the GC lock before any GC operations are
+ * possible. (RHBZ#725824)
++ *
++ * There are many paths where we already hold the OCaml lock before
++ * this function, for example "non-blocking" calls, and the
++ * libguestfs global atexit path (which calls guestfs_close). To
++ * avoid double acquisition we need to check if we already hold the
++ * lock. OCaml 5 is strict about this. In earlier OCaml versions
++ * there is no way to check, but they did not implement the lock as
++ * a mutex and so it didn't cause problems.
++ *
++ * See also:
++ * https://discuss.ocaml.org/t/test-caml-state-and-conditionally-caml-acquire-runtime-system-good-or-bad/12489
+ */
+- caml_acquire_runtime_system ();
++#if OCAML_VERSION_MAJOR >= 5
++ bool acquired = caml_state != NULL;
++#else
++ const bool acquired = false;
++#endif
++
++ if (!acquired)
++ caml_acquire_runtime_system ();
+
+ event_callback_wrapper_locked (g, data, event, event_handle, flags,
+ buf, buf_len, array, array_len);
+
+- caml_release_runtime_system ();
++ if (!acquired)
++ caml_release_runtime_system ();
+ }
+
+ value
diff --git a/0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch b/0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch
new file mode 100644
index 0000000..2bd8857
--- /dev/null
+++ b/0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch
@@ -0,0 +1,59 @@
+From 7ceafac98d3eb28d25195622cb6dc1158e9c1c2f Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 27 Jun 2023 16:20:49 +0100
+Subject: [PATCH] ocaml: Fix guestfs_065_implicit_close.ml for OCaml 5
+
+Link: https://discuss.ocaml.org/t/ocaml-5-forcing-objects-to-be-collected-and-finalized/12492/3
+Thanks: Josh Berdine
+Thanks: Vincent Laviron
+(cherry picked from commit 7d4e9c927e8478662ece204b98ee3b5b147ab4b9)
+---
+ ocaml/t/guestfs_065_implicit_close.ml | 33 +++++++++++++++------------
+ 1 file changed, 19 insertions(+), 14 deletions(-)
+
+diff --git a/ocaml/t/guestfs_065_implicit_close.ml b/ocaml/t/guestfs_065_implicit_close.ml
+index f2dfecbd..9e68bc4c 100644
+--- a/ocaml/t/guestfs_065_implicit_close.ml
++++ b/ocaml/t/guestfs_065_implicit_close.ml
+@@ -16,22 +16,27 @@
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+-let close_invoked = ref 0
++let [@inline never][@local never] run () =
++ let close_invoked = ref 0 in
+
+-let close _ _ _ _ =
+- incr close_invoked
++ let close _ _ _ _ =
++ incr close_invoked
++ in
+
+-let () =
+- let g = new Guestfs.guestfs () in
+- ignore (g#set_event_callback close [Guestfs.EVENT_CLOSE]);
+- assert (!close_invoked = 0)
+-(* Allow the 'g' handle to go out of scope here, to ensure there is no
+- * reference held on the stack.
+- *)
++ let () =
++ let g = new Guestfs.guestfs () in
++ ignore (g#set_event_callback close [Guestfs.EVENT_CLOSE]);
++ assert (!close_invoked = 0)
++ (* Allow the 'g' handle to go out of scope here, to ensure there is no
++ * reference held on the stack.
++ *)
++ in
+
+-(* This should cause the GC to close the handle. *)
+-let () = Gc.full_major ()
++ (* This should cause the GC to close the handle. *)
++ Gc.full_major ();
+
+-let () = assert (!close_invoked = 1)
++ assert (!close_invoked = 1);
+
+-let () = Gc.compact ()
++ Gc.compact ()
++
++let () = run ()
diff --git a/0021-ocaml-Use-Caml_state_opt-in-preference-to-caml_state.patch b/0021-ocaml-Use-Caml_state_opt-in-preference-to-caml_state.patch
new file mode 100644
index 0000000..c0c7648
--- /dev/null
+++ b/0021-ocaml-Use-Caml_state_opt-in-preference-to-caml_state.patch
@@ -0,0 +1,25 @@
+From d4fabae17001702894526084bf0ab516de3599d5 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 27 Jun 2023 16:31:55 +0100
+Subject: [PATCH] ocaml: Use Caml_state_opt in preference to caml_state
+
+Link: https://discuss.ocaml.org/t/test-caml-state-and-conditionally-caml-acquire-runtime-system-good-or-bad/12489/7
+Thanks: Guillaume Munch-Maccagnoni
+(cherry picked from commit cade0b1aeb828d294a7c4e323f8131322d30fb73)
+---
+ ocaml/guestfs-c.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ocaml/guestfs-c.c b/ocaml/guestfs-c.c
+index 67dc3547..8a8761e8 100644
+--- a/ocaml/guestfs-c.c
++++ b/ocaml/guestfs-c.c
+@@ -412,7 +412,7 @@ event_callback_wrapper (guestfs_h *g,
+ * https://discuss.ocaml.org/t/test-caml-state-and-conditionally-caml-acquire-runtime-system-good-or-bad/12489
+ */
+ #if OCAML_VERSION_MAJOR >= 5
+- bool acquired = caml_state != NULL;
++ bool acquired = Caml_state_opt != NULL;
+ #else
+ const bool acquired = false;
+ #endif
diff --git a/0022-generator-Add-chown-option-for-virt-customize.patch b/0022-generator-Add-chown-option-for-virt-customize.patch
new file mode 100644
index 0000000..df841df
--- /dev/null
+++ b/0022-generator-Add-chown-option-for-virt-customize.patch
@@ -0,0 +1,398 @@
+From 64c1716c4120e8dc69d0106b6ebcf6ccb9d4fc24 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 29 Jun 2023 13:33:04 +0100
+Subject: [PATCH] generator: Add --chown option for virt-customize
+
+Also this updates the common submodule to include the changes.
+
+Fixes: https://github.com/rwmjones/guestfs-tools/issues/12
+Acked-by: Laszlo Ersek <lersek@redhat.com>
+(cherry picked from commit d8e48bff212f9b0558480ffedf8158157360d0d5)
+---
+ common | 2 +-
+ generator/customize.ml | 28 ++++++++++++++++++++++++++++
+ 2 files changed, 29 insertions(+), 1 deletion(-)
+
+Submodule common d61cd820..bbb54714:
+diff --git a/common/mlcustomize/customize-options.pod b/common/mlcustomize/customize-options.pod
+index 22a96e04..22724600 100644
+--- a/common/mlcustomize/customize-options.pod
++++ b/common/mlcustomize/customize-options.pod
+@@ -63,6 +63,30 @@ Change the permissions of C<FILE> to C<PERMISSIONS>.
+ I<Note>: C<PERMISSIONS> by default would be decimal, unless you prefix
+ it with C<0> to get octal, ie. use C<0700> not C<700>.
+
++=item B<--chown> UID.GID:PATH
++
++Change the owner user and group ID of a file or directory in the guest.
++Note:
++
++=over 4
++
++=item *
++
++Only numeric UIDs and GIDs will work, and these may not be the same
++inside the guest as on the host.
++
++=item *
++
++This will not work with Windows guests.
++
++=back
++
++For example:
++
++ virt-customize --chown '0.0:/var/log/audit.log'
++
++See also: I<--upload>.
++
+ =item B<--commands-from-file> FILENAME
+
+ Read the customize commands from a file, one (and its arguments)
+diff --git a/common/mlcustomize/customize-synopsis.pod b/common/mlcustomize/customize-synopsis.pod
+index d04f421e..e20b12d4 100644
+--- a/common/mlcustomize/customize-synopsis.pod
++++ b/common/mlcustomize/customize-synopsis.pod
+@@ -1,15 +1,15 @@
+ [--append-line FILE:LINE] [--chmod PERMISSIONS:FILE]
+- [--commands-from-file FILENAME] [--copy SOURCE:DEST]
+- [--copy-in LOCALPATH:REMOTEDIR] [--delete PATH] [--edit FILE:EXPR]
+- [--firstboot SCRIPT] [--firstboot-command 'CMD+ARGS']
+- [--firstboot-install PKG,PKG..] [--hostname HOSTNAME]
+- [--inject-qemu-ga METHOD] [--inject-virtio-win METHOD]
+- [--install PKG,PKG..] [--link TARGET:LINK[:LINK..]] [--mkdir DIR]
+- [--move SOURCE:DEST] [--password USER:SELECTOR]
+- [--root-password SELECTOR] [--run SCRIPT]
+- [--run-command 'CMD+ARGS'] [--scrub FILE] [--sm-attach SELECTOR]
+- [--sm-register] [--sm-remove] [--sm-unregister]
+- [--ssh-inject USER[:SELECTOR]] [--truncate FILE]
++ [--chown UID.GID:PATH] [--commands-from-file FILENAME]
++ [--copy SOURCE:DEST] [--copy-in LOCALPATH:REMOTEDIR]
++ [--delete PATH] [--edit FILE:EXPR] [--firstboot SCRIPT]
++ [--firstboot-command 'CMD+ARGS'] [--firstboot-install PKG,PKG..]
++ [--hostname HOSTNAME] [--inject-qemu-ga METHOD]
++ [--inject-virtio-win METHOD] [--install PKG,PKG..]
++ [--link TARGET:LINK[:LINK..]] [--mkdir DIR] [--move SOURCE:DEST]
++ [--password USER:SELECTOR] [--root-password SELECTOR]
++ [--run SCRIPT] [--run-command 'CMD+ARGS'] [--scrub FILE]
++ [--sm-attach SELECTOR] [--sm-register] [--sm-remove]
++ [--sm-unregister] [--ssh-inject USER[:SELECTOR]] [--truncate FILE]
+ [--truncate-recursive PATH] [--timezone TIMEZONE] [--touch FILE]
+ [--uninstall PKG,PKG..] [--update] [--upload FILE:DEST]
+ [--write FILE:CONTENT] [--no-logfile]
+diff --git a/common/mlcustomize/customize_cmdline.ml b/common/mlcustomize/customize_cmdline.ml
+index 3c24315d..fd3074ad 100644
+--- a/common/mlcustomize/customize_cmdline.ml
++++ b/common/mlcustomize/customize_cmdline.ml
+@@ -41,6 +41,8 @@ and op = [
+ (* --append-line FILE:LINE *)
+ | `Chmod of string * string
+ (* --chmod PERMISSIONS:FILE *)
++ | `Chown of string * string
++ (* --chown UID.GID:PATH *)
+ | `CommandsFromFile of string
+ (* --commands-from-file FILENAME *)
+ | `Copy of string * string
+@@ -187,6 +189,17 @@ let rec argspec () =
+ s_"Change the permissions of a file"
+ ),
+ Some "PERMISSIONS:FILE", "Change the permissions of C<FILE> to C<PERMISSIONS>.\n\nI<Note>: C<PERMISSIONS> by default would be decimal, unless you prefix\nit with C<0> to get octal, ie. use C<0700> not C<700>.";
++ (
++ [ L"chown" ],
++ Getopt.String (
++ s_"UID.GID:PATH",
++ fun s ->
++ let p = split_string_pair "chown" s in
++ List.push_front (`Chown p) ops
++ ),
++ s_"Change the owner user and group ID of a file or directory"
++ ),
++ Some "UID.GID:PATH", "Change the owner user and group ID of a file or directory in the guest.\nNote:\n\n=over 4\n\n=item *\n\nOnly numeric UIDs and GIDs will work, and these may not be the same\ninside the guest as on the host.\n\n=item *\n\nThis will not work with Windows guests.\n\n=back\n\nFor example:\n\n virt-customize --chown '0.0:/var/log/audit.log'\n\nSee also: I<--upload>.";
+ (
+ [ L"commands-from-file" ],
+ Getopt.String (
+diff --git a/common/mlcustomize/customize_cmdline.mli b/common/mlcustomize/customize_cmdline.mli
+index 0cc166e6..5883bbe0 100644
+--- a/common/mlcustomize/customize_cmdline.mli
++++ b/common/mlcustomize/customize_cmdline.mli
+@@ -33,6 +33,8 @@ and op = [
+ (* --append-line FILE:LINE *)
+ | `Chmod of string * string
+ (* --chmod PERMISSIONS:FILE *)
++ | `Chown of string * string
++ (* --chown UID.GID:PATH *)
+ | `CommandsFromFile of string
+ (* --commands-from-file FILENAME *)
+ | `Copy of string * string
+diff --git a/common/mltools/curl.ml b/common/mltools/curl.ml
+index 6dba9753..73eed903 100644
+--- a/common/mltools/curl.ml
++++ b/common/mltools/curl.ml
+@@ -20,11 +20,13 @@ open Printf
+
+ open Std_utils
+ open Tools_utils
++open Common_gettext.Gettext
+
+ type t = {
+ curl : string;
+ args : args;
+ tmpdir : string option;
++ url : string;
+ }
+ and args = (string * string option) list
+
+@@ -40,11 +42,17 @@ let args_of_proxy = function
+ | SystemProxy -> []
+ | ForcedProxy url -> [ "proxy", Some url; "noproxy", Some "" ]
+
+-let create ?(curl = "curl") ?(proxy = SystemProxy) ?tmpdir args =
++let create ?(curl = "curl") ?(proxy = SystemProxy) ?tmpdir args url =
++ (* The ["url"] key must not appear in [args]. This was how the
++ * previous version of this module worked, so lets check there
++ * are no callers still doing this.
++ *)
++ List.iter (function "url", _ -> assert false | _ -> ()) args;
++
+ let args = safe_args @ args_of_proxy proxy @ args in
+- { curl = curl; args = args; tmpdir = tmpdir }
++ { curl; args; tmpdir; url }
+
+-let run { curl; args; tmpdir } =
++let run { curl; args; tmpdir; url } =
+ let config_file, chan = Filename.open_temp_file ?temp_dir:tmpdir
+ "guestfscurl" ".conf" in
+ List.iter (
+@@ -67,15 +75,16 @@ let run { curl; args; tmpdir } =
+ | c -> output_char chan c
+ done;
+ fprintf chan "\"\n"
+- ) args;
++ ) (("url", Some url) :: args);
+ close_out chan;
+
+ let cmd = sprintf "%s -q --config %s" (quote curl) (quote config_file) in
+- let lines = external_command ~echo_cmd:false cmd in
++ let help = sprintf (f_"downloading %s") url in
++ let lines = external_command ~echo_cmd:false ~help cmd in
+ Unix.unlink config_file;
+ lines
+
+-let to_string { curl; args } =
++let to_string { curl; args; url } =
+ let b = Buffer.create 128 in
+ bprintf b "%s -q" (quote curl);
+ List.iter (
+@@ -85,7 +94,7 @@ let to_string { curl; args } =
+ | "user", Some _ -> bprintf b " --user <hidden>"
+ | name, Some value -> bprintf b " --%s %s" name (quote value)
+ ) args;
+- bprintf b "\n";
++ bprintf b " %s\n" (quote url);
+ Buffer.contents b
+
+ let print chan t = output_string chan (to_string t)
+diff --git a/common/mltools/curl.mli b/common/mltools/curl.mli
+index a3e98dc6..1606a79a 100644
+--- a/common/mltools/curl.mli
++++ b/common/mltools/curl.mli
+@@ -27,13 +27,16 @@ type proxy =
+ | SystemProxy (** Use the system settings. *)
+ | ForcedProxy of string (** The proxy is forced to the specified URL. *)
+
+-val create : ?curl:string -> ?proxy:proxy -> ?tmpdir:string -> args -> t
++val create : ?curl:string -> ?proxy:proxy -> ?tmpdir:string -> args -> string
++ -> t
+ (** Create a curl command handle.
+
+ The curl arguments are a list of key, value pairs corresponding
+ to curl command line parameters, without leading dashes,
+ eg. [("user", Some "user:password")].
+
++ The string parameter is the URL (which is required).
++
+ The optional [?curl] parameter controls the name of the curl
+ binary (default ["curl"]).
+
+diff --git a/common/mltools/tools_utils.ml b/common/mltools/tools_utils.ml
+index 8b611e77..23f16c51 100644
+--- a/common/mltools/tools_utils.ml
++++ b/common/mltools/tools_utils.ml
+@@ -435,8 +435,12 @@ let create_standard_options argspec ?anon_fun ?(key_opts = false)
+ let getopt = Getopt.create argspec ?anon_fun usage_msg in
+ { getopt; ks; debug_gc }
+
++let external_command_failed help cmd reason =
++ let help_prefix = match help with None -> "" | Some str -> str ^ ": " in
++ error "%s%s ‘%s’: %s" help_prefix (s_"external command") cmd reason
++
+ (* Run an external command, slurp up the output as a list of lines. *)
+-let external_command ?(echo_cmd = true) cmd =
++let external_command ?(echo_cmd = true) ?help cmd =
+ if echo_cmd then
+ debug "%s" cmd;
+ let chan = Unix.open_process_in cmd in
+@@ -448,15 +452,18 @@ let external_command ?(echo_cmd = true) cmd =
+ (match stat with
+ | Unix.WEXITED 0 -> ()
+ | Unix.WEXITED i ->
+- error (f_"external command ‘%s’ exited with error %d") cmd i
++ let reason = sprintf (f_"exited with error %d") i in
++ external_command_failed help cmd reason
+ | Unix.WSIGNALED i ->
+- error (f_"external command ‘%s’ killed by signal %d") cmd i
++ let reason = sprintf (f_"killed by signal %d") i in
++ external_command_failed help cmd reason
+ | Unix.WSTOPPED i ->
+- error (f_"external command ‘%s’ stopped by signal %d") cmd i
++ let reason = sprintf (f_"stopped by signal %d") i in
++ external_command_failed help cmd reason
+ );
+ lines
+
+-let rec run_commands ?(echo_cmd = true) cmds =
++let rec run_commands ?(echo_cmd = true) ?help cmds =
+ let res = Array.make (List.length cmds) 0 in
+ let pids =
+ List.mapi (
+@@ -482,21 +489,21 @@ let rec run_commands ?(echo_cmd = true) cmds =
+ let matching_pair = List.hd matching_pair in
+ let idx, _, app, outfd, errfd = matching_pair in
+ pids := new_pids;
+- res.(idx) <- do_teardown app outfd errfd stat
++ res.(idx) <- do_teardown help app outfd errfd stat
+ );
+ done;
+ Array.to_list res
+
+-and run_command ?(echo_cmd = true) ?stdout_fd ?stderr_fd args =
++and run_command ?(echo_cmd = true) ?help ?stdout_fd ?stderr_fd args =
+ let run_res = do_run args ~echo_cmd ?stdout_fd ?stderr_fd in
+ match run_res with
+ | Either (pid, app, outfd, errfd) ->
+ let _, stat = Unix.waitpid [] pid in
+- do_teardown app outfd errfd stat
++ do_teardown help app outfd errfd stat
+ | Or code ->
+ code
+
+-and do_run ?(echo_cmd = true) ?stdout_fd ?stderr_fd args =
++and do_run ?(echo_cmd = true) ?help ?stdout_fd ?stderr_fd args =
+ let app = List.hd args in
+ let get_fd default = function
+ | None ->
+@@ -522,16 +529,18 @@ and do_run ?(echo_cmd = true) ?stdout_fd ?stderr_fd args =
+ debug "%s: %s: executable not found" app fn;
+ Or 127
+
+-and do_teardown app outfd errfd exitstat =
++and do_teardown help app outfd errfd exitstat =
+ Option.iter Unix.close outfd;
+ Option.iter Unix.close errfd;
+ match exitstat with
+ | Unix.WEXITED i ->
+- i
++ i
+ | Unix.WSIGNALED i ->
+- error (f_"external command ‘%s’ killed by signal %d") app i
++ let reason = sprintf (f_"killed by signal %d") i in
++ external_command_failed help app reason
+ | Unix.WSTOPPED i ->
+- error (f_"external command ‘%s’ stopped by signal %d") app i
++ let reason = sprintf (f_"stopped by signal %d") i in
++ external_command_failed help app reason
+
+ let shell_command ?(echo_cmd = true) cmd =
+ if echo_cmd then
+diff --git a/common/mltools/tools_utils.mli b/common/mltools/tools_utils.mli
+index ec900e63..193ba7b6 100644
+--- a/common/mltools/tools_utils.mli
++++ b/common/mltools/tools_utils.mli
+@@ -103,13 +103,17 @@ val create_standard_options : Getopt.speclist -> ?anon_fun:Getopt.anon_fun -> ?k
+
+ Returns a new {!cmdline_options} structure. *)
+
+-val external_command : ?echo_cmd:bool -> string -> string list
++val external_command : ?echo_cmd:bool -> ?help:string -> string -> string list
+ (** Run an external command, slurp up the output as a list of lines.
+
+ [echo_cmd] specifies whether to output the full command on verbose
+- mode, and it's on by default. *)
++ mode, and it's on by default.
+
+-val run_commands : ?echo_cmd:bool -> (string list * Unix.file_descr option * Unix.file_descr option) list -> int list
++ [help] is an optional string which is printed as a prefix in
++ case the external command fails, eg as a hint to the user about
++ what we were trying to do. *)
++
++val run_commands : ?echo_cmd:bool -> ?help:string -> (string list * Unix.file_descr option * Unix.file_descr option) list -> int list
+ (** Run external commands in parallel without using a shell,
+ and return a list with their exit codes.
+
+@@ -126,16 +130,24 @@ val run_commands : ?echo_cmd:bool -> (string list * Unix.file_descr option * Uni
+ end of the execution of the command for which it was specified.
+
+ [echo_cmd] specifies whether output the full command on verbose
+- mode, and it's on by default. *)
++ mode, and it's on by default.
+
+-val run_command : ?echo_cmd:bool -> ?stdout_fd:Unix.file_descr -> ?stderr_fd:Unix.file_descr -> string list -> int
++ [help] is an optional string which is printed as a prefix in
++ case the external command fails, eg as a hint to the user about
++ what we were trying to do. *)
++
++val run_command : ?echo_cmd:bool -> ?help:string -> ?stdout_fd:Unix.file_descr -> ?stderr_fd:Unix.file_descr -> string list -> int
+ (** Run an external command without using a shell, and return its exit code.
+
+ If [stdout_fd] or [stderr_fd] is specified, the file descriptor
+ is automatically closed after executing the command.
+
+ [echo_cmd] specifies whether output the full command on verbose
+- mode, and it's on by default. *)
++ mode, and it's on by default.
++
++ [help] is an optional string which is printed as a prefix in
++ case the external command fails, eg as a hint to the user about
++ what we were trying to do. *)
+
+ val shell_command : ?echo_cmd:bool -> string -> int
+ (** Run an external shell command, and return its exit code.
+diff --git a/generator/customize.ml b/generator/customize.ml
+index aa7ac8e8..8d3dec3e 100644
+--- a/generator/customize.ml
++++ b/generator/customize.ml
+@@ -95,6 +95,34 @@ I<Note>: C<PERMISSIONS> by default would be decimal, unless you prefix
+ it with C<0> to get octal, ie. use C<0700> not C<700>.";
+ };
+
++ { op_name = "chown";
++ op_type = StringPair "UID.GID:PATH";
++ op_discrim = "`Chown";
++ op_shortdesc = "Change the owner user and group ID of a file or directory";
++ op_pod_longdesc = "\
++Change the owner user and group ID of a file or directory in the guest.
++Note:
++
++=over 4
++
++=item *
++
++Only numeric UIDs and GIDs will work, and these may not be the same
++inside the guest as on the host.
++
++=item *
++
++This will not work with Windows guests.
++
++=back
++
++For example:
++
++ virt-customize --chown '0.0:/var/log/audit.log'
++
++See also: I<--upload>.";
++ };
++
+ { op_name = "commands-from-file";
+ op_type = StringFn ("FILENAME", "customize_read_from_file");
+ op_discrim = "`CommandsFromFile";
diff --git a/0023-lib-remove-guestfs_int_cmd_clear_close_files.patch b/0023-lib-remove-guestfs_int_cmd_clear_close_files.patch
new file mode 100644
index 0000000..d7fe99e
--- /dev/null
+++ b/0023-lib-remove-guestfs_int_cmd_clear_close_files.patch
@@ -0,0 +1,101 @@
+From 6c63f5cd8b43448f4847d550ad313d950d6b8520 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Tue, 11 Jul 2023 13:39:06 +0200
+Subject: [PATCH] lib: remove guestfs_int_cmd_clear_close_files()
+
+The last (only?) caller of guestfs_int_cmd_clear_close_files() disappeared
+in commit e4c396888056 ("lib/info: Remove /dev/fd hacking and pass a true
+filename to qemu-img info.", 2018-01-23), part of v1.37.36.
+
+Simplify the code by removing guestfs_int_cmd_clear_close_files().
+
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+Message-Id: <20230711113906.107340-1-lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+(cherry picked from commit 13c7052ff96d5ee99ec1b1252f1a3b4d7aed44d2)
+---
+ lib/command.c | 37 ++++++++++---------------------------
+ lib/guestfs-internal.h | 1 -
+ 2 files changed, 10 insertions(+), 28 deletions(-)
+
+diff --git a/lib/command.c b/lib/command.c
+index 515ef624..82a47baf 100644
+--- a/lib/command.c
++++ b/lib/command.c
+@@ -152,9 +152,6 @@ struct command
+ /* When using the pipe_* APIs, stderr is pointed to a temporary file. */
+ char *error_file;
+
+- /* Close file descriptors (defaults to true). */
+- bool close_files;
+-
+ /* Supply a callback to receive stdout. */
+ cmd_stdout_callback stdout_callback;
+ void *stdout_data;
+@@ -186,7 +183,6 @@ guestfs_int_new_command (guestfs_h *g)
+ cmd = safe_calloc (g, 1, sizeof *cmd);
+ cmd->g = g;
+ cmd->capture_errors = true;
+- cmd->close_files = true;
+ cmd->errorfd = -1;
+ cmd->outfd = -1;
+ return cmd;
+@@ -358,17 +354,6 @@ guestfs_int_cmd_clear_capture_errors (struct command *cmd)
+ cmd->capture_errors = false;
+ }
+
+-/**
+- * Don't close file descriptors after the fork.
+- *
+- * XXX Should allow single fds to be sent to child process.
+- */
+-void
+-guestfs_int_cmd_clear_close_files (struct command *cmd)
+-{
+- cmd->close_files = false;
+-}
+-
+ /**
+ * Set a function to be executed in the child, right before the
+ * execution. Can be used to setup the child, for example changing
+@@ -564,18 +549,16 @@ run_child (struct command *cmd, char **env)
+ for (i = 1; i < NSIG; ++i)
+ sigaction (i, &sa, NULL);
+
+- if (cmd->close_files) {
+- /* Close all other file descriptors. This ensures that we don't
+- * hold open (eg) pipes from the parent process.
+- */
+- max_fd = sysconf (_SC_OPEN_MAX);
+- if (max_fd == -1)
+- max_fd = 1024;
+- if (max_fd > 65536)
+- max_fd = 65536; /* bound the amount of work we do here */
+- for (fd = 3; fd < max_fd; ++fd)
+- close (fd);
+- }
++ /* Close all other file descriptors. This ensures that we don't
++ * hold open (eg) pipes from the parent process.
++ */
++ max_fd = sysconf (_SC_OPEN_MAX);
++ if (max_fd == -1)
++ max_fd = 1024;
++ if (max_fd > 65536)
++ max_fd = 65536; /* bound the amount of work we do here */
++ for (fd = 3; fd < max_fd; ++fd)
++ close (fd);
+
+ /* Set the umask for all subcommands to something sensible (RHBZ#610880). */
+ umask (022);
+diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h
+index fb55e026..c7ef3227 100644
+--- a/lib/guestfs-internal.h
++++ b/lib/guestfs-internal.h
+@@ -751,7 +751,6 @@ extern void guestfs_int_cmd_set_stdout_callback (struct command *, cmd_stdout_ca
+ extern void guestfs_int_cmd_set_stderr_to_stdout (struct command *);
+ extern void guestfs_int_cmd_set_child_rlimit (struct command *, int resource, long limit);
+ extern void guestfs_int_cmd_clear_capture_errors (struct command *);
+-extern void guestfs_int_cmd_clear_close_files (struct command *);
+ extern void guestfs_int_cmd_set_child_callback (struct command *, cmd_child_callback child_callback, void *data);
+ extern int guestfs_int_cmd_run (struct command *);
+ extern void guestfs_int_cmd_close (struct command *);
diff --git a/0024-docs-fix-broken-link-in-the-guestfs-manual.patch b/0024-docs-fix-broken-link-in-the-guestfs-manual.patch
new file mode 100644
index 0000000..7ddefc8
--- /dev/null
+++ b/0024-docs-fix-broken-link-in-the-guestfs-manual.patch
@@ -0,0 +1,34 @@
+From f8e8aef7e9e8334db19529aa46bd28a209436b50 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Fri, 14 Jul 2023 15:22:09 +0200
+Subject: [PATCH] docs: fix broken link in the guestfs manual
+
+Commit 55202a4d49a1 ("New API: get-sockdir", 2016-02-03) added identical
+language to "fish/guestfish.pod" and "src/guestfs.pod", including an
+internal link L</get-sockdir>. That's appropriate for
+"fish/guestfish.pod", but the same API description is generated with a
+different anchor for "src/guestfs.pod". Adapt the reference.
+
+Fixes: 55202a4d49a101392148d79cb2e1591428db2681
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2184967
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+Message-Id: <20230714132213.96616-4-lersek@redhat.com>
+(cherry picked from commit b4a4b754c6161b95ddee05e398e0200e6b73b840)
+---
+ lib/guestfs.pod | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/guestfs.pod b/lib/guestfs.pod
+index 866a4638..5db6dd91 100644
+--- a/lib/guestfs.pod
++++ b/lib/guestfs.pod
+@@ -3123,7 +3123,7 @@ non-essential runtime files.
+ If it is set, then is used to store temporary sockets. Otherwise,
+ F</tmp> is used.
+
+-See also L</get-sockdir>,
++See also L</guestfs_get_sockdir>,
+ L<http://www.freedesktop.org/wiki/Specifications/basedir-spec/>.
+
+ =back
diff --git a/0025-docs-clarify-sockdir-s-separation.patch b/0025-docs-clarify-sockdir-s-separation.patch
new file mode 100644
index 0000000..9fd3553
--- /dev/null
+++ b/0025-docs-clarify-sockdir-s-separation.patch
@@ -0,0 +1,75 @@
+From cde50cb9d71ffa418f45868aa0d4b874847b989a Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Fri, 14 Jul 2023 15:22:10 +0200
+Subject: [PATCH] docs: clarify sockdir's separation
+
+There's another reason for separating sockdir from tmpdir, beyond "shorter
+pathnames needed": permissions. For example, passt drops privileges such
+that it cannot access "/tmp", and that restricts both the unix domain
+socket and the PID file of passt.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2184967
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+Message-Id: <20230714132213.96616-5-lersek@redhat.com>
+(cherry picked from commit 21ccddecf7dd51b24bb2b71dbc8beb1a8dd01923)
+---
+ fish/guestfish.pod | 4 ++--
+ generator/actions_properties.ml | 8 ++++++--
+ lib/guestfs.pod | 4 ++--
+ 3 files changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/fish/guestfish.pod b/fish/guestfish.pod
+index d36cac9d..33fc8b2c 100644
+--- a/fish/guestfish.pod
++++ b/fish/guestfish.pod
+@@ -1492,8 +1492,8 @@ See L</LIBGUESTFS_CACHEDIR>, L</LIBGUESTFS_TMPDIR>.
+ This directory represents a user-specific directory for storing
+ non-essential runtime files.
+
+-If it is set, then is used to store temporary sockets. Otherwise,
+-F</tmp> is used.
++If it is set, then is used to store temporary sockets and PID files.
++Otherwise, F</tmp> is used.
+
+ See also L</get-sockdir>,
+ L<http://www.freedesktop.org/wiki/Specifications/basedir-spec/>.
+diff --git a/generator/actions_properties.ml b/generator/actions_properties.ml
+index f84afb10..42eaaa4d 100644
+--- a/generator/actions_properties.ml
++++ b/generator/actions_properties.ml
+@@ -595,13 +595,17 @@ Get the handle identifier. See C<guestfs_set_identifier>." };
+ name = "get_sockdir"; added = (1, 33, 8);
+ style = RString (RPlainString, "sockdir"), [], [];
+ blocking = false;
+- shortdesc = "get the temporary directory for sockets";
++ shortdesc = "get the temporary directory for sockets and PID files";
+ longdesc = "\
+-Get the directory used by the handle to store temporary socket files.
++Get the directory used by the handle to store temporary socket and PID
++files.
+
+ This is different from C<guestfs_get_tmpdir>, as we need shorter
+ paths for sockets (due to the limited buffers of filenames for UNIX
+ sockets), and C<guestfs_get_tmpdir> may be too long for them.
++Furthermore, sockets and PID files must be accessible to such background
++services started by libguestfs that may not have permission to access
++the temporary directory returned by C<guestfs_get_tmpdir>.
+
+ The environment variable C<XDG_RUNTIME_DIR> controls the default
+ value: If C<XDG_RUNTIME_DIR> is set, then that is the default.
+diff --git a/lib/guestfs.pod b/lib/guestfs.pod
+index 5db6dd91..dff32cc9 100644
+--- a/lib/guestfs.pod
++++ b/lib/guestfs.pod
+@@ -3120,8 +3120,8 @@ See L</LIBGUESTFS_CACHEDIR>, L</LIBGUESTFS_TMPDIR>.
+ This directory represents a user-specific directory for storing
+ non-essential runtime files.
+
+-If it is set, then is used to store temporary sockets. Otherwise,
+-F</tmp> is used.
++If it is set, then is used to store temporary sockets and PID files.
++Otherwise, F</tmp> is used.
+
+ See also L</guestfs_get_sockdir>,
+ L<http://www.freedesktop.org/wiki/Specifications/basedir-spec/>.
diff --git a/0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch b/0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch
new file mode 100644
index 0000000..f5153f7
--- /dev/null
+++ b/0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch
@@ -0,0 +1,144 @@
+From 986f5d8b1110b461d37d044c7a8052ed7ba27f87 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Fri, 14 Jul 2023 15:22:11 +0200
+Subject: [PATCH] lib: move guestfs_int_create_socketname() from "launch.c" to
+ "tmpdirs.c"
+
+Consider the following inverted call tree (effectively a dependency tree
+-- callees are at the top and near the left margin):
+
+ lazy_make_tmpdir() [lib/tmpdirs.c]
+ guestfs_int_lazy_make_tmpdir() [lib/tmpdirs.c]
+ guestfs_int_make_temp_path() [lib/tmpdirs.c]
+ guestfs_int_lazy_make_sockdir() [lib/tmpdirs.c]
+ guestfs_int_create_socketname() [lib/launch.c]
+
+lazy_make_tmpdir() is our common workhorse / helper function that
+centralizes the mkdtemp() function call.
+
+guestfs_int_lazy_make_tmpdir() and guestfs_int_lazy_make_sockdir() are the
+next level functions, both calling lazy_make_tmpdir(), just feeding it
+different dirname generator functions, and different "is_runtime_dir"
+qualifications. These functions create temp dirs for various, more
+specific, purposes (see the manual and "lib/guestfs-internal.h" for more
+details).
+
+On a yet higher level are guestfs_int_make_temp_path() and
+guestfs_int_create_socketname() -- they serve for creating *entries* in
+those specific temp directories.
+
+The discrepancy here is that, although all the other functions live in
+"lib/tmpdirs.c", guestfs_int_create_socketname() is defined in
+"lib/launch.c". That makes for a confusing code reading; move the function
+to "lib/tmpdirs.c", just below its sibling function
+guestfs_int_make_temp_path().
+
+While at it, correct the leading comment on
+guestfs_int_create_socketname() -- the socket pathname is created in the
+socket directory, not in the temporary directory.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2184967
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+Message-Id: <20230714132213.96616-6-lersek@redhat.com>
+(cherry picked from commit 0b2ad40a098cbaf91d0d0a2df6e31bf8e3e08ace)
+---
+ lib/guestfs-internal.h | 2 +-
+ lib/launch.c | 26 --------------------------
+ lib/tmpdirs.c | 26 ++++++++++++++++++++++++++
+ 3 files changed, 27 insertions(+), 27 deletions(-)
+
+diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h
+index c7ef3227..ebd68380 100644
+--- a/lib/guestfs-internal.h
++++ b/lib/guestfs-internal.h
+@@ -668,6 +668,7 @@ extern int guestfs_int_set_env_runtimedir (guestfs_h *g, const char *envname, co
+ extern int guestfs_int_lazy_make_tmpdir (guestfs_h *g);
+ extern int guestfs_int_lazy_make_sockdir (guestfs_h *g);
+ extern char *guestfs_int_make_temp_path (guestfs_h *g, const char *name, const char *extension);
++extern int guestfs_int_create_socketname (guestfs_h *g, const char *filename, char (*sockname)[UNIX_PATH_MAX]);
+ extern char *guestfs_int_lazy_make_supermin_appliance_dir (guestfs_h *g);
+ extern void guestfs_int_remove_tmpdir (guestfs_h *g);
+ extern void guestfs_int_remove_sockdir (guestfs_h *g);
+@@ -700,7 +701,6 @@ extern int guestfs_int_get_uefi (guestfs_h *g, char *const *firmwares, const cha
+ extern int64_t guestfs_int_timeval_diff (const struct timeval *x, const struct timeval *y);
+ extern void guestfs_int_launch_send_progress (guestfs_h *g, int perdozen);
+ extern void guestfs_int_unblock_sigterm (void);
+-extern int guestfs_int_create_socketname (guestfs_h *g, const char *filename, char (*sockname)[UNIX_PATH_MAX]);
+ extern void guestfs_int_register_backend (const char *name, const struct backend_ops *);
+ extern int guestfs_int_set_backend (guestfs_h *g, const char *method);
+
+diff --git a/lib/launch.c b/lib/launch.c
+index 6e08b120..bd0526c9 100644
+--- a/lib/launch.c
++++ b/lib/launch.c
+@@ -309,32 +309,6 @@ guestfs_impl_config (guestfs_h *g,
+ return 0;
+ }
+
+-/**
+- * Create the path for a socket with the selected filename in the
+- * tmpdir.
+- */
+-int
+-guestfs_int_create_socketname (guestfs_h *g, const char *filename,
+- char (*sockpath)[UNIX_PATH_MAX])
+-{
+- int r;
+-
+- if (guestfs_int_lazy_make_sockdir (g) == -1)
+- return -1;
+-
+- r = snprintf (*sockpath, UNIX_PATH_MAX, "%s/%s", g->sockdir, filename);
+- if (r >= UNIX_PATH_MAX) {
+- error (g, _("socket path too long: %s/%s"), g->sockdir, filename);
+- return -1;
+- }
+- if (r < 0) {
+- perrorf (g, _("%s"), g->sockdir);
+- return -1;
+- }
+-
+- return 0;
+-}
+-
+ /**
+ * When the library is loaded, each backend calls this function to
+ * register itself in a global list.
+diff --git a/lib/tmpdirs.c b/lib/tmpdirs.c
+index b8e19de2..24adf98d 100644
+--- a/lib/tmpdirs.c
++++ b/lib/tmpdirs.c
+@@ -253,6 +253,32 @@ guestfs_int_make_temp_path (guestfs_h *g,
+ extension ? extension : "");
+ }
+
++/**
++ * Create the path for a socket with the selected filename in the
++ * sockdir.
++ */
++int
++guestfs_int_create_socketname (guestfs_h *g, const char *filename,
++ char (*sockpath)[UNIX_PATH_MAX])
++{
++ int r;
++
++ if (guestfs_int_lazy_make_sockdir (g) == -1)
++ return -1;
++
++ r = snprintf (*sockpath, UNIX_PATH_MAX, "%s/%s", g->sockdir, filename);
++ if (r >= UNIX_PATH_MAX) {
++ error (g, _("socket path too long: %s/%s"), g->sockdir, filename);
++ return -1;
++ }
++ if (r < 0) {
++ perrorf (g, _("%s"), g->sockdir);
++ return -1;
++ }
++
++ return 0;
++}
++
+ /**
+ * Create the supermin appliance directory under cachedir, if it does
+ * not exist.
diff --git a/0027-generator-customize-Add-new-StringTriplet-for-use-by.patch b/0027-generator-customize-Add-new-StringTriplet-for-use-by.patch
new file mode 100644
index 0000000..9389253
--- /dev/null
+++ b/0027-generator-customize-Add-new-StringTriplet-for-use-by.patch
@@ -0,0 +1,241 @@
+From 6e3d91681c7dffdfdf291a809d6773691a2a7bda Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Sat, 15 Jul 2023 16:33:18 +0100
+Subject: [PATCH] generator: customize: Add new StringTriplet for use by
+ --chown
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The just added --chown option previously used StringPair, splitting
+the argument as ‘UID.GID:FILENAME’. However this will not work if we
+ever extend this with the ability to use user or group names, since
+they may contain dot (but not colon). Add a new StringTriplet type
+and split the argument string three ways. The new option becomes:
+
+ virt-customize ... --chown UID:GID:FILENAME
+
+Include the following commit from the common submodule:
+
+ commit e70d89a58dae068be2e19c7c21558707261af96a
+ Author: Richard W.M. Jones <rjones@redhat.com>
+ Date: Sat Jul 15 16:42:06 2023 +0100
+
+ customize: Update generated files for --chown with StringTriplet
+
+Updates: commit d8e48bff212f9b0558480ffedf8158157360d0d5
+(cherry picked from commit c08032ebe2763f5e9ce5b14e003721475219d390)
+---
+ common | 2 +-
+ generator/customize.ml | 44 ++++++++++++++++++++++++++++++++----------
+ 2 files changed, 35 insertions(+), 11 deletions(-)
+
+Submodule common bbb54714..e70d89a5:
+diff --git a/common/mlcustomize/customize-options.pod b/common/mlcustomize/customize-options.pod
+index 22724600..e658a447 100644
+--- a/common/mlcustomize/customize-options.pod
++++ b/common/mlcustomize/customize-options.pod
+@@ -63,7 +63,7 @@ Change the permissions of C<FILE> to C<PERMISSIONS>.
+ I<Note>: C<PERMISSIONS> by default would be decimal, unless you prefix
+ it with C<0> to get octal, ie. use C<0700> not C<700>.
+
+-=item B<--chown> UID.GID:PATH
++=item B<--chown> UID:GID:PATH
+
+ Change the owner user and group ID of a file or directory in the guest.
+ Note:
+@@ -83,7 +83,7 @@ This will not work with Windows guests.
+
+ For example:
+
+- virt-customize --chown '0.0:/var/log/audit.log'
++ virt-customize --chown '0:0:/var/log/audit.log'
+
+ See also: I<--upload>.
+
+diff --git a/common/mlcustomize/customize-synopsis.pod b/common/mlcustomize/customize-synopsis.pod
+index e20b12d4..5031b015 100644
+--- a/common/mlcustomize/customize-synopsis.pod
++++ b/common/mlcustomize/customize-synopsis.pod
+@@ -1,5 +1,5 @@
+ [--append-line FILE:LINE] [--chmod PERMISSIONS:FILE]
+- [--chown UID.GID:PATH] [--commands-from-file FILENAME]
++ [--chown UID:GID:PATH] [--commands-from-file FILENAME]
+ [--copy SOURCE:DEST] [--copy-in LOCALPATH:REMOTEDIR]
+ [--delete PATH] [--edit FILE:EXPR] [--firstboot SCRIPT]
+ [--firstboot-command 'CMD+ARGS'] [--firstboot-install PKG,PKG..]
+diff --git a/common/mlcustomize/customize_cmdline.ml b/common/mlcustomize/customize_cmdline.ml
+index fd3074ad..3ce901db 100644
+--- a/common/mlcustomize/customize_cmdline.ml
++++ b/common/mlcustomize/customize_cmdline.ml
+@@ -41,8 +41,8 @@ and op = [
+ (* --append-line FILE:LINE *)
+ | `Chmod of string * string
+ (* --chmod PERMISSIONS:FILE *)
+- | `Chown of string * string
+- (* --chown UID.GID:PATH *)
++ | `Chown of string * string * string
++ (* --chown UID:GID:PATH *)
+ | `CommandsFromFile of string
+ (* --commands-from-file FILENAME *)
+ | `Copy of string * string
+@@ -154,8 +154,13 @@ let rec argspec () =
+ option_name in
+ let len = String.length arg in
+ String.sub arg 0 i, String.sub arg (i+1) (len-(i+1))
+- in
+- let split_string_list arg =
++ and split_string_triplet option_name arg =
++ match String.nsplit ~max:3 "," arg with
++ | [a; b; c] -> a, b, c
++ | _ ->
++ error (f_"invalid format for '--%s' parameter, see the man page")
++ option_name
++ and split_string_list arg =
+ String.nsplit "," arg
+ in
+ let split_links_list option_name arg =
+@@ -192,14 +197,14 @@ let rec argspec () =
+ (
+ [ L"chown" ],
+ Getopt.String (
+- s_"UID.GID:PATH",
++ s_"UID:GID:PATH",
+ fun s ->
+- let p = split_string_pair "chown" s in
++ let p = split_string_triplet "chown" s in
+ List.push_front (`Chown p) ops
+ ),
+ s_"Change the owner user and group ID of a file or directory"
+ ),
+- Some "UID.GID:PATH", "Change the owner user and group ID of a file or directory in the guest.\nNote:\n\n=over 4\n\n=item *\n\nOnly numeric UIDs and GIDs will work, and these may not be the same\ninside the guest as on the host.\n\n=item *\n\nThis will not work with Windows guests.\n\n=back\n\nFor example:\n\n virt-customize --chown '0.0:/var/log/audit.log'\n\nSee also: I<--upload>.";
++ Some "UID:GID:PATH", "Change the owner user and group ID of a file or directory in the guest.\nNote:\n\n=over 4\n\n=item *\n\nOnly numeric UIDs and GIDs will work, and these may not be the same\ninside the guest as on the host.\n\n=item *\n\nThis will not work with Windows guests.\n\n=back\n\nFor example:\n\n virt-customize --chown '0:0:/var/log/audit.log'\n\nSee also: I<--upload>.";
+ (
+ [ L"commands-from-file" ],
+ Getopt.String (
+diff --git a/common/mlcustomize/customize_cmdline.mli b/common/mlcustomize/customize_cmdline.mli
+index 5883bbe0..112b74dc 100644
+--- a/common/mlcustomize/customize_cmdline.mli
++++ b/common/mlcustomize/customize_cmdline.mli
+@@ -33,8 +33,8 @@ and op = [
+ (* --append-line FILE:LINE *)
+ | `Chmod of string * string
+ (* --chmod PERMISSIONS:FILE *)
+- | `Chown of string * string
+- (* --chown UID.GID:PATH *)
++ | `Chown of string * string * string
++ (* --chown UID:GID:PATH *)
+ | `CommandsFromFile of string
+ (* --commands-from-file FILENAME *)
+ | `Copy of string * string
+diff --git a/generator/customize.ml b/generator/customize.ml
+index 8d3dec3e..fe87ef5e 100644
+--- a/generator/customize.ml
++++ b/generator/customize.ml
+@@ -41,6 +41,7 @@ and op_type =
+ | Unit (* no argument *)
+ | String of string (* string *)
+ | StringPair of string (* string:string *)
++| StringTriplet of string (* string:string:string *)
+ | StringList of string (* string,string,... *)
+ | TargetLinks of string (* target:link[:link...] *)
+ | PasswordSelector of string (* password selector *)
+@@ -96,7 +97,7 @@ it with C<0> to get octal, ie. use C<0700> not C<700>.";
+ };
+
+ { op_name = "chown";
+- op_type = StringPair "UID.GID:PATH";
++ op_type = StringTriplet "UID:GID:PATH";
+ op_discrim = "`Chown";
+ op_shortdesc = "Change the owner user and group ID of a file or directory";
+ op_pod_longdesc = "\
+@@ -118,7 +119,7 @@ This will not work with Windows guests.
+
+ For example:
+
+- virt-customize --chown '0.0:/var/log/audit.log'
++ virt-customize --chown '0:0:/var/log/audit.log'
+
+ See also: I<--upload>.";
+ };
+@@ -761,8 +762,13 @@ let rec argspec () =
+ option_name in
+ let len = String.length arg in
+ String.sub arg 0 i, String.sub arg (i+1) (len-(i+1))
+- in
+- let split_string_list arg =
++ and split_string_triplet option_name arg =
++ match String.nsplit ~max:3 \",\" arg with
++ | [a; b; c] -> a, b, c
++ | _ ->
++ error (f_\"invalid format for '--%%s' parameter, see the man page\")
++ option_name
++ and split_string_list arg =
+ String.nsplit \",\" arg
+ in
+ let split_links_list option_name arg =
+@@ -807,6 +813,19 @@ let rec argspec () =
+ pr " s_\"%s\"\n" shortdesc;
+ pr " ),\n";
+ pr " Some %S, %S;\n" v longdesc
++ | { op_type = StringTriplet v; op_name = name; op_discrim = discrim;
++ op_shortdesc = shortdesc; op_pod_longdesc = longdesc } ->
++ pr " (\n";
++ pr " [ L\"%s\" ],\n" name;
++ pr " Getopt.String (\n";
++ pr " s_\"%s\",\n" v;
++ pr " fun s ->\n";
++ pr " let p = split_string_triplet \"%s\" s in\n" name;
++ pr " List.push_front (%s p) ops\n" discrim;
++ pr " ),\n";
++ pr " s_\"%s\"\n" shortdesc;
++ pr " ),\n";
++ pr " Some %S, %S;\n" v longdesc
+ | { op_type = StringList v; op_name = name; op_discrim = discrim;
+ op_shortdesc = shortdesc; op_pod_longdesc = longdesc } ->
+ pr " (\n";
+@@ -956,6 +975,7 @@ let rec argspec () =
+ | { op_type = Unit; }
+ | { op_type = String _; }
+ | { op_type = StringPair _; }
++ | { op_type = StringTriplet _; }
+ | { op_type = StringList _; }
+ | { op_type = TargetLinks _; }
+ | { op_type = PasswordSelector _; }
+@@ -1021,6 +1041,10 @@ type ops = {
+ | { op_type = StringPair v; op_discrim = discrim;
+ op_name = name } ->
+ pr " | %s of string * string\n (* --%s %s *)\n" discrim name v
++ | { op_type = StringTriplet v; op_discrim = discrim;
++ op_name = name } ->
++ pr " | %s of string * string * string\n (* --%s %s *)\n"
++ discrim name v
+ | { op_type = StringList v; op_discrim = discrim;
+ op_name = name } ->
+ pr " | %s of string list\n (* --%s %s *)\n" discrim name v
+@@ -1073,9 +1097,9 @@ let generate_customize_synopsis_pod () =
+ function
+ | { op_type = Unit; op_name = n } ->
+ n, sprintf "[--%s]" n
+- | { op_type = String v | StringPair v | StringList v | TargetLinks v
+- | PasswordSelector v | UserPasswordSelector v | SSHKeySelector v
+- | StringFn (v, _) | SMPoolSelector v;
++ | { op_type = String v | StringPair v | StringTriplet v | StringList v
++ | TargetLinks v | PasswordSelector v | UserPasswordSelector v
++ | SSHKeySelector v | StringFn (v, _) | SMPoolSelector v;
+ op_name = n } ->
+ n, sprintf "[--%s %s]" n v
+ ) ops @
+@@ -1116,9 +1140,9 @@ let generate_customize_options_pod () =
+ function
+ | { op_type = Unit; op_name = n; op_pod_longdesc = ld } ->
+ n, sprintf "B<--%s>" n, ld
+- | { op_type = String v | StringPair v | StringList v | TargetLinks v
+- | PasswordSelector v | UserPasswordSelector v | SSHKeySelector v
+- | StringFn (v, _) | SMPoolSelector v;
++ | { op_type = String v | StringPair v | StringTriplet v | StringList v
++ | TargetLinks v | PasswordSelector v | UserPasswordSelector v
++ | SSHKeySelector v | StringFn (v, _) | SMPoolSelector v;
+ op_name = n; op_pod_longdesc = ld } ->
+ n, sprintf "B<--%s> %s" n v, ld
+ ) ops @
diff --git a/0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch b/0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch
new file mode 100644
index 0000000..634ee30
--- /dev/null
+++ b/0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch
@@ -0,0 +1,57 @@
+From ec56c62c90d2230e8edcfaaad4517be63f5e2183 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 20 Jul 2023 11:15:26 +0100
+Subject: [PATCH] daemon: lvm: Do reverse device name translation on pvs_full
+ device fields
+
+Intermittent test failures in virt-filesystems showed that when using
+the pvs_full API, the pv_name field in the returned list of structures
+was not being reverse translated. As a result internal partition
+names could appear in the output of virt-filesystems.
+
+See: https://listman.redhat.com/archives/libguestfs/2023-July/032058.html
+(cherry picked from commit 32cb5b45cfbe5edbc7643fc533da70db2d3c6cda)
+---
+ daemon/lvm.c | 29 ++++++++++++++++++++++++++++-
+ 1 file changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/daemon/lvm.c b/daemon/lvm.c
+index 7e76e17c..b8c01f71 100644
+--- a/daemon/lvm.c
++++ b/daemon/lvm.c
+@@ -146,7 +146,34 @@ do_vgs (void)
+ guestfs_int_lvm_pv_list *
+ do_pvs_full (void)
+ {
+- return parse_command_line_pvs ();
++ guestfs_int_lvm_pv_list *r;
++ size_t i;
++ char *din, *dout;
++
++ r = parse_command_line_pvs ();
++ if (r == NULL)
++ /* parse_command_line_pvs has already called reply_with_error */
++ return NULL;
++
++ /* The pv_name fields contain device names which must be reverse
++ * translated. The problem here is that the generator does not have
++ * a "FMountable" field type in types.mli.
++ */
++ for (i = 0; i < r->guestfs_int_lvm_pv_list_len; ++i) {
++ din = r->guestfs_int_lvm_pv_list_val[i].pv_name;
++ if (din) {
++ dout = reverse_device_name_translation (din);
++ if (!dout) {
++ /* reverse_device_name_translation has already called reply_with_error*/
++ /* XXX memory leak here */
++ return NULL;
++ }
++ r->guestfs_int_lvm_pv_list_val[i].pv_name = dout;
++ free (din);
++ }
++ }
++
++ return r;
+ }
+
+ guestfs_int_lvm_vg_list *
diff --git a/0029-ruby-Replace-MiniTest-with-Minitest.patch b/0029-ruby-Replace-MiniTest-with-Minitest.patch
new file mode 100644
index 0000000..8e2b970
--- /dev/null
+++ b/0029-ruby-Replace-MiniTest-with-Minitest.patch
@@ -0,0 +1,208 @@
+From a55474caa5029c8356957afe36908ee45484ffde Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 21 Sep 2023 15:16:51 +0100
+Subject: [PATCH] ruby: Replace MiniTest with Minitest
+
+See this commit in hivex:
+https://github.com/libguestfs/hivex/commit/fbcff7fbd8f96214c7f13f36bd7669a9142824ab
+
+(cherry picked from commit d25a48e2dd2c2a2063b8d03a33b5e3cbe773c47d)
+---
+ ruby/t/tc_010_load.rb | 2 +-
+ ruby/t/tc_020_create.rb | 2 +-
+ ruby/t/tc_030_create_flags.rb | 2 +-
+ ruby/t/tc_040_create_multiple.rb | 2 +-
+ ruby/t/tc_050_handle_properties.rb | 2 +-
+ ruby/t/tc_060_explicit_close.rb | 2 +-
+ ruby/t/tc_070_optargs.rb | 2 +-
+ ruby/t/tc_090_retvalues.rb | 2 +-
+ ruby/t/tc_100_launch.rb | 2 +-
+ ruby/t/tc_410_close_event.rb | 2 +-
+ ruby/t/tc_420_log_messages.rb | 2 +-
+ ruby/t/tc_800_rhbz507346.rb | 2 +-
+ ruby/t/tc_810_rhbz664558c6.rb | 2 +-
+ ruby/t/tc_820_rhbz1046509.rb | 2 +-
+ 14 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/ruby/t/tc_010_load.rb b/ruby/t/tc_010_load.rb
+index 9dc2db67..40ddccd8 100644
+--- a/ruby/t/tc_010_load.rb
++++ b/ruby/t/tc_010_load.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test010Load < MiniTest::Unit::TestCase
++class Test010Load < Minitest::Test
+ def test_010_load
+ end
+ end
+diff --git a/ruby/t/tc_020_create.rb b/ruby/t/tc_020_create.rb
+index 840dd858..c3f5307e 100644
+--- a/ruby/t/tc_020_create.rb
++++ b/ruby/t/tc_020_create.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test020Create < MiniTest::Unit::TestCase
++class Test020Create < Minitest::Test
+ def test_020_create
+ g = Guestfs::Guestfs.new()
+ refute_nil (g)
+diff --git a/ruby/t/tc_030_create_flags.rb b/ruby/t/tc_030_create_flags.rb
+index ac6d1f46..4949d2a8 100644
+--- a/ruby/t/tc_030_create_flags.rb
++++ b/ruby/t/tc_030_create_flags.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test030CreateFlags < MiniTest::Unit::TestCase
++class Test030CreateFlags < Minitest::Test
+ def test_030_create_flags
+ g = Guestfs::Guestfs.new(:environment => false, :close_on_exit => true)
+ refute_nil (g)
+diff --git a/ruby/t/tc_040_create_multiple.rb b/ruby/t/tc_040_create_multiple.rb
+index 36e8edc7..623ccc6e 100644
+--- a/ruby/t/tc_040_create_multiple.rb
++++ b/ruby/t/tc_040_create_multiple.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test040CreateMultiple < MiniTest::Unit::TestCase
++class Test040CreateMultiple < Minitest::Test
+ def test_040_create_multiple
+ g1 = Guestfs::Guestfs.new()
+ g2 = Guestfs::Guestfs.new()
+diff --git a/ruby/t/tc_050_handle_properties.rb b/ruby/t/tc_050_handle_properties.rb
+index 5928532e..b22c51fd 100644
+--- a/ruby/t/tc_050_handle_properties.rb
++++ b/ruby/t/tc_050_handle_properties.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test050HandleProperties < MiniTest::Unit::TestCase
++class Test050HandleProperties < Minitest::Test
+ def test_050_handle_properties
+ g = Guestfs::Guestfs.new()
+ refute_nil (g)
+diff --git a/ruby/t/tc_060_explicit_close.rb b/ruby/t/tc_060_explicit_close.rb
+index 0c9118aa..20afd0de 100644
+--- a/ruby/t/tc_060_explicit_close.rb
++++ b/ruby/t/tc_060_explicit_close.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test060ExplicitClose < MiniTest::Unit::TestCase
++class Test060ExplicitClose < Minitest::Test
+ def test_060_explicit_close
+ g = Guestfs::Guestfs.new()
+ refute_nil (g)
+diff --git a/ruby/t/tc_070_optargs.rb b/ruby/t/tc_070_optargs.rb
+index fff5fbf7..a2360b2f 100644
+--- a/ruby/t/tc_070_optargs.rb
++++ b/ruby/t/tc_070_optargs.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test070Optargs < MiniTest::Unit::TestCase
++class Test070Optargs < Minitest::Test
+ def test_070_optargs
+ g = Guestfs::Guestfs.new()
+
+diff --git a/ruby/t/tc_090_retvalues.rb b/ruby/t/tc_090_retvalues.rb
+index 4bcc8b54..c9a84276 100644
+--- a/ruby/t/tc_090_retvalues.rb
++++ b/ruby/t/tc_090_retvalues.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test090RetValues < MiniTest::Unit::TestCase
++class Test090RetValues < Minitest::Test
+ def test_090_retvalues
+ g = Guestfs::Guestfs.new()
+
+diff --git a/ruby/t/tc_100_launch.rb b/ruby/t/tc_100_launch.rb
+index 43db4b67..096cbd62 100644
+--- a/ruby/t/tc_100_launch.rb
++++ b/ruby/t/tc_100_launch.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test100Launch < MiniTest::Unit::TestCase
++class Test100Launch < Minitest::Test
+ def test_100_launch
+ g = Guestfs::Guestfs.new()
+
+diff --git a/ruby/t/tc_410_close_event.rb b/ruby/t/tc_410_close_event.rb
+index 1b98957e..9a4e0558 100644
+--- a/ruby/t/tc_410_close_event.rb
++++ b/ruby/t/tc_410_close_event.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test410CloseEvent < MiniTest::Unit::TestCase
++class Test410CloseEvent < Minitest::Test
+ def test_410_close_event
+ g = Guestfs::Guestfs.new()
+
+diff --git a/ruby/t/tc_420_log_messages.rb b/ruby/t/tc_420_log_messages.rb
+index 936e0fd4..a113c62e 100644
+--- a/ruby/t/tc_420_log_messages.rb
++++ b/ruby/t/tc_420_log_messages.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test420LogMessages < MiniTest::Unit::TestCase
++class Test420LogMessages < Minitest::Test
+ def test_420_log_messages
+ g = Guestfs::Guestfs.new()
+
+diff --git a/ruby/t/tc_800_rhbz507346.rb b/ruby/t/tc_800_rhbz507346.rb
+index 4b7cc010..06767352 100644
+--- a/ruby/t/tc_800_rhbz507346.rb
++++ b/ruby/t/tc_800_rhbz507346.rb
+@@ -17,7 +17,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test800RHBZ507346 < MiniTest::Unit::TestCase
++class Test800RHBZ507346 < Minitest::Test
+ def test_800_rhbz507346
+ g = Guestfs::Guestfs.new()
+ exception = assert_raises TypeError do
+diff --git a/ruby/t/tc_810_rhbz664558c6.rb b/ruby/t/tc_810_rhbz664558c6.rb
+index f5e9adee..1504c070 100644
+--- a/ruby/t/tc_810_rhbz664558c6.rb
++++ b/ruby/t/tc_810_rhbz664558c6.rb
+@@ -21,7 +21,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test810RHBZ664558C6 < MiniTest::Unit::TestCase
++class Test810RHBZ664558C6 < Minitest::Test
+ def test_810_rhbz_664558c6
+ g = Guestfs::Guestfs.new()
+
+diff --git a/ruby/t/tc_820_rhbz1046509.rb b/ruby/t/tc_820_rhbz1046509.rb
+index 882ddb55..0595293d 100644
+--- a/ruby/t/tc_820_rhbz1046509.rb
++++ b/ruby/t/tc_820_rhbz1046509.rb
+@@ -20,7 +20,7 @@
+
+ require File::join(File::dirname(__FILE__), 'test_helper')
+
+-class Test820RHBZ1046509 < MiniTest::Unit::TestCase
++class Test820RHBZ1046509 < Minitest::Test
+ def _handleok(g)
+ g.add_drive("/dev/null")
+ g.close()
diff --git a/0030-ruby-Get-rid-of-old-Test-Unit-compatibility.patch b/0030-ruby-Get-rid-of-old-Test-Unit-compatibility.patch
new file mode 100644
index 0000000..a592cc0
--- /dev/null
+++ b/0030-ruby-Get-rid-of-old-Test-Unit-compatibility.patch
@@ -0,0 +1,278 @@
+From e22e17704988b606e24e76160495626552d0845f Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 21 Sep 2023 15:20:55 +0100
+Subject: [PATCH] ruby: Get rid of old Test::Unit compatibility
+
+See this commit in hivex:
+https://github.com/libguestfs/hivex/commit/6dbbc474d3df5cdfd21ed5e692b3a58136fffc42
+
+(cherry picked from commit ecf361d7237d38b2418ddecb1b70e3b722509c12)
+---
+ ruby/Makefile.am | 3 +--
+ ruby/t/tc_010_load.rb | 3 ++-
+ ruby/t/tc_020_create.rb | 3 ++-
+ ruby/t/tc_030_create_flags.rb | 3 ++-
+ ruby/t/tc_040_create_multiple.rb | 3 ++-
+ ruby/t/tc_050_handle_properties.rb | 3 ++-
+ ruby/t/tc_060_explicit_close.rb | 3 ++-
+ ruby/t/tc_070_optargs.rb | 3 ++-
+ ruby/t/tc_090_retvalues.rb | 3 ++-
+ ruby/t/tc_100_launch.rb | 3 ++-
+ ruby/t/tc_410_close_event.rb | 3 ++-
+ ruby/t/tc_420_log_messages.rb | 3 ++-
+ ruby/t/tc_800_rhbz507346.rb | 3 ++-
+ ruby/t/tc_810_rhbz664558c6.rb | 3 ++-
+ ruby/t/tc_820_rhbz1046509.rb | 3 ++-
+ ruby/t/test_helper.rb | 33 ------------------------------
+ 16 files changed, 29 insertions(+), 49 deletions(-)
+ delete mode 100644 ruby/t/test_helper.rb
+
+diff --git a/ruby/Makefile.am b/ruby/Makefile.am
+index c26513a7..867b05b1 100644
+--- a/ruby/Makefile.am
++++ b/ruby/Makefile.am
+@@ -40,8 +40,7 @@ EXTRA_DIST = \
+ lib/guestfs.rb \
+ run-bindtests \
+ run-ruby-tests \
+- t/tc_*.rb \
+- t/test_helper.rb
++ t/tc_*.rb
+
+ CLEANFILES += \
+ lib/*~ \
+diff --git a/ruby/t/tc_010_load.rb b/ruby/t/tc_010_load.rb
+index 40ddccd8..e7ec482e 100644
+--- a/ruby/t/tc_010_load.rb
++++ b/ruby/t/tc_010_load.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test010Load < Minitest::Test
+ def test_010_load
+diff --git a/ruby/t/tc_020_create.rb b/ruby/t/tc_020_create.rb
+index c3f5307e..26bb2ecf 100644
+--- a/ruby/t/tc_020_create.rb
++++ b/ruby/t/tc_020_create.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test020Create < Minitest::Test
+ def test_020_create
+diff --git a/ruby/t/tc_030_create_flags.rb b/ruby/t/tc_030_create_flags.rb
+index 4949d2a8..8006d962 100644
+--- a/ruby/t/tc_030_create_flags.rb
++++ b/ruby/t/tc_030_create_flags.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test030CreateFlags < Minitest::Test
+ def test_030_create_flags
+diff --git a/ruby/t/tc_040_create_multiple.rb b/ruby/t/tc_040_create_multiple.rb
+index 623ccc6e..32b2b094 100644
+--- a/ruby/t/tc_040_create_multiple.rb
++++ b/ruby/t/tc_040_create_multiple.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test040CreateMultiple < Minitest::Test
+ def test_040_create_multiple
+diff --git a/ruby/t/tc_050_handle_properties.rb b/ruby/t/tc_050_handle_properties.rb
+index b22c51fd..d37b1d03 100644
+--- a/ruby/t/tc_050_handle_properties.rb
++++ b/ruby/t/tc_050_handle_properties.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test050HandleProperties < Minitest::Test
+ def test_050_handle_properties
+diff --git a/ruby/t/tc_060_explicit_close.rb b/ruby/t/tc_060_explicit_close.rb
+index 20afd0de..8d103616 100644
+--- a/ruby/t/tc_060_explicit_close.rb
++++ b/ruby/t/tc_060_explicit_close.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test060ExplicitClose < Minitest::Test
+ def test_060_explicit_close
+diff --git a/ruby/t/tc_070_optargs.rb b/ruby/t/tc_070_optargs.rb
+index a2360b2f..c2298131 100644
+--- a/ruby/t/tc_070_optargs.rb
++++ b/ruby/t/tc_070_optargs.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test070Optargs < Minitest::Test
+ def test_070_optargs
+diff --git a/ruby/t/tc_090_retvalues.rb b/ruby/t/tc_090_retvalues.rb
+index c9a84276..d7927465 100644
+--- a/ruby/t/tc_090_retvalues.rb
++++ b/ruby/t/tc_090_retvalues.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test090RetValues < Minitest::Test
+ def test_090_retvalues
+diff --git a/ruby/t/tc_100_launch.rb b/ruby/t/tc_100_launch.rb
+index 096cbd62..c4da234e 100644
+--- a/ruby/t/tc_100_launch.rb
++++ b/ruby/t/tc_100_launch.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test100Launch < Minitest::Test
+ def test_100_launch
+diff --git a/ruby/t/tc_410_close_event.rb b/ruby/t/tc_410_close_event.rb
+index 9a4e0558..84cc11ab 100644
+--- a/ruby/t/tc_410_close_event.rb
++++ b/ruby/t/tc_410_close_event.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test410CloseEvent < Minitest::Test
+ def test_410_close_event
+diff --git a/ruby/t/tc_420_log_messages.rb b/ruby/t/tc_420_log_messages.rb
+index a113c62e..fd3049a0 100644
+--- a/ruby/t/tc_420_log_messages.rb
++++ b/ruby/t/tc_420_log_messages.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test420LogMessages < Minitest::Test
+ def test_420_log_messages
+diff --git a/ruby/t/tc_800_rhbz507346.rb b/ruby/t/tc_800_rhbz507346.rb
+index 06767352..54f7734f 100644
+--- a/ruby/t/tc_800_rhbz507346.rb
++++ b/ruby/t/tc_800_rhbz507346.rb
+@@ -15,7 +15,8 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test800RHBZ507346 < Minitest::Test
+ def test_800_rhbz507346
+diff --git a/ruby/t/tc_810_rhbz664558c6.rb b/ruby/t/tc_810_rhbz664558c6.rb
+index 1504c070..5ffa2265 100644
+--- a/ruby/t/tc_810_rhbz664558c6.rb
++++ b/ruby/t/tc_810_rhbz664558c6.rb
+@@ -19,7 +19,8 @@
+ # the interpreter to segfault. See:
+ # https://bugzilla.redhat.com/show_bug.cgi?id=664558#c6
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test810RHBZ664558C6 < Minitest::Test
+ def test_810_rhbz_664558c6
+diff --git a/ruby/t/tc_820_rhbz1046509.rb b/ruby/t/tc_820_rhbz1046509.rb
+index 0595293d..b2a6d80b 100644
+--- a/ruby/t/tc_820_rhbz1046509.rb
++++ b/ruby/t/tc_820_rhbz1046509.rb
+@@ -18,7 +18,8 @@
+ # Test that we don't break the old ::create module function while
+ # fixing https://bugzilla.redhat.com/show_bug.cgi?id=1046509
+
+-require File::join(File::dirname(__FILE__), 'test_helper')
++require 'minitest/autorun'
++require 'guestfs'
+
+ class Test820RHBZ1046509 < Minitest::Test
+ def _handleok(g)
+diff --git a/ruby/t/test_helper.rb b/ruby/t/test_helper.rb
+deleted file mode 100644
+index 54f857ce..00000000
+--- a/ruby/t/test_helper.rb
++++ /dev/null
+@@ -1,33 +0,0 @@
+-# libguestfs Ruby bindings -*- ruby -*-
+-# Copyright (C) 2009-2023 Red Hat Inc.
+-#
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
+-# (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+-
+-begin
+- require 'minitest/autorun'
+-rescue LoadError
+- require 'test/unit'
+- MiniTest = Test
+- module Test
+- Assertions = Unit::Assertions
+- module Assertions
+- alias refute_nil assert_not_nil
+- end
+- end
+-end
+-
+-$:.unshift(File::join(File::dirname(__FILE__), "..", "lib"))
+-$:.unshift(File::join(File::dirname(__FILE__), "..", "ext", "guestfs"))
+-require 'guestfs'
diff --git a/0031-generator-Sort-virt-customize-options-into-alphabeti.patch b/0031-generator-Sort-virt-customize-options-into-alphabeti.patch
new file mode 100644
index 0000000..7c82ec3
--- /dev/null
+++ b/0031-generator-Sort-virt-customize-options-into-alphabeti.patch
@@ -0,0 +1,63 @@
+From 205e2219b977e70c97ea4b55153d94dc3df91c28 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 26 Oct 2023 21:06:21 +0100
+Subject: [PATCH] generator: Sort virt-customize options into alphabetical
+ order
+
+(cherry picked from commit 297db5cccc1eb6e838f35d38e60fac894b372676)
+---
+ generator/customize.ml | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/generator/customize.ml b/generator/customize.ml
+index fe87ef5e..c3dd259e 100644
+--- a/generator/customize.ml
++++ b/generator/customize.ml
+@@ -510,23 +510,6 @@ You can have multiple I<--ssh-inject> options, for different users
+ and also for more keys for each user."
+ };
+
+- { op_name = "truncate";
+- op_type = String "FILE";
+- op_discrim = "`Truncate";
+- op_shortdesc = "Truncate a file to zero size";
+- op_pod_longdesc = "\
+-This command truncates C<FILE> to a zero-length file. The file must exist
+-already.";
+- };
+-
+- { op_name = "truncate-recursive";
+- op_type = String "PATH";
+- op_discrim = "`TruncateRecursive";
+- op_shortdesc = "Recursively truncate all files in directory";
+- op_pod_longdesc = "\
+-This command recursively truncates all files under C<PATH> to zero-length.";
+- };
+-
+ { op_name = "timezone";
+ op_type = String "TIMEZONE";
+ op_discrim = "`Timezone";
+@@ -544,6 +527,23 @@ string like C<Europe/London>";
+ This command performs a L<touch(1)>-like operation on C<FILE>.";
+ };
+
++ { op_name = "truncate";
++ op_type = String "FILE";
++ op_discrim = "`Truncate";
++ op_shortdesc = "Truncate a file to zero size";
++ op_pod_longdesc = "\
++This command truncates C<FILE> to a zero-length file. The file must exist
++already.";
++ };
++
++ { op_name = "truncate-recursive";
++ op_type = String "PATH";
++ op_discrim = "`TruncateRecursive";
++ op_shortdesc = "Recursively truncate all files in directory";
++ op_pod_longdesc = "\
++This command recursively truncates all files under C<PATH> to zero-length.";
++ };
++
+ { op_name = "uninstall";
+ op_type = StringList "PKG,PKG..";
+ op_discrim = "`UninstallPackages";
diff --git a/0032-generator-Add-new-virt-customize-tar-in-operation.patch b/0032-generator-Add-new-virt-customize-tar-in-operation.patch
new file mode 100644
index 0000000..7091730
--- /dev/null
+++ b/0032-generator-Add-new-virt-customize-tar-in-operation.patch
@@ -0,0 +1,173 @@
+From 055c43fa60c7cefbe3baf32b21cfe8ffae09bf0f Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 26 Oct 2023 19:44:03 +0100
+Subject: [PATCH] generator: Add new virt-customize --tar-in operation
+
+Using 'virt-customize --tar-in some.tar:/dir -a disk.img' will unpack
+'some.tar' into '/dir' in the guest. Note that this will not work for
+compressed tar files as written since the underlying guestfs_tar_in
+function requires the compression type to be set explicitly and
+defaults to no compression (it does not auto-detect or default to
+compression).
+
+(cherry picked from commit b5f7b0ec18e30d25342bc322e571edf17a72974f)
+---
+ common | 2 +-
+ generator/customize.ml | 12 ++++++++++++
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+Submodule common e70d89a5..9a8ba593:
+diff --git a/common/mlcustomize/customize-options.pod b/common/mlcustomize/customize-options.pod
+index e658a447..ff93630d 100644
+--- a/common/mlcustomize/customize-options.pod
++++ b/common/mlcustomize/customize-options.pod
+@@ -427,6 +427,14 @@ the C<SELECTOR> field.
+ You can have multiple I<--ssh-inject> options, for different users
+ and also for more keys for each user.
+
++=item B<--tar-in> TARFILE:REMOTEDIR
++
++Copy local files or directories from a local tar file
++called C<TARFILE> into the disk image, placing them in the
++directory C<REMOTEDIR> (which must exist). Note that
++the tar file must be uncompressed (F<.tar.gz> files will not work
++here)
++
+ =item B<--timezone> TIMEZONE
+
+ Set the default timezone of the guest to C<TIMEZONE>. Use a location
+diff --git a/common/mlcustomize/customize-synopsis.pod b/common/mlcustomize/customize-synopsis.pod
+index 5031b015..bb0ce125 100644
+--- a/common/mlcustomize/customize-synopsis.pod
++++ b/common/mlcustomize/customize-synopsis.pod
+@@ -9,8 +9,9 @@
+ [--password USER:SELECTOR] [--root-password SELECTOR]
+ [--run SCRIPT] [--run-command 'CMD+ARGS'] [--scrub FILE]
+ [--sm-attach SELECTOR] [--sm-register] [--sm-remove]
+- [--sm-unregister] [--ssh-inject USER[:SELECTOR]] [--truncate FILE]
+- [--truncate-recursive PATH] [--timezone TIMEZONE] [--touch FILE]
++ [--sm-unregister] [--ssh-inject USER[:SELECTOR]]
++ [--tar-in TARFILE:REMOTEDIR] [--timezone TIMEZONE] [--touch FILE]
++ [--truncate FILE] [--truncate-recursive PATH]
+ [--uninstall PKG,PKG..] [--update] [--upload FILE:DEST]
+ [--write FILE:CONTENT] [--no-logfile]
+ [--password-crypto md5|sha256|sha512] [--no-selinux-relabel]
+diff --git a/common/mlcustomize/customize_cmdline.ml b/common/mlcustomize/customize_cmdline.ml
+index 3ce901db..245d9960 100644
+--- a/common/mlcustomize/customize_cmdline.ml
++++ b/common/mlcustomize/customize_cmdline.ml
+@@ -93,14 +93,16 @@ and op = [
+ (* --sm-unregister *)
+ | `SSHInject of string * Ssh_key.ssh_key_selector
+ (* --ssh-inject USER[:SELECTOR] *)
+- | `Truncate of string
+- (* --truncate FILE *)
+- | `TruncateRecursive of string
+- (* --truncate-recursive PATH *)
++ | `TarIn of string * string
++ (* --tar-in TARFILE:REMOTEDIR *)
+ | `Timezone of string
+ (* --timezone TIMEZONE *)
+ | `Touch of string
+ (* --touch FILE *)
++ | `Truncate of string
++ (* --truncate FILE *)
++ | `TruncateRecursive of string
++ (* --truncate-recursive PATH *)
+ | `UninstallPackages of string list
+ (* --uninstall PKG,PKG.. *)
+ | `Update
+@@ -418,17 +420,16 @@ let rec argspec () =
+ ),
+ Some "USER[:SELECTOR]", "Inject an ssh key so the given C<USER> will be able to log in over\nssh without supplying a password. The C<USER> must exist already\nin the guest.\n\nSee L<virt-builder(1)/SSH KEYS> for the format of\nthe C<SELECTOR> field.\n\nYou can have multiple I<--ssh-inject> options, for different users\nand also for more keys for each user.";
+ (
+- [ L"truncate" ],
+- Getopt.String (s_"FILE", fun s -> List.push_front (`Truncate s) ops),
+- s_"Truncate a file to zero size"
++ [ L"tar-in" ],
++ Getopt.String (
++ s_"TARFILE:REMOTEDIR",
++ fun s ->
++ let p = split_string_pair "tar-in" s in
++ List.push_front (`TarIn p) ops
++ ),
++ s_"Copy local files or directories from a tarball into image"
+ ),
+- Some "FILE", "This command truncates C<FILE> to a zero-length file. The file must exist\nalready.";
+- (
+- [ L"truncate-recursive" ],
+- Getopt.String (s_"PATH", fun s -> List.push_front (`TruncateRecursive s) ops),
+- s_"Recursively truncate all files in directory"
+- ),
+- Some "PATH", "This command recursively truncates all files under C<PATH> to zero-length.";
++ Some "TARFILE:REMOTEDIR", "Copy local files or directories from a local tar file\ncalled C<TARFILE> into the disk image, placing them in the\ndirectory C<REMOTEDIR> (which must exist). Note that\nthe tar file must be uncompressed (F<.tar.gz> files will not work\nhere)";
+ (
+ [ L"timezone" ],
+ Getopt.String (s_"TIMEZONE", fun s -> List.push_front (`Timezone s) ops),
+@@ -441,6 +442,18 @@ let rec argspec () =
+ s_"Run touch on a file"
+ ),
+ Some "FILE", "This command performs a L<touch(1)>-like operation on C<FILE>.";
++ (
++ [ L"truncate" ],
++ Getopt.String (s_"FILE", fun s -> List.push_front (`Truncate s) ops),
++ s_"Truncate a file to zero size"
++ ),
++ Some "FILE", "This command truncates C<FILE> to a zero-length file. The file must exist\nalready.";
++ (
++ [ L"truncate-recursive" ],
++ Getopt.String (s_"PATH", fun s -> List.push_front (`TruncateRecursive s) ops),
++ s_"Recursively truncate all files in directory"
++ ),
++ Some "PATH", "This command recursively truncates all files under C<PATH> to zero-length.";
+ (
+ [ L"uninstall" ],
+ Getopt.String (
+diff --git a/common/mlcustomize/customize_cmdline.mli b/common/mlcustomize/customize_cmdline.mli
+index 112b74dc..51a156ea 100644
+--- a/common/mlcustomize/customize_cmdline.mli
++++ b/common/mlcustomize/customize_cmdline.mli
+@@ -85,14 +85,16 @@ and op = [
+ (* --sm-unregister *)
+ | `SSHInject of string * Ssh_key.ssh_key_selector
+ (* --ssh-inject USER[:SELECTOR] *)
+- | `Truncate of string
+- (* --truncate FILE *)
+- | `TruncateRecursive of string
+- (* --truncate-recursive PATH *)
++ | `TarIn of string * string
++ (* --tar-in TARFILE:REMOTEDIR *)
+ | `Timezone of string
+ (* --timezone TIMEZONE *)
+ | `Touch of string
+ (* --touch FILE *)
++ | `Truncate of string
++ (* --truncate FILE *)
++ | `TruncateRecursive of string
++ (* --truncate-recursive PATH *)
+ | `UninstallPackages of string list
+ (* --uninstall PKG,PKG.. *)
+ | `Update
+diff --git a/generator/customize.ml b/generator/customize.ml
+index c3dd259e..e64b45c0 100644
+--- a/generator/customize.ml
++++ b/generator/customize.ml
+@@ -510,6 +510,18 @@ You can have multiple I<--ssh-inject> options, for different users
+ and also for more keys for each user."
+ };
+
++ { op_name = "tar-in";
++ op_type = StringPair "TARFILE:REMOTEDIR";
++ op_discrim = "`TarIn";
++ op_shortdesc = "Copy local files or directories from a tarball into image";
++ op_pod_longdesc = "\
++Copy local files or directories from a local tar file
++called C<TARFILE> into the disk image, placing them in the
++directory C<REMOTEDIR> (which must exist). Note that
++the tar file must be uncompressed (F<.tar.gz> files will not work
++here)";
++ };
++
+ { op_name = "timezone";
+ op_type = String "TIMEZONE";
+ op_discrim = "`Timezone";
diff --git a/0033-New-mailing-list-email-address.patch b/0033-New-mailing-list-email-address.patch
new file mode 100644
index 0000000..5a1b812
--- /dev/null
+++ b/0033-New-mailing-list-email-address.patch
@@ -0,0 +1,271 @@
+From 0c1d7af8fdbf272f33ccd572ed34923ab094d695 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 16 Nov 2023 10:38:59 +0000
+Subject: [PATCH] New mailing list email address
+
+(cherry picked from commit 0b8b1e4b2d70cf4ed59775c3c2d1aa42d3c29ca2)
+---
+ .gitpublish | 2 +-
+ appliance/Makefile.am | 2 +-
+ po-docs/Makefile.am | 2 +-
+ po-docs/cs.po | 2 +-
+ po-docs/de.po | 2 +-
+ po-docs/en_GB.po | 2 +-
+ po-docs/es.po | 2 +-
+ po-docs/eu.po | 2 +-
+ po-docs/fi.po | 2 +-
+ po-docs/fr.po | 2 +-
+ po-docs/ja.po | 2 +-
+ po-docs/libguestfs-docs.pot | 2 +-
+ po-docs/nl.po | 2 +-
+ po-docs/pt_BR.po | 2 +-
+ po-docs/si.po | 2 +-
+ po-docs/tg.po | 2 +-
+ po-docs/uk.po | 2 +-
+ po-docs/zh_CN.po | 2 +-
+ python/setup.py.in | 2 +-
+ 19 files changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/.gitpublish b/.gitpublish
+index 9775dd23..2aae0c09 100644
+--- a/.gitpublish
++++ b/.gitpublish
+@@ -1,3 +1,3 @@
+ [gitpublishprofile "default"]
+ base = master
+-to = libguestfs@redhat.com
++to = guestfs@lists.libguestfs.org
+diff --git a/appliance/Makefile.am b/appliance/Makefile.am
+index 063c19f6..8cb9bd1f 100644
+--- a/appliance/Makefile.am
++++ b/appliance/Makefile.am
+@@ -88,7 +88,7 @@ else
+ if HAVE_PACMAN
+ QUERY_FILES_CMD := xargs pacman -Qo | sed -r 's/.* is owned by ([^ ]+) .*/\1/'
+ else
+-$(error Error: Unknown Linux distribution "$(DISTRO)". Please add support to m4/guestfs-appliance.m4 and appliance/Makefile.am and send a patch upstream to libguestfs@redhat.com)
++$(error Error: Unknown Linux distribution "$(DISTRO)". Please add support to m4/guestfs-appliance.m4 and appliance/Makefile.am and send a patch upstream to guestfs@lists.libguestfs.org)
+ endif !HAVE_PACMAN
+ endif !HAVE_DPKG
+ endif !HAVE_RPM
+diff --git a/po-docs/Makefile.am b/po-docs/Makefile.am
+index 61c1b1c9..330b673f 100644
+--- a/po-docs/Makefile.am
++++ b/po-docs/Makefile.am
+@@ -46,7 +46,7 @@ libguestfs-docs.pot:
+ -M utf-8 -L utf-8 \
+ --package-name $(PACKAGE_NAME) \
+ --package-version $(PACKAGE_VERSION) \
+- --msgid-bugs-address libguestfs@redhat.com \
++ --msgid-bugs-address guestfs@lists.libguestfs.org \
+ --copyright-holder "Red Hat Inc." \
+ -p $(abs_srcdir)/$@ \
+ $(patsubst %,-m %,$(shell cat $(srcdir)/podfiles))
+diff --git a/po-docs/cs.po b/po-docs/cs.po
+index 5618cb0f..d50e53bf 100644
+--- a/po-docs/cs.po
++++ b/po-docs/cs.po
+@@ -3,7 +3,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2017-09-11 04:54+0000\n"
+ "Last-Translator: Zdenek <chmelarz@gmail.com>\n"
+diff --git a/po-docs/de.po b/po-docs/de.po
+index da449e9f..76abc8d3 100644
+--- a/po-docs/de.po
++++ b/po-docs/de.po
+@@ -7,7 +7,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2021-11-18 23:16+0000\n"
+ "Last-Translator: Ettore Atalan <atalanttore@googlemail.com>\n"
+diff --git a/po-docs/en_GB.po b/po-docs/en_GB.po
+index 283402a6..75610b9e 100644
+--- a/po-docs/en_GB.po
++++ b/po-docs/en_GB.po
+@@ -6,7 +6,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2015-02-21 10:15+0000\n"
+ "Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+diff --git a/po-docs/es.po b/po-docs/es.po
+index a163e26d..defbd61d 100644
+--- a/po-docs/es.po
++++ b/po-docs/es.po
+@@ -9,7 +9,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2023-02-05 15:20+0000\n"
+ "Last-Translator: Emilio Herrera <ehespinosa57@gmail.com>\n"
+diff --git a/po-docs/eu.po b/po-docs/eu.po
+index 7f1f634b..63653271 100644
+--- a/po-docs/eu.po
++++ b/po-docs/eu.po
+@@ -7,7 +7,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2015-02-21 10:17+0000\n"
+ "Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+diff --git a/po-docs/fi.po b/po-docs/fi.po
+index d96bfd38..361de115 100644
+--- a/po-docs/fi.po
++++ b/po-docs/fi.po
+@@ -6,7 +6,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.43.1\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-08-12 15:34+0200\n"
+ "PO-Revision-Date: 2022-12-23 18:20+0000\n"
+ "Last-Translator: Jan Kuparinen <copper_fin@hotmail.com>\n"
+diff --git a/po-docs/fr.po b/po-docs/fr.po
+index f411d189..cd903c0e 100644
+--- a/po-docs/fr.po
++++ b/po-docs/fr.po
+@@ -8,7 +8,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2015-02-21 10:19+0000\n"
+ "Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+diff --git a/po-docs/ja.po b/po-docs/ja.po
+index 4120b2de..d90437dc 100644
+--- a/po-docs/ja.po
++++ b/po-docs/ja.po
+@@ -12,7 +12,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2017-02-24 07:33+0000\n"
+ "Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+diff --git a/po-docs/libguestfs-docs.pot b/po-docs/libguestfs-docs.pot
+index 8e33712f..3954a51e 100644
+--- a/po-docs/libguestfs-docs.pot
++++ b/po-docs/libguestfs-docs.pot
+@@ -7,7 +7,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.43.1\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-08-12 15:34+0200\n"
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+diff --git a/po-docs/nl.po b/po-docs/nl.po
+index 571f3523..0cf147ee 100644
+--- a/po-docs/nl.po
++++ b/po-docs/nl.po
+@@ -7,7 +7,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2015-02-21 10:33+0000\n"
+ "Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+diff --git a/po-docs/pt_BR.po b/po-docs/pt_BR.po
+index 87c0059f..229f49c3 100644
+--- a/po-docs/pt_BR.po
++++ b/po-docs/pt_BR.po
+@@ -3,7 +3,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2017-01-29 09:50+0000\n"
+ "Last-Translator: Rodrigo de Araujo Sousa Fonseca "
+diff --git a/po-docs/si.po b/po-docs/si.po
+index e7327945..aa7f5f97 100644
+--- a/po-docs/si.po
++++ b/po-docs/si.po
+@@ -6,7 +6,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.43.1\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-08-12 15:34+0200\n"
+ "PO-Revision-Date: 2021-08-19 07:04+0000\n"
+ "Last-Translator: Hela Basa <r45xveza@pm.me>\n"
+diff --git a/po-docs/tg.po b/po-docs/tg.po
+index 446653ab..9e6fa072 100644
+--- a/po-docs/tg.po
++++ b/po-docs/tg.po
+@@ -6,7 +6,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2015-02-21 10:34+0000\n"
+ "Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+diff --git a/po-docs/uk.po b/po-docs/uk.po
+index 52b5ce56..960ea8f8 100644
+--- a/po-docs/uk.po
++++ b/po-docs/uk.po
+@@ -15,7 +15,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2020-08-16 15:29+0000\n"
+ "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+diff --git a/po-docs/zh_CN.po b/po-docs/zh_CN.po
+index 7c546775..0c15c1c1 100644
+--- a/po-docs/zh_CN.po
++++ b/po-docs/zh_CN.po
+@@ -8,7 +8,7 @@
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: libguestfs 1.39.12\n"
+-"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
++"Report-Msgid-Bugs-To: guestfs@lists.libguestfs.org\n"
+ "POT-Creation-Date: 2020-07-06 15:46+0100\n"
+ "PO-Revision-Date: 2017-07-24 08:04+0000\n"
+ "Last-Translator: cheng ye <18969068329@163.com>\n"
+diff --git a/python/setup.py.in b/python/setup.py.in
+index aa9fb7ad..17571944 100644
+--- a/python/setup.py.in
++++ b/python/setup.py.in
+@@ -30,7 +30,7 @@ This package contains the Python bindings for libguestfs.
+ """,
+
+ author='The @PACKAGE_NAME@ team',
+- author_email='libguestfs@redhat.com',
++ author_email='guestfs@lists.libguestfs.org',
+ url='http://libguestfs.org',
+
+ license='LGPLv2+',
diff --git a/0034-New-mailing-list-archives.patch b/0034-New-mailing-list-archives.patch
new file mode 100644
index 0000000..5e8873c
--- /dev/null
+++ b/0034-New-mailing-list-archives.patch
@@ -0,0 +1,590 @@
+From d5a52e1004b7b151a1df286a72e49e9766ade2c8 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 16 Nov 2023 10:52:11 +0000
+Subject: [PATCH] New mailing list archives
+
+(cherry picked from commit b2f3994de26c25d61ed94d2ee3b2ea9600755ee1)
+---
+ README | 2 +-
+ configure.ac | 2 +-
+ docs/guestfs-faq.pod | 6 +++---
+ docs/guestfs-hacking.pod | 2 +-
+ docs/guestfs-security.pod | 2 +-
+ docs/guestfs-testing.pod | 2 +-
+ po-docs/cs.po | 4 ++--
+ po-docs/de.po | 4 ++--
+ po-docs/en_GB.po | 8 ++++----
+ po-docs/es.po | 4 ++--
+ po-docs/eu.po | 4 ++--
+ po-docs/fi.po | 12 ++++++------
+ po-docs/fr.po | 4 ++--
+ po-docs/ja.po | 6 +++---
+ po-docs/libguestfs-docs.pot | 12 ++++++------
+ po-docs/nl.po | 4 ++--
+ po-docs/pt_BR.po | 4 ++--
+ po-docs/si.po | 12 ++++++------
+ po-docs/tg.po | 4 ++--
+ po-docs/uk.po | 6 +++---
+ po-docs/zh_CN.po | 4 ++--
+ website/index.html.in | 2 +-
+ 22 files changed, 55 insertions(+), 55 deletions(-)
+
+diff --git a/README b/README
+index 40a7267e..b350edb5 100644
+--- a/README
++++ b/README
+@@ -6,7 +6,7 @@ disk images. For more information see the home page:
+ For discussion, development, patches, etc. please use the mailing
+ list:
+
+- http://www.redhat.com/mailman/listinfo/libguestfs
++ https://lists.libguestfs.org
+
+ To find out how to build libguestfs from source, read:
+
+diff --git a/configure.ac b/configure.ac
+index d1397f63..f8e5e9bb 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -322,7 +322,7 @@ echo "If any optional component is configured 'no' when you expected 'yes'"
+ echo "then you should check the preceding messages."
+ echo
+ echo "Please report bugs back to the mailing list:"
+-echo "http://www.redhat.com/mailman/listinfo/libguestfs"
++echo "https://lists.libguestfs.org"
+ echo
+ echo "Next you should type 'make' to build the package,"
+ echo "then 'make check' to run the tests."
+diff --git a/docs/guestfs-faq.pod b/docs/guestfs-faq.pod
+index 1e83a9c5..3a03282f 100644
+--- a/docs/guestfs-faq.pod
++++ b/docs/guestfs-faq.pod
+@@ -106,7 +106,7 @@ contact S<Red Hat Support>: L<http://redhat.com/support>
+
+ There is a mailing list, mainly for development, but users are also
+ welcome to ask questions about libguestfs and the virt tools:
+-L<https://www.redhat.com/mailman/listinfo/libguestfs>
++L<https://lists.libguestfs.org>
+
+ You can also talk to us on IRC channel C<#guestfs> on Libera Chat.
+ We're not always around, so please stay in the channel after asking
+@@ -1289,7 +1289,7 @@ documented stable API.
+ =head2 Where do I send patches?
+
+ Please send patches to the libguestfs mailing list
+-L<https://www.redhat.com/mailman/listinfo/libguestfs>. You don't have
++L<https://lists.libguestfs.org>. You don't have
+ to be subscribed, but there will be a delay until your posting is
+ manually approved.
+
+@@ -1302,7 +1302,7 @@ prefer to have a linear history.
+
+ Large new features that you intend to contribute should be discussed
+ on the mailing list first
+-(L<https://www.redhat.com/mailman/listinfo/libguestfs>). This avoids
++(L<https://lists.libguestfs.org>). This avoids
+ disappointment and wasted work if we don't think the feature would fit
+ into the libguestfs project.
+
+diff --git a/docs/guestfs-hacking.pod b/docs/guestfs-hacking.pod
+index 68cf8292..f0bac9f2 100644
+--- a/docs/guestfs-hacking.pod
++++ b/docs/guestfs-hacking.pod
+@@ -818,7 +818,7 @@ examining the F<tmp/valgrind*> log files carefully.
+ =head2 SUBMITTING PATCHES
+
+ Submit patches to the mailing list:
+-L<http://www.redhat.com/mailman/listinfo/libguestfs>
++L<https://lists.libguestfs.org>
+ and CC to L<rjones@redhat.com>.
+
+ You do not need to subscribe to the mailing list if you don’t want to.
+diff --git a/docs/guestfs-security.pod b/docs/guestfs-security.pod
+index afacb091..60d22952 100644
+--- a/docs/guestfs-security.pod
++++ b/docs/guestfs-security.pod
+@@ -15,7 +15,7 @@ L<https://access.redhat.com/security/team/contact>
+
+ If the security problem is not so serious, you can simply file a bug
+ (see L</BUGS> below), or send an email to our mailing list
+-(L<https://www.redhat.com/mailman/listinfo/libguestfs>). You do not
++(L<https://lists.libguestfs.org>). You do not
+ need to subscribe to the mailing list to send email, but there will be
+ a delay while the message is moderated.
+
+diff --git a/docs/guestfs-testing.pod b/docs/guestfs-testing.pod
+index c7b44928..ee4b26d6 100644
+--- a/docs/guestfs-testing.pod
++++ b/docs/guestfs-testing.pod
+@@ -21,7 +21,7 @@ or post on the mailing list (registration is B<not> required, but if
+ you're not registered then you'll have to wait for a moderator to
+ manually approve your message):
+
+-L<https://www.redhat.com/mailman/listinfo/libguestfs>
++L<https://lists.libguestfs.org>
+
+ =head1 TESTS
+
+diff --git a/po-docs/cs.po b/po-docs/cs.po
+index d50e53bf..60c29165 100644
+--- a/po-docs/cs.po
++++ b/po-docs/cs.po
+@@ -16000,7 +16000,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -38700,7 +38700,7 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/de.po b/po-docs/de.po
+index 76abc8d3..565cd66f 100644
+--- a/po-docs/de.po
++++ b/po-docs/de.po
+@@ -16118,7 +16118,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -38822,7 +38822,7 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/en_GB.po b/po-docs/en_GB.po
+index 75610b9e..31edb8bf 100644
+--- a/po-docs/en_GB.po
++++ b/po-docs/en_GB.po
+@@ -17054,12 +17054,12 @@ msgstr "How do I propose a feature?"
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+
+@@ -42254,8 +42254,8 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
+-msgstr "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
++msgstr "L<https://lists.libguestfs.org>"
+
+ #. type: =head1
+ #: ../docs/guestfs-testing.pod:26
+diff --git a/po-docs/es.po b/po-docs/es.po
+index defbd61d..c84192f4 100644
+--- a/po-docs/es.po
++++ b/po-docs/es.po
+@@ -16057,7 +16057,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -38908,7 +38908,7 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/eu.po b/po-docs/eu.po
+index 63653271..44bc885d 100644
+--- a/po-docs/eu.po
++++ b/po-docs/eu.po
+@@ -15951,7 +15951,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -38651,7 +38651,7 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/fi.po b/po-docs/fi.po
+index 361de115..3ff70b33 100644
+--- a/po-docs/fi.po
++++ b/po-docs/fi.po
+@@ -13507,7 +13507,7 @@ msgstr ""
+ msgid ""
+ "There is a mailing list, mainly for development, but users are also welcome "
+ "to ask questions about libguestfs and the virt tools: "
+-"L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++"L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: textblock
+@@ -15849,7 +15849,7 @@ msgstr ""
+ #: docs/guestfs-faq.pod:1285
+ msgid ""
+ "Please send patches to the libguestfs mailing list "
+-"L<https://www.redhat.com/mailman/listinfo/libguestfs>. You don't have to be "
++"L<https://lists.libguestfs.org>. You don't have to be "
+ "subscribed, but there will be a delay until your posting is manually "
+ "approved."
+ msgstr ""
+@@ -15872,7 +15872,7 @@ msgstr ""
+ #: docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -17816,7 +17816,7 @@ msgstr ""
+ #: docs/guestfs-hacking.pod:840
+ msgid ""
+ "Submit patches to the mailing list: "
+-"L<http://www.redhat.com/mailman/listinfo/libguestfs> and CC to "
++"L<https://lists.libguestfs.org> and CC to "
+ "L<rjones@redhat.com>."
+ msgstr ""
+
+@@ -37995,7 +37995,7 @@ msgstr ""
+ msgid ""
+ "If the security problem is not so serious, you can simply file a bug (see "
+ "L</BUGS> below), or send an email to our mailing list "
+-"(L<https://www.redhat.com/mailman/listinfo/libguestfs>). You do not need to "
++"(L<https://lists.libguestfs.org>). You do not need to "
+ "subscribe to the mailing list to send email, but there will be a delay while "
+ "the message is moderated."
+ msgstr ""
+@@ -38598,7 +38598,7 @@ msgstr ""
+
+ #. type: textblock
+ #: docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/fr.po b/po-docs/fr.po
+index cd903c0e..34b6149e 100644
+--- a/po-docs/fr.po
++++ b/po-docs/fr.po
+@@ -16363,7 +16363,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -40728,7 +40728,7 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/ja.po b/po-docs/ja.po
+index d90437dc..d00d73d2 100644
+--- a/po-docs/ja.po
++++ b/po-docs/ja.po
+@@ -16574,7 +16574,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -39859,8 +39859,8 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
+-msgstr "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
++msgstr "L<https://lists.libguestfs.org>"
+
+ #. type: =head1
+ #: ../docs/guestfs-testing.pod:26
+diff --git a/po-docs/libguestfs-docs.pot b/po-docs/libguestfs-docs.pot
+index 3954a51e..56d0777b 100644
+--- a/po-docs/libguestfs-docs.pot
++++ b/po-docs/libguestfs-docs.pot
+@@ -13453,7 +13453,7 @@ msgstr ""
+ msgid ""
+ "There is a mailing list, mainly for development, but users are also welcome "
+ "to ask questions about libguestfs and the virt tools: "
+-"L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++"L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: textblock
+@@ -15795,7 +15795,7 @@ msgstr ""
+ #: docs/guestfs-faq.pod:1285
+ msgid ""
+ "Please send patches to the libguestfs mailing list "
+-"L<https://www.redhat.com/mailman/listinfo/libguestfs>. You don't have to be "
++"L<https://lists.libguestfs.org>. You don't have to be "
+ "subscribed, but there will be a delay until your posting is manually "
+ "approved."
+ msgstr ""
+@@ -15818,7 +15818,7 @@ msgstr ""
+ #: docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -17762,7 +17762,7 @@ msgstr ""
+ #: docs/guestfs-hacking.pod:840
+ msgid ""
+ "Submit patches to the mailing list: "
+-"L<http://www.redhat.com/mailman/listinfo/libguestfs> and CC to "
++"L<https://lists.libguestfs.org> and CC to "
+ "L<rjones@redhat.com>."
+ msgstr ""
+
+@@ -37939,7 +37939,7 @@ msgstr ""
+ msgid ""
+ "If the security problem is not so serious, you can simply file a bug (see "
+ "L</BUGS> below), or send an email to our mailing list "
+-"(L<https://www.redhat.com/mailman/listinfo/libguestfs>). You do not need to "
++"(L<https://lists.libguestfs.org>). You do not need to "
+ "subscribe to the mailing list to send email, but there will be a delay while "
+ "the message is moderated."
+ msgstr ""
+@@ -38542,7 +38542,7 @@ msgstr ""
+
+ #. type: textblock
+ #: docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/nl.po b/po-docs/nl.po
+index 0cf147ee..1f8ac7d0 100644
+--- a/po-docs/nl.po
++++ b/po-docs/nl.po
+@@ -15951,7 +15951,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -38651,7 +38651,7 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/pt_BR.po b/po-docs/pt_BR.po
+index 229f49c3..d69895cf 100644
+--- a/po-docs/pt_BR.po
++++ b/po-docs/pt_BR.po
+@@ -15947,7 +15947,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -38647,7 +38647,7 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/si.po b/po-docs/si.po
+index aa7f5f97..de16c4ac 100644
+--- a/po-docs/si.po
++++ b/po-docs/si.po
+@@ -13455,7 +13455,7 @@ msgstr ""
+ msgid ""
+ "There is a mailing list, mainly for development, but users are also welcome "
+ "to ask questions about libguestfs and the virt tools: "
+-"L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++"L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: textblock
+@@ -15797,7 +15797,7 @@ msgstr ""
+ #: docs/guestfs-faq.pod:1285
+ msgid ""
+ "Please send patches to the libguestfs mailing list "
+-"L<https://www.redhat.com/mailman/listinfo/libguestfs>. You don't have to be "
++"L<https://lists.libguestfs.org>. You don't have to be "
+ "subscribed, but there will be a delay until your posting is manually "
+ "approved."
+ msgstr ""
+@@ -15820,7 +15820,7 @@ msgstr ""
+ #: docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -17764,7 +17764,7 @@ msgstr ""
+ #: docs/guestfs-hacking.pod:840
+ msgid ""
+ "Submit patches to the mailing list: "
+-"L<http://www.redhat.com/mailman/listinfo/libguestfs> and CC to "
++"L<https://lists.libguestfs.org> and CC to "
+ "L<rjones@redhat.com>."
+ msgstr ""
+
+@@ -37941,7 +37941,7 @@ msgstr ""
+ msgid ""
+ "If the security problem is not so serious, you can simply file a bug (see "
+ "L</BUGS> below), or send an email to our mailing list "
+-"(L<https://www.redhat.com/mailman/listinfo/libguestfs>). You do not need to "
++"(L<https://lists.libguestfs.org>). You do not need to "
+ "subscribe to the mailing list to send email, but there will be a delay while "
+ "the message is moderated."
+ msgstr ""
+@@ -38544,7 +38544,7 @@ msgstr ""
+
+ #. type: textblock
+ #: docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/tg.po b/po-docs/tg.po
+index 9e6fa072..80db7183 100644
+--- a/po-docs/tg.po
++++ b/po-docs/tg.po
+@@ -15952,7 +15952,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -38652,7 +38652,7 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/po-docs/uk.po b/po-docs/uk.po
+index 960ea8f8..40c96852 100644
+--- a/po-docs/uk.po
++++ b/po-docs/uk.po
+@@ -19726,7 +19726,7 @@ msgstr "Як запропонувати нову можливість?"
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -47713,8 +47713,8 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
+-msgstr "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
++msgstr "L<https://lists.libguestfs.org>"
+
+ #. type: =head1
+ #: ../docs/guestfs-testing.pod:26
+diff --git a/po-docs/zh_CN.po b/po-docs/zh_CN.po
+index 0c15c1c1..1ad0e1cd 100644
+--- a/po-docs/zh_CN.po
++++ b/po-docs/zh_CN.po
+@@ -15954,7 +15954,7 @@ msgstr ""
+ #: ../docs/guestfs-faq.pod:1297
+ msgid ""
+ "Large new features that you intend to contribute should be discussed on the "
+-"mailing list first (L<https://www.redhat.com/mailman/listinfo/libguestfs>). "
++"mailing list first (L<https://lists.libguestfs.org>). "
+ "This avoids disappointment and wasted work if we don't think the feature "
+ "would fit into the libguestfs project."
+ msgstr ""
+@@ -38654,7 +38654,7 @@ msgstr ""
+
+ #. type: textblock
+ #: ../docs/guestfs-testing.pod:24
+-msgid "L<https://www.redhat.com/mailman/listinfo/libguestfs>"
++msgid "L<https://lists.libguestfs.org>"
+ msgstr ""
+
+ #. type: =head1
+diff --git a/website/index.html.in b/website/index.html.in
+index 91088b59..e7a03d6d 100644
+--- a/website/index.html.in
++++ b/website/index.html.in
+@@ -54,7 +54,7 @@ guestfish --ro -i -a disk.img
+
+ <p>
+ Join us on
+-the <a href="http://www.redhat.com/mailman/listinfo/libguestfs">libguestfs
++the <a href="https://lists.libguestfs.org">libguestfs
+ mailing list</a>, or on IRC channel <code>#guestfs</code>
+ on <a href="https://libera.chat/">Libera Chat</a>.
+ </p>
diff --git a/0035-lib-Include-libxml-parser.h-for-xmlReadMemory.patch b/0035-lib-Include-libxml-parser.h-for-xmlReadMemory.patch
new file mode 100644
index 0000000..1b8ee36
--- /dev/null
+++ b/0035-lib-Include-libxml-parser.h-for-xmlReadMemory.patch
@@ -0,0 +1,25 @@
+From 64a928f631bc79d885d9822a3022c382cbd5fd55 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Mon, 27 Nov 2023 14:04:33 +0000
+Subject: [PATCH] lib: Include <libxml/parser.h> for xmlReadMemory
+
+Since libxml2 2.12.1 including this header is required to have this
+function declared.
+
+(cherry picked from commit 02c39dc5e8109ddb911d90759883a504008ba509)
+---
+ lib/launch-libvirt.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/lib/launch-libvirt.c b/lib/launch-libvirt.c
+index d4bf1a8f..79465dd4 100644
+--- a/lib/launch-libvirt.c
++++ b/lib/launch-libvirt.c
+@@ -38,6 +38,7 @@
+ #include <libvirt/virterror.h>
+ #endif
+
++#include <libxml/parser.h>
+ #include <libxml/xmlwriter.h>
+ #include <libxml/xpath.h>
+
diff --git a/0036-ocaml-Use-Gc.finalise-instead-of-a-C-finalizer.patch b/0036-ocaml-Use-Gc.finalise-instead-of-a-C-finalizer.patch
new file mode 100644
index 0000000..909722c
--- /dev/null
+++ b/0036-ocaml-Use-Gc.finalise-instead-of-a-C-finalizer.patch
@@ -0,0 +1,132 @@
+From 27aca404cfbfdf9b3d155fa0794f86936525f40c Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Wed, 13 Dec 2023 22:50:56 +0000
+Subject: [PATCH] ocaml: Use Gc.finalise instead of a C finalizer
+
+Since OCaml 5.1.1, changes to custom blocks caused C finalizers that
+call caml_enter_blocking_section to stop working (if they ever did
+before). They are relatively inflexible compared to registering an
+OCaml finalizer (Gc.finalise) to call Guestfs.close, so use that
+instead.
+
+Suggested-by: Guillaume Munch-Maccagnoni
+See: https://github.com/ocaml/ocaml/issues/12820
+See: https://gitlab.com/nbdkit/libnbd/-/commit/db48794fa89547a4799b832331e82b4b8b98f03d
+(cherry picked from commit 61418535ad63b5a2a91f1caf4703d7134834e4dd)
+---
+ generator/OCaml.ml | 7 ++++-
+ ocaml/guestfs-c.c | 69 +++++++++++++++++++++-------------------------
+ 2 files changed, 37 insertions(+), 39 deletions(-)
+
+diff --git a/generator/OCaml.ml b/generator/OCaml.ml
+index 07ccd269..1e6f603a 100644
+--- a/generator/OCaml.ml
++++ b/generator/OCaml.ml
+@@ -312,10 +312,15 @@ type t
+ exception Error of string
+ exception Handle_closed of string
+
+-external create : ?environment:bool -> ?close_on_exit:bool -> unit -> t =
++external _create : ?environment:bool -> ?close_on_exit:bool -> unit -> t =
+ \"guestfs_int_ocaml_create\"
+ external close : t -> unit = \"guestfs_int_ocaml_close\"
+
++let create ?environment ?close_on_exit () =
++ let g = _create ?environment ?close_on_exit () in
++ Gc.finalise close g;
++ g
++
+ type event =
+ ";
+ List.iter (
+diff --git a/ocaml/guestfs-c.c b/ocaml/guestfs-c.c
+index 8a8761e8..700c33ab 100644
+--- a/ocaml/guestfs-c.c
++++ b/ocaml/guestfs-c.c
+@@ -61,43 +61,10 @@ value guestfs_int_ocaml_delete_event_callback (value gv, value eh);
+ value guestfs_int_ocaml_event_to_string (value events);
+ value guestfs_int_ocaml_last_errno (value gv);
+
+-/* Allocate handles and deal with finalization. */
+-static void
+-guestfs_finalize (value gv)
+-{
+- guestfs_h *g = Guestfs_val (gv);
+-
+- if (g) {
+- /* There is a nasty, difficult to solve case here where the
+- * user deletes events in one of the callbacks that we are
+- * about to invoke, resulting in a double-free. XXX
+- */
+- size_t len;
+- value **roots = get_all_event_callbacks (g, &len);
+-
+- /* Close the handle: this could invoke callbacks from the list
+- * above, which is why we don't want to delete them before
+- * closing the handle.
+- */
+- caml_release_runtime_system ();
+- guestfs_close (g);
+- caml_acquire_runtime_system ();
+-
+- /* Now unregister the global roots. */
+- if (roots && len > 0) {
+- size_t i;
+- for (i = 0; i < len; ++i) {
+- caml_remove_generational_global_root (roots[i]);
+- free (roots[i]);
+- }
+- free (roots);
+- }
+- }
+-}
+-
++/* Allocate handles. */
+ static struct custom_operations guestfs_custom_operations = {
+ (char *) "guestfs_custom_operations",
+- guestfs_finalize,
++ custom_finalize_default,
+ custom_compare_default,
+ custom_hash_default,
+ custom_serialize_default,
+@@ -179,11 +146,37 @@ value
+ guestfs_int_ocaml_close (value gv)
+ {
+ CAMLparam1 (gv);
++ guestfs_h *g = Guestfs_val (gv);
+
+- guestfs_finalize (gv);
++ if (g) {
++ /* There is a nasty, difficult to solve case here where the
++ * user deletes events in one of the callbacks that we are
++ * about to invoke, resulting in a double-free. XXX
++ */
++ size_t len;
++ value **roots = get_all_event_callbacks (g, &len);
+
+- /* So we don't double-free in the finalizer. */
+- Guestfs_val (gv) = NULL;
++ /* Close the handle: this could invoke callbacks from the list
++ * above, which is why we don't want to delete them before
++ * closing the handle.
++ */
++ caml_release_runtime_system ();
++ guestfs_close (g);
++ caml_acquire_runtime_system ();
++
++ /* Now unregister the global roots. */
++ if (roots && len > 0) {
++ size_t i;
++ for (i = 0; i < len; ++i) {
++ caml_remove_generational_global_root (roots[i]);
++ free (roots[i]);
++ }
++ free (roots);
++ }
++
++ /* So we don't double-free. */
++ Guestfs_val (gv) = NULL;
++ }
+
+ CAMLreturn (Val_unit);
+ }
diff --git a/0037-ocaml-Nullify-custom-block-before-releasing-runtime-.patch b/0037-ocaml-Nullify-custom-block-before-releasing-runtime-.patch
new file mode 100644
index 0000000..20ee83c
--- /dev/null
+++ b/0037-ocaml-Nullify-custom-block-before-releasing-runtime-.patch
@@ -0,0 +1,39 @@
+From 9f52ab7794bf54169139995c5296aa5f39e47706 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 14 Dec 2023 08:33:10 +0000
+Subject: [PATCH] ocaml: Nullify custom block before releasing runtime lock
+
+Avoids a potential, though if possible then very rare, double free
+path.
+
+Suggested-by: Guillaume Munch-Maccagnoni
+See: https://github.com/ocaml/ocaml/issues/12820
+(cherry picked from commit e93fd7e8acf34192c0d1b70611e3474dde346941)
+---
+ ocaml/guestfs-c.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/ocaml/guestfs-c.c b/ocaml/guestfs-c.c
+index 700c33ab..ea9a0598 100644
+--- a/ocaml/guestfs-c.c
++++ b/ocaml/guestfs-c.c
+@@ -156,6 +156,9 @@ guestfs_int_ocaml_close (value gv)
+ size_t len;
+ value **roots = get_all_event_callbacks (g, &len);
+
++ /* So we don't double-free. */
++ Guestfs_val (gv) = NULL;
++
+ /* Close the handle: this could invoke callbacks from the list
+ * above, which is why we don't want to delete them before
+ * closing the handle.
+@@ -173,9 +176,6 @@ guestfs_int_ocaml_close (value gv)
+ }
+ free (roots);
+ }
+-
+- /* So we don't double-free. */
+- Guestfs_val (gv) = NULL;
+ }
+
+ CAMLreturn (Val_unit);
diff --git a/0038-Update-common-submodule.patch b/0038-Update-common-submodule.patch
new file mode 100644
index 0000000..4ec3781
--- /dev/null
+++ b/0038-Update-common-submodule.patch
@@ -0,0 +1,162 @@
+From d015c300eb0d6ac1d366cf02b15b7aade7e3063a Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 14 Dec 2023 09:03:49 +0000
+Subject: [PATCH] Update common submodule
+
+The list of patches is below. The one which matters for guestfish is
+addition of --key all:... selector.
+
+Andrey Drobyshev (1):
+ mldrivers: look for bootloader config in /boot/grub/grub.cfg in case of UEFI
+
+Richard W.M. Jones (5):
+ mlxml: Include <libxml/parser.h> for xmlReadMemory
+ options/keys.c: Rewrite confusing match statement
+ options: Rewrite --key documentation fragment
+ options: Allow --key all:SELECTOR to be used to match any device
+ mltools/libosinfo-c.c: Fix off-by-one error
+
+Fixes: https://issues.redhat.com/browse/RHEL-19367
+(cherry picked from commit 7fd41b5a02b7a9d217150fa49940115a98aae329)
+---
+ common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Submodule common 9a8ba593..0dba002c:
+diff --git a/common/mldrivers/linux_bootloaders.ml b/common/mldrivers/linux_bootloaders.ml
+index 6f8857ef..91c5ab9e 100644
+--- a/common/mldrivers/linux_bootloaders.ml
++++ b/common/mldrivers/linux_bootloaders.ml
+@@ -375,6 +375,18 @@ let detect_bootloader (g : G.guestfs) root i_firmware =
+ with G.Error msg ->
+ error (f_"could not find bootloader mount point (%s): %s") mp msg in
+
++ (*
++ * Workaround for older UEFI-based Debian which may not have
++ * /boot/efi/EFI/debian/grub.cfg.
++ *)
++ let paths =
++ if g#exists "/boot/grub/grub.cfg" then
++ match i_firmware with
++ | Firmware.I_BIOS -> paths
++ | I_UEFI _ -> paths @ ["/boot/grub/grub.cfg"]
++ else paths
++ in
++
+ (* We can determine if the bootloader config file is grub 1 or
+ * grub 2 just by looking at the filename.
+ *)
+diff --git a/common/mltools/libosinfo-c.c b/common/mltools/libosinfo-c.c
+index 93357fd9..a48c8989 100644
+--- a/common/mltools/libosinfo-c.c
++++ b/common/mltools/libosinfo-c.c
+@@ -296,7 +296,7 @@ v2v_osinfo_os_get_device_drivers (value osv)
+
+ driver = OSINFO_DEVICE_DRIVER(osinfo_list_get_nth (OSINFO_LIST(list), i));
+
+- vi = caml_alloc (6, 0);
++ vi = caml_alloc (7, 0);
+ str = osinfo_device_driver_get_architecture (driver);
+ copyv = caml_copy_string (str);
+ Store_field (vi, 0, copyv);
+diff --git a/common/mlxml/xml-c.c b/common/mlxml/xml-c.c
+index 715c3bb2..e024bd8a 100644
+--- a/common/mlxml/xml-c.c
++++ b/common/mlxml/xml-c.c
+@@ -34,6 +34,7 @@
+ #include <caml/memory.h>
+ #include <caml/mlvalues.h>
+
++#include <libxml/parser.h>
+ #include <libxml/xpath.h>
+ #include <libxml/xpathInternals.h>
+ #include <libxml/uri.h>
+diff --git a/common/options/key-option.pod b/common/options/key-option.pod
+index 6bc04df1..1470d863 100644
+--- a/common/options/key-option.pod
++++ b/common/options/key-option.pod
+@@ -1,22 +1,37 @@
+ =item B<--key> SELECTOR
+
+ Specify a key for LUKS, to automatically open a LUKS device when using
+-the inspection. C<ID> can be either the libguestfs device name, or
+-the UUID of the LUKS device.
++the inspection.
+
+ =over 4
+
+-=item B<--key> C<ID>:key:KEY_STRING
++=item B<--key> NAMEB<:key:>KEY_STRING
++
++=item B<--key> UUIDB<:key:>KEY_STRING
++
++=item B<--key> B<all:key:>KEY_STRING
++
++C<NAME> is the libguestfs device name (eg. C</dev/sda1>). C<UUID> is
++the device UUID. C<all> means try the key against any encrypted
++device.
+
+ Use the specified C<KEY_STRING> as passphrase.
+
+-=item B<--key> C<ID>:file:FILENAME
++=item B<--key> NAMEB<:file:>FILENAME
++
++=item B<--key> UUIDB<:file:>FILENAME
++
++=item B<--key> B<all:file:>FILENAME
+
+ Read the passphrase from F<FILENAME>.
+
+-=item B<--key> C<ID>:clevis
++=item B<--key> NAMEB<:clevis>
+
+-Attempt passphrase-less unlocking for C<ID> with Clevis, over the
++=item B<--key> UUIDB<:clevis>
++
++=item B<--key> B<all:clevis>
++
++Attempt passphrase-less unlocking for the device with Clevis, over the
+ network. Please refer to L<guestfs(3)/ENCRYPTED DISKS> for more
+ information on network-bound disk encryption (NBDE).
+
+diff --git a/common/options/keys.c b/common/options/keys.c
+index 52b27369..87acba51 100644
+--- a/common/options/keys.c
++++ b/common/options/keys.c
+@@ -20,6 +20,7 @@
+
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <stdbool.h>
+ #include <unistd.h>
+ #include <termios.h>
+ #include <string.h>
+@@ -152,9 +153,13 @@ get_keys (struct key_store *ks, const char *device, const char *uuid,
+ if (ks) {
+ for (i = 0; i < ks->nr_keys; ++i) {
+ struct key_store_key *key = &ks->keys[i];
++ bool key_id_matches_this_device;
+
+- if (STRNEQ (key->id, device) && (!uuid || STRNEQ (key->id, uuid)))
+- continue;
++ key_id_matches_this_device =
++ STREQ (key->id, "all") || /* special string "all" matches any device */
++ STREQ (key->id, device) ||
++ (uuid && STREQ (key->id, uuid));
++ if (!key_id_matches_this_device) continue;
+
+ switch (key->type) {
+ case key_string:
+diff --git a/common/options/options.h b/common/options/options.h
+index 94e8b9ee..dcb15c28 100644
+--- a/common/options/options.h
++++ b/common/options/options.h
+@@ -109,6 +109,8 @@ struct key_store_key {
+ * device name, or the UUID.
+ *
+ * There may be multiple matching devices in the list.
++ *
++ * This may be the special string "all" which matches any device.
+ */
+ char *id;
+
diff --git a/0039-tests-Test-guestfish-key-all-.-selector.patch b/0039-tests-Test-guestfish-key-all-.-selector.patch
new file mode 100644
index 0000000..7cf5487
--- /dev/null
+++ b/0039-tests-Test-guestfish-key-all-.-selector.patch
@@ -0,0 +1,35 @@
+From 335642539772cfee442989f56f1b5d7803e4111c Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 14 Dec 2023 09:15:08 +0000
+Subject: [PATCH] tests: Test guestfish --key all:... selector
+
+(cherry picked from commit 40f43cc8ea6bd556749ee7ba280971aa8b043d27)
+---
+ .../luks/test-key-option-inspect-luks-on-lvm.sh | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/tests/luks/test-key-option-inspect-luks-on-lvm.sh b/tests/luks/test-key-option-inspect-luks-on-lvm.sh
+index 932862b1..2b60c797 100755
+--- a/tests/luks/test-key-option-inspect-luks-on-lvm.sh
++++ b/tests/luks/test-key-option-inspect-luks-on-lvm.sh
+@@ -119,3 +119,20 @@ eval "$fish_ref"
+
+ # Repeat the test.
+ check_filesystems
++
++# Exit the current guestfish background process.
++guestfish --remote -- exit
++GUESTFISH_PID=
++
++# Test the --key all:... selector.
++keys_by_mapper_lvname=(
++ --key all:key:FEDORA-Root
++ --key all:key:FEDORA-LV1
++ --key all:key:FEDORA-LV2
++ --key all:key:FEDORA-LV3
++)
++fish_ref=$("${guestfish[@]}" "${keys_by_mapper_lvname[@]}")
++eval "$fish_ref"
++
++# Repeat the test.
++check_filesystems
diff --git a/README-replacement.in b/README-replacement.in
new file mode 100644
index 0000000..388dc34
--- /dev/null
+++ b/README-replacement.in
@@ -0,0 +1,37 @@
+Libguestfs is a set of tools and a library for accessing and modifying
+guest disk images. For more information see the home page:
+
+ http://libguestfs.org/
+
+For discussion, development, patches, etc. please use the mailing
+list:
+
+ http://www.redhat.com/mailman/listinfo/libguestfs
+
+This package comes with a lot of help and examples to get you started.
+
+The first place to start are the manual pages. Type:
+
+ man guestfs
+ man guestfs-faq
+ man guestfs-release-notes
+ man guestfish
+ man virt-cat # and other virt-* tools
+
+If you install the libguestfs-devel package, then in the
+/usr/share/doc/libguestfs-devel/ directory you will find other
+documentation including:
+
+ - BUGS: list of open bugs in this version
+
+ - ChangeLog.gz: the detailed list of changes in this version
+
+ - HACKING: how to extend libguestfs
+
+ - TODO: ideas for extending libguestfs
+
+ - *.c: example C programs using the API
+
+ - *.xml.gz: example virt-inspector output (compressed)
+
+ - virt-inspector.rng: virt-inspector RelaxNG schema
diff --git a/copy-patches.sh b/copy-patches.sh
new file mode 100755
index 0000000..ce1fbb0
--- /dev/null
+++ b/copy-patches.sh
@@ -0,0 +1,65 @@
+#!/bin/bash -
+
+set -e
+
+# Maintainer script to copy patches from the git repo to the current
+# directory. Use it like this:
+# ./copy-patches.sh
+
+project=libguestfs
+rhel_version=9.4
+
+# Check we're in the right directory.
+if [ ! -f $project.spec ]; then
+ echo "$0: run this from the directory containing '$project.spec'"
+ exit 1
+fi
+
+case `id -un` in
+ rjones) git_checkout=$HOME/d/$project-rhel-$rhel_version ;;
+ lacos) git_checkout=$HOME/src/v2v/$project ;;
+ *) git_checkout=$HOME/d/$project-rhel-$rhel_version ;;
+esac
+if [ ! -d $git_checkout ]; then
+ echo "$0: $git_checkout does not exist"
+ echo "This script is only for use by the maintainer when preparing a"
+ echo "$project release on RHEL."
+ exit 1
+fi
+
+# Get the base version of the project.
+version=`grep '^Version:' $project.spec | awk '{print $2}'`
+tag="v$version"
+
+# Remove any existing patches.
+git rm -f [0-9]*.patch ||:
+rm -f [0-9]*.patch
+
+# Get the patches.
+(
+ cd $git_checkout
+ rm -f [0-9]*.patch
+ git -c core.abbrev=8 format-patch -O/dev/null --subject-prefix=PATCH -N \
+ --submodule=diff --no-signature --patience $tag
+)
+mv $git_checkout/[0-9]*.patch .
+
+# Remove any not to be applied.
+rm -f *NOT-FOR-RPM*.patch
+
+# Add the patches.
+git add [0-9]*.patch
+
+# Print out the patch lines.
+echo
+echo "--- Copy the following text into $project.spec file"
+echo
+
+echo "# Patches."
+for f in [0-9]*.patch; do
+ n=`echo $f | awk -F- '{print $1}'`
+ echo "Patch$n: $f"
+done
+
+echo
+echo "--- End of text"
diff --git a/guestfish.sh b/guestfish.sh
new file mode 100644
index 0000000..cfd0492
--- /dev/null
+++ b/guestfish.sh
@@ -0,0 +1,6 @@
+# Guestfish colour prompts. See PROMPT in guestfish(1).
+GUESTFISH_PS1='\[\e[1;32m\]><fs>\[\e[0;31m\] '
+GUESTFISH_OUTPUT='\e[0m'
+GUESTFISH_RESTORE="$GUESTFISH_OUTPUT"
+GUESTFISH_INIT='\e[1;34m'
+export GUESTFISH_PS1 GUESTFISH_OUTPUT GUESTFISH_RESTORE GUESTFISH_INIT
diff --git a/libguestfs-1.50.1.tar.gz.sig b/libguestfs-1.50.1.tar.gz.sig
new file mode 100644
index 0000000..cec47f6
--- /dev/null
+++ b/libguestfs-1.50.1.tar.gz.sig
@@ -0,0 +1,17 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmP1QzoRHHJpY2hAYW5u
+ZXhpYS5vcmcACgkQkXOPc+G3aKCAEBAAimQxT37HMWTHOqvj4s6ipOhDCNPlqo4L
+z+syvIkgbp024IOPUbrlmSCtrCFiLXsRmmenynFv66N8GXoWmJruyJMyvBxsupZT
+lTo7WdCEix/xPh/LAb8Q9RWA2SQYfkOKHRs/gr4b/LbtXBklMlcOdhegx3Mml4SW
+gwK5n799YebUVgzYch5hWjHcRAphPaUdMyaJ6MUnFrfUPyGK2QO1yXdnGxkseAPz
+srjlhFqu5kNojWzcaNcdHBdKvJVEZo7L6laADRS31sRH0BGVc6/DFJgOPdxROGJe
+oeq3Oo1EF88P15NSTNZSXLa65n9kts2OnqRgX/c3njV9+1/JPHJWVM+VezuCcN8D
+hHktHVOBjM209N5RmLtR92eROvo1aTrgjsLqOTvwbKBu7NrPc4ZICnX7dMjD6irj
+vQz0P5MUmELMvdEN3FMGf45v77z+249e1z+5EGi2HUPKLfxd+I3+2mxUm2xjWOy/
+zNzkG2rCgYRB8Tioj6Mw80RYKioRyu8p5lUZvvLk85CJbT4BFH8rXgJbrEBOSunE
+lWEcv690GzyszAN8zKZaIqhNzIKdlkQZAd1DMXfNBEfAy23YHRApB1O2EFhNAjAf
+yEsUjpiYc0pq64QiCPGzUp4iLfMt9hg4ey5Pquud/j6cfvJ3ak5gZECbFnbUjysZ
+YYpwSgy/FVI=
+=OPC/
+-----END PGP SIGNATURE-----
diff --git a/libguestfs.spec b/libguestfs.spec
new file mode 100644
index 0000000..2d9118e
--- /dev/null
+++ b/libguestfs.spec
@@ -0,0 +1,5038 @@
+%undefine _package_note_flags
+# Architectures on which golang works.
+#% global golang_arches aarch64 % {arm} % {ix86} x86_64
+# In theory the above, in practice golang is so often broken that
+# I now disable it:
+%global golang_arches NONE
+
+# Architectures that we run the basic sanity-check test.
+#
+# The full test suite is done after the package has been built. Here
+# we only do a sanity check that kernel/qemu/libvirt/appliance is not
+# broken. To perform the full test suite, see instructions here:
+# https://www.redhat.com/archives/libguestfs/2015-September/msg00078.html
+%if !0%{?rhel}
+%global test_arches aarch64 %{power64} s390x x86_64
+%else
+%global test_arches x86_64
+%endif
+
+# Trim older changelog entries.
+# https://lists.fedoraproject.org/pipermail/devel/2013-April/thread.html#181627
+%global _changelog_trimtime %(date +%s -d "2 years ago")
+
+# Verify tarball signature with GPGv2.
+%global verify_tarball_signature 1
+
+# If there are patches which touch autotools files, set this to 1.
+%if !0%{?rhel}
+%global patches_touch_autotools %{nil}
+%else
+# On RHEL the downstream patches always touch autotools files.
+%global patches_touch_autotools 1
+%endif
+
+# The source directory.
+%global source_directory 1.50-stable
+
+# Filter perl provides.
+%{?perl_default_filter}
+
+# Unbreak the linker.
+%undefine _strict_symbol_defs_build
+
+Summary: Access and modify virtual machine disk images
+Name: libguestfs
+Epoch: 1
+Version: 1.50.1
+Release: 7%{?dist}
+License: LGPLv2+
+
+# Build only for architectures that have a kernel
+ExclusiveArch: %{kernel_arches}
+%if 0%{?rhel}
+# No qemu-kvm on POWER (RHBZ#1946532).
+ExcludeArch: %{power64}
+%endif
+
+# Source and patches.
+URL: http://libguestfs.org/
+Source0: http://libguestfs.org/download/%{source_directory}/%{name}-%{version}.tar.gz
+%if 0%{verify_tarball_signature}
+Source1: http://libguestfs.org/download/%{source_directory}/%{name}-%{version}.tar.gz.sig
+%endif
+
+# Replacement README file.
+Source4: README-replacement.in
+
+# Guestfish colour prompts.
+Source5: guestfish.sh
+
+# Used to build the supermin appliance in Koji.
+Source6: yum.conf.in
+
+# Keyring used to verify tarball signature.
+%if 0%{verify_tarball_signature}
+Source7: libguestfs.keyring
+%endif
+
+# Maintainer script which helps with handling patches.
+Source8: copy-patches.sh
+
+# This is a copy of the common/ submodule from libguestfs @v1.50.1.
+# We need it because the libguestfs tarball does not include common/
+# directories that are not used by libguestfs (eg. common/mlcustomize).
+# However the patches (below) patch files in those directories and so
+# do not apply properly to the libguestfs tarball. Therefore before
+# applying the patches we unpack this in the common/ subdirectory.
+Source9: libguestfs-common-1.50.1.tar.gz
+
+# Patches are maintained in the following repository:
+# https://github.com/libguestfs/libguestfs/commits/rhel-9.4
+
+# Patches.
+Patch0001: 0001-update-common-submodule.patch
+Patch0002: 0002-update-common-submodule.patch
+Patch0003: 0003-daemon-selinux-relabel-don-t-exclude-selinux-if-it-s.patch
+Patch0004: 0004-daemon-selinux-relabel-search-for-invalid-option-in-.patch
+Patch0005: 0005-daemon-selinux-relabel-run-setfiles-with-T-0-if-supp.patch
+Patch0006: 0006-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch
+Patch0007: 0007-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch
+Patch0008: 0008-Remove-virt-dib.patch
+Patch0009: 0009-lib-Choose-q35-machine-type-for-x86-64.patch
+Patch0010: 0010-RHEL-Revert-build-Remove-bundled-copy-of-ocaml-augea.patch
+Patch0011: 0011-update-common-submodule.patch
+Patch0012: 0012-LUKS-on-LVM-inspection-test-rename-VGs-and-LVs.patch
+Patch0013: 0013-LUKS-on-LVM-inspection-test-test-dev-mapper-VG-LV-tr.patch
+Patch0014: 0014-Replace-Pervasives.-with-Stdlib.patch
+Patch0015: 0015-fuse-Don-t-call-fclose-NULL-on-error-paths.patch
+Patch0016: 0016-ocaml-implicit_close-test-collect-all-currently-unre.patch
+Patch0017: 0017-ocaml-Replace-old-enter-leave_blocking_section-calls.patch
+Patch0018: 0018-ocaml-Release-runtime-lock-around-guestfs_close.patch
+Patch0019: 0019-ocaml-Conditionally-acquire-the-lock-in-callbacks.patch
+Patch0020: 0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch
+Patch0021: 0021-ocaml-Use-Caml_state_opt-in-preference-to-caml_state.patch
+Patch0022: 0022-generator-Add-chown-option-for-virt-customize.patch
+Patch0023: 0023-lib-remove-guestfs_int_cmd_clear_close_files.patch
+Patch0024: 0024-docs-fix-broken-link-in-the-guestfs-manual.patch
+Patch0025: 0025-docs-clarify-sockdir-s-separation.patch
+Patch0026: 0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch
+Patch0027: 0027-generator-customize-Add-new-StringTriplet-for-use-by.patch
+Patch0028: 0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch
+Patch0029: 0029-ruby-Replace-MiniTest-with-Minitest.patch
+Patch0030: 0030-ruby-Get-rid-of-old-Test-Unit-compatibility.patch
+Patch0031: 0031-generator-Sort-virt-customize-options-into-alphabeti.patch
+Patch0032: 0032-generator-Add-new-virt-customize-tar-in-operation.patch
+Patch0033: 0033-New-mailing-list-email-address.patch
+Patch0034: 0034-New-mailing-list-archives.patch
+Patch0035: 0035-lib-Include-libxml-parser.h-for-xmlReadMemory.patch
+Patch0036: 0036-ocaml-Use-Gc.finalise-instead-of-a-C-finalizer.patch
+Patch0037: 0037-ocaml-Nullify-custom-block-before-releasing-runtime-.patch
+Patch0038: 0038-Update-common-submodule.patch
+Patch0039: 0039-tests-Test-guestfish-key-all-.-selector.patch
+
+%if 0%{patches_touch_autotools}
+BuildRequires: autoconf, automake, libtool, gettext-devel
+%endif
+
+# Basic build requirements.
+BuildRequires: gcc, gcc-c++
+BuildRequires: make
+BuildRequires: rpcgen
+BuildRequires: libtirpc-devel
+BuildRequires: supermin-devel >= 5.1.18
+BuildRequires: hivex-devel >= 1.3.10
+BuildRequires: ocaml-hivex-devel
+BuildRequires: perl(Pod::Simple)
+BuildRequires: perl(Pod::Man)
+BuildRequires: /usr/bin/pod2text
+BuildRequires: po4a
+BuildRequires: augeas-devel >= 1.7.0
+# Waiting for https://bugzilla.redhat.com/show_bug.cgi?id=2168634
+#BuildRequires: ocaml-augeas-devel >= 0.6
+BuildRequires: readline-devel
+BuildRequires: xorriso
+BuildRequires: libxml2-devel
+BuildRequires: createrepo_c
+BuildRequires: glibc-static
+BuildRequires: libselinux-utils
+BuildRequires: libselinux-devel
+BuildRequires: fuse, fuse-devel
+BuildRequires: pcre2-devel
+BuildRequires: file-devel
+BuildRequires: libvirt-devel
+BuildRequires: gperf
+BuildRequires: flex
+BuildRequires: bison
+BuildRequires: rpm-devel
+BuildRequires: cpio
+BuildRequires: libconfig-devel
+BuildRequires: xz-devel
+%if !0%{?rhel}
+BuildRequires: zip
+BuildRequires: unzip
+%endif
+BuildRequires: systemd-units
+BuildRequires: netpbm-progs
+BuildRequires: icoutils
+BuildRequires: libvirt-daemon-kvm >= 7.1.0
+%if !0%{?rhel}
+BuildRequires: perl(Expect)
+%endif
+BuildRequires: libacl-devel
+BuildRequires: libcap-devel
+%if !0%{?rhel}
+BuildRequires: libldm-devel
+%endif
+BuildRequires: jansson-devel
+BuildRequires: systemd-devel
+BuildRequires: bash-completion
+BuildRequires: /usr/bin/ping
+BuildRequires: /usr/bin/wget
+BuildRequires: xz
+BuildRequires: zstd
+BuildRequires: /usr/bin/qemu-img
+
+%if 0%{verify_tarball_signature}
+BuildRequires: gnupg2
+%endif
+
+# For language bindings.
+BuildRequires: ocaml
+BuildRequires: ocaml-ocamldoc
+BuildRequires: ocaml-findlib-devel
+%if !0%{?rhel}
+BuildRequires: ocaml-ounit-devel
+%endif
+BuildRequires: lua
+BuildRequires: lua-devel
+BuildRequires: perl-devel
+BuildRequires: perl-generators
+BuildRequires: perl-macros
+BuildRequires: perl(Test::More)
+BuildRequires: perl(Test::Pod) >= 1.00
+BuildRequires: perl(Test::Pod::Coverage) >= 1.00
+BuildRequires: perl(Module::Build)
+BuildRequires: perl(ExtUtils::CBuilder)
+BuildRequires: perl(Locale::TextDomain)
+BuildRequires: python3-devel
+BuildRequires: python3-libvirt
+BuildRequires: ruby-devel
+BuildRequires: rubygem-rake
+# json is not pulled in automatically, see RHBZ#1325022
+BuildRequires: rubygem(json)
+BuildRequires: rubygem(rdoc)
+BuildRequires: rubygem(test-unit)
+BuildRequires: ruby-irb
+BuildRequires: php-devel
+BuildRequires: gobject-introspection-devel
+BuildRequires: gjs
+%if !0%{?rhel}
+BuildRequires: vala
+%endif
+%ifarch %{golang_arches}
+BuildRequires: golang
+%endif
+
+# Build requirements for the appliance.
+#
+# Get the initial list by doing:
+# for f in `cat appliance/packagelist`; do echo $f; done | sort -u
+# However you have to edit the list down to packages which exist in
+# current Fedora, since supermin ignores non-existent packages.
+
+BuildRequires: acl
+BuildRequires: attr
+BuildRequires: augeas-libs
+BuildRequires: bash
+BuildRequires: binutils
+%if !0%{?rhel}
+BuildRequires: btrfs-progs
+%endif
+BuildRequires: bzip2
+BuildRequires: clevis-luks
+BuildRequires: coreutils
+BuildRequires: cpio
+BuildRequires: cryptsetup
+BuildRequires: dhclient
+BuildRequires: diffutils
+BuildRequires: dosfstools
+BuildRequires: e2fsprogs
+BuildRequires: file
+BuildRequires: findutils
+BuildRequires: gawk
+BuildRequires: gdisk
+%if !0%{?rhel}
+BuildRequires: gfs2-utils
+%endif
+BuildRequires: grep
+BuildRequires: gzip
+%if !0%{?rhel}
+%ifnarch ppc
+BuildRequires: hfsplus-tools
+%endif
+%endif
+BuildRequires: hivex-libs
+BuildRequires: iproute
+BuildRequires: iputils
+BuildRequires: kernel
+BuildRequires: kmod
+BuildRequires: less
+BuildRequires: libcap
+%if !0%{?rhel}
+BuildRequires: libldm
+%endif
+BuildRequires: libselinux
+BuildRequires: libxml2
+BuildRequires: lsof
+BuildRequires: lsscsi
+BuildRequires: lvm2
+BuildRequires: lzop
+BuildRequires: mdadm
+%if !0%{?rhel}
+BuildRequires: ntfs-3g ntfsprogs ntfs-3g-system-compression
+%endif
+BuildRequires: openssh-clients
+BuildRequires: parted
+BuildRequires: pciutils
+BuildRequires: pcre2
+BuildRequires: policycoreutils
+BuildRequires: procps
+BuildRequires: psmisc
+BuildRequires: rpm-libs
+BuildRequires: rsync
+BuildRequires: scrub
+BuildRequires: sed
+%if !0%{?rhel}
+BuildRequires: sleuthkit
+%endif
+BuildRequires: squashfs-tools
+BuildRequires: strace
+%ifarch %{ix86} x86_64
+BuildRequires: syslinux syslinux-extlinux
+%endif
+BuildRequires: systemd
+BuildRequires: tar
+BuildRequires: udev
+BuildRequires: util-linux
+BuildRequires: vim-minimal
+BuildRequires: xfsprogs
+BuildRequires: xz
+BuildRequires: yajl
+%if !0%{?rhel}
+BuildRequires: zerofree
+%endif
+%if !0%{?rhel}
+%ifnarch %{arm} aarch64 s390 s390x riscv64
+# http://zfs-fuse.net/issues/94
+BuildRequires: zfs-fuse
+%endif
+%endif
+BuildRequires: zstd
+
+# Main package requires the appliance. This allows the appliance to
+# be replaced if there exists a package called
+# "libguestfs-noappliance". This package is not provided anywhere,
+# you have to provide the dependency or make the package yourself. If
+# you do then libguestfs won't install the appliance and you are free
+# to replace it with (eg) a fixed appliance.
+Requires: (%{name}-appliance = %{epoch}:%{version}-%{release} or %{name}-noappliance)
+
+# The daemon dependencies are not included automatically, because it
+# is buried inside the appliance, so list them here.
+Requires: augeas-libs%{?_isa} >= 1.7.0
+Requires: libacl%{?_isa}
+Requires: libcap%{?_isa}
+Requires: libselinux%{?_isa}
+Requires: hivex-libs%{?_isa} >= 1.3.10
+Requires: pcre2%{?_isa}
+Requires: rpm-libs%{?_isa} >= 4.16.1.3
+Requires: systemd-libs%{?_isa}
+Requires: yajl%{?_isa}
+
+# For core mount-local (FUSE) API.
+Requires: fuse
+
+# For core APIs:
+Requires: /usr/bin/qemu-img
+Requires: coreutils
+Requires: grep
+Requires: tar
+
+# libguestfs-make-fixed-appliance requires xz.
+Requires: xz
+
+# For qemu direct and libvirt backends.
+Requires: qemu-kvm-core
+%if !0%{?rhel}
+Suggests: qemu-block-curl
+Suggests: qemu-block-gluster
+Suggests: qemu-block-iscsi
+%endif
+Suggests: qemu-block-rbd
+%if !0%{?rhel}
+Suggests: qemu-block-ssh
+%endif
+Recommends: libvirt-daemon-config-network
+Requires: libvirt-daemon-driver-qemu >= 7.1.0
+Requires: libvirt-daemon-driver-secret
+Requires: libvirt-daemon-driver-storage-core
+Requires: selinux-policy >= 3.11.1-63
+
+%ifarch aarch64
+Requires: edk2-aarch64
+%endif
+
+# For guestfish.
+#Requires: /usr/bin/emacs #theoretically, but too large
+Requires: /usr/bin/hexedit
+Requires: /usr/bin/less
+Requires: /usr/bin/man
+Requires: /usr/bin/vi
+
+%if !0%{?rhel}
+# Someone managed to install libguestfs-winsupport (from RHEL!) on
+# Fedora, which breaks everything. Thus:
+Conflicts: libguestfs-winsupport
+%else
+Conflicts: libguestfs-winsupport < 7.2
+%endif
+
+
+%description
+Libguestfs is a library for accessing and modifying virtual machine
+disk images. http://libguestfs.org
+
+Libguestfs uses Linux kernel and qemu code, and can access any type of
+guest filesystem that Linux and qemu can, including but not limited
+to: ext2/3/4, btrfs, FAT and NTFS, LVM, many different disk partition
+schemes, qcow, qcow2, vmdk.
+
+For enhanced features, install:
+
+%if !0%{?rhel}
+ libguestfs-forensics adds filesystem forensics support
+ libguestfs-gfs2 adds Global Filesystem (GFS2) support
+ libguestfs-hfsplus adds HFS+ (Mac filesystem) support
+%endif
+ libguestfs-inspect-icons adds support for inspecting guest icons
+ libguestfs-rescue enhances virt-rescue shell with more tools
+ libguestfs-rsync rsync to/from guest filesystems
+%if !0%{?rhel}
+ libguestfs-ufs adds UFS (BSD) support
+%endif
+ libguestfs-xfs adds XFS support
+%if !0%{?rhel}
+ libguestfs-zfs adds ZFS support
+%endif
+
+For developers:
+
+ libguestfs-devel C/C++ header files and library
+
+Language bindings:
+
+ libguestfs-gobject-devel GObject bindings and GObject Introspection
+%ifarch %{golang_arches}
+ golang-guestfs Go language bindings
+%endif
+ lua-guestfs Lua bindings
+ ocaml-libguestfs-devel OCaml bindings
+ perl-Sys-Guestfs Perl bindings
+ php-libguestfs PHP bindings
+ python3-libguestfs Python 3 bindings
+ ruby-libguestfs Ruby bindings
+%if !0%{?rhel}
+ libguestfs-vala Vala language bindings
+%endif
+
+
+%package appliance
+Summary: Appliance for %{name}
+Requires: supermin >= 5.1.18
+
+
+%description appliance
+%{name}-appliance provides the appliance used by libguestfs.
+
+
+%package devel
+Summary: Development tools and libraries for %{name}
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: pkgconfig
+
+
+%description devel
+%{name}-devel contains development tools and libraries
+for %{name}.
+
+
+%if !0%{?rhel}
+%package forensics
+Summary: Filesystem forensics support for %{name}
+License: LGPLv2+
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description forensics
+This adds filesystem forensics support to %{name}. Install it if you
+want to forensically analyze disk images using The Sleuth Kit.
+%endif
+
+
+%if !0%{?rhel}
+%package gfs2
+Summary: GFS2 support for %{name}
+License: LGPLv2+
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description gfs2
+This adds GFS2 support to %{name}. Install it if you want to process
+disk images containing GFS2.
+%endif
+
+
+%if !0%{?rhel}
+%ifnarch ppc
+%package hfsplus
+Summary: HFS+ support for %{name}
+License: LGPLv2+
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description hfsplus
+This adds HFS+ support to %{name}. Install it if you want to process
+disk images containing HFS+ / Mac OS Extended filesystems.
+%endif
+%endif
+
+
+%package rescue
+Summary: virt-rescue shell
+License: LGPLv2+
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description rescue
+This adds the virt-rescue shell which is a "rescue disk" for virtual
+machines, and additional tools to use inside the shell such as ssh,
+network utilities, editors and debugging utilities.
+
+
+%package rsync
+Summary: rsync support for %{name}
+License: LGPLv2+
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description rsync
+This adds rsync support to %{name}. Install it if you want to use
+rsync to upload or download files into disk images.
+
+
+%if !0%{?rhel}
+%package ufs
+Summary: UFS (BSD) support for %{name}
+License: LGPLv2+
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description ufs
+This adds UFS support to %{name}. Install it if you want to process
+disk images containing UFS (BSD filesystems).
+%endif
+
+
+%package xfs
+Summary: XFS support for %{name}
+License: LGPLv2+
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description xfs
+This adds XFS support to %{name}. Install it if you want to process
+disk images containing XFS.
+
+
+%if !0%{?rhel}
+%ifnarch %{arm} aarch64 s390 s390x riscv64
+%package zfs
+Summary: ZFS support for %{name}
+License: LGPLv2+
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description zfs
+This adds ZFS support to %{name}. Install it if you want to process
+disk images containing ZFS.
+%endif
+%endif
+
+
+%package inspect-icons
+Summary: Additional dependencies for inspecting guest icons
+License: LGPLv2+
+BuildArch: noarch
+Requires: %{name} = %{epoch}:%{version}-%{release}
+
+Requires: netpbm-progs
+Requires: icoutils
+
+
+%description inspect-icons
+%{name}-inspect-icons is a metapackage that pulls in additional
+dependencies required by libguestfs to pull icons out of non-Linux
+guests. Install this package if you want libguestfs to be able to
+inspect non-Linux guests and display icons from them.
+
+The only reason this is a separate package is to avoid core libguestfs
+having to depend on Perl. See https://bugzilla.redhat.com/1194158
+
+
+%package bash-completion
+Summary: Bash tab-completion scripts for %{name} tools
+BuildArch: noarch
+Requires: bash-completion >= 2.0
+
+
+%description bash-completion
+Install this package if you want intelligent bash tab-completion
+for guestfish, guestmount and various virt-* tools.
+
+
+%package -n ocaml-%{name}
+Summary: OCaml bindings for %{name}
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+
+%description -n ocaml-%{name}
+ocaml-%{name} contains OCaml bindings for %{name}.
+
+This is for toplevel and scripting access only. To compile OCaml
+programs which use %{name} you will also need ocaml-%{name}-devel.
+
+
+%package -n ocaml-%{name}-devel
+Summary: OCaml bindings for %{name}
+Requires: ocaml-%{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+
+%description -n ocaml-%{name}-devel
+ocaml-%{name}-devel contains development libraries
+required to use the OCaml bindings for %{name}.
+
+
+%package -n perl-Sys-Guestfs
+Summary: Perl bindings for %{name} (Sys::Guestfs)
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
+
+
+%description -n perl-Sys-Guestfs
+perl-Sys-Guestfs contains Perl bindings for %{name} (Sys::Guestfs).
+
+
+%package -n python3-%{name}
+Summary: Python 3 bindings for %{name}
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+%{?python_provide:%python_provide python3-%{name}}
+
+
+%description -n python3-%{name}
+python3-%{name} contains Python 3 bindings for %{name}.
+
+
+%package -n ruby-%{name}
+Summary: Ruby bindings for %{name}
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: ruby(release)
+Requires: ruby
+Provides: ruby(guestfs) = %{version}
+
+%description -n ruby-%{name}
+ruby-%{name} contains Ruby bindings for %{name}.
+
+
+%package -n php-%{name}
+Summary: PHP bindings for %{name}
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: php(zend-abi) = %{php_zend_api}
+Requires: php(api) = %{php_core_api}
+
+%description -n php-%{name}
+php-%{name} contains PHP bindings for %{name}.
+
+
+%package -n lua-guestfs
+Summary: Lua bindings for %{name}
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: lua
+
+%description -n lua-guestfs
+lua-guestfs contains Lua bindings for %{name}.
+
+
+%package gobject
+Summary: GObject bindings for %{name}
+Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description gobject
+%{name}-gobject contains GObject bindings for %{name}.
+
+To develop software against these bindings, you need to install
+%{name}-gobject-devel.
+
+
+%package gobject-devel
+Summary: GObject bindings for %{name}
+Requires: %{name}-gobject = %{epoch}:%{version}-%{release}
+
+%description gobject-devel
+%{name}-gobject contains GObject bindings for %{name}.
+
+This package is needed if you want to write software using the
+GObject bindings. It also contains GObject Introspection information.
+
+
+%if !0%{?rhel}
+%package vala
+Summary: Vala for %{name}
+Requires: %{name}-devel%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: vala
+
+
+%description vala
+%{name}-vala contains GObject bindings for %{name}.
+%endif
+
+
+
+%ifarch %{golang_arches}
+%package -n golang-guestfs
+Summary: Golang bindings for %{name}
+BuildArch: noarch
+Requires: %{name} = %{epoch}:%{version}-%{release}
+Requires: golang
+Provides: golang(libguestfs.org) = %{epoch}:%{version}-%{release}
+
+%description -n golang-guestfs
+golang-%{name} contains Go language bindings for %{name}.
+%endif
+
+
+%package man-pages-ja
+Summary: Japanese (ja) man pages for %{name}
+BuildArch: noarch
+Requires: %{name} = %{epoch}:%{version}-%{release}
+
+%description man-pages-ja
+%{name}-man-pages-ja contains Japanese (ja) man pages
+for %{name}.
+
+
+%package man-pages-uk
+Summary: Ukrainian (uk) man pages for %{name}
+BuildArch: noarch
+Requires: %{name} = %{epoch}:%{version}-%{release}
+
+%description man-pages-uk
+%{name}-man-pages-uk contains Ukrainian (uk) man pages
+for %{name}.
+
+
+%prep
+%if 0%{verify_tarball_signature}
+%{gpgverify} --keyring='%{SOURCE7}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
+%endif
+%setup -q
+%if 0%{?rhel}
+tar zxf %{SOURCE9}
+%endif
+%autopatch -p1
+
+%if 0%{patches_touch_autotools}
+autoreconf -i
+%endif
+
+# For sVirt to work, the local temporary directory we use in the tests
+# must be labelled the same way as /tmp. This doesn't work if either
+# the directory is on NFS (no SELinux labels) or if SELinux is
+# disabled, hence the tests.
+if [ "$(stat -f -L -c %T .)" != "nfs" ] && \
+ [ "$(getenforce | tr '[A-Z]' '[a-z]')" != "disabled" ]; then
+ chcon --reference=/tmp tmp
+fi
+
+# Replace developer-centric README that ships with libguestfs, with
+# our replacement file.
+mv README README.orig
+sed 's/@VERSION@/%{version}/g' < %{SOURCE4} > README
+
+
+%build
+# Test if network is available.
+ip addr list ||:
+ip route list ||:
+if ping -c 3 -w 20 8.8.8.8 && wget http://libguestfs.org -O /dev/null; then
+ extra=
+else
+ mkdir cachedir repo
+ # -n 1 because of RHBZ#980502.
+ find /var/cache/{dnf,yum} -type f -name '*.rpm' -print0 | \
+ xargs -0 -n 1 cp -t repo
+ createrepo_c repo
+ sed -e "s|@PWD@|$(pwd)|" %{SOURCE6} > yum.conf
+ extra=--with-supermin-packager-config=$(pwd)/yum.conf
+fi
+
+%{configure} \
+%if 0%{?rhel} && !0%{?eln}
+ QEMU=%{_libexecdir}/qemu-kvm \
+%endif
+ PYTHON=%{__python3} \
+ --with-default-backend=libvirt \
+ --enable-appliance-format-auto \
+%if !0%{?rhel}
+ --with-extra="fedora=%{fedora},release=%{release},libvirt" \
+%else
+ --with-extra="rhel=%{rhel},release=%{release},libvirt" \
+%endif
+%if 0%{?rhel} && !0%{?eln}
+ --with-qemu="qemu-kvm qemu-system-%{_build_arch} qemu" \
+%endif
+%ifnarch %{golang_arches}
+ --disable-golang \
+%endif
+ --without-java \
+ --disable-erlang \
+ $extra
+
+# 'INSTALLDIRS' ensures that Perl and Ruby libs are installed in the
+# vendor dir not the site dir.
+make V=1 INSTALLDIRS=vendor %{?_smp_mflags}
+
+
+%check
+%ifarch %{test_arches}
+# Only run the tests with non-debug (ie. non-Rawhide) kernels.
+# XXX This tests for any debug kernel installed.
+if grep CONFIG_DEBUG_MUTEXES=y /lib/modules/*/config ; then
+ echo "Skipping tests because debug kernel is installed"
+ exit 0
+fi
+
+export LIBGUESTFS_DEBUG=1
+export LIBGUESTFS_TRACE=1
+export LIBVIRT_DEBUG=1
+
+if ! make quickcheck QUICKCHECK_TEST_TOOL_ARGS="-t 1200"; then
+ cat $HOME/.cache/libvirt/qemu/log/*
+ exit 1
+fi
+%endif
+
+
+%install
+# 'INSTALLDIRS' ensures that Perl and Ruby libs are installed in the
+# vendor dir not the site dir.
+make DESTDIR=$RPM_BUILD_ROOT INSTALLDIRS=vendor install
+
+# Delete static libraries.
+rm $( find $RPM_BUILD_ROOT -name '*.a' | grep -v /ocaml/ )
+
+# Delete libtool files.
+find $RPM_BUILD_ROOT -name '*.la' -delete
+
+# Delete some bogus Perl files.
+find $RPM_BUILD_ROOT -name perllocal.pod -delete
+find $RPM_BUILD_ROOT -name .packlist -delete
+find $RPM_BUILD_ROOT -name '*.bs' -delete
+find $RPM_BUILD_ROOT -name 'bindtests.pl' -delete
+
+# Perl's ExtUtils::Install installs "Guestfs.so" read-only; that
+# prevents objcopy from adding the ".gdb_index" section for the sake of
+# the debuginfo file. See
+# <https://rt.cpan.org/Public/Bug/Display.html?id=40976>. Restore write
+# permission for the file owner.
+find $RPM_BUILD_ROOT -name Guestfs.so -exec chmod u+w '{}' +
+
+# golang: Ignore what libguestfs upstream installs, and just copy the
+# source files to %%{_datadir}/gocode/src.
+%ifarch %{golang_arches}
+rm -r $RPM_BUILD_ROOT/usr/lib/golang
+mkdir -p $RPM_BUILD_ROOT%{_datadir}/gocode/src
+cp -a golang/src/libguestfs.org $RPM_BUILD_ROOT%{_datadir}/gocode/src
+%endif
+
+# Split up the monolithic packages file in the supermin appliance so
+# we can install dependencies in subpackages.
+pushd $RPM_BUILD_ROOT%{_libdir}/guestfs/supermin.d
+
+function remove
+{
+ grep -Ev "^$1$" < packages > packages-t
+ mv packages-t packages
+}
+
+function move_to
+{
+ if ! grep -Esq "^$1$" packages; then
+ echo "move_to $1: package name not found in packages file"
+ exit 1
+ fi
+ remove "$1"
+ echo "$1" >> "$2"
+}
+
+%if !0%{?rhel}
+move_to sleuthkit zz-packages-forensics
+move_to gfs2-utils zz-packages-gfs2
+move_to hfsplus-tools zz-packages-hfsplus
+%else
+remove sleuthkit
+remove gfs2-utils
+remove hfsplus-tools
+%endif
+move_to iputils zz-packages-rescue
+move_to lsof zz-packages-rescue
+move_to openssh-clients zz-packages-rescue
+move_to pciutils zz-packages-rescue
+move_to strace zz-packages-rescue
+move_to vim-minimal zz-packages-rescue
+move_to rsync zz-packages-rsync
+move_to xfsprogs zz-packages-xfs
+%if !0%{?rhel}
+%ifnarch %{arm} aarch64 s390 s390x riscv64
+move_to zfs-fuse zz-packages-zfs
+%endif
+%else
+remove zfs-fuse
+%endif
+
+%if !0%{?rhel}
+# On Fedora you need kernel-modules-extra to be able to mount
+# UFS (BSD) filesystems.
+echo "kernel-modules-extra" > zz-packages-ufs
+%endif
+
+popd
+
+# If there is a bogus dependency on kernel-*, rename it to 'kernel'
+# instead. This can happen for various reasons:
+# - DNF picks kernel-debug instead of kernel.
+# - Version of kernel-rt in brew > version of kernel.
+# On all known architectures, depending on 'kernel' should
+# mean "we need a kernel".
+pushd $RPM_BUILD_ROOT%{_libdir}/guestfs/supermin.d
+sed -i 's/^kernel-.*/kernel/' packages
+popd
+
+# Guestfish colour prompts.
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/profile.d
+install -m 0644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/profile.d
+
+# Remove the .gitignore file from ocaml/html which will be copied to docdir.
+rm ocaml/html/.gitignore
+
+
+# Find locale files.
+%find_lang %{name}
+
+
+%files -f %{name}.lang
+%license COPYING COPYING.LIB
+%doc README
+%{_bindir}/guestfish
+%{_bindir}/guestmount
+%{_bindir}/guestunmount
+%{_bindir}/libguestfs-test-tool
+%{_bindir}/virt-copy-in
+%{_bindir}/virt-copy-out
+%{_bindir}/virt-tar-in
+%{_bindir}/virt-tar-out
+%{_sbindir}/libguestfs-make-fixed-appliance
+%{_libdir}/libguestfs.so.*
+%{_mandir}/man1/guestfish.1*
+%{_mandir}/man1/guestfs-faq.1*
+%{_mandir}/man1/guestfs-performance.1*
+%{_mandir}/man1/guestfs-recipes.1*
+%{_mandir}/man1/guestfs-release-notes-1*.1*
+%{_mandir}/man1/guestfs-release-notes.1*
+%{_mandir}/man1/guestfs-security.1*
+%{_mandir}/man1/guestmount.1*
+%{_mandir}/man1/guestunmount.1*
+%{_mandir}/man1/libguestfs-make-fixed-appliance.1*
+%{_mandir}/man1/libguestfs-test-tool.1*
+%{_mandir}/man1/virt-copy-in.1*
+%{_mandir}/man1/virt-copy-out.1*
+%{_mandir}/man1/virt-tar-in.1*
+%{_mandir}/man1/virt-tar-out.1*
+%{_mandir}/man5/libguestfs-tools.conf.5*
+%config %{_sysconfdir}/profile.d/guestfish.sh
+%config(noreplace) %{_sysconfdir}/libguestfs-tools.conf
+
+
+%files appliance
+%{_libdir}/guestfs/
+%exclude %{_libdir}/guestfs/supermin.d/zz-packages-*
+
+
+%files devel
+%doc AUTHORS HACKING TODO README
+%doc examples/*.c
+%{_libdir}/libguestfs.so
+%{_mandir}/man1/guestfs-building.1*
+%{_mandir}/man1/guestfs-hacking.1*
+%{_mandir}/man1/guestfs-internals.1*
+%{_mandir}/man1/guestfs-testing.1*
+%{_mandir}/man3/guestfs.3*
+%{_mandir}/man3/guestfs-examples.3*
+%{_mandir}/man3/libguestfs.3*
+%{_includedir}/guestfs.h
+%{_libdir}/pkgconfig/libguestfs.pc
+
+
+%if !0%{?rhel}
+%files forensics
+%{_libdir}/guestfs/supermin.d/zz-packages-forensics
+%endif
+
+%if !0%{?rhel}
+%files gfs2
+%{_libdir}/guestfs/supermin.d/zz-packages-gfs2
+%endif
+
+%if !0%{?rhel}
+%ifnarch ppc
+%files hfsplus
+%{_libdir}/guestfs/supermin.d/zz-packages-hfsplus
+%endif
+%endif
+
+%files rsync
+%{_libdir}/guestfs/supermin.d/zz-packages-rsync
+
+%files rescue
+%{_libdir}/guestfs/supermin.d/zz-packages-rescue
+%{_bindir}/virt-rescue
+%{_mandir}/man1/virt-rescue.1*
+
+%if !0%{?rhel}
+%files ufs
+%{_libdir}/guestfs/supermin.d/zz-packages-ufs
+%endif
+
+%files xfs
+%{_libdir}/guestfs/supermin.d/zz-packages-xfs
+
+%if !0%{?rhel}
+%ifnarch %{arm} aarch64 s390 s390x riscv64
+%files zfs
+%{_libdir}/guestfs/supermin.d/zz-packages-zfs
+%endif
+%endif
+
+
+%files inspect-icons
+# no files
+
+
+%files bash-completion
+%dir %{_datadir}/bash-completion/completions
+%{_datadir}/bash-completion/completions/guestfish
+%{_datadir}/bash-completion/completions/guestmount
+%{_datadir}/bash-completion/completions/guestunmount
+%{_datadir}/bash-completion/completions/libguestfs-test-tool
+%{_datadir}/bash-completion/completions/virt-copy-in
+%{_datadir}/bash-completion/completions/virt-copy-out
+%{_datadir}/bash-completion/completions/virt-rescue
+%{_datadir}/bash-completion/completions/virt-tar-in
+%{_datadir}/bash-completion/completions/virt-tar-out
+
+
+%files -n ocaml-%{name}
+%{_libdir}/ocaml/guestfs
+%exclude %{_libdir}/ocaml/guestfs/*.a
+%exclude %{_libdir}/ocaml/guestfs/*.cmxa
+%exclude %{_libdir}/ocaml/guestfs/*.cmx
+%exclude %{_libdir}/ocaml/guestfs/*.mli
+%{_libdir}/ocaml/stublibs/dllmlguestfs.so
+%{_libdir}/ocaml/stublibs/dllmlguestfs.so.owner
+
+
+%files -n ocaml-%{name}-devel
+%doc ocaml/examples/*.ml ocaml/html
+%{_libdir}/ocaml/guestfs/*.a
+%{_libdir}/ocaml/guestfs/*.cmxa
+%{_libdir}/ocaml/guestfs/*.cmx
+%{_libdir}/ocaml/guestfs/*.mli
+%{_mandir}/man3/guestfs-ocaml.3*
+
+
+%files -n perl-Sys-Guestfs
+%doc perl/examples/*.pl
+%{perl_vendorarch}/*
+%{_mandir}/man3/Sys::Guestfs.3pm*
+%{_mandir}/man3/guestfs-perl.3*
+
+
+%files -n python3-%{name}
+%doc python/examples/*.py
+%{python3_sitearch}/libguestfsmod*.so
+%{python3_sitearch}/guestfs.py
+%{python3_sitearch}/__pycache__/guestfs*.py*
+%{_mandir}/man3/guestfs-python.3*
+
+
+%files -n ruby-%{name}
+%doc ruby/examples/*.rb
+%doc ruby/doc/site/*
+%{ruby_vendorlibdir}/guestfs.rb
+%{ruby_vendorarchdir}/_guestfs.so
+%{_mandir}/man3/guestfs-ruby.3*
+
+
+%files -n php-%{name}
+%doc php/README-PHP
+%dir %{_sysconfdir}/php.d
+%{_sysconfdir}/php.d/guestfs_php.ini
+%{_libdir}/php/modules/guestfs_php.so
+
+
+%files -n lua-guestfs
+%doc lua/examples/*.lua
+%doc lua/examples/LICENSE
+%{_libdir}/lua/*/guestfs.so
+%{_mandir}/man3/guestfs-lua.3*
+
+
+%files gobject
+%{_libdir}/libguestfs-gobject-1.0.so.0*
+%{_libdir}/girepository-1.0/Guestfs-1.0.typelib
+
+
+%files gobject-devel
+%{_libdir}/libguestfs-gobject-1.0.so
+%{_includedir}/guestfs-gobject.h
+%dir %{_includedir}/guestfs-gobject
+%{_includedir}/guestfs-gobject/*.h
+%{_datadir}/gir-1.0/Guestfs-1.0.gir
+%{_libdir}/pkgconfig/libguestfs-gobject-1.0.pc
+%{_mandir}/man3/guestfs-gobject.3*
+
+
+%if !0%{?rhel}
+%files vala
+%{_datadir}/vala/vapi/libguestfs-gobject-1.0.deps
+%{_datadir}/vala/vapi/libguestfs-gobject-1.0.vapi
+%endif
+
+
+%ifarch %{golang_arches}
+%files -n golang-guestfs
+%doc golang/examples/*.go
+%doc golang/examples/LICENSE
+%{_datadir}/gocode/src/libguestfs.org
+%{_mandir}/man3/guestfs-golang.3*
+%endif
+
+
+%files man-pages-ja
+%lang(ja) %{_mandir}/ja/man1/*.1*
+%lang(ja) %{_mandir}/ja/man3/*.3*
+%lang(ja) %{_mandir}/ja/man5/*.5*
+
+
+%files man-pages-uk
+%lang(uk) %{_mandir}/uk/man1/*.1*
+%lang(uk) %{_mandir}/uk/man3/*.3*
+%lang(uk) %{_mandir}/uk/man5/*.5*
+
+
+%changelog
+* Thu Dec 14 2023 Richard W.M. Jones <rjones@redhat.com> - 1:1.50.1-7
+- Add --key all:... selector
+ resolves: RHEL-19367
+- Add miscellaneous other upstream fixes since 1.50.1
+
+* Wed Jun 07 2023 Laszlo Ersek <lersek@redhat.com> - 1:1.50.1-6
+- enable the ".gdb_index" section in the Perl bindings debug info
+ resolves: rhbz#2209279
+
+* Tue May 23 2023 Laszlo Ersek <lersek@redhat.com> - 1:1.50.1-5
+- let "guestfish -i" recognize "--key /dev/mapper/VG-LV:key:password"
+- reenable quickcheck; we now use "-cpu max" (upstream 30f74f38bd6e)
+ resolves: rhbz#2209279
+
+* Thu May 04 2023 Richard W.M. Jones <rjones@redhat.com> - 1:1.50.1-4
+- Rebase libguestfs to 1.50.1
+ resolves: rhbz#2168625
+- Use q35 machine type for libguestfs appliance
+ resolves: rhbz#2168578
+- Run SELinux relabelling in parallel [for virt-v2v]
+ resolves: rhbz#2190276
+
+* Fri Dec 02 2022 Richard W.M. Jones <rjones@redhat.com> - 1:1.48.4-4
+- New API: guestfs_inspect_get_build_id
+- Add support for detecting Windows >= 10, returned through osinfo
+ resolves: rhbz#2012658
+
+* Tue Nov 08 2022 Richard W.M. Jones <rjones@redhat.com> - 1:1.48.4-3
+- Move libguestfs-make-fixed-appliance to main package
+ resolves: rhbz#2140695
+
+* Wed Aug 10 2022 Richard W.M. Jones <rjones@redhat.com> - 1:1.48.4-2
+- Rebase to new stable branch version 1.48.4
+ resolves: rhbz#2059285
+- Disable 5-level page tables when using -cpu max
+ resolves: rhbz#2084568
+- SELinux relabelling should not stop on ext4 immutable bits
+ resolves: rhbz#1794518
+- Ignore "iface" in add-drive variants
+ resolves: rhbz#1844341
+- Lift protocol limit on guestfs_readdir()
+ resolves: rhbz#1674392
+- Check return values from librpm calls (2089623)
+- Document limitations of encrypted RBD disks
+ resolves: rhbz#2033247
+- Fix lvm-set-filter failed in guestfish with the latest lvm2 package
+ resolves: rhbz#1965941
+- Enable PHP bindings
+ resolves: rhbz#2097718
+- Add support for Clevis & Tang
+ resolves: rhbz#1809453
+- Fix CVE-2022-2211 Denial of Service in --key parameter
+ resolves: rhbz#2101281
+- Add clevis-luks to BRs, required for Clevis & Tang
+ related: rhbz#1809453
+- Add zstd support to guestfs_file_architecture
+ resolves: rhbz#2117004
+
+* Thu Mar 17 2022 Richard W.M. Jones <rjones@redhat.com> - 1:1.48.0-2
+- Disable signature checking in librpm
+ resolves: rhbz#2065172
+
+* Mon Mar 14 2022 Richard W.M. Jones <rjones@redhat.com> - 1:1.48.0-1
+- Rebase to new stable branch version 1.48.0
+ resolves: rhbz#2059285
+
+* Thu Dec 23 2021 Laszlo Ersek <lersek@redhat.com> - 1:1.46.1-2
+- Add detection support for Rocky Linux
+ resolves: rhbz#2030709
+- Resolve conflict between manual and libvirt-assigned PCI addresses
+ resolves: rhbz#2034160
+
+* Thu Dec 09 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.46.1-1
+- Rebase to new stable branch version 1.46.1
+ resolves: rhbz#2011711
+- Add --enable-appliance-format-auto
+- Add support for Kylin
+- Document lazy-counters setting cannot be changed in XFS version 5
+ resolves: rhbz#2025944, rhbz#1995391, rhbz#2024022
+- Require libvirt-daemon-driver-storage-core
+ resolves: rhbz#2018358
+- Fix usage of strerror_r which caused corrupted error messages
+ resolves: rhbz#2030396
+
+* Tue Sep 14 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-14
+- Specify backing format for qemu 6.1
+ resolves: rhbz#1999419
+
+* Mon Sep 13 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-13
+- Remove use of sga
+ resolves: rhbz#2002325
+
+* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1:1.45.6-12
+- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
+ Related: rhbz#1991688
+
+* Fri Aug 06 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-11
+- Fix: syslinux: failed to create ldlinux.sys
+ resolves: rhbz#1990720, rhbz#1950627
+- Fix license files.
+- Move appliance to separate subpackage
+ resolves: rhbz#1989514
+
+* Mon Jul 26 2021 Jeff Law <jlaw@tachyum.com> - 1:1.45.6-10
+- Re-enable LTO
+
+* Tue Jun 29 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-9
+- RHEL 9 patch for openssl missing configuration file
+ https://bugzilla.redhat.com/show_bug.cgi?id=1977214#c13
+
+* Thu Jun 24 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-8
+- Remove Suggests for unsupported qemu drivers in RHEL (RHBZ#1975703)
+
+* Wed Jun 23 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-7
+- Bump and rebuild
+ resolves: rhbz#1975315
+
+* Sat Jun 12 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-6
+- Depend on hivex-libs instead of hivex.
+
+* Wed Jun 2 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-3
+- Add gating tests (for RHEL 9)
+
+* Tue Jun 01 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-2
+- Depend on rpm-libs >= 4.16.1.3 (RHBZ#1966541).
+
+* Thu May 27 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.6-1
+- New upstream version 1.45.6.
+- Remove RHEL 9-only -cpu hack now that libvirt >= 7.1.0 is available.
+
+* Fri Apr 09 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.5-1
+- New upstream development version 1.45.5.
+
+* Sat Apr 03 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.4-1
+- New upstream version 1.45.4.
+
+* Wed Mar 31 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.3-6
+- Don't require genisoimage or xorriso for the appliance.
+- Add workaround for broken "file" utility in Rawhide (RHBZ#1945122).
+
+* Tue Mar 30 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.3-4
+- Add downstream (RHEL-only) patches (RHBZ#1931724).
+- Switch from genisoimage to xorriso.
+
+* Mon Mar 29 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.3-2
+- New upstream release 1.45.3.
+- Add proper dependencies on librpm, remove BDB.
+
+* Fri Mar 26 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.2-2
+- Remove no longer needed requires on libguestfs-tools-c.
+
+* Tue Mar 23 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.2-1
+- New upstream version 1.45.2.
+- This drops the tools. Now packaged as guestfs-tools.
+- guestfish, guestmount, guestunmount now packaged with libguestfs.
+- virt-rescue now packaged in libguestfs-rescue.
+- Drop ChangeLog file.
+- Remove virt-dib in RHEL 9.
+- Depend on PCRE2 instead of PCRE.
+
+* Thu Mar 18 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.1-6
+- Drop dependency on perl(Sys::Virt).
+- Fix -cpu max and require libvirt >= 7.1.0.
+
+* Wed Mar 10 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.1-4
+- Drop Requires: libvirt-daemon-kvm, pulls in the whole of qemu and subpkgs.
+
+* Mon Mar 8 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.1-3
+- Bump and rebuild for ocaml-gettext update.
+
+* Fri Mar 5 2021 Remi Collet <remi@fedoraproject.org> - 1:1.45.1-2
+- rebuild for https://fedoraproject.org/wiki/Changes/php80
+- add trivial patch to fix build with PHP 8
+
+* Wed Mar 3 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.1-1
+- New upstream version 1.45.1.
+
+* Tue Mar 2 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.44.0-8
+- OCaml 4.12.0 build
+- Fixes for OCaml 4.12.
+
+* Wed Feb 17 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.44.0-6
+- Remove jfsutils (dead upstream since 2011).
+- Remove nilfs (dead upstream since 2015).
+- Remove reiserfs (dead upstream since 2006).
+
+* Tue Feb 09 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.44.0-5
+- Remove gfs2-utils dependency in RHEL 9.
+
+* Thu Jan 28 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.44.0-4
+- ELN has full-fat qemu (not qemu-kvm).
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1:1.44.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Thu Jan 07 2021 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1:1.44.0-2
+- F-34: rebuild against ruby 3.0
+
+* Wed Jan 06 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.44.0-1
+- New upstream stable version 1.44.0.
+
+* Tue Jan 05 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.43.4-1
+- New upstream version 1.43.4.
+
+* Mon Jan 04 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.43.3-4
+- Drop explicit deps on perl(Sys::Virt) and perl(Win::Hivex).
+
+* Wed Dec 02 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.43.3-3
+- Unify Fedora and RHEL spec files.
+
+* Tue Dec 01 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.43.3-2
+- New upstream version 1.43.3.
+- Disable LTO because of memory running out on ARMv7.
+
+* Mon Sep 21 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.43.2-1
+- New upstream version 1.43.2.
+- Replace libvirt-daemon-qemu with libvirt-daemon-kvm.
+
+* Tue Sep 01 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.43.1-7
+- OCaml 4.11.1 rebuild
+
+* Fri Aug 21 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.43.1-6
+- OCaml 4.11.0 rebuild
+
+* Mon Aug 10 2020 Merlin Mathesius <mmathesi@redhat.com> - 1.43.1-5
+- Use ExclusiveArch: %%{kernel_arches}
+
+* Fri Jul 31 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.43.1-4
+- Disable then reenable LTO.
+ https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/ULGH5JYL7MHKDKTINJLOEN2QG6LOHWH7/
+
+* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:1.43.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon Jul 6 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.43.1-1
+- New development branch 1.43.
+- Remove upstream patches.
+
+* Thu Jun 25 2020 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.42.0-8
+- Perl 5.32 rebuild
+
+* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 1:1.42.0-7
+- Rebuilt for Python 3.9
+
+* Wed May 06 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.42.0-6
+- Fix path to libguestfs appliance.
+
+* Tue May 05 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.42.0-5
+- OCaml 4.11.0+dev2-2020-04-22 rebuild
+
+* Wed Apr 22 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.42.0-4
+- OCaml 4.11.0 pre-release attempt 2
+
+* Sat Apr 04 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.42.0-3
+- Update all OCaml dependencies for RPM 4.16.
+
+* Thu Mar 12 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.42.1-1
+- Enable NTFS-3g system compression.
+
+* Mon Mar 09 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.42.0-1
+- New upstream stable version 1.42.0.
+- Drop the benchmarking subpackage: moved to a new package upstream.
+- Enable Vala bindings.
+
+* Thu Feb 27 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.41.8-9
+- OCaml 4.10.0 final.
+
+* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:1.41.8-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Mon Jan 20 2020 Vít Ondruch <vondruch@redhat.com> - 1:1.41.8-7
+- Another rebuild against Ruby 2.7.
+
+* Sun Jan 19 2020 Richard W.M. Jones <rjones@redhat.com> - 1:1.41.8-5
+- OCaml 4.10.0+beta1 rebuild.
+
+* Sat Jan 18 2020 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1:1.41.8-4
+- F-32: rebuild against ruby27
+
+* Fri Dec 06 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.41.8-3
+- OCaml 4.09.0 (final) rebuild.
+
+* Wed Nov 27 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.41.8-2
+- Use gpgverify macro instead of explicit gpgv2 command.
+
+* Tue Nov 19 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.41.8-1
+- New upstream version 1.41.8.
+- virt-v2v is now in a separate project.
+- Drop erlang bindings.
+
+* Fri Oct 11 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.41.5-1
+- New upstream version 1.41.5.
+
+* Fri Oct 04 2019 Remi Collet <remi@remirepo.net> - 1:1.41.4-2
+- rebuild for https://fedoraproject.org/wiki/Changes/php74
+
+* Tue Sep 17 2019 Pino Toscano <ptoscano@redhat.com> - 1:1.41.4-2
+- Drop virt-p2v (virt-p2v-maker subpackage), which is now built from
+ its own source.
+
+* Mon Sep 02 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.41.4-1
+- New upstream version 1.41.4.
+
+* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 1:1.40.2-10
+- Rebuilt for Python 3.8
+
+* Fri Aug 16 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.40.2-9
+- OCaml 4.08.1 (final) rebuild.
+
+* Thu Aug 01 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.40.2-8
+- OCaml 4.08.1 (rc2) rebuild.
+
+* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1:1.40.2-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+- Disable the package entirely on i686 because there is no kernel
+ https://fedoraproject.org/wiki/Changes/Stop_Building_i686_Kernels
+
+* Fri May 31 2019 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.40.2-6
+- Perl 5.30 rebuild
+
+* Fri May 31 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.40.2-5
+- Add proposed patch for Python 3.8 (RHBZ#1705482).
+
+* Mon Mar 18 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.40.2-4
+- Remove Java bindings.
+ https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/CW4XMOIKMNRRPAZ4H2ER7VPBY6YV2ODL/#YHTZ7IGVTKPWCBOY5C6UW7BMX7F35R5Q
+
+* Thu Mar 07 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.40.2-3
+- Remove Python 2 bindings completely.
+ https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal
+
+* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1:1.40.2-2
+- Rebuild for readline 8.0
+
+* Fri Feb 08 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.40.2-1
+- New upstream version 1.40.2.
+
+* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1:1.40.1-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Tue Jan 22 2019 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1:1.40.1-4
+- F-30: rebuild against ruby26
+
+* Mon Jan 21 2019 David Abdurachmanov <david.abdurachmanov@gmail.com> - 1:1.40.1-3
+- Disable ZFS for RISC-V (riscv64)
+
+* Thu Jan 17 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.40.1-2
+- nbdkit Python3 plugin is called "python3" in Fedora, adjust configure line.
+
+* Thu Jan 17 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.40.1-1
+- New upstream version 1.40.1.
+- Remove patch which is now upstream.
+- Add new virt-v2v man pages.
+
+* Mon Jan 14 2019 Björn Esser <besser82@fedoraproject.org> - 1:1.39.11-4
+- Rebuilt for libcrypt.so.2 (#1666033)
+
+* Tue Jan 08 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.11-3
+- Small fix for qemu behaviour (RHBZ#1664318).
+
+* Fri Oct 12 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.11-2
+- lib: Add Recommends for libvirt-daemon-config-network so that networking
+ works out of the box.
+
+* Sat Sep 22 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.11-1
+- New upstream version 1.39.11.
+
+* Fri Sep 21 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.10-1
+- New upstream version 1.39.10.
+
+* Fri Aug 31 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.9-1
+- New upstream version 1.39.9.
+
+* Fri Jul 27 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.8-1
+- New upstream version 1.39.8.
+
+* Thu Jul 26 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.7-3
+- v2v: Recommends nbdkit-plugin-vddk for -it vddk mode.
+
+* Tue Jul 24 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.7-2
+- Rebuild for unannounced soname bump in libconfig.
+
+* Sat Jul 14 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.7-1
+- New upstream version 1.39.7.
+- v2v/TODO was removed upstream.
+
+* Fri Jul 13 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.6-10
+- v2v: Recommends nbdkit and the Python 3 plugin.
+
+* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1:1.39.6-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Wed Jul 11 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.6-7
+- OCaml 4.07.0 (final) rebuild.
+
+* Tue Jul 10 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.6-6
+- Update PHP dependencies.
+
+* Thu Jul 05 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.6-5
+- Remove ldconfig
+ https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/SU3LJVDZ7LUSJGZR5MS72BMRAFP3PQQL/
+- BR on python-unversioned-command
+ https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_package
+
+* Tue Jul 03 2018 Petr Pisar <ppisar@redhat.com> - 1:1.39.6-4
+- Perl 5.28 rebuild
+
+* Mon Jul 02 2018 Miro Hrončok <mhroncok@redhat.com> - 1:1.39.6-3
+- Rebuilt for Python 3.7
+
+* Fri Jun 29 2018 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.39.6-2
+- Perl 5.28 rebuild
+
+* Fri Jun 29 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.6-1
+- New upstream version 1.39.6.
+- Add new bash-completion script for libguestfs-test-tool.
+
+* Wed Jun 20 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.5-5
+- Bump release and rebuild.
+
+* Wed Jun 20 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.5-4
+- Bump release and rebuild.
+
+* Wed Jun 20 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.5-3
+- OCaml 4.07.0-rc1 rebuild.
+
+* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 1:1.39.5-2
+- Rebuilt for Python 3.7
+
+* Wed May 23 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.5-1
+- New upstream version 1.39.5.
+
+* Wed May 02 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.4-1
+- New upstream version 1.39.4.
+
+* Sun Apr 22 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.3-1
+- New upstream version 1.39.3.
+- Remove upstream patch.
+
+* Tue Apr 10 2018 Iryna Shcherbina <shcherbina.iryna@gmail.com> - 1:1.39.2-3
+- Update Python 2 dependency declarations to new packaging standards
+ (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
+
+* Thu Mar 29 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.2-2
+- Add patch to fix detection of qemu mandatory locking.
+
+* Thu Mar 29 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.2-1
+- New upstream version 1.39.2.
+
+* Tue Mar 13 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.1-1
+- New upstream version 1.39.1.
+
+* Fri Feb 09 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.38.0-1
+- New upstream version 1.38.0.
+- Enable tarball signing since we are on a stable branch.
+- Fix Source URLs.
+
+* Tue Feb 06 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.37-1
+- New upstream version 1.37.37.
+
+* Thu Jan 25 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.36-1
+- New upstream version 1.37.36.
+- Unbreak the linker.
+
+* Sat Jan 20 2018 Björn Esser <besser82@fedoraproject.org> - 1:1.37.35-3
+- Rebuilt for switch to libxcrypt
+
+* Thu Jan 11 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.35-2
+- Add BR rpcgen, libtirpc-devel and rebuild against updated Ruby.
+
+* Sun Dec 10 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.35-1
+- New upstream version 1.37.35.
+- Remove upstream patches.
+- Add virt-builder-repository and man page.
+
+* Thu Dec 7 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.34-4
+- Remove <shareable/> for libvirt >= 3.10.
+
+* Sun Dec 3 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.34-3
+- Fix locking on NBD drives.
+
+* Fri Nov 17 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.34-2
+- OCaml 4.06.0 rebuild.
+
+* Fri Nov 17 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.34-1
+- New upstream version 1.37.34.
+
+* Thu Oct 19 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.31-1
+- New upstream version 1.37.31.
+
+* Tue Oct 10 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.29-1
+- New upstream version 1.37.29.
+
+* Thu Oct 05 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.28-2
+- Add libguestfs-ufs (BSD) subpackage.
+
+* Thu Sep 28 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.28-1
+- New upstream version 1.37.28.
+
+* Sat Sep 23 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.27-1
+- New upstream version 1.37.27.
+
+* Sun Sep 17 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.26-1
+- New upstream version 1.37.26.
+
+* Sat Sep 16 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.25-1
+- New upstream version 1.37.25.
+
+* Tue Sep 05 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.22-1
+- New upstream version 1.37.22.
+
+* Sat Aug 19 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.21-2
+- Disable zfs subpackage on s390, s390x.
+
+* Wed Aug 09 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.21-1
+- New upstream version 1.37.21.
+
+* Tue Aug 08 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.20-2
+- OCaml 4.05.0 rebuild.
+
+* Fri Aug 04 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.20-1
+- New upstream version 1.37.20.
+
+* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:1.37.19-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Sat Jul 29 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.19-1
+- New upstream version 1.37.19.
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:1.37.18-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Tue Jul 18 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.18-1
+- New upstream version 1.37.18.
+
+* Tue Jul 11 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.17-2
+- New upstream version 1.37.17.
+- Drop libguestfs-gobject-doc because gtk-doc is no longer provided upstream.
+- Add new man page guestfs-gobject(3) to libguestfs-gobject-devel.
+
+* Mon Jun 26 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.16-2
+- OCaml 4.04.2 rebuild.
+
+* Fri Jun 23 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.16-1
+- New upstream version 1.37.16.
+
+* Tue Jun 06 2017 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.37.14-3
+- Perl 5.26 rebuild
+
+* Mon May 22 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.14-2
+- Bump release and rebuild for ppc64, ppc64le and s390x.
+
+* Fri May 19 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.14-1
+- New upstream version 1.37.14.
+
+* Fri May 12 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.13-2
+- OCaml 4.04.1 rebuild.
+
+* Mon May 08 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.13-1
+- New upstream version 1.37.13.
+
+* Wed Apr 26 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.12-1
+- New upstream version 1.37.12.
+
+* Sat Apr 15 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.11-1
+- New upstream version 1.37.11.
+
+* Wed Apr 12 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.10-1
+- New upstream version 1.37.10.
+
+* Sat Apr 08 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.9-1
+- New upstream version 1.37.9.
+
+* Fri Mar 31 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.8-1
+- New upstream version 1.37.8.
+
+* Fri Mar 24 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.7-1
+- New upstream version 1.37.7.
+
+* Mon Mar 20 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.6-1
+- New upstream version 1.37.6.
+
+* Tue Mar 14 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.2-1
+- New upstream version 1.37.2.
+
+* Tue Mar 07 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.1-1
+- New upstream version 1.37.1.
+
+* Tue Feb 28 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.37.0-1
+- New upstream version 1.37.0.
+
+* Fri Feb 24 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.28-1
+- New upstream version 1.35.28.
+
+* Thu Feb 23 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.27-1
+- New upstream version 1.35.27.
+
+* Wed Feb 22 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.26-1
+- New upstream version 1.35.26.
+
+* Wed Feb 15 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.25-1
+- New upstream version 1.35.25.
+
+* Sat Feb 11 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.24-1
+- New upstream version 1.35.24.
+
+* Sat Feb 11 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.23-1
+- New upstream version 1.35.23.
+
+* Fri Feb 10 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.22-1
+- New upstream version 1.35.22.
+
+* Wed Feb 08 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.21-1
+- New upstream version 1.35.21.
+
+* Thu Feb 02 2017 Pino Toscano <ptoscano@redhat.com> - 1:1.35.20-2
+- Avoid spurious dependencies on kernel-debug etc.
+
+* Sat Jan 28 2017 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.20-1
+- New upstream version 1.35.20.
+
+* Fri Jan 13 2017 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1:1.35.19-4
+- Rebuild again for f26-ruby24 sidetag
+
+* Thu Jan 12 2017 Igor Gnatenko <ignatenko@redhat.com> - 1:1.35.19-3
+- Rebuild for readline 7.x
+
+* Thu Jan 12 2017 Vít Ondruch <vondruch@redhat.com> - 1:1.35.19-2
+- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_2.4
+
+* Sat Dec 24 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.19-1
+- New upstream version 1.35.19.
+
+* Thu Dec 22 2016 Miro Hrončok <mhroncok@redhat.com> - 1:1.35.18-3
+- Second rebuild for Python 3.6
+
+* Mon Dec 19 2016 Miro Hrončok <mhroncok@redhat.com> - 1:1.35.18-2
+- Rebuild for Python 3.6
+
+* Thu Dec 15 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.18-1
+- New upstream version 1.35.18.
+
+* Sun Dec 11 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.17-1
+- New upstream version 1.35.17.
+
+* Mon Nov 14 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.14-4
+- Use _isa macro on dependencies (except for noarch packages).
+ https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/QSQ7CWSFZ3CRHH7DDGAWVUCB2KFC3OWQ/
+
+* Fri Nov 11 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.14-3
+- Drop libguestfs-live-service subpackage.
+- Remove setting _hardened_build since it is now the default in Fedora.
+- Some tidying up of the description section.
+- Require Augeas 1.7.0.
+
+* Sat Nov 05 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.14-2
+- Rebuild for OCaml 4.04.0.
+
+* Wed Oct 26 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.14-1
+- New upstream version 1.35.14.
+- Add dbus-devel BR for virt-p2v.
+
+* Fri Oct 21 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.9-1
+- New upstream version 1.35.9.
+
+* Fri Oct 21 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.8-2
+- Add 'Suggests: perl' for virt-edit and virt-customize.
+
+* Wed Oct 12 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.8-1
+- New upstream version 1.35.8.
+
+* Thu Oct 06 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.6-2
+- Split off virt-p2v into virt-p2v-maker so it doesn't depend on X
+ (RHBZ#1382275).
+
+* Fri Sep 23 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.6-1
+- New upstream version 1.35.6.
+
+* Mon Sep 12 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.5-1
+- New upstream version 1.35.5.
+
+* Sat Sep 03 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.4-1
+- New upstream version 1.35.4.
+
+* Thu Sep 01 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.35.3-1
+- New upstream version 1.35.3.
+
+* Fri Aug 05 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.49-1
+- New upstream version 1.33.49.
+
+* Wed Jul 27 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.46-1
+- New upstream version 1.33.46.
+
+* Sat Jul 23 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.45-1
+- New upstream version 1.33.45.
+
+* Tue Jul 19 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.44-1
+- New upstream version 1.33.44.
+
+* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:1.33.43-3
+- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
+
+* Fri Jul 15 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.43-2
+- Fix missing dependency on policycoreutils.
+
+* Fri Jul 15 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.43-1
+- New upstream version 1.33.43.
+
+* Wed Jul 13 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.42-2
+- Don't install libtool wrapper scripts in benchmarking subpkg.
+
+* Sat Jul 09 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.42-1
+- New upstream version 1.33.42.
+
+* Wed Jul 06 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.41-1
+- New upstream version 1.33.41.
+
+* Fri Jul 01 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.40-1
+- New upstream version 1.33.40.
+
+* Fri Jun 24 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.39-1
+- New upstream version 1.33.39.
+
+* Tue Jun 21 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.38-2
+- Bump release and rebuild.
+
+* Sun Jun 19 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.38-1
+- New upstream version 1.33.38.
+
+* Fri Jun 17 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.37-1
+- New upstream version 1.33.37.
+
+* Mon Jun 13 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.36-1
+- New upstream version 1.33.36.
+
+* Mon Jun 06 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.35-1
+- New upstream version 1.33.35.
+
+* Fri Jun 03 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.34-1
+- New upstream version 1.33.34.
+- Now building virt-p2v with gtk3 not gtk2.
+
+* Fri May 27 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.32-1
+- New upstream version 1.33.32.
+
+* Mon May 23 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.30-1
+- New upstream version 1.33.30.
+
+* Thu May 19 2016 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.33.29-2
+- Perl 5.24 re-rebuild of bootstrapped packages
+
+* Wed May 18 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.29-1
+- New upstream version 1.33.29.
+
+* Tue May 17 2016 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.33.28-2
+- Perl 5.24 rebuild
+
+* Mon May 09 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.28-1
+- New upstream version 1.33.28.
+
+* Wed May 04 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.27-1
+- New upstream version 1.33.27.
+
+* Tue May 03 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.26-1
+- New upstream version 1.33.26.
+
+* Sun May 01 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.24-1
+- New upstream version 1.33.24.
+
+* Mon Apr 25 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.23-1
+- New upstream version 1.33.23.
+
+* Fri Apr 15 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.20-1
+- New upstream version 1.33.20.
+
+* Tue Apr 12 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.19-2
+- New upstream version 1.33.19.
+- Build python3 in a different directory.
+
+* Fri Apr 08 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.18-5
+- Disable tests on 32 bit arm because of libvirt RHBZ#1325085.
+
+* Thu Apr 07 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.18-4
+- Disable tests on POWER because of RHBZ#1293024.
+- Enable tests on 32 bit arm because RHBZ#1303147 supposedly fixed.
+- Explicitly depend on rubygem-rdoc, needed to build Ruby docs.
+
+* Tue Apr 05 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.18-1
+- New upstream version 1.33.18.
+
+* Thu Mar 31 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.16-2
+- Add code to verify tarball signatures (only enabled on stable branches).
+
+* Fri Mar 25 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.16-1
+- New upstream version 1.33.16.
+
+* Thu Mar 17 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.15-1
+- New upstream version 1.33.15.
+
+* Mon Mar 07 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.14-1
+- New upstream version 1.33.14.
+
+* Fri Feb 26 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.13-1
+- New upstream version 1.33.13.
+
+* Thu Feb 18 2016 Orion Poplawski <orion@cora.nwra.com> - 1:1.33.12-2
+- Filter perl provides
+
+* Fri Feb 12 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.12-1
+- New upstream version 1.33.12.
+
+* Wed Feb 10 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.11-1
+- New upstream version 1.33.11.
+
+* Mon Feb 08 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.10-2
+- New upstream version 1.33.10.
+- Add non-upstream patch to fix 'ssh root@remote virt-xyz ...'
+
+* Fri Feb 05 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.9-1
+- New upstream version 1.33.9.
+
+* Wed Feb 03 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.8-1
+- New upstream version 1.33.8.
+
+* Fri Jan 29 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.7-1
+- New upstream version 1.33.7.
+
+* Thu Jan 28 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.6-1
+- New upstream version 1.33.6.
+
+* Tue Jan 26 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.5-1
+- New upstream version 1.33.5.
+
+* Fri Jan 22 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.4-1
+- New upstream version 1.33.4.
+- Add guestfs-building(1), new man page.
+
+* Thu Jan 21 2016 Richard Jones <rjones@redhat.com> - 1:1.33.1-3
+- Remove useless python*_site* macros.
+- Package python3 pyo files if present.
+
+* Sat Jan 16 2016 Richard Jones <rjones@redhat.com> - 1:1.33.1-2
+- Rebuild for updated Ruby in Rawhide.
+
+* Mon Jan 11 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.1-1
+- New upstream version 1.33.1.
+
+* Thu Jan 07 2016 Richard W.M. Jones <rjones@redhat.com> - 1:1.33.0-1
+- New upstream development version 1.33.0.
+
+* Wed Dec 16 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.30-1
+- New upstream version 1.31.30.
+
+* Sun Dec 06 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.29-1
+- New upstream version 1.31.29.
+
+* Wed Nov 25 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.28-1
+- New upstream version 1.31.28.
+
+* Fri Nov 20 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.27-1
+- New upstream version 1.31.27.
+- Add new tool: virt-v2v-copy-to-local.
+
+* Sat Nov 14 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.26-1
+- New upstream version 1.31.26.
+
+* Wed Nov 11 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.25-3
+- Drop __pycache__/*.pyo files, as these are not generated by python 3.5.
+
+* Tue Nov 10 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:1.31.25-2
+- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5
+
+* Fri Nov 06 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.25-1
+- New upstream version 1.31.25.
+
+* Fri Nov 06 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.24-2
+- Rename python-libguestfs -> python2-libguestfs.
+ See: https://fedoraproject.org/wiki/Packaging:Python
+
+* Thu Nov 05 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.24-1
+- New upstream version 1.31.24.
+
+* Sat Oct 31 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.23-1
+- New upstream version 1.31.23.
+
+* Fri Oct 30 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.22-1
+- New upstream version 1.31.22.
+- Add new manual pages guestfs-{hacking,internals,security}(1).
+
+* Sun Oct 25 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.20-1
+- New upstream version 1.31.20.
+- Perl bindings switched from ExtUtils::MakeMaker to Module::Build.
+
+* Wed Oct 21 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.19-1
+- New upstream version 1.31.19.
+
+* Tue Oct 20 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.18-1
+- New upstream version 1.31.18.
+
+* Thu Oct 15 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.17-1
+- New upstream version 1.31.17.
+
+* Tue Oct 13 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.16-2
+- Add hack to supermin to get builds working temporarily.
+
+* Fri Oct 09 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.16-1
+- New upstream version 1.31.16.
+
+* Fri Oct 09 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.15-1
+- New upstream version 1.31.15.
+
+* Wed Oct 07 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.13-1
+- New upstream version 1.31.13.
+
+* Tue Oct 06 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.11-2
+- BR ocamldoc so that we build the OCaml documentation.
+
+* Mon Oct 05 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.11-1
+- New upstream version 1.31.11.
+
+* Thu Oct 01 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.9-4
+- New upstream version 1.31.9.
+- Include patch which fixes 'make install' in OCaml directory.
+- Switch to using RPM autopatch directive.
+- Fix a few RPM "macro expanded in comment" warnings.
+- Include OCaml bindings documentation in ocaml-libguestfs-devel package.
+- Add opensuse virt-builder files.
+
+* Tue Sep 29 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.8-1
+- New upstream version 1.31.8.
+
+* Mon Sep 21 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.7-2
+- Remove tests, except sanity check. Testing is now done after the
+ package has been built.
+
+* Sun Sep 20 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.7-1
+- New upstream version 1.31.7.
+
+* Sat Sep 12 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.6-1
+- New upstream version 1.31.6.
+
+* Tue Sep 08 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.5-1
+- New upstream version 1.31.5.
+
+* Fri Sep 04 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.4-1
+- New upstream version 1.31.4.
+
+* Sat Aug 29 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.3-1
+- New upstream version 1.31.3.
+- Disable tests on armv7 because they take nearly 24 hours to run.
+
+* Thu Aug 13 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.2-1
+- New upstream version 1.31.2.
+- Enable tests on i686, arm and aarch64.
+- Remove patch which is now upstream.
+
+* Fri Aug 7 2015 Pino Toscano <ptoscano@redhat.com> - 1:1.31.1-3
+- Make libguestfs-tools-c recommend libguestfs-xfs, as the default filesystem
+ is XFS so we want tools to work on XFS by default.
+- Remove version suffix from the docdir mentioned in the installed README.
+
+* Sun Aug 2 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.1-2
+- Skip virt-sysprep test.
+
+* Fri Jul 31 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.31.1-1
+- New upstream version 1.31.1.
+
+* Tue Jul 28 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.30.0-2
+- OCaml 4.02.3 rebuild.
+
+* Tue Jul 21 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.30.0-1
+- New upstream version 1.30.0.
+
+* Thu Jul 09 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.50-1
+- New upstream version 1.29.50.
+- Add virt-dib.
+
+* Thu Jul 02 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.49-1
+- New upstream version 1.29.49.
+
+* Tue Jun 30 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.48-1
+- New upstream version 1.29.48.
+
+* Thu Jun 18 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.47-2
+- Bump release and rebuild.
+
+* Thu Jun 18 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.47-1
+- New upstream version 1.29.47.
+- New tool: virt-get-kernel.
+- Skip xfs_admin tests because of RHBZ#1233220.
+
+* Wed Jun 17 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.46-4
+- ocaml-4.02.2 rebuild.
+
+* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:1.29.46-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Tue Jun 09 2015 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.29.46-2
+- Perl 5.22 rebuild
+
+* Sun Jun 07 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.46-1
+- New upstream version 1.29.46.
+
+* Sat Jun 06 2015 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.29.44-2
+- Perl 5.22 rebuild
+
+* Thu May 28 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.44-1
+- New upstream version 1.29.44.
+
+* Tue May 19 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.43-2
+- Remove several test SKIP_* variables related to bugs which have
+ since been fixed.
+
+* Sat May 16 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.43-1
+- New upstream version 1.29.43.
+
+* Thu May 14 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.42-1
+- New upstream version 1.29.42.
+
+* Mon May 11 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.41-1
+- New upstream version 1.29.41.
+
+* Thu May 07 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.40-2
+- Add workaround for builder/index-parse.c autotools race.
+
+* Wed May 06 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.40-1
+- New upstream version 1.29.40.
+
+* Sun May 03 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.39-1
+- New upstream version 1.29.39.
+
+* Tue Apr 28 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.38-1
+- New upstream version 1.29.38.
+
+* Fri Apr 24 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.37-1
+- New upstream version 1.29.37.
+
+* Mon Apr 20 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.36-2
+- Remove deprecated programs: virt-list-partitions, virt-list-filesystems,
+ virt-tar (RHBZ#1213298).
+
+* Thu Apr 16 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.36-1
+- New upstream version 1.29.36.
+
+* Fri Apr 10 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.34-1
+- New upstream version 1.29.34.
+- Drop the virt-v2v test harness subpackage.
+
+* Wed Apr 01 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.33-2
+- New upstream version 1.29.33.
+
+* Fri Mar 27 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.32-1
+- New upstream version 1.29.32.
+
+* Tue Mar 24 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.31-2
+- New upstream version 1.29.31.
+- Remove upstream patches.
+
+* Fri Mar 20 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.30-5
+- More upstream patches to fix virt-v2v test harness.
+- Do not delete OCaml *.a files, including ones in the virt-v2v test harness.
+
+* Sun Mar 15 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.30-4
+- Enable golang on various arches.
+
+* Thu Mar 12 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.30-3
+- Add virt-v2v-test-harness subpackage.
+- Add a couple of upstream patches to fix the virt-v2v test harness.
+- Remove external dependency generator. Use supermin RPM deps instead.
+- Depend on fuse (for testing with fusermount etc) (RHBZ#1201507).
+
+* Wed Mar 11 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.30-1
+- New upstream version 1.29.30.
+
+* Thu Mar 5 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.29-1
+- New upstream version 1.29.29.
+
+* Mon Mar 2 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.26-3
+- Add new subpackage libguestfs-inspect-icons (RHBZ#1194158).
+- Remove dependency on uml_utilities, since UML is currently broken.
+- Speed python3 build by copying over the generator pod2text cache and
+ disabling non-Python language bindings.
+- Disable mdadm test because of mdadm hangs (RHBZ#1197305).
+
+* Wed Feb 18 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.26-1
+- New upstream version 1.29.26.
+- ocaml-4.02.1 rebuild.
+
+* Thu Feb 12 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.25-1
+- New upstream version 1.29.25.
+- Remove patches which are now upstream.
+
+* Thu Feb 05 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.24-3
+- Upstream patch to fix virt-resize/virt-builder on aarch64 (RHBZ#1189284).
+
+* Wed Feb 04 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.24-2
+- Upstream patch to fix performance regression in virt-builder (RHBZ#1188866).
+- Change the way Python double-build is done so we only have to
+ apply patches in one place.
+
+* Tue Feb 03 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.24-1
+- New upstream version 1.29.24.
+- Add Python 3 bindings.
+- Disable btrfs-qgroup-show test.
+
+* Tue Jan 27 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.23-1
+- New upstream version 1.29.23.
+
+* Thu Jan 22 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.22-2
+- New upstream version 1.29.22.
+- BR ounit (will be required for building >= 1.29.23).
+- Disable FUSE tests because of a bug in Rawhide.
+
+* Mon Jan 19 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.20-2
+- Bump release for f22-ruby.
+
+* Sun Jan 18 2015 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.20-1
+- New upstream version 1.29.20.
+- Rebuild upstream with automake 1.15.
+- Add upstream patch to allow LVM test to be skipped.
+- Add upstream patch which fixes LUA 5.3 (beta) in Rawhide.
+- Skip a couple of tests which are broken by changes in Rawhide.
+- Remove bogus daemon/m4 directory which has not existed for years.
+
+* Tue Dec 23 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.19-1
+- New upstream version 1.29.19.
+
+* Tue Dec 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.18-1
+- New upstream version 1.29.18.
+
+* Tue Dec 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.17-1
+- New upstream version 1.29.17.
+
+* Thu Dec 11 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.14-1
+- New upstream version 1.29.14.
+
+* Fri Dec 05 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.13-1
+- New upstream version 1.29.13.
+
+* Sat Nov 29 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.12-1
+- New upstream version 1.29.12.
+
+* Thu Nov 27 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.11-1
+- New upstream version 1.29.11.
+
+* Tue Nov 25 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.10-1
+- New upstream version 1.29.10.
+
+* Fri Nov 21 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.9-1
+- New upstream version 1.29.9.
+
+* Tue Nov 18 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.8-1
+- New upstream version 1.29.8.
+
+* Sat Nov 15 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.7-1
+- New upstream version 1.29.7.
+
+* Fri Nov 07 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.6-1
+- New upstream version 1.29.6.
+- Remove patch which is now upstream.
+
+* Wed Nov 05 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.5-1
+- New upstream version 1.29.5.
+
+* Wed Nov 5 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.4-2
+- configure: Don't override upstream's qemu selection.
+
+* Fri Oct 31 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.4-1
+- New upstream version 1.29.4.
+
+* Fri Oct 31 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.3-1
+- New upstream version 1.29.3.
+
+* Sat Oct 25 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.2-1
+- New upstream version 1.29.2.
+
+* Wed Oct 22 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.29.1-1
+- New upstream version 1.29.1.
+
+* Fri Oct 17 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.64-1
+- New upstream version 1.27.64.
+
+* Thu Oct 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.63-1
+- New upstream version 1.27.63.
+
+* Fri Oct 10 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.62-1
+- New upstream version 1.27.62.
+
+* Thu Oct 09 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.61-1
+- New upstream version 1.27.61.
+
+* Wed Oct 08 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.60-1
+- New upstream version 1.27.60.
+
+* Thu Oct 02 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.58-1
+- New upstream version 1.27.58.
+
+* Wed Oct 01 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.57-1
+- New upstream version 1.27.57.
+
+* Tue Sep 30 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.56-1
+- New upstream version 1.27.56.
+
+* Sat Sep 27 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.55-1
+- New upstream version 1.27.55.
+
+* Wed Sep 24 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.54-1
+- New upstream version 1.27.54.
+
+* Tue Sep 23 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.53-1
+- New upstream version 1.27.53.
+
+* Fri Sep 19 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.50-1
+- New upstream version 1.27.50.
+
+* Thu Sep 18 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.49-1
+- New upstream version 1.27.49.
+- Fix guestfish colour prompts when using white-on-black terminal (RHBZ#1144201).
+
+* Wed Sep 17 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.48-1
+- New upstream version 1.27.48.
+
+* Tue Sep 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.47-1
+- New upstream version 1.27.47.
+
+* Mon Sep 15 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.46-1
+- New upstream version 1.27.46.
+
+* Sun Sep 14 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.45-1
+- New upstream version 1.27.45.
+
+* Sat Sep 13 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.44-1
+- New upstream version 1.27.44.
+
+* Thu Sep 11 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.43-1
+- New upstream version 1.27.43.
+
+* Thu Sep 11 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.42-1
+- New upstream version 1.27.42.
+
+* Tue Sep 09 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.41-1
+- New upstream version 1.27.41.
+
+* Mon Sep 08 2014 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.27.39-2
+- Perl 5.20 re-rebuild of bootstrapped packages
+
+* Sat Sep 06 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.39-1
+- New upstream version 1.27.39.
+- Package virt-p2v ISO build tools together with virt-v2v in
+ a separate virt-v2v subpackage.
+
+* Fri Sep 05 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.38-1
+- New upstream version 1.27.38.
+
+* Thu Sep 04 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.37-1
+- New upstream version 1.27.37.
+
+* Wed Sep 03 2014 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.27.36-2
+- Perl 5.20 rebuild
+
+* Tue Sep 02 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.36-1
+- New upstream version 1.27.36.
+
+* Mon Sep 01 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.35-1
+- New upstream version 1.27.35.
+
+* Sat Aug 30 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.34-1
+- New upstream version 1.27.34.
+
+* Fri Aug 29 2014 Jitka Plesnikova <jplesnik@redhat.com> - 1:1.27.33-3
+- Perl 5.20 rebuild
+
+* Fri Aug 29 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.33-2
+- New upstream version 1.27.33.
+- Enable LVM filtering test (thanks Pino Toscano).
+
+* Mon Aug 25 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.31-1
+- New upstream version 1.27.31.
+
+* Thu Aug 21 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.30-1
+- New upstream version 1.27.30.
+
+* Wed Aug 20 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.28-1
+- New upstream version 1.27.28.
+
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:1.27.27-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Fri Aug 15 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.27-1
+- New upstream version 1.27.27.
+
+* Fri Aug 15 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.26-2
+- Java is now java-1.8.0-openjdk in Rawhide.
+
+* Thu Aug 14 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.26-1
+- New upstream version 1.27.26.
+
+* Thu Aug 14 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.25-2
+- Require mingw32-srvany >= 1.0-13 because otherwise we have a broken symlink.
+- Skip virt-v2v tests since they require rhsrvany.exe which is not
+ available during the tests.
+
+* Tue Aug 05 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.25-1
+- New upstream version 1.27.25.
+
+* Mon Jul 28 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.24-3
+- Rebuild on aarch64.
+
+* Sun Jul 27 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.24-2
+- New upstream version 1.27.24.
+- Remove patch now upstream.
+
+* Fri Jul 25 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.23-3
+- Skip LVM test which is failing.
+
+* Thu Jul 24 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.23-2
+- Enable tests on aarch64, in order to study which tests fail.
+
+* Wed Jul 23 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.23-1
+- New upstream version 1.27.23.
+
+* Tue Jul 22 2014 Kalev Lember <kalevlember@gmail.com> - 1:1.27.22-3
+- Rebuilt for gobject-introspection 1.41.4
+
+* Mon Jul 21 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.22-2
+- New upstream version 1.27.22.
+- Disable golang since the Fedora package is broken again.
+
+* Wed Jul 16 2014 Peter Robinson <pbrobinson@fedoraproject.org> 1:1.27.21-2
+- Disable tests on aarch64
+- ntfs-3g available on all arches
+- hfsplus-tools on all arches
+- KVM available on ARMv7 and aarch64
+
+* Tue Jul 08 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.21-1
+- New upstream version 1.27.21.
+
+* Wed Jul 02 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.20-1
+- New upstream version 1.27.20.
+
+* Tue Jun 24 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.19-1
+- New upstream version 1.27.19.
+
+* Mon Jun 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.18-1
+- New upstream version 1.27.18.
+
+* Sat Jun 14 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.16-2
+- Install guestfish colour prompts.
+
+* Sat Jun 14 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.16-1
+- New upstream version 1.27.16.
+
+* Wed Jun 11 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.15-1
+- New upstream version 1.27.15.
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:1.27.14-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Fri May 30 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.14-1
+- New upstream version 1.27.14.
+
+* Sun May 25 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.13-1
+- New upstream version 1.27.13.
+
+* Fri May 23 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.12-2
+- New upstream version 1.27.12.
+- Enable golang since it is now working on Rawhide.
+- Fix golang installation again.
+- Delete guestfs-p2v-iso(1) (internal documentation).
+
+* Fri May 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.11-3
+- Try re-enabling x86-64 tests.
+ Requires supermin >= 5.1.8-3 which supports xz-compressed kernel modules.
+
+* Fri May 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.11-2
+- New upstream version 1.27.11.
+
+* Fri May 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.10-1
+- New upstream version 1.27.10.
+
+* Thu May 08 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.9-1
+- New upstream version 1.27.9.
+
+* Sat May 3 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.8-2
+- Remove ruby(release) version. Fix for Ruby 2.1.
+
+* Fri May 02 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.8-1
+- New upstream version 1.27.8.
+
+* Sat Apr 26 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.7-1
+- New upstream version 1.27.7.
+
+* Tue Apr 22 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.6-1
+- New upstream version 1.27.6.
+
+* Wed Apr 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.5-2
+- Remove /var/run/libguestfs, which is not used.
+
+* Wed Apr 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.5-1
+- New upstream version 1.27.5.
+
+* Tue Apr 15 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.4-1
+- New upstream version 1.27.4.
+
+* Tue Apr 8 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.3-3
+- Re-enable virt-sparsify --in-place test, see:
+ https://bugzilla.redhat.com/show_bug.cgi?id=1079210#c4
+
+* Mon Apr 07 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.3-2
+- Do not use rubygem-minitest. Temporary workaround, see:
+ https://bugzilla.redhat.com/show_bug.cgi?id=1085029#c2
+
+* Sun Apr 06 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.3-1
+- New upstream version 1.27.3.
+
+* Mon Mar 31 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.2-1
+- New upstream version 1.27.2.
+
+* Fri Mar 28 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.27.0-1
+- New upstream version 1.27.0.
+
+* Wed Mar 26 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.49-1
+- New upstream version 1.25.49.
+
+* Tue Mar 25 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.47-1
+- New upstream version 1.25.47.
+- Include new tool: virt-customize.
+
+* Thu Mar 20 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.46-1
+- New upstream version 1.25.46.
+
+* Thu Mar 20 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.45-2
+- Further split libguestfs appliance dependencies.
+
+* Mon Mar 17 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.45-1
+- New upstream version 1.25.45.
+
+* Fri Mar 14 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.44-2
+- Try to patch fstrim so it works in Koji/Rawhide.
+
+* Thu Mar 13 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.44-1
+- New upstream version 1.25.44.
+
+* Sat Mar 08 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.43-1
+- New upstream version 1.25.43.
+
+* Thu Mar 06 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.42-1
+- New upstream version 1.25.42.
+
+* Tue Mar 04 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.41-1
+- New upstream version 1.25.41.
+
+* Mon Mar 03 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.40-1
+- New upstream version 1.25.40.
+
+* Sun Mar 02 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.39-2
+- New upstream version 1.25.39.
+
+* Fri Feb 28 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.38-4
+- Disable hfsplus subpackage on arm & ppc.
+- Disable zfs subpackage on arm.
+- Disable tests on x86.
+
+* Thu Feb 27 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.38-3
+- Ensure dependencies needed by the daemon are added to base libguestfs.
+
+* Wed Feb 26 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.38-2
+- New upstream version 1.25.38.
+- Requires new supermin 5.1.0.
+- Split the dependencies into subpackages, at least for the less common
+ filesystem types.
+- In the dependency generator, we can now generate ordinary dependencies!
+
+* Sat Feb 22 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.37-2
+- New upstream version 1.25.37.
+- Disable tests on ARM because of RHBZ#1066581.
+
+* Tue Feb 18 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.36-5
+- Add upstream patches, workaround for libvirt on ARM / ppc64 bug.
+- Run make quickcheck (and fail early) before doing full make check.
+
+* Mon Feb 17 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.36-1
+- New upstream version 1.25.36.
+
+* Sun Feb 16 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.34-1
+- Enable tests on i686 as both of the referenced bugs (RHBZ#998722 &
+ RHBZ#998692) are now supposed to be fixed.
+- Enable tests on ARM as the bug (RHBZ#990258) is supposed to be fixed.
+
+* Thu Feb 13 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.34-1
+- New upstream version 1.25.34.
+- Reenable tests as the kernel bug is fixed.
+
+* Wed Feb 05 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.33-1
+- New upstream version 1.25.33.
+
+* Tue Feb 04 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.32-2
+- Since Python package is not noarch, do not put Python files into
+ shared /usr/lib/python2.X/site-packages (RHBZ#1061155).
+
+* Tue Feb 04 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.32-1
+- New upstream version 1.25.32.
+
+* Wed Jan 29 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.31-2
+- virt-make-fs has been rewritten in C.
+- qemu-img is now required by the core library (for guestfs_disk_create).
+- perl(String::ShellQuote) is no longer used.
+
+* Wed Jan 29 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.31-1
+- New upstream version 1.25.31.
+
+* Sat Jan 25 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.29-1
+- New upstream version 1.25.29.
+
+* Fri Jan 24 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.27-1
+- New upstream version 1.25.27.
+
+* Wed Jan 22 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.26-1
+- New upstream version 1.25.26.
+
+* Wed Jan 22 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.25-2
+- Update to latest Fedora golang packaging draft.
+- See: https://fedoraproject.org/wiki/PackagingDrafts/Go
+
+* Tue Jan 21 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.25-1
+- New upstream version 1.25.25.
+
+* Sun Jan 19 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.24-1
+- New upstream version 1.25.24.
+
+* Sat Jan 18 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.23-1
+- New upstream version 1.25.23.
+
+* Tue Jan 14 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.21-1
+- New upstream version 1.25.21.
+
+* Mon Jan 13 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.20-1
+- New upstream version 1.25.20.
+
+* Thu Jan 02 2014 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.19-1
+- New upstream version 1.25.19.
+
+* Thu Dec 19 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.18-1
+- New upstream version 1.25.18.
+
+* Sat Dec 14 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.15-1
+- New upstream version 1.25.15.
+
+* Thu Dec 12 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.14-1
+- New upstream version 1.25.14.
+
+* Mon Dec 09 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.13-1
+- New upstream version 1.25.13.
+
+* Fri Dec 06 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.12-3
+- Build golang package only on x86 and ARM. The golang package in Fedora
+ uses the same ExclusiveArch. Thanks: Dan Horák.
+
+* Wed Dec 04 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.12-2
+- Rebuild for procps SONAME bump.
+
+* Mon Dec 02 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.12-1
+- New upstream version 1.25.12.
+
+* Mon Nov 25 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.11-3
+- Disable NBD test, buggy in qemu 1.7.0 (filed as RHBZ#1034433).
+
+* Sat Nov 23 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.11-2
+- Disable mdadm test, buggy in kernel 3.13 (filed as RHBZ#1033971).
+
+* Sat Nov 23 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.11-1
+- New upstream version 1.25.11.
+
+* Wed Nov 20 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.8-2
+- Rebuild to resolve broken dependency on krb libraries.
+- Remove obsolete Obsoletes.
+- Fix Source URL.
+- Require java-headless instead of java:
+ https://fedoraproject.org/wiki/Changes/HeadlessJava
+- Backport upstream patch to fix btrfs.
+
+* Thu Nov 14 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.8-1
+- New upstream version 1.25.8.
+
+* Sat Nov 09 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.7-1
+- New upstream version 1.25.7.
+
+* Tue Nov 05 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.6-2
+- New upstream version 1.25.6.
+- Add virt-index-validate tool & man page.
+
+* Tue Nov 05 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.3-2
+- Remove patches, now upstream.
+- +BR flex & bison, required by libguestfs >= 1.25.4.
+- +BR xz-devel (for liblzma) to accelerate virt-builder in >= 1.25.5.
+
+* Fri Nov 01 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.3-1
+- New upstream version 1.25.3.
+
+* Wed Oct 30 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.2-1
+- New upstream version 1.25.2.
+
+* Sat Oct 26 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.1-1
+- New upstream version 1.25.1.
+
+* Tue Oct 22 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.0-2
+- Don't use versioned jar file (RHBZ#1022133).
+
+* Sat Oct 19 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.25.0-1
+- New upstream version 1.25.0.
+
+* Tue Oct 15 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.33-1
+- New upstream version 1.23.33.
+
+* Mon Oct 14 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.32-1
+- New upstream version 1.23.32.
+
+* Sun Oct 13 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.31-1
+- New upstream version 1.23.31.
+
+* Fri Oct 11 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.30-1
+- New upstream version 1.23.30.
+
+* Tue Oct 08 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.28-1
+- New upstream version 1.23.28.
+
+* Mon Oct 07 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.27-1
+- New upstream version 1.23.27.
+
+* Fri Oct 4 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.25-1
+- New upstream version 1.23.25.
+- Add virt-builder and its dependencies.
+
+* Mon Sep 30 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.23-2
+- New upstream version 1.23.23.
+- Remove patch which is now upstream.
+
+* Thu Sep 12 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.22-2
+- Add patch to debug parallel tests.
+
+* Wed Sep 11 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.22-1
+- New upstream version 1.23.22.
+
+* Mon Sep 9 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.21-2
+- Disable golang bindings on ppc64 (no golang package available).
+
+* Sat Sep 7 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.21-1
+- New upstream version 1.23.21.
+- Remove patches which are now upstream.
+- Requires supermin >= 4.1.5 (technically only on ARM for device tree
+ support, but might as well have it everywhere).
+
+* Tue Sep 3 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.20-5
+- Enable debugging messages in parallel virt-alignment-scan, virt-df
+ in order to debug possible race condition seen in Koji.
+
+* Mon Sep 2 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.20-4
+- Rebuild now that RHBZ#1003495 is supposed to be fixed.
+
+* Sun Sep 1 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.20-2
+- New upstream version 1.23.20.
+
+* Thu Aug 29 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.19-1
+- New upstream version 1.23.19.
+- Remove 2 x patches which are upstream.
+
+* Thu Aug 29 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.18-4
+- Enable gzip-compressed appliance.
+- Note this requires supermin >= 4.1.4.
+
+* Wed Aug 28 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.18-3
+- Fix javadoc location to use _javadocdir macro.
+- Call ldconfig in java post and postun scripts.
+- Do not explicitly depend on perl-devel.
+- Compress the ChangeLog and *.xml files in devel package.
+- Create new subpackage gobject-doc for the huge HTML documentation.
+- Make javadoc, gobject-doc, bash-completion, man-pages-*, tools packages
+ 'noarch'.
+
+* Mon Aug 19 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.18-2
+- New upstream version 1.23.18.
+- Disable 32 bit x86 tests because of RHBZ#998722 & RHBZ#998692.
+
+* Thu Aug 15 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.17-1
+- New upstream version 1.23.17.
+- Enable tests as cpu host-model is no longer used on TCG.
+
+* Tue Aug 13 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.16-1
+- New upstream version 1.23.16.
+
+* Sun Aug 11 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.15-1
+- New upstream version 1.23.15.
+
+* Tue Aug 6 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.14-1
+- New upstream version 1.23.14.
+
+* Sun Aug 4 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.13-2
+- Disable all tests because Rawhide kernel is broken (RHBZ#991808).
+
+* Sat Aug 3 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.13-1
+- New upstream version 1.23.13.
+
+* Fri Aug 02 2013 Petr Pisar <ppisar@redhat.com> - 1:1.23.12-2
+- Perl 5.18 rebuild
+
+* Tue Jul 30 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.12-1
+- New upstream version 1.23.12.
+- Disable ARM tests because of libvirt error:
+ XML error: No PCI buses available [code=27 domain=10] (RHBZ#990258).
+
+* Tue Jul 30 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.11-2
+- Enable ARM builds (thanks Dan Berrange).
+
+* Mon Jul 29 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.11-1
+- New upstream version 1.23.11.
+- +BR systemd-devel (for systemd journal processing).
+- Disable ARM builds for now.
+
+* Tue Jul 23 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.10-1
+- New upstream version 1.23.10.
+
+* Fri Jul 19 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.9-1
+- New upstream version 1.23.9.
+- Remove 5 x patches which are all upstream.
+
+* Thu Jul 11 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.8-5
+- Add patches to ./run so we capture errors when i686 tests time out.
+- Include upstream patch to fix double-free if appliance
+ building fails (RHBZ#983218).
+
+* Tue Jul 9 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.8-2
+- New upstream version 1.23.8.
+- Try enabling golang bindings.
+- Add upstream patch to fix golang bindings.
+
+* Wed Jul 3 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.7-1
+- New upstream version 1.23.7.
+- Disable golang bindings.
+
+* Thu Jun 27 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.6-2
+- Re-enable tests on i686, supposedly TCG problems are fixed
+ (RHBZ#857026 etc.).
+
+* Wed Jun 26 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.6-1
+- New upstream version 1.23.6.
+
+* Tue Jun 18 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.5-1
+- New upstream version 1.23.5.
+- Fix hostname inspection because of change in Augeas (RHBZ#975412).
+- Upstream libguestfs now requires Augeas >= 1.0.0.
+- Kernel bug which affected mdadm is fixed (RHBZ#962079).
+
+* Fri Jun 14 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.4-1
+- New upstream version 1.23.4.
+
+* Mon Jun 10 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.3-1
+- New upstream version 1.23.3.
+
+* Wed Jun 5 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.2-2
+- libguestfs-devel should depend on an explicit version of
+ libguestfs-tools-c, in order that the latest package is pulled in.
+
+* Mon Jun 3 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.2-1
+- New upstream version 1.23.2.
+
+* Tue May 28 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.23.1-1
+- New upstream development branch 1.23.
+- New upstream version 1.21.1.
+
+* Tue May 21 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.40-3
+- New upstream version 1.21.40.
+
+* Wed May 15 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.39-1
+- New upstream version 1.21.39.
+
+* Mon May 13 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.38-2
+- Bump and rebuild.
+
+* Sat May 11 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.38-1
+- New upstream version 1.21.38.
+
+* Thu May 9 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.37-1
+- New upstream version 1.21.37.
+
+* Sun May 5 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.36-2
+- Bump and rebuild.
+
+* Thu May 2 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.36-1
+- New upstream version 1.21.36.
+
+* Tue Apr 30 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.35-1
+- New upstream version 1.21.35.
+
+* Mon Apr 29 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.34-2
+- New upstream version 1.21.34.
+
+* Thu Apr 25 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.33-1
+- New upstream version 1.21.33.
+
+* Tue Apr 23 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.32-1
+- New upstream version 1.21.32.
+- Fix stray backslash in spec file.
+- Enable btrfs tests, since these are now stable enough not to fail usually.
+- Skip gnulib tests which fail.
+
+* Wed Apr 17 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.31-1
+- New upstream version 1.21.31.
+- Rebuild against new krb5 (RHBZ#953001).
+
+* Tue Apr 16 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.30-1
+- New upstream version 1.21.30.
+
+* Sat Apr 13 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.29-1
+- New upstream version 1.21.29.
+
+* Thu Apr 11 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.28-3
+- SYSLINUX only exists on x86 arches so make that dependency conditional
+ (thanks Dennis Gilmore).
+
+* Tue Apr 9 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.28-2
+- New upstream version 1.21.28.
+- Change attach-method -> backend in a few places.
+- Simplify make install section so it fits on a single page.
+
+* Thu Apr 4 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.27-1
+- New upstream version 1.21.27.
+- Add new appliance BRs: syslinux, syslinux-extlinux.
+- Add a dependency on libosinfo (partial fix for RHBZ#948324).
+
+* Tue Apr 2 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.26-4
+- New upstream version 1.21.26.
+- Use ./configure --with-default-backend=.. instead of attach-method.
+- Remove Sys::Guestfs::Lib (removed upstream).
+- Detect if network is available.
+ libguestfs_buildnet macro no longer needed.
+- Enable hardened build (-fPIE, RELRO).
+- Remove BRs: ncurses-devel and versioned parted.
+
+* Sat Mar 30 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.25-1
+- New upstream version 1.21.25.
+
+* Fri Mar 29 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.24-1
+- New upstream version 1.21.24.
+- Remove patches, now upstream.
+
+* Fri Mar 29 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.23-3
+- Add patch for broken 'file' command in Rawhide (RHBZ#928995).
+
+* Thu Mar 28 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.23-2
+- New upstream version 1.21.23.
+- Remove 'Group' which is not required by modern RPM.
+- Add patch to use new-style demand-loaded bash-completion scripts.
+- Spin bash-completion scripts into a new libguestfs-bash-completion package.
+
+* Mon Mar 18 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.22-1
+- New upstream version 1.21.22.
+
+* Sat Mar 16 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.21-2
+- Set INSTALLDIRS on both make and make install rules.
+
+* Fri Mar 15 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.21-1
+- New upstream version 1.21.21.
+- Remove ruby vendor patch.
+
+* Wed Mar 13 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.20-1
+- New upstream version 1.21.20.
+- In Fedora 19, 'ruby(abi)' has been replaced by 'ruby(release)'
+ and the version of the ruby ABI/release is now 2.0.0.
+
+* Mon Mar 11 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.19-1
+- New upstream version 1.21.19.
+
+* Thu Mar 7 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.18-1
+- New upstream version 1.21.18.
+
+* Tue Mar 5 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.17-1
+- New upstream version 1.21.17.
+- New program 'guestunmount'.
+
+* Fri Mar 1 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.16-1
+- New upstream version 1.21.16.
+- Re-enable tests, since kernel patch is upstream.
+
+* Tue Feb 26 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.15-1
+- New upstream version 1.21.15.
+
+* Mon Feb 25 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.14-2
+- New upstream version 1.21.14.
+- Disable tests because of Rawhide kernel bug that prevents booting.
+
+* Wed Feb 20 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.13-1
+- New upstream version 1.21.13.
+
+* Tue Feb 19 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.12-1
+- New upstream version 1.21.12.
+- Remove patch, now upstream.
+
+* Thu Feb 14 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.11-2
+- New upstream version 1.21.11.
+- Add experimental patch to capture stack trace of segfaults in the appliance.
+
+* Mon Feb 11 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.10-1
+- New upstream version 1.21.10.
+
+* Sat Feb 9 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.9-1
+- New upstream version 1.21.9.
+
+* Thu Feb 7 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.8-2
+- Bump and rebuild.
+
+* Tue Feb 5 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.8-1
+- New upstream version 1.21.8.
+- Remove patch which is now upstream.
+- 'febootstrap' with renamed to 'supermin' upstream.
+ . Depend on supermin >= 4.1.1.
+ . Use new --with-supermin-packager-config option.
+
+* Tue Feb 5 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.7-4
+- Skip set_label tests because of RHBZ#906777.
+- Disable btrfs tests again because RHBZ#863978 is not fixed.
+
+* Mon Feb 4 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.7-2
+- New development version 1.21.7.
+- Re-enable btrfs tests, apparently fixed upstream.
+
+* Mon Jan 28 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.6-1
+- New development version 1.21.6.
+
+* Sat Jan 26 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.5-3
+- Bump and rebuild.
+
+* Fri Jan 25 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.5-2
+- Bump and rebuild.
+
+* Mon Jan 21 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.5-1
+- New development version 1.21.5.
+- Remove upstream patch.
+
+* Mon Jan 21 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.4-3
+- Add upstream patch to allow btrfs tests to be skipped.
+- Skip btrfs tests because btrfs has been broken forever (RHBZ#863978).
+
+* Sat Jan 19 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.4-2
+- Depend on openjdk instead of java.
+
+* Thu Jan 17 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.4-1
+- New upstream version 1.21.4.
+- Add libguestfs-gobject-1.0.pc.
+- Remove automake 1.13 hack, fixed upstream.
+- Add explicit dependency on libcap, needed by the appliance.
+
+* Thu Jan 17 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.3-2
+- New upstream version 1.21.3.
+
+* Sat Jan 12 2013 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.2-3
+- Bump and rebuild.
+
+* Sat Dec 22 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.2-2
+- New upstream version 1.21.2.
+- Use new --with-febootstrap-packager-config option.
+
+* Mon Dec 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.1-3
+- Remove all RHEL-specific hacks since I've now branched RHEL 7.
+- Add BR gdisk.
+
+* Mon Dec 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.21.1-2
+- New upstream version 1.21.1 (development branch).
+- Fix source URL.
+- Rebase ruby site/vendor patch.
+- Use 'make check -k' so we get to see all test failures at once.
+- For RHEL 7:
+ * Do not depend on perl(Expect) (only needed to test virt-rescue).
+ * Depend on /usr/bin/qemu-img instead of qemu-img package, since the
+ package name (but not the binary) is different in RHEL 7.
+ * Add workaround for libvirt/KVM bug RHBZ#878406.
+ * Do not depend on libvirt-daemon-qemu.
+ * Do not depend on libldm (not yet in RHEL 7: RHBZ#887894).
+
+* Thu Dec 13 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.20.0-1
+- New upstream version 1.20.0.
+- New source URL for this branch.
+- Reconcile upstream packagelist, BRs and Requires lists.
+- Requires newest SELinux policy so that SVirt works.
+- Fix patch 2. Actually, remove and replace with a small script.
+
+* Sat Dec 01 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.66-1
+- New upstream version 1.19.66.
+
+* Fri Nov 30 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.65-2
+- Add a hack to work around glibc header bug <rpc/svc.h>.
+
+* Thu Nov 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.65-1
+- New upstream version 1.19.65.
+
+* Sat Nov 24 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.64-1
+- New upstream version 1.19.64.
+
+* Sat Nov 24 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.63-3
+- Re-add: Non-upstream patch to add the noapic flag on the kernel
+ command line on i386 only. This works around a bug in 32-bit qemu,
+ https://bugzilla.redhat.com/show_bug.cgi?id=857026
+
+* Fri Nov 23 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.63-2
+- Remove non-upstream patch designed to work around
+ https://bugzilla.redhat.com/show_bug.cgi?id=857026
+ to see if this has been fixed.
+- Re-enable tests on i686 to see if
+ https://bugzilla.redhat.com/show_bug.cgi?id=870042
+ has been fixed.
+
+* Fri Nov 23 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.63-1
+- New upstream version 1.19.63.
+
+* Tue Nov 20 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.62-1
+- New upstream version 1.19.62.
+
+* Mon Nov 19 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.61-1
+- New upstream version 1.19.61.
+
+* Sat Nov 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.60-2
+- Remove Lua bogus libtool *.la file.
+
+* Sat Nov 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.60-1
+- New upstream version 1.19.60.
+
+* Tue Nov 13 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.59-1
+- New upstream version 1.19.59.
+
+* Sat Nov 10 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.58-1
+- New upstream version 1.19.58.
+
+* Thu Nov 08 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.57-1
+- New upstream version 1.19.57.
+
+* Tue Nov 06 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.56-3
+- Add upstream patch to disable virt-format test, and disable
+ it because wipefs utility is broken.
+
+* Sat Nov 03 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.56-2
+- Add upstream patch to fix wipefs test.
+
+* Fri Nov 02 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.56-1
+- New upstream version 1.19.56.
+
+* Tue Oct 30 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.55-1
+- New upstream version 1.19.55.
+
+* Mon Oct 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.54-1
+- New upstream version 1.19.54.
+
+* Wed Oct 24 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.53-3
+- Disable tests on ix86 because qemu/kernel is broken (RHBZ#870042).
+
+* Wed Oct 24 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.53-2
+- Add upstream patch to fix guestfish tests.
+
+* Fri Oct 19 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.53-1
+- New upstream version 1.19.53.
+
+* Sun Oct 14 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.52-1
+- New upstream version 1.19.52.
+
+* Thu Oct 11 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.51-1
+- New upstream version 1.19.51.
+
+* Thu Oct 11 2012 Petr Pisar <ppisar@redhat.com> - 1:1.19.50-2
+- Correct perl dependencies
+
+* Thu Oct 11 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.50-1
+- New upstream version 1.19.50.
+
+* Wed Oct 10 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.49-3
+- Upstream patch to workaround btrfs problems with kernel 3.7.0.
+
+* Tue Oct 09 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.49-2
+- Install all libguestfs-live-service udev rules into /usr/lib/udev/rules.d.
+
+* Tue Oct 09 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.49-1
+- New upstream version 1.19.49.
+
+* Sun Oct 07 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.48-1
+- New upstream version 1.19.48.
+
+* Mon Oct 01 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.46-1
+- New upstream version 1.19.46.
+
+* Wed Sep 26 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.45-1
+- New upstream version 1.19.45.
+
+* Tue Sep 25 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.44-2
+- Enable sVirt (NB: requires libvirt >= 0.10.2-3, selinux-policy >= 3.11.1-23).
+- Add upstream patch to label the custom $TMPDIR used in test-launch-race.
+
+* Mon Sep 24 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.44-1
+- New upstream version 1.19.44.
+
+* Sat Sep 22 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.43-1
+- New upstream version 1.19.43.
+
+* Tue Sep 18 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.42-2
+- New upstream version 1.19.42.
+- Rebase sVirt (disable) patch.
+
+* Sun Sep 16 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.41-1
+- New upstream version 1.19.41.
+
+* Fri Sep 14 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.40-3
+- Add (non-upstream) patch to add the noapic flag on the kernel
+ command line on i386 only. This works around a bug in 32-bit qemu.
+
+* Wed Sep 12 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.40-2
+- Enable tests because RHBZ#853408 has been fixed in qemu-1.2.0-3.fc18.
+
+* Wed Sep 05 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.40-1
+- New upstream version 1.19.40.
+
+* Tue Sep 04 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.39-1
+- New upstream version 1.19.39.
+
+* Mon Sep 03 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.38-1
+- New upstream version 1.19.38.
+
+* Fri Aug 31 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.37-1
+- New upstream version 1.19.37.
+
+* Thu Aug 30 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.36-2
+- New upstream version 1.19.36.
+- Require libvirt-daemon-qemu (for libvirt attach method).
+
+* Thu Aug 30 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.36-1
+- Switch to using libvirt as the backend for running the appliance. See:
+ https://www.redhat.com/archives/libguestfs/2012-August/msg00070.html
+- Use configure RPM macro instead of ./configure.
+
+* Wed Aug 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.35-1
+- New upstream version 1.19.35.
+
+* Wed Aug 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.34-2
+- Add upstream patch to fix Perl bindtests on 32 bit.
+
+* Tue Aug 28 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.34-1
+- New upstream version 1.19.34.
+
+* Tue Aug 28 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.33-1
+- New upstream version 1.19.33.
+
+* Mon Aug 27 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.33-3
+- Fix Perl examples directory so we only include the examples.
+- Add Java examples to java-devel RPM.
+
+* Tue Aug 21 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.33-2
+- New upstream version 1.19.33.
+- Reenable tests.
+
+* Sat Aug 18 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.32-1
+- New upstream version 1.19.32.
+
+* Wed Aug 15 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.31-1
+- New upstream version 1.19.31.
+
+* Tue Aug 14 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.30-1
+- New upstream version 1.19.30.
+
+* Sat Aug 11 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.29-2
+- New upstream version 1.19.29.
+- Remove RELEASE NOTES from doc section, and add equivalent man page.
+
+* Fri Aug 10 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.28-4
+- Bump and rebuild.
+
+* Thu Aug 02 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.28-3
+- New upstream version 1.19.28.
+- Update libguestfs-find-requires to generate ordinary lib dependencies.
+
+* Wed Aug 1 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.27-2
+- Disable tests because of RHBZ#844485.
+
+* Mon Jul 30 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.27-1
+- New upstream version 1.19.27.
+
+* Thu Jul 26 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.26-2
+- Remove old RPM-isms like defattr.
+- Add upstream patches to fix use of 'run' script in tests.
+
+* Thu Jul 26 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.26-1
+- New upstream version 1.19.26.
+
+* Tue Jul 24 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.25-1
+- New upstream version 1.19.25.
+
+* Mon Jul 23 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.24-1
+- New upstream version 1.19.24.
+
+* Sun Jul 22 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.23-1
+- New upstream version 1.19.23.
+
+* Thu Jul 19 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.22-2
+- Add upstream patch to skip mount-local test if /dev/fuse not writable.
+
+* Thu Jul 19 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.22-1
+- New upstream version 1.19.22.
+
+* Wed Jul 18 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.21-1
+- New upstream version 1.19.21.
+
+* Tue Jul 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.20-1
+- New upstream version 1.19.20.
+
+* Mon Jul 16 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.19-1
+- New upstream version 1.19.19.
+
+* Tue Jul 10 2012 Petr Pisar <ppisar@redhat.com> - 1:1.19.18-2
+- Perl 5.16 rebuild
+
+* Mon Jul 09 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.18-1
+- New upstream version 1.19.18.
+
+* Fri Jul 06 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.17-1
+- New upstream version 1.19.17.
+
+* Wed Jul 04 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.16-1
+- New upstream version 1.19.16.
+
+* Fri Jun 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.15-1
+- New upstream version 1.19.15.
+
+* Thu Jun 28 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.14-1
+- New upstream version 1.19.14.
+
+* Wed Jun 27 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.13-2
+- New upstream version 1.19.13.
+- Add upstream patch to fix GObject/Javascript tests.
+
+* Tue Jun 26 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.12-1
+- New upstream version 1.19.12.
+
+* Mon Jun 25 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.11-1
+- New upstream version 1.19.11.
+
+* Fri Jun 22 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.10-1
+- New upstream version 1.19.10.
+
+* Mon Jun 18 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.9-1
+- New upstream version 1.19.9.
+
+* Thu Jun 14 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.8-1
+- New upstream version 1.19.8.
+
+* Thu Jun 14 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.7-2
+- New upstream version 1.19.7.
+- Require febotstrap >= 3.17.
+
+* Tue Jun 12 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.6-2
+- Require febootstrap >= 3.16.
+
+* Tue Jun 12 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.6-1
+- New upstream version 1.19.6.
+
+* Tue Jun 12 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.6-1
+- New upstream version 1.19.6.
+- This version defaults to using virtio-scsi.
+- Requires qemu >= 1.0.
+- Requires febootstrap >= 3.15.
+
+* Mon Jun 11 2012 Petr Pisar <ppisar@redhat.com> - 1:1.19.5-2
+- Perl 5.16 rebuild
+
+* Sat Jun 09 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.5-1
+- New upstream version 1.19.5.
+
+* Thu Jun 07 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.4-1
+- New upstream version 1.19.4.
+
+* Fri Jun 01 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.3-2
+- New upstream version 1.19.3.
+- Remove patches which are now upstream.
+
+* Tue May 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.2-3
+- Remove obsolete list of bugs in make check rule.
+- Remove some obsolete test workarounds.
+- Disable i386 tests (because of RHBZ#825944).
+
+* Mon May 28 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.2-2
+- Include patches to fix udev.
+
+* Mon May 28 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.2-1
+- New upstream version 1.19.2.
+
+* Sat May 26 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.1-1
+- New upstream version 1.19.1.
+
+* Mon May 21 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.19.0-1
+- New upstream version 1.19.0.
+
+* Thu May 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.43-1
+- New upstream version 1.17.43.
+
+* Thu May 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.42-4
+- On RHEL 7 only, remove reiserfs-utils, zerofree.
+
+* Thu May 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.42-3
+- On RHEL 7 only, remove nilfs-utils.
+
+* Tue May 15 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.42-2
+- Bundled gnulib (RHBZ#821767).
+
+* Mon May 14 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.42-1
+- New upstream version 1.17.42.
+
+* Fri May 11 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.41-1
+- New upstream version 1.17.41.
+
+* Tue May 08 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.40-1
+- New upstream version 1.17.40.
+
+* Tue May 8 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.39-3
+- Disable hfsplus-tools on RHEL 7.
+
+* Thu May 03 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.39-2
+- BR perl-XML-XPath to run the new XML test.
+
+* Thu May 03 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.39-1
+- New upstream version 1.17.39.
+
+* Wed May 02 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.38-3
+- Remove explicit runtime deps for old virt-sysprep.
+- Add explicit runtime dep on fuse (RHBZ#767852, thanks Pádraig Brady).
+- Remove explicit versioned dep on glibc.
+
+* Tue May 1 2012 Peter Robinson <pbrobinson@fedoraproject.org> - 1:1.17.38-2
+- Update supported filesystems for ARM
+
+* Tue May 01 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.38-1
+- New upstream version 1.17.38.
+
+* Tue May 01 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.37-2
+- Add guestfs-faq(1) (FAQ is now a man page).
+
+* Tue May 01 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.37-1
+- New upstream version 1.17.37.
+
+* Fri Apr 27 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.36-2
+- Add upstream patch to fix installation of gobject headers.
+
+* Thu Apr 26 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.36-1
+- New upstream version 1.17.36.
+
+* Thu Apr 26 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.35-1
+- New upstream version 1.17.35.
+
+* Tue Apr 24 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.34-1
+- New upstream version 1.17.34.
+
+* Mon Apr 23 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.33-1
+- New upstream version 1.17.33.
+
+* Tue Apr 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.32-1
+- New upstream version 1.17.32.
+
+* Mon Apr 16 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.31-1
+- New upstream version 1.17.31.
+
+* Fri Apr 13 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.30-1
+- New upstream version 1.17.30.
+
+* Thu Apr 12 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.29-1
+- New upstream version 1.17.29.
+
+* Thu Apr 12 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.28-2
+- Enable ruby 1.9 patch in RHEL 7 (RHBZ#812139).
+
+* Thu Apr 12 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.28-1
+- New upstream version 1.17.28.
+
+* Wed Apr 11 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.27-2
+- Add guestfs-performance(1) manual page.
+
+* Tue Apr 10 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.27-1
+- New upstream version 1.17.27.
+
+* Tue Apr 03 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.26-1
+- New upstream version 1.17.26.
+
+* Mon Apr 02 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.25-1
+- New upstream version 1.17.25.
+
+* Sun Apr 01 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.24-1
+- New upstream version 1.17.24.
+
+* Sun Apr 01 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.23-1
+- New upstream version 1.17.23.
+
+* Thu Mar 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.22-2
+- Include all gobject header files.
+- Include gtk-doc, and depend on the gtk-doc package at runtime.
+
+* Thu Mar 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.22-1
+- New upstream version 1.17.22.
+
+* Thu Mar 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.21-2
+- Bump and rebuild.
+
+* Wed Mar 21 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.21-1
+- New upstream version 1.17.21.
+
+* Mon Mar 19 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.20-3
+- Reenable LUKS, since RHBZ#804345 is reported to be fixed.
+
+* Sun Mar 18 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.20-2
+- Disable LUKS tests because LUKS is broken in Rawhide (RHBZ#804345).
+
+* Sat Mar 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.20-1
+- New upstream version 1.17.20.
+
+* Sat Mar 17 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.19-2
+- Add libguestfs-make-fixed-appliance (with man page).
+
+* Fri Mar 16 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.19-1
+- New upstream version 1.17.19.
+
+* Thu Mar 15 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.18-1
+- New upstream version 1.17.18.
+
+* Wed Mar 14 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.17-1
+- New upstream version 1.17.17.
+
+* Wed Mar 14 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.16-2
+- Bump and rebuild.
+
+* Tue Mar 13 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.16-1
+- New upstream version 1.17.16.
+
+* Mon Mar 12 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.15-1
+- New upstream version 1.17.15.
+
+* Fri Mar 09 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.14-1
+- New upstream version 1.17.14.
+
+* Thu Mar 08 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.13-1
+- New upstream version 1.17.13.
+
+* Thu Mar 08 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.12-2
+- Enable Japanese man pages, since these are in a better state upstream.
+
+* Wed Mar 07 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.12-1
+- New upstream version 1.17.12.
+
+* Wed Mar 07 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.11-2
+- Require netpbm-progs, icoutils. These are needed for icon generation
+ during inspection, but were not being pulled in before.
+
+* Mon Mar 05 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.11-1
+- New upstream version 1.17.11.
+
+* Sat Mar 03 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.10-2
+- New upstream version 1.17.10.
+- Rebase Ruby patch against new libguestfs.
+
+* Wed Feb 29 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.9-1
+- New upstream version 1.17.9.
+
+* Wed Feb 15 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.8-1
+- New upstream version 1.17.8.
+
+* Mon Feb 13 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.7-1
+- New upstream version 1.17.7.
+
+* Fri Feb 10 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.6-1
+- +BR ruby-irb.
+- Make virtio unconditional. It's been a very long time since disabling
+ virtio was a good idea.
+- Disable some packages not available in RHEL 7.
+- New upstream version 1.17.6.
+
+* Fri Feb 10 2012 Petr Pisar <ppisar@redhat.com> - 1:1.17.5-3
+- Rebuild against PCRE 8.30
+
+* Thu Feb 9 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.5-2
+- Rebuild with ruby(abi) = 1.9.1.
+
+* Wed Feb 8 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.5-1
+- New upstream version 1.17.5.
+- Remove usrmove workaround patch, now upstream.
+
+* Wed Feb 8 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.4-8
+- Further Ruby 1.9 changes.
+
+* Tue Feb 07 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.4-7
+- Bump and rebuild for Ruby update.
+
+* Mon Feb 6 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.4-6
+- Add workaround for usrmove in Fedora.
+
+* Wed Feb 1 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.4-1
+- New upstream version 1.17.4.
+- Remove patch now upstream.
+
+* Sat Jan 28 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.3-2
+- New upstream version 1.17.3.
+- Remove patch now upstream.
+- Add upstream patch to fix OCaml bytecode compilation.
+
+* Fri Jan 27 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.2-3
+- Upstream patch to work with udev >= 176.
+
+* Thu Jan 26 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.2-2
+- New upstream version 1.17.2.
+- Use libdb-utils instead of old db4-utils.
+- net-tools is no longer used; replaced by iproute (RHBZ#784647).
+- Try re-enabling tests on i686.
+
+* Tue Jan 24 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.17.1-1
+- New upstream version 1.17.1.
+
+* Mon Jan 23 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.16.0-1
+- New upstream version 1.16.0.
+- Remove patches which are now upstream.
+- GObject: Move *.typelib file to base gobject package.
+
+* Sun Jan 22 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.19-1
+- New upstream version 1.15.19.
+- +BR psmisc for the appliance.
+- Includes GObject bindings in libguestfs-gobject and
+ libguestfs-gobject-devel subpackages.
+- Include upstream patches for PHP 5.4.
+
+* Thu Jan 19 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.18-1
+- New upstream version 1.15.18.
+
+* Wed Jan 18 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.17-1
+- New upstream version 1.15.17.
+- New tool: virt-format.
+
+* Tue Jan 10 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.16-1
+- New upstream version 1.15.16.
+
+* Sun Jan 8 2012 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.15-2
+- New upstream version 1.15.15.
+- Updated gnulib fixes builds with gcc 4.7.
+- Rebuild for OCaml 3.12.1.
+- Add explicit BR perl-hivex, required for various Perl virt tools.
+
+* Fri Dec 23 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.14-1
+- New upstream version 1.15.14.
+- Remove three patches, now upstream.
+
+* Thu Dec 22 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.13-4
+- New upstream version 1.15.13.
+- Fixes Security: Mitigate possible privilege escalation via SG_IO ioctl
+ (CVE-2011-4127, RHBZ#757071).
+- Add three upstream patches to fix 'make check'.
+
+* Thu Dec 22 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.12-1
+- New upstream version 1.15.12.
+
+* Fri Dec 9 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.11-1
+- New upstream version 1.15.11.
+
+* Tue Dec 6 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.10-1
+- New upstream version 1.15.10.
+- Remove patch, now upstream.
+
+* Sat Dec 3 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.9-2
+- New upstream version 1.15.9.
+- Add upstream patch to fix Augeas library detection.
+- Appliance explicitly requires libxml2 (because Augeas >= 0.10 requires it),
+ although it was implicitly included already.
+
+* Tue Nov 29 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.8-1
+- New upstream version 1.15.8.
+
+* Tue Nov 29 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.7-1
+- New upstream version 1.15.7.
+
+* Thu Nov 24 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.6-1
+- New upstream version 1.15.6.
+
+* Mon Nov 21 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.5-1
+- New upstream version 1.15.5.
+- Add guestfs-testing(1) man page.
+
+* Thu Nov 17 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.4-2
+- New upstream version 1.15.4.
+- Remove patch which is now upstream.
+- libguestfs_jni.a is no longer built.
+
+* Fri Nov 11 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.3-3
+- Add upstream patch to disable part of virt-df test.
+
+* Thu Nov 10 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.3-1
+- New upstream version 1.15.3.
+- Fix list of BuildRequires so they precisely match the appliance.
+
+* Thu Nov 3 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.2-1
+- New upstream version 1.15.2.
+- ocaml-pcre is no longer required for virt-resize.
+- xmlstarlet is no longer required for virt-sysprep.
+
+* Tue Nov 1 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.1-1
+- New upstream version 1.15.1.
+
+* Fri Oct 28 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.15.0-1
+- Stable branch 1.14.0 was released. This is the new development
+ branch version 1.15.0.
+
+* Wed Oct 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.26-1
+- New upstream version 1.13.26.
+
+* Wed Oct 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.25-1
+- New upstream version 1.13.25.
+
+* Mon Oct 24 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.24-1
+- New upstream version 1.13.24.
+- This version includes upstream workarounds for broken qemu, so both
+ non-upstream patches have now been removed from Fedora.
+
+* Fri Oct 21 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1:1.13.23-1.1
+- rebuild with new gmp without compat lib
+
+* Thu Oct 20 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.23-1
+- New upstream version 1.13.23.
+
+* Wed Oct 19 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.22-2
+- New upstream version 1.13.22.
+- Remove 3x upstream patches.
+- Renumber the two remaining non-upstream patches as patch0, patch1.
+- Rebase patch1.
+
+* Mon Oct 17 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.21-4
+- Add upstream patch to skip FUSE tests if there is no /dev/fuse.
+ This allows us also to remove the Fedora-specific patch which
+ disabled these tests before.
+
+* Sat Oct 15 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.21-3
+- Add upstream patch to fix virt-sysprep test.
+
+* Fri Oct 14 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.21-2
+- New upstream version 1.13.21.
+- Move virt-sysprep to libguestfs-tools, to avoid pulling in extra
+ dependencies for RHEV-H. This tool is not likely to be useful
+ for RHEV-H in its current form anyway.
+- Change BR cryptsetup-luks -> cryptsetup since that package changed.
+
+* Wed Oct 12 2011 Peter Schiffer <pschiffe@redhat.com> - 1:1.13.20-1.1
+- rebuild with new gmp
+
+* Tue Oct 11 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.20-1
+- New upstream version 1.13.20.
+
+* Sat Oct 8 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.19-1
+- New upstream version 1.13.19.
+- New tool: virt-sysprep.
+- Remove the old guestfish and libguestfs-mount packages, and put these
+ tools into libguestfs-tools. This change is long overdue, but is also
+ necessitated by the new virt-sysprep tool. This new tool would pull
+ in guestfish anyway, so having separate packages makes no sense.
+- Remove old obsoletes for virt-cat, virt-df, virt-df2 and virt-inspector,
+ since those packages existed only in much older Fedora.
+
+* Wed Oct 5 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.18-1
+- New upstream version 1.13.18.
+- New tool: virt-alignment-scan.
+
+* Tue Oct 4 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.17-1
+- New upstream version 1.13.17.
+- New tool: virt-sparsify.
+
+* Sat Oct 1 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.16-1
+- New upstream version 1.13.16.
+
+* Thu Sep 29 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.15-2
+- Rearrange description to make it clearer.
+- virt-resize was written in OCaml. Move it to libguestfs-tools-c
+ subpackage since it doesn't require Perl.
+
+* Wed Sep 28 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.15-1
+- New upstream version 1.13.15.
+- Add lzop program to the appliance (for compress-out API).
+- Remove upstream patch.
+
+* Mon Sep 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.14-2
+- Upstream patch to fix timer check failures during boot (RHBZ#502058).
+
+* Sat Sep 24 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.14-1
+- New upstream version 1.13.14.
+
+* Wed Sep 21 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.13-1
+- Add Erlang bindings in erlang-libguestfs subpackage.
+- Remove upstream patch.
+
+* Fri Sep 16 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.12-4
+- Don't require grub. See RHBZ#737261.
+- Note this (hopefully temporarily) breaks guestfs_grub_install API.
+- Include upstream patch to add guestfs_grub_install into an optional group.
+
+* Wed Sep 14 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.12-1
+- New upstream version 1.13.12.
+
+* Thu Sep 1 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.11-1
+- New upstream version 1.13.11.
+
+* Tue Aug 30 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.10-2
+- Remove MAKEDEV dependency (RHBZ#727247).
+
+* Sun Aug 28 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.10-1
+- New upstream version 1.13.10.
+
+* Fri Aug 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.9-1
+- New upstream version 1.13.9.
+
+* Fri Aug 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.8-1
+- New upstream version 1.13.8.
+- Static python library is no longer built, so don't rm it.
+
+* Tue Aug 23 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.7-1
+- New upstream version 1.13.7.
+- configure --with-extra version string contains Fedora release.
+- Build with make V=1 to display full compile commands.
+- Remove /usr/sbin PATH setting, not used for a very long time.
+
+* Fri Aug 19 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.6-2
+- New upstream version 1.13.6.
+- Rebase non-upstream patch to fix qemu -machine option.
+
+* Wed Aug 17 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.5-1
+- New upstream version 1.13.5.
+
+* Thu Aug 11 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.4-1
+- New upstream version 1.13.4.
+
+* Mon Aug 8 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.3-4
+- New upstream version 1.13.3.
+- 'test-getlogin_r.c:55: assertion failed' test must now be fixed in
+ gnulib/tests directory instead of daemon/tests (the latter directory
+ no longer exists).
+- Only run testsuite on x86_64 because of qemu bug.
+
+* Tue Aug 2 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.13.2-3
+- Switch Rawhide to use the new development branch (1.13).
+- New upstream version 1.13.2.
+- Remove upstream patch.
+- Ensure config.log is printed, even in the error case.
+
+* Tue Jul 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.1-4
+- New upstream stable branch version 1.12.1.
+- Remove 5 x upstream patches.
+- Add non-upstream patch to deal with broken qemu -machine option.
+- Add upstream patch to fix segfault in OCaml bindings.
+
+* Tue Jul 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.0-11
+- Bump and rebuild.
+
+* Fri Jul 22 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.0-10
+- Rebuild against fixed hivex 1.2.7-7 in dist-f16-perl.
+
+* Thu Jul 21 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.0-9
+- Attempt rebuild in dist-f16-perl.
+
+* Thu Jul 21 2011 Petr Sabata <contyk@redhat.com> - 1:1.12.0-8
+- Perl mass rebuild
+
+* Thu Jul 21 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.0-4
+- Disable tests, use quickcheck, because of RHBZ#723555, RHBZ#723822.
+
+* Wed Jul 20 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.0-2
+- Readd patch to fix virtio-serial test for qemu 0.15.
+
+* Wed Jul 20 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.0-1
+- New stable version 1.12.0 for Fedora 16.
+- Remove upstream patch.
+- Disable tests on i686 (because of RHBZ#723555).
+
+* Wed Jul 20 2011 Petr Sabata <contyk@redhat.com> - 1:1.11.20-3
+- Perl mass rebuild
+
+* Tue Jul 19 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.20-2
+- Add upstream patch to fix virtio-serial test for qemu 0.15.
+
+* Tue Jul 19 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.20-1
+- New upstream version 1.11.20.
+- Replace standard README file with one suited for Fedora.
+- Add guestfs-java(3) manpage to libguestfs-java-devel package.
+
+* Mon Jul 18 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.19-1
+- New upstream version 1.11.19.
+- Remove upstream patch.
+- Add Ukrainian (uk) man pages subpackage.
+
+* Fri Jul 15 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.18-2
+- Add upstream patch to fix regression test.
+
+* Fri Jul 15 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.18-1
+- New upstream version 1.11.18.
+- Force febootstrap >= 3.7 which contains a fix for latest Rawhide.
+- Use --enable-install-daemon to install guestfsd.
+
+* Thu Jul 14 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.17-1
+- New upstream version 1.11.17.
+
+* Wed Jul 13 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.16-1
+- New upstream version 1.11.16.
+
+* Tue Jul 12 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.15-1
+- New upstream version 1.11.15.
+
+* Wed Jul 6 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.14-1
+- New upstream version 1.11.14.
+
+* Wed Jul 6 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.13-3
+- Further updates to libguestfs-live-service after feedback from
+ Dan Berrange and Lennart Poettering.
+
+* Tue Jul 5 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.13-2
+- Add libguestfs-live-service subpackage. This can be installed in
+ virtual machines in order to enable safe editing of files in running
+ guests (eg. guestfish --live).
+
+* Thu Jun 30 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.13-1
+- New upstream version 1.11.13.
+
+* Wed Jun 29 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.12-3
+- Bump and rebuild for parted 3.0.
+- Depend on fixed parted >= 3.0-2.
+
+* Tue Jun 28 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.12-1
+- New upstream version 1.11.12.
+
+* Tue Jun 21 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.11-1
+- New upstream version 1.11.11.
+
+* Mon Jun 20 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.10-3
+- Temporarily stop setting CCFLAGS in perl subdirectory.
+ See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=628522
+
+* Fri Jun 17 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1:1.11.10-2
+- Perl mass rebuild
+
+* Fri Jun 10 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.10-1
+- New upstream version 1.11.10.
+- Enable tests since fix for RHBZ#710921 is in Rawhide kernel package.
+
+* Fri Jun 10 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1:1.11.9-8
+- Perl 5.14 mass rebuild
+
+* Sun Jun 5 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.9-7
+- Build against new parted.
+- Disable tests on i686 because of RHBZ#710921.
+- Remove recipes/ doc directory. This is no longer present because it
+ was replaced by a guestfs-recipes(1) man page.
+
+* Sat Jun 4 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.9-1
+- New upstream version 1.11.9.
+
+* Wed May 18 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.8-1
+- New upstream version 1.11.8.
+- "zero" command test is fixed now, so we don't need to skip it.
+
+* Tue May 17 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.7-3
+- New upstream version 1.11.7.
+- Depends on hivex >= 1.2.7.
+- Remove upstream patch.
+- Skip test of "zero" command (RHBZ#705499).
+
+* Mon May 9 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.5-2
+- configure: Use Python platform-dependent site-packages.
+
+* Mon May 9 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.5-1
+- New upstream version 1.11.5.
+- virt-edit has been rewritten in C, therefore this tool has been moved
+ into the libguestfs-tools-c package.
+
+* Sun May 8 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.4-1
+- New upstream version 1.11.4.
+
+* Fri Apr 22 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.3-1
+- New upstream version 1.11.3.
+
+* Mon Apr 18 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.2-1
+- New upstream version 1.11.2.
+- Fixes Python bindings when used in Python threads.
+- Remove upstream patch.
+
+* Sat Apr 16 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.1-2
+- New upstream version 1.11.1.
+- Add upstream patch so we don't depend on libtool.
+
+* Fri Apr 15 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.0-2
+- Bump and rebuild.
+
+* Tue Apr 12 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.11.0-1
+- New upstream development branch 1.11.0.
+- New Source URL.
+- Remove patches which are now upstream.
+
+* Sun Apr 10 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.18-4
+- Include further fixes to virt-resize from upstream.
+
+* Sat Apr 9 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.18-2
+- New upstream version 1.9.18.
+- Requires ocaml-pcre for new virt-resize.
+- Remove libguestfs-test-tool-helper program which is no longer used.
+- Include upstream fix for virt-resize build.
+
+* Wed Apr 6 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.17-2
+- Remove partially translated Ukrainian manpages.
+
+* Tue Apr 5 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.17-1
+- New upstream version 1.9.17.
+
+* Fri Apr 1 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.16-1
+- New upstream version 1.9.16.
+
+* Fri Apr 1 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.15-1
+- New upstream version 1.9.15.
+- Add BR libconfig-devel.
+- Add /etc/libguestfs-tools.conf (config file for guestfish, guestmount,
+ virt-rescue; in future for other tools as well).
+
+* Mon Mar 28 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.14-1
+- New upstream version 1.9.14.
+- Include 'acl' as BR so virt-rescue gets getfacl and setfacl programs.
+
+* Mon Mar 28 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.13-2
+- Include 'attr' as BR (required for getfattr, setfattr programs in
+ virt-rescue).
+
+* Thu Mar 24 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.13-1
+- New upstream version 1.9.13.
+
+* Fri Mar 18 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.12-1
+- New upstream version 1.9.12.
+
+* Wed Mar 16 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.11-2
+- Add runtime requires on minimum glibc because of newly readable binaries.
+
+* Tue Mar 15 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.11-1
+- New upstream version 1.9.11.
+- Add generated Ruby documentation (rdoc).
+
+* Tue Mar 8 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.10-1
+- New upstream version 1.9.10.
+- Remove patches (now upstream).
+
+* Fri Mar 4 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.9-2
+- Include upstream patches to fix virt-make-fs with qemu-img 0.14.
+
+* Fri Mar 4 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.9-1
+- New upstream version 1.9.9.
+
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:1.9.8-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Sun Feb 6 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.8-1
+- New upstream version 1.9.8.
+
+* Sun Feb 6 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.7-7
+- Rebuild against rpm-4.9.0-0.beta1.6.fc15 to fix OCaml deps. See discussion:
+ http://lists.fedoraproject.org/pipermail/devel/2011-February/148398.html
+
+* Wed Feb 2 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.7-6
+- Add temporary non-upstream patch to fix /etc/mtab.
+ See: https://www.redhat.com/archives/libguestfs/2011-February/msg00006.html
+- Add fix for regressions/rhbz557655.sh so it works when tracing is enabled.
+- Add guestfs-perl(3) man page.
+
+* Tue Feb 1 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.7-3
+- Enable trace in 'make check' section.
+
+* Sun Jan 30 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.7-1
+- New upstream version 1.9.7.
+
+* Wed Jan 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.6-2
+- Bump and rebuild.
+
+* Sat Jan 22 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.6-1
+- New upstream version 1.9.6.
+
+* Tue Jan 18 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.5-1
+- New upstream version 1.9.5.
+
+* Sat Jan 15 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.4-1
+- New upstream version 1.9.4.
+
+* Fri Jan 14 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.3-2
+- Only runtime require febootstrap-supermin-helper (not whole of
+ febootstrap).
+
+* Tue Jan 11 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.3-1
+- New upstream version 1.9.3.
+
+* Wed Jan 05 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.2-2
+- Bump and rebuild.
+
+* Mon Jan 3 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.2-1
+- New upstream version 1.9.2.
+- New tools: virt-copy-in, virt-copy-out, virt-tar-in, virt-tar-out.
+ These are just shell script wrappers around guestfish so they are
+ included in the guestfish package.
+
+* Fri Dec 31 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.1-1
+- New upstream version 1.9.1.
+
+* Tue Dec 21 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.0-2
+- Bump and rebuild.
+
+* Sun Dec 19 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.9.0-1
+- New upstream development branch 1.9.0.
+- Include ROADMAP in devel package.
+
+* Thu Dec 16 2010 Richard Jones <rjones@redhat.com> - 1:1.7.24-1
+- New upstream version 1.7.24.
+- Adds getxattr/lgetxattr APIs to support guestfs-browser.
+
+* Sat Dec 11 2010 Richard Jones <rjones@redhat.com> - 1:1.7.23-1
+- New upstream version 1.7.23.
+
+* Sat Dec 11 2010 Richard Jones <rjones@redhat.com> - 1:1.7.22-1
+- New upstream version 1.7.22.
+- Depend on febootstrap 3.3 which fixes the checksum stability problem.
+
+* Fri Dec 10 2010 Richard Jones <rjones@redhat.com> - 1:1.7.21-1
+- New upstream version 1.7.21.
+
+* Tue Dec 7 2010 Richard Jones <rjones@redhat.com> - 1:1.7.20-1
+- New upstream version 1.7.20.
+- Remove patches which are upstream.
+
+* Tue Dec 7 2010 Richard Jones <rjones@redhat.com> - 1:1.7.19-15
+- Rebuild appliance with febootstrap 3.1-5 because we accidentally
+ reopened RHBZ#654638.
+
+* Mon Dec 6 2010 Richard Jones <rjones@redhat.com> - 1:1.7.19-14
+- Rebuild appliance properly using febootstrap 3.1 and alternate yum repo.
+
+* Sun Dec 5 2010 Richard Jones <rjones@redhat.com> - 1:1.7.19-1
+- New upstream development version 1.7.19.
+- Appliance building in this version has been substantially rewritten
+ and this requires febootstrap >= 3.0 to build.
+- createrepo no longer required.
+- Supermin appliance is the default.
+
+* Wed Dec 1 2010 Richard Jones <rjones@redhat.com> - 1:1.7.18-1
+- New upstream development version 1.7.18.
+
+* Tue Nov 30 2010 Richard Jones <rjones@redhat.com> - 1:1.7.17-1
+- New upstream development version 1.7.17.
+
+* Fri Nov 26 2010 Richard Jones <rjones@redhat.com> - 1:1.7.16-1
+- New upstream development version 1.7.16.
+- guestfish no longer requires pod2text, hence no longer requires perl.
+- Require febootstrap >= 2.11.
+
+* Fri Nov 26 2010 Richard Jones <rjones@redhat.com> - 1:1.7.15-2
+- New upstream development version 1.7.15.
+- Split out new libguestfs-tools-c package from libguestfs-tools.
+ . This is so that the -tools-c package can be pulled in by people
+ wanting to avoid a dependency on Perl, while -tools pulls in everything
+ as before.
+ . The C tools currently are: cat, df, filesystems, fish, inspector, ls,
+ mount, rescue.
+ . guestfish still requires pod2text which requires perl. This will be
+ rectified in the next release.
+ . libguestfs-tools no longer pulls in guestfish.
+- guestfish also depends on: less, man, vi
+- Add BR db4-utils (although since RPM needs it, it not really necessary).
+- Runtime requires on db4-utils should be on core lib, not tools package.
+- Change all "Requires: perl-Foo" to "Requires: perl(Foo)".
+
+* Thu Nov 25 2010 Richard Jones <rjones@redhat.com> - 1:1.7.14-1
+- New upstream development version 1.7.14.
+
+* Wed Nov 24 2010 Richard Jones <rjones@redhat.com> - 1:1.7.13-3
+- New upstream development version 1.7.13.
+- New manual pages containing example code.
+- Ship examples for C, OCaml, Ruby, Python.
+- Don't ship HTML versions of man pages.
+- Rebase no-fuse-test patch to latest version.
+
+* Tue Nov 23 2010 Richard Jones <rjones@redhat.com> - 1:1.7.12-1
+- New upstream development version 1.7.12.
+- New tool: virt-filesystems. virt-list-filesystems and virt-list-partitions
+ are deprecated, but still included in the package.
+
+* Wed Nov 17 2010 Richard Jones <rjones@redhat.com> - 1:1.7.11-1
+- New upstream development version 1.7.11.
+- Fix Source0 URL which had pointed to the 1.5 directory.
+- virt-inspector is not a dependency of guestmount.
+
+* Wed Nov 17 2010 Richard Jones <rjones@redhat.com> - 1:1.7.10-1
+- New upstream development version 1.7.10.
+
+* Tue Nov 16 2010 Richard Jones <rjones@redhat.com> - 1:1.7.9-1
+- New upstream development version 1.7.9.
+
+* Mon Nov 15 2010 Richard Jones <rjones@redhat.com> - 1:1.7.8-1
+- New upstream development version 1.7.8.
+- Add Obsoletes so perl-Sys-Guestfs overrides perl-libguestfs (RHBZ#652587).
+
+* Mon Nov 15 2010 Richard Jones <rjones@redhat.com> - 1:1.7.7-1
+- New upstream development version 1.7.7.
+- Rename perl-libguestfs as perl-Sys-Guestfs (RHBZ#652587).
+
+* Sat Nov 13 2010 Richard Jones <rjones@redhat.com> - 1:1.7.6-1
+- New upstream development version 1.7.6.
+
+* Sat Nov 13 2010 Richard Jones <rjones@redhat.com> - 1:1.7.5-2
+- New upstream development version 1.7.5.
+- Remove hand-installation of Ruby bindings.
+- Remove upstream patch.
+
+* Thu Nov 11 2010 Richard Jones <rjones@redhat.com> - 1:1.7.4-2
+- New upstream development version 1.7.4.
+- ocaml-xml-light is no longer required.
+- Remove guestfs-actions.h and guestfs-structs.h. Libguestfs now
+ only exports a single <guestfs.h> header file.
+- Add patch to fix broken Perl test.
+- Remove workaround for RHBZ#563103.
+
+* Mon Nov 8 2010 Richard Jones <rjones@redhat.com> - 1:1.7.3-1
+- New upstream development version 1.7.3.
+- Add AUTHORS file from tarball.
+
+* Fri Nov 5 2010 Richard Jones <rjones@redhat.com> - 1:1.7.2-1
+- New upstream development version 1.7.2.
+- Add requires ruby to ruby-libguestfs package.
+
+* Wed Nov 3 2010 Richard Jones <rjones@redhat.com> - 1:1.7.1-1
+- New upstream development version 1.7.1.
+- Add BR gperf.
+
+* Tue Nov 2 2010 Richard Jones <rjones@redhat.com> - 1:1.7.0-1
+- New upstream development branch and version 1.7.0.
+
+* Fri Oct 29 2010 Richard Jones <rjones@redhat.com> - 1:1.5.26-1
+- New upstream development version 1.5.26.
+
+* Thu Oct 28 2010 Richard Jones <rjones@redhat.com> - 1:1.5.25-1
+- New upstream development version 1.5.25.
+- Rewritten virt-inspector.
+- Requires febootstrap >= 2.10.
+- New virt-inspector requires db_dump program.
+
+* Wed Oct 27 2010 Richard Jones <rjones@redhat.com> - 1:1.5.24-2
+- Attempt to run tests.
+
+* Wed Oct 27 2010 Richard Jones <rjones@redhat.com> - 1:1.5.24-1
+- New upstream development version 1.5.24.
+
+* Sat Oct 23 2010 Richard Jones <rjones@redhat.com> - 1:1.5.23-1
+- Fix for libguestfs: missing disk format specifier when adding a disk
+ (RHBZ#642934, CVE-2010-3851).
+
+* Tue Oct 19 2010 Richard Jones <rjones@redhat.com> - 1:1.5.22-1
+- New upstream development version 1.5.22.
+
+* Sat Oct 9 2010 Richard Jones <rjones@redhat.com> - 1:1.5.21-2
+- guestfish no longer requires virt-inspector.
+
+* Fri Oct 1 2010 Richard Jones <rjones@redhat.com> - 1:1.5.21-1
+- New upstream development version 1.5.21.
+
+* Sun Sep 26 2010 Richard Jones <rjones@redhat.com> - 1:1.5.20-1
+- New upstream development version 1.5.20.
+
+* Wed Sep 22 2010 Richard Jones <rjones@redhat.com> - 1:1.5.18-1
+- New upstream development version 1.5.18.
+- Note that guestfish '-a' and '-d' options were broken in 1.5.17, so
+ upgrading to this version is highly recommended.
+
+* Tue Sep 21 2010 Richard Jones <rjones@redhat.com> - 1:1.5.17-1
+- New upstream development version 1.5.17.
+
+* Wed Sep 15 2010 Richard Jones <rjones@redhat.com> - 1:1.5.16-1
+- New upstream development version 1.5.16.
+
+* Wed Sep 15 2010 Richard Jones <rjones@redhat.com> - 1:1.5.15-1
+- New upstream development version 1.5.15.
+
+* Tue Sep 14 2010 Richard Jones <rjones@redhat.com> - 1:1.5.14-1
+- New upstream development version 1.5.14.
+
+* Mon Sep 13 2010 Richard Jones <rjones@redhat.com> - 1:1.5.13-1
+- New upstream version 1.5.13.
+- Removed the patch workaround for RHBZ#630583. The same workaround
+ is now upstream (the bug is not fixed).
+
+* Sat Sep 11 2010 Richard Jones <rjones@redhat.com> - 1:1.5.12-1
+- New upstream version 1.5.12.
+
+* Fri Sep 10 2010 Richard Jones <rjones@redhat.com> - 1:1.5.11-1
+- New upstream version 1.5.11.
+- Note: fixes a serious bug in guestfish 'copy-out' command.
+
+* Thu Sep 9 2010 Richard Jones <rjones@redhat.com> - 1:1.5.10-1
+- New upstream version 1.5.10.
+
+* Wed Sep 8 2010 Richard Jones <rjones@redhat.com> - 1:1.5.9-2
+- Disable tests, still failing because of RHBZ#630777.
+
+* Wed Sep 8 2010 Richard Jones <rjones@redhat.com> - 1:1.5.9-1
+- New upstream version 1.5.9.
+
+* Mon Sep 6 2010 Richard Jones <rjones@redhat.com> - 1:1.5.8-2
+- Add patch to work around RHBZ#630583 and reenable tests.
+
+* Sat Sep 4 2010 Richard Jones <rjones@redhat.com> - 1:1.5.8-1
+- New upstream version 1.5.8.
+- Add BR po4a for translations of man pages.
+- Add PHP bindings.
+- Remove partially-translated Japanese webpages.
+
+* Wed Sep 1 2010 Richard Jones <rjones@redhat.com> - 1:1.5.7-1
+- New upstream version 1.5.7.
+- 'debug' command is enabled by default now.
+
+* Fri Aug 27 2010 Richard Jones <rjones@redhat.com> - 1:1.5.6-1
+- New upstream version 1.5.6.
+
+* Fri Aug 27 2010 Richard Jones <rjones@redhat.com> - 1:1.5.5-2
+- Use bug-fixed febootstrap 2.9.
+
+* Thu Aug 26 2010 Richard Jones <rjones@redhat.com> - 1:1.5.5-1
+- New upstream version 1.5.5.
+
+* Tue Aug 24 2010 Richard Jones <rjones@redhat.com> - 1:1.5.4-2
+- Disable tests again, because the Rawhide kernel still won't boot.
+
+* Tue Aug 24 2010 Richard Jones <rjones@redhat.com> - 1:1.5.4-1
+- New upstream development version 1.5.4.
+- Now requires febootstrap >= 2.8 and qemu >= 0.12.
+- Re-enable tests because RHBZ#624854 is supposed to be fixed.
+- Upstream Source URL has changed.
+
+* Wed Aug 18 2010 Richard Jones <rjones@redhat.com> - 1:1.5.3-2
+- Disable tests because of RHBZ#624854.
+
+* Tue Aug 17 2010 Richard Jones <rjones@redhat.com> - 1:1.5.3-1
+- New upstream development version 1.5.3.
+
+* Wed Aug 11 2010 Richard Jones <rjones@redhat.com> - 1:1.5.2-6
+- Bump and rebuild.
+
+* Thu Aug 05 2010 Richard Jones - 1:1.5.2-5
+- Bump and rebuild.
+
+* Fri Jul 23 2010 David Malcolm <dmalcolm@redhat.com> - 1:1.5.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
+
+* Fri Jul 23 2010 David Malcolm <dmalcolm@redhat.com> - 1:1.5.2-3
+- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
+
+* Thu Jul 22 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.5.2-2
+- New upstream development version 1.5.2.
+- +BuildRequires: cryptsetup-luks.
+
+* Wed Jul 21 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.5.1-1
+- New upstream development version 1.5.1.
+
+* Tue Jul 20 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.5.0-7
+- Requires binutils (RHBZ#616437).
+
+* Mon Jul 19 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.5.0-6
+- Fix libguestfs-find-requires.sh for new location of hostfiles (RHBZ#615946).
+
+* Thu Jul 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.5.0-5
+- Include RELEASE-NOTES in devel package.
+
+* Thu Jul 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.5.0-4
+- New development branch 1.5.0.
+- Remove two upstream patches.
+- Work around permanently broken test-getlogin_r Gnulib test.
+
+* Mon Jun 28 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.21-4
+- Explicitly depend on e2fsprogs.
+- Add patch to add e2fsprogs to the appliance.
+- Add patch to fix GFS kernel module problem.
+
+* Fri Jun 25 2010 Mamoru Tasaka <mtasaka@ioa.s.u-tokyo.ac.jp> - 1:1.3.21-2
+- Rebuild
+
+* Wed Jun 16 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.21-1
+- New upstream version 1.3.21.
+
+* Tue Jun 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.20-1
+- New upstream version 1.3.20.
+- Since upstream commit a043b6854a0c4 we don't need to run make install
+ twice.
+
+* Fri Jun 4 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.19-1
+- New upstream version 1.3.19.
+
+* Wed Jun 2 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.18-1
+- New upstream version 1.3.18.
+
+* Thu May 27 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.17-1
+- New upstream version 1.3.17.
+- Change repo name to 'fedora-14'.
+
+* Wed May 26 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.16-6
+- Co-own bash_completion.d directory.
+
+* Tue May 25 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.16-4
+- New upstream version 1.3.16.
+- Add guestfish bash tab completion script.
+
+* Mon May 24 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.14-1
+- New upstream version 1.3.14.
+
+* Sun May 16 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.13-1
+- New upstream version 1.3.13.
+- Add BUGS to documentation.
+- Force update of hivex dependency to 1.2.2 since it contains
+ important registry import fixes.
+- Remove patch1, now upstream.
+
+* Fri May 14 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.12-3
+- Backport supermin build fix from upstream.
+- Further changes required for new layout of supermin appliance.
+
+* Fri May 14 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.12-1
+- New upstream version 1.3.12.
+- febootstrap >= 2.7 is required at compile time and at runtime (at runtime
+ because of the new febootstrap-supermin-helper).
+- Bugs fixed: 591155 591250 576879 591142 588651 507810 521674 559963 516096.
+
+* Sat May 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.11-1
+- New upstream version 1.3.11.
+
+* Fri May 7 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.10-2
+- New upstream version 1.3.10.
+
+* Thu May 06 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.9-2
+- Bump and rebuild against updated libconfig
+
+* Fri Apr 30 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.9-1
+- New upstream version 1.3.9.
+
+* Thu Apr 29 2010 Marcela Maslanova <mmaslano@redhat.com> - 1:1.3.8-2
+- Mass rebuild with perl-5.12.0
+
+* Tue Apr 27 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.8-1
+- New upstream version 1.3.8.
+
+* Fri Apr 23 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.7-1
+- New upstream version 1.3.7.
+- NOTE: fixes a segfault in guestfish 1.3.6 when using the -a option.
+
+* Thu Apr 22 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.6-1
+- New upstream version 1.3.6.
+
+* Mon Apr 19 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.5-1
+- New upstream version 1.3.5.
+
+* Sat Apr 17 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.4-1
+- New upstream version 1.3.4.
+
+* Sun Apr 11 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.3-1
+- New upstream version 1.3.3.
+- New virt-resize option --LV-expand.
+- New API: lvresize-free.
+- Fixes RHBZ#581501.
+
+* Sun Apr 11 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.2-3
+- Disable checksum-device test.
+
+* Sat Apr 10 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.2-2
+- Bump and rebuild.
+
+* Sat Apr 10 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.2-1
+- New upstream version 1.3.2.
+- New APIs: checksum-device, part-del, part-get-bootable, part-get-mbr-id,
+ part-set-mbr-id, vgscan, ntfsresize, txz-in, txz-out.
+- Enhanced/fixed virt-resize tool.
+- Enhanced virt-list-partitions tool.
+- Fixes: 580016, 580650, 579155, 580556.
+
+* Sat Apr 10 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.1-4
+- Bump and rebuild.
+
+* Thu Apr 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.1-3
+- Runtime requires should only be on libguestfs-tools subpackage.
+
+* Thu Apr 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.1-2
+- Missing BR on qemu-img package.
+
+* Thu Apr 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.3.1-1
+- New upstream version 1.3.1.
+- For explanation of apparently large version jump, see:
+ https://www.redhat.com/archives/libguestfs/2010-April/msg00057.html
+- New tool: virt-make-fs.
+- New API: guestfs_zero_device.
+- Fixes RHBZ#580246 (tar-in command hangs if uploading more than
+ available space)
+- Fixes RHBZ#579664 (guestfish doesn't report error when there is not
+ enough space for image allocation)
+- +BR perl-String-ShellQuote (for virt-make-fs).
+
+* Tue Mar 30 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.89-1
+- New upstream version 1.0.89.
+- Improved version of virt-win-reg.
+- Many smaller bugfixes.
+- Requires hivex >= 1.2.1.
+- Remove TERM=dumb patch which is now upstream.
+
+* Tue Mar 30 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.88-7
+- Backport of TERM=dumb patch from upstream.
+- Workaround failure caused by RHBZ#575734.
+- Workaround unknown failure of test_swapon_label_0.
+
+* Tue Mar 30 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.88-5
+- Attempted workaround for RHBZ#563103, so we can reenable tests.
+
+* Fri Mar 26 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.88-2
+- Remember to check in the new sources.
+
+* Fri Mar 26 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.88-1
+- New upstream version 1.0.88.
+- Mainly small bugfixes.
+- Update Spanish translation of libguestfs (RHBZ#576876).
+- Use ext4 dev tools on RHEL 5 (RHBZ#576688).
+- Add support for minix filesystem (RHBZ#576689).
+
+* Fri Mar 26 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.87-2
+- Add vim-minimal to BR, it is now required by the appliance.
+
+* Tue Mar 23 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.87-1
+- New upstream version 1.0.87.
+- New tools: virt-resize and virt-list-partitions.
+- New APIs: guestfs_copy_size; APIs for querying the relationship between
+ LVM objects.
+- Add vim to the virt-rescue appliance.
+
+* Fri Mar 12 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.86-1
+- New upstream version 1.0.86.
+- libguestfs-supermin-helper rewritten in C (from shell), reduces
+ appliance boot time by 2-3 seconds.
+- Fix parsing of integers in guestfish on 32 bit platforms (RHBZ#569757
+ and RHBZ#567567).
+- Enhance virt-inspector output for Windows guests.
+- Add product_name field to virt-inspector output for all guests.
+- Weaken dependencies on libntfs-3g.so, don't include SONAME in dep.
+- Remove false dependency on libply (plymouth libraries).
+- Spanish translation (RHBZ#570181).
+- Fix bash regexp quoting bug.
+
+* Fri Mar 12 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.85-4
+- Bump and rebuild.
+
+* Thu Mar 11 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.85-3
+- Bump and rebuild.
+
+* Sat Mar 06 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.85-2
+- Bump and rebuild.
+
+* Mon Mar 1 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.85-1
+- New upstream version 1.0.85.
+- Remove hivex, now a separate upstream project and package.
+- Remove supermin quoting patch, now upstream.
+
+* Mon Mar 1 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.84-6
+- Fix quoting in supermin-split script (RHBZ#566511).
+- Don't include bogus './builddir' entries in supermin hostfiles
+ (RHBZ#566512).
+
+* Mon Feb 22 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.84-4
+- Don't include generator.ml in rpm. It's 400K and almost no one will need it.
+- Add comments to spec file about how repo building works.
+- Whitespace changes in the spec file.
+
+* Mon Feb 22 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.84-3
+- Bump and rebuild.
+
+* Tue Feb 16 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.84-2
+- Bump and rebuild.
+
+* Fri Feb 12 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.84-1
+- New upstream version 1.0.84.
+
+* Fri Feb 12 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.83-8
+- Bump and rebuild.
+
+* Thu Feb 11 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.83-7
+- Disable tests. These fail in Koji (on RHEL 5 kernel) because of a
+ bug in preadv/pwritev emulation in glibc (RHBZ#563103).
+
+* Tue Feb 9 2010 Matthew Booth <mbooth@redhat.com> - 1.0.83-6
+- Change buildnonet to buildnet
+- Allow buildnet, mirror, updates, virtio and runtests to be configured by user
+ macros.
+
+* Mon Feb 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.83-5
+- libguestfs-tools should require perl-XML-Writer (RHBZ#562858).
+
+* Mon Feb 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.83-4
+- Use virtio for block device access (RHBZ#509383 is fixed).
+
+* Fri Feb 5 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.83-3
+- Rebuild: possible timing-related build problem in Koji.
+
+* Fri Feb 5 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.83-2
+- New upstream release 1.0.83.
+- This release fixes:
+ Add Marathi translations (RHBZ#561671).
+ Polish translations (RHBZ#502533).
+ Add Gujarti translations (Sweta Kothari) (RHBZ#560918).
+ Update Oriya translations (thanks Manoj Kumar Giri) (RHBZ#559498).
+ Set locale in C programs so l10n works (RHBZ#559962).
+ Add Tamil translation (RHBZ#559877) (thanks to I.Felix)
+ Update Punjabi translation (RHBZ#559480) (thanks Jaswinder Singh)
+- There are significant fixes to hive file handling.
+- Add hivexsh and manual page.
+- Remove two patches, now upstream.
+
+* Sun Jan 31 2010 Richard W.M. Jones <rjones@redhat.com> - 1:1.0.82-7
+- Bump and rebuild.
+
+* Fri Jan 29 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.82-6
+- Backport a better fix for RHBZ557655 test from upstream.
+- Backport fix for unreadable yum.log from upstream.
+
+* Thu Jan 28 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.82-3
+- Backport RHBZ557655 test fix from upstream.
+
+* Thu Jan 28 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.82-1
+- New upstream version 1.0.82. This includes the two patches
+ we were carrying, so those are now removed.
+- This release fixes:
+ RHBZ#559498 (Oriya translation).
+ RHBZ#559480 (Punjabi translation).
+ RHBZ#558593 (Should prevent corruption by multilib).
+ RHBZ#559237 (Telugu translation).
+ RHBZ#557655 (Use xstrtol/xstrtoll to parse integers in guestfish).
+ RHBZ#557195 (Missing crc kernel modules for recent Linux).
+- In addition this contains numerous fixes to the hivex library
+ for parsing Windows Registry files, making hivex* and virt-win-reg
+ more robust.
+- New API call 'filesize'.
+
+* Thu Jan 28 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.81-8
+- Backport special handling of libgcc_s.so.
+- Backport unreadable files patch from RHEL 6 / upstream.
+
+* Fri Jan 22 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.81-5
+- Require febootstrap >= 2.6 (RHBZ#557262).
+
+* Thu Jan 21 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.81-4
+- Rebuild for unannounced soname bump (libntfs-3g.so).
+
+* Fri Jan 15 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.81-3
+- Rebuild for unannounced soname bump (libplybootsplash.so).
+
+* Thu Jan 14 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.81-2
+- Rebuild for broken dependency (iptables soname bump).
+
+* Wed Jan 13 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.81-1
+- New upstream version 1.0.81.
+- Remove two upstream patches.
+- virt-inspector: Make RPM application data more specific (RHBZ#552718).
+
+* Tue Jan 12 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.80-14
+- Reenable tests because RHBZ#553689 is fixed.
+
+* Tue Jan 12 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.80-13
+- Rebuild because of libparted soname bump (1.9 -> 2.1).
+
+* Fri Jan 8 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.80-12
+- qemu in Rawhide is totally broken (RHBZ#553689). Disable tests.
+
+* Thu Jan 7 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0.80-11
+- Remove gfs-utils (deprecated and removed from Fedora 13 by the
+ upstream Cluster Suite developers).
+- Include patch to fix regression in qemu -serial stdio option.
+
+* Tue Dec 29 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.80-10
+- Remove some debugging statements which were left in the requires
+ script by accident.
+
+* Mon Dec 21 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.80-9
+- Generate additional requires for supermin (RHBZ#547496).
+
+* Fri Dec 18 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.80-3
+- Work around udevsettle command problem (RHBZ#548121).
+- Enable tests.
+
+* Wed Dec 16 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.80-2
+- Disable tests because of RHBZ#548121.
+
+* Wed Dec 16 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.80-1
+- New upstream release 1.0.80.
+- New Polish translations (RHBZ#502533).
+- Give a meaningful error if no usable kernels are found (RHBZ#539746).
+- New tool: virt-list-filesystems
+
+* Fri Dec 4 2009 Stepan Kasal <skasal@redhat.com> - 1:1.0.79-3
+- rebuild against perl 5.10.1
+
+* Wed Nov 18 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.79-2
+- New upstream release 1.0.79.
+- Adds FUSE test script and multiple fixes for FUSE (RHBZ#538069).
+- Fix virt-df in Xen (RHBZ#538041).
+- Improve speed of supermin appliance.
+- Disable FUSE-related tests because Koji doesn't currently allow them.
+ fuse: device not found, try 'modprobe fuse' first
+
+* Tue Nov 10 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.78-2
+- New upstream release 1.0.78.
+- Many more filesystem types supported by this release - add them
+ as dependencies.
+
+* Tue Nov 3 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.77-1
+- New upstream release 1.0.77.
+- Support for mounting guest in host using FUSE (guestmount command).
+- hivex*(1) man pages should be in main package, not -devel, since
+ they are user commands.
+- libguestfs-tools: Fix "self-obsoletion" issue raised by rpmlint.
+- perl: Remove bogus script Sys/bindtests.pl.
+
+* Thu Oct 29 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.75-2
+- New upstream release 1.0.75.
+- New library: libhivex.
+- New tools: virt-win-reg, hivexml, hivexget.
+- Don't require chntpw.
+- Add BR libxml2-devel, accidentally omitted before.
+
+* Tue Oct 20 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.74-1
+- New upstream release 1.0.74.
+- New API call: guestfs_find0.
+- New tools: virt-ls, virt-tar.
+
+* Wed Oct 14 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.73-1
+- New upstream release 1.0.73.
+- OCaml library now depends on xml-light.
+- Deal with installed documentation.
+
+* Tue Sep 29 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.72-2
+- Force rebuild.
+
+* Wed Sep 23 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.72-1
+- New upstream release 1.0.72.
+- New tools: virt-edit, virt-rescue.
+- Combine virt-cat, virt-df, virt-edit, virt-inspector and virt-rescue
+ into a single package called libguestfs-tools.
+
+* Tue Sep 22 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.71-2
+- New upstream release 1.0.71.
+
+* Fri Sep 18 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.70-2
+- Perl bindings require perl-XML-XPath (fixed RHBZ#523547).
+
+* Tue Sep 15 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.70-1
+- New upstream release 1.0.70.
+- Fixes build problem related to old version of GNU gettext.
+
+* Tue Sep 15 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.69-1
+- New upstream release 1.0.69.
+- Reenable the tests (because RHBZ#516543 is supposed to be fixed).
+- New main loop code should fix RHBZ#501888, RHBZ#504418.
+- Add waitpid along guestfs_close path (fixes RHBZ#518747).
+
+* Wed Aug 19 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.68-2
+- New upstream release 1.0.68.
+- BR genisoimage.
+
+* Thu Aug 13 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.67-2
+- New upstream release 1.0.67.
+
+* Fri Aug 7 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.66-5
+- Set network interface to ne2k_pci (workaround for RHBZ#516022).
+- Rerun autoconf because patch touches configure script.
+
+* Thu Aug 6 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.66-1
+- New upstream release 1.0.66.
+
+* Wed Jul 29 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.65-1
+- New upstream release 1.0.65.
+- Add Obsoletes for virt-df2 (RHBZ#514309).
+- Disable tests because of ongoing TCG problems with newest qemu in Rawhide.
+
+* Thu Jul 23 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.64-3
+- RHBZ#513249 bug in qemu is now fixed, so try to rebuild and run tests.
+- However RHBZ#503236 still prevents us from testing on i386.
+
+* Thu Jul 23 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.64-1
+- New upstream release 1.0.64.
+- New tool 'libguestfs-test-tool'.
+
+* Wed Jul 15 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.61-1
+- New upstream release 1.0.61.
+- New tool / subpackage 'virt-cat'.
+- New BR perl-libintl.
+
+* Wed Jul 15 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.60-2
+- Fix runtime Requires so they use epoch correctly.
+
+* Tue Jul 14 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.60-1
+- New upstream release 1.0.60.
+
+* Fri Jul 10 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.58-2
+- New upstream release 1.0.58.
+
+* Fri Jul 10 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.57-1
+- New upstream release 1.0.57.
+- New tool virt-df (obsoletes existing package with this name).
+- RHBZ#507066 may be fixed, so reenable tests.
+
+* Tue Jul 7 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.56-2
+- New upstream release 1.0.56.
+- Don't rerun generator.
+
+* Thu Jul 2 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.55-1
+- New upstream release 1.0.55.
+- New manual page libguestfs(3).
+
+* Mon Jun 29 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.54-2
+- New upstream release 1.0.54.
+- +BR perl-XML-Writer.
+
+* Wed Jun 24 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.53-1
+- New upstream release 1.0.53.
+- Disable all tests (because of RHBZ#507066).
+
+* Wed Jun 24 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.52-1
+- New upstream release 1.0.52.
+
+* Mon Jun 22 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.51-1
+- New upstream release 1.0.51.
+- Removed patches which are now upstream.
+
+* Sat Jun 20 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.49-5
+- Remove workaround for RHBZ#507007, since bug is now fixed.
+- Pull in upstream patch to fix pclose checking
+ (testing as possible fix for RHBZ#507066).
+- Pull in upstream patch to check waitpid return values
+ (testing as possible fix for RHBZ#507066).
+
+* Fri Jun 19 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.49-2
+- New upstream release 1.0.49.
+- Add workaround for RHBZ#507007.
+
+* Tue Jun 16 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.48-2
+- Accidentally omitted the supermin image from previous version.
+
+* Tue Jun 16 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.48-1
+- New upstream release 1.0.48.
+- Should fix all the brokenness from 1.0.47.
+- Requires febootstrap >= 2.3.
+
+* Mon Jun 15 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.47-2
+- New upstream release 1.0.47.
+- Enable experimental supermin appliance build.
+- Fix path to appliance.
+
+* Fri Jun 12 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.45-2
+- New upstream release 1.0.45.
+
+* Wed Jun 10 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.44-2
+- Disable ppc/ppc64 tests again because of RHBZ#505109.
+
+* Wed Jun 10 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.44-1
+- New upstream version 1.0.44.
+- Try enabling tests on ppc & ppc64 since it looks like the bug(s?)
+ in qemu which might have caused them to fail have been fixed.
+
+* Tue Jun 9 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.43-1
+- New upstream version 1.0.43.
+- New upstream URL.
+- Requires chntpw program.
+
+* Sat Jun 6 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.42-1
+- New upstream version 1.0.42.
+
+* Thu Jun 4 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.41-1
+- New upstream version 1.0.41.
+- Fixes a number of regressions in RHBZ#503169.
+
+* Thu Jun 4 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.40-1
+- New upstream version 1.0.40.
+
+* Thu Jun 4 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.39-1
+- New upstream version 1.0.39.
+- Fixes:
+ . libguestfs /dev is too sparse for kernel installation/upgrade (RHBZ#503169)
+ . OCaml bindings build failure (RHBZ#502309)
+
+* Tue Jun 2 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.38-2
+- Disable tests on ix86 because of RHBZ#503236.
+
+* Tue Jun 2 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.38-1
+- New upstream version 1.0.38.
+
+* Fri May 29 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.37-1
+- New upstream version 1.0.37.
+- Fixes:
+ . "mkdir-p" should not throw errors on preexisting directories (RHBZ#503133)
+ . cramfs and squashfs modules should be available in libguestfs appliances
+ (RHBZ#503135)
+
+* Thu May 28 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.36-2
+- New upstream version 1.0.36.
+- Rerun the generator in prep section.
+
+* Thu May 28 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.35-1
+- New upstream version 1.0.35.
+- Fixes multiple bugs in bindings parameters (RHBZ#501892).
+
+* Wed May 27 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.34-1
+- New upstream version 1.0.34.
+
+* Wed May 27 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.33-1
+- New upstream version 1.0.33.
+- --with-java-home option is no longer required.
+- Upstream contains potential fixes for:
+ 501878 built-in commands like 'alloc' and 'help' don't autocomplete
+ 501883 javadoc messed up in libguestfs java documentation
+ 501885 Doesn't detect missing Java, --with-java-home=no should not be needed
+ 502533 Polish translation of libguestfs
+ n/a Allow more ext filesystem kmods (Charles Duffy)
+
+* Tue May 26 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.32-2
+- New upstream version 1.0.32.
+- Use %%find_lang macro.
+
+* Sat May 23 2009 Richard W.M. Jones <rjones@redhat.com> - 1.0.31-1
+- Rebuild for OCaml 3.11.1.
+- New upstream version 1.0.31.
+
+* Thu May 21 2009 Richard Jones <rjones@redhat.com> - 1.0.30-1
+- New upstream version 1.0.30. Now includes test-bootbootboot.sh script.
+
+* Thu May 21 2009 Richard Jones <rjones@redhat.com> - 1.0.29-3
+- New upstream version 1.0.29 (fixes RHBZ#502007 RHBZ#502018).
+- This should allow us to enable tests for i386 and x86-64.
+- Added test-bootbootboot.sh script which was missed from 1.0.29 tarball.
+- Pass kernel noapic flag to workaround RHBZ#502058.
+
+* Thu May 21 2009 Richard Jones <rjones@redhat.com> - 1.0.28-1
+- New upstream version 1.0.28. Nothing has visibly changed, but
+ the source has been gettextized and we want to check that doesn't
+ break anything.
+
+* Thu May 21 2009 Richard Jones <rjones@redhat.com> - 1.0.27-3
+- Change requirement from qemu -> qemu-kvm (RHBZ#501761).
+
+* Tue May 19 2009 Richard Jones <rjones@redhat.com> - 1.0.27-2
+- New upstream version 1.0.27.
+
+* Mon May 18 2009 Richard Jones <rjones@redhat.com> - 1.0.26-6
+- Experimentally try to reenable ppc and ppc64 builds.
+- Note BZ numbers which are causing tests to fail.
+
+* Mon May 18 2009 Richard Jones <rjones@redhat.com> - 1.0.26-1
+- New upstream version 1.0.26.
+
+* Tue May 12 2009 Richard Jones <rjones@redhat.com> - 1.0.25-4
+- New upstream version 1.0.25.
+- Enable debugging when running the tests.
+- Disable tests - don't work correctly in Koji.
+
+* Tue May 12 2009 Richard Jones <rjones@redhat.com> - 1.0.24-1
+- New upstream version 1.0.24.
+- BRs glibc-static for the new command tests.
+- Enable tests.
+
+* Mon May 11 2009 Richard Jones <rjones@redhat.com> - 1.0.23-2
+- New upstream version 1.0.23.
+- Don't try to use updates during build.
+
+* Fri May 8 2009 Richard Jones <rjones@redhat.com> - 1.0.21-3
+- New upstream version 1.0.21.
+
+* Thu May 7 2009 Richard Jones <rjones@redhat.com> - 1.0.20-2
+- New upstream version 1.0.20.
+
+* Thu May 7 2009 Richard Jones <rjones@redhat.com> - 1.0.19-1
+- New upstream version 1.0.19.
+
+* Tue Apr 28 2009 Richard Jones <rjones@redhat.com> - 1.0.15-1
+- New upstream version 1.0.15.
+
+* Fri Apr 24 2009 Richard Jones <rjones@redhat.com> - 1.0.12-1
+- New upstream version 1.0.12.
+
+* Wed Apr 22 2009 Richard Jones <rjones@redhat.com> - 1.0.6-1
+- New upstream version 1.0.6.
+
+* Mon Apr 20 2009 Richard Jones <rjones@redhat.com> - 1.0.2-1
+- New upstream version 1.0.2.
+
+* Thu Apr 16 2009 Richard Jones <rjones@redhat.com> - 0.9.9-12
+- Multiple fixes to get it to scratch build in Koji.
+
+* Sat Apr 4 2009 Richard Jones <rjones@redhat.com> - 0.9.9-1
+- Initial build.
diff --git a/sources b/sources
new file mode 100644
index 0000000..9b44315
--- /dev/null
+++ b/sources
@@ -0,0 +1,3 @@
+eea08678d34a856dea49ef688634a341 libguestfs-1.50.1.tar.gz
+cd69f5f76df77f372f8ac27909d0d849 libguestfs-common-1.50.1.tar.gz
+0a47b104f612d6848f46e0b88f1861ef libguestfs.keyring
diff --git a/yum.conf.in b/yum.conf.in
new file mode 100644
index 0000000..d5e30d0
--- /dev/null
+++ b/yum.conf.in
@@ -0,0 +1,17 @@
+[main]
+cachedir=@PWD@/cachedir
+debuglevel=1
+logfile=@PWD@/yum.log
+retries=20
+obsoletes=1
+gpgcheck=0
+assumeyes=1
+reposdir=/dev/null
+modulesdir=@PWD@/modules
+
+[local]
+name=local
+baseurl=file://@PWD@/repo
+failovermethod=priority
+enabled=1
+gpgcheck=0