diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..27c51f8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/guestfs-tools-*.tar.gz +/guestfs-tools-*.tar.gz.sig diff --git a/0001-po-docs-podfiles-Fix-bogus-directories-in-this-file.patch b/0001-po-docs-podfiles-Fix-bogus-directories-in-this-file.patch new file mode 100644 index 0000000..831030c --- /dev/null +++ b/0001-po-docs-podfiles-Fix-bogus-directories-in-this-file.patch @@ -0,0 +1,53 @@ +From 3bcb261f69dab9121a30aa452ef5bb6001c2f58e Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 23 Mar 2021 14:09:44 +0000 +Subject: [PATCH 1/7] po-docs/podfiles: Fix bogus directories in this file. + +These were caused by a partial dist directory having been created, and +then "make podfiles" being run at the wrong moment. + +Fixes: commit 3e6e0b4fd4365118bdc011aaa76347272fa16abd +--- + po-docs/podfiles | 26 -------------------------- + 1 file changed, 26 deletions(-) + +diff --git a/po-docs/podfiles b/po-docs/podfiles +index bf7091320c..d7ef138938 100644 +--- a/po-docs/podfiles ++++ b/po-docs/podfiles +@@ -19,32 +19,6 @@ diff/virt-diff.pod + edit/virt-edit.pod + format/virt-format.pod + get-kernel/virt-get-kernel.pod +-guestfs-tools-1.45.2/align/virt-alignment-scan.pod +-guestfs-tools-1.45.2/builder/virt-builder-repository.pod +-guestfs-tools-1.45.2/builder/virt-builder.pod +-guestfs-tools-1.45.2/builder/virt-index-validate.pod +-guestfs-tools-1.45.2/cat/virt-cat.pod +-guestfs-tools-1.45.2/cat/virt-filesystems.pod +-guestfs-tools-1.45.2/cat/virt-log.pod +-guestfs-tools-1.45.2/cat/virt-ls.pod +-guestfs-tools-1.45.2/cat/virt-tail.pod +-guestfs-tools-1.45.2/common/mlcustomize/customize-options.pod +-guestfs-tools-1.45.2/common/mlcustomize/customize-synopsis.pod +-guestfs-tools-1.45.2/common/options/blocksize-option.pod +-guestfs-tools-1.45.2/common/options/key-option.pod +-guestfs-tools-1.45.2/common/options/keys-from-stdin-option.pod +-guestfs-tools-1.45.2/customize/virt-customize.pod +-guestfs-tools-1.45.2/df/virt-df.pod +-guestfs-tools-1.45.2/dib/virt-dib.pod +-guestfs-tools-1.45.2/diff/virt-diff.pod +-guestfs-tools-1.45.2/edit/virt-edit.pod +-guestfs-tools-1.45.2/format/virt-format.pod +-guestfs-tools-1.45.2/get-kernel/virt-get-kernel.pod +-guestfs-tools-1.45.2/inspector/virt-inspector.pod +-guestfs-tools-1.45.2/make-fs/virt-make-fs.pod +-guestfs-tools-1.45.2/resize/virt-resize.pod +-guestfs-tools-1.45.2/sparsify/virt-sparsify.pod +-guestfs-tools-1.45.2/sysprep/virt-sysprep.pod + inspector/virt-inspector.pod + make-fs/virt-make-fs.pod + resize/virt-resize.pod +-- +2.29.0.rc2 + diff --git a/0002-po-docs-Don-t-try-to-install-.3-and-.5-files-which-d.patch b/0002-po-docs-Don-t-try-to-install-.3-and-.5-files-which-d.patch new file mode 100644 index 0000000..bb002aa --- /dev/null +++ b/0002-po-docs-Don-t-try-to-install-.3-and-.5-files-which-d.patch @@ -0,0 +1,26 @@ +From cba4cc0f5148fae6a8ba34c03559b9328749cbf1 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 23 Mar 2021 12:19:01 +0000 +Subject: [PATCH 2/7] po-docs: Don't try to install *.3 and *.5 files which + don't exist. + +Fixes: commit 4354a3126152a2748cc9097cba139b3908ccc342 +--- + po-docs/language.mk | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/po-docs/language.mk b/po-docs/language.mk +index 2c8f7aff6b..ee05183c57 100644 +--- a/po-docs/language.mk ++++ b/po-docs/language.mk +@@ -117,7 +117,3 @@ virt-sysprep.1: virt-sysprep.pod sysprep-extra-options.pod sysprep-operations.po + install-data-hook: + $(MKDIR_P) $(DESTDIR)$(mandir)/$(LINGUA)/man1 + $(INSTALL) -m 0644 $(srcdir)/*.1 $(DESTDIR)$(mandir)/$(LINGUA)/man1 +- $(MKDIR_P) $(DESTDIR)$(mandir)/$(LINGUA)/man3 +- $(INSTALL) -m 0644 $(srcdir)/*.3 $(DESTDIR)$(mandir)/$(LINGUA)/man3 +- $(MKDIR_P) $(DESTDIR)$(mandir)/$(LINGUA)/man5 +- $(INSTALL) -m 0644 $(srcdir)/*.5 $(DESTDIR)$(mandir)/$(LINGUA)/man5 +-- +2.29.0.rc2 + diff --git a/0003-build-Remove-dependency-on-gobject-introspection.patch b/0003-build-Remove-dependency-on-gobject-introspection.patch new file mode 100644 index 0000000..db3e9c7 --- /dev/null +++ b/0003-build-Remove-dependency-on-gobject-introspection.patch @@ -0,0 +1,129 @@ +From 6bfe41474937bbaabd7c953ac62dc9a28aa6fa30 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 23 Mar 2021 13:38:56 +0000 +Subject: [PATCH 3/7] build: Remove dependency on gobject-introspection. + +Only required for libguestfs GObject bindings, not for these tools. + +Fixes: commit 4354a3126152a2748cc9097cba139b3908ccc342 +--- + Makefile.am | 1 - + m4/introspection.m4 | 94 --------------------------------------------- + 2 files changed, 95 deletions(-) + delete mode 100644 m4/introspection.m4 + +diff --git a/Makefile.am b/Makefile.am +index 382f2db130..b5c1bc0b87 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -75,7 +75,6 @@ EXTRA_DIST = \ + common/README \ + lib/guestfs-internal-all.h \ + m4/.gitignore \ +- m4/introspection.m4 \ + podcheck.pl \ + test-functions.sh \ + tmp/.gitignore \ +diff --git a/m4/introspection.m4 b/m4/introspection.m4 +deleted file mode 100644 +index 586d679eea..0000000000 +--- a/m4/introspection.m4 ++++ /dev/null +@@ -1,94 +0,0 @@ +-dnl -*- mode: autoconf -*- +-dnl Copyright 2009 Johan Dahlin +-dnl +-dnl This file is free software; the author(s) gives unlimited +-dnl permission to copy and/or distribute it, with or without +-dnl modifications, as long as this notice is preserved. +-dnl +- +-# serial 1 +- +-m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL], +-[ +- AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first +- AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first +- AC_BEFORE([LT_INIT],[$0])dnl setup libtool first +- +- dnl enable/disable introspection +- m4_if([$2], [require], +- [dnl +- enable_introspection=yes +- ],[dnl +- AC_ARG_ENABLE(introspection, +- AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]], +- [enable introspection for this build]),, +- [enable_introspection=auto]) +- ])dnl +- +- AC_MSG_CHECKING([for gobject-introspection]) +- +- dnl presence/version checking +- AS_CASE([$enable_introspection], +- [no], [dnl +- found_introspection="no (disabled, use --enable-introspection to enable)" +- ],dnl +- [yes],[dnl +- PKG_CHECK_EXISTS([gobject-introspection-1.0],, +- AC_MSG_ERROR([gobject-introspection-1.0 is not installed])) +- PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], +- found_introspection=yes, +- AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME])) +- ],dnl +- [auto],[dnl +- PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no) +- ],dnl +- [dnl +- AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@]) +- ])dnl +- +- AC_MSG_RESULT([$found_introspection]) +- +- INTROSPECTION_SCANNER= +- INTROSPECTION_COMPILER= +- INTROSPECTION_GENERATE= +- INTROSPECTION_GIRDIR= +- INTROSPECTION_TYPELIBDIR= +- if test "x$found_introspection" = "xyes"; then +- INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` +- INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` +- INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` +- INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` +- INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" +- INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` +- INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` +- INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection +- fi +- AC_SUBST(INTROSPECTION_SCANNER) +- AC_SUBST(INTROSPECTION_COMPILER) +- AC_SUBST(INTROSPECTION_GENERATE) +- AC_SUBST(INTROSPECTION_GIRDIR) +- AC_SUBST(INTROSPECTION_TYPELIBDIR) +- AC_SUBST(INTROSPECTION_CFLAGS) +- AC_SUBST(INTROSPECTION_LIBS) +- AC_SUBST(INTROSPECTION_MAKEFILE) +- +- AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") +-]) +- +- +-dnl Usage: +-dnl GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version]) +- +-AC_DEFUN([GOBJECT_INTROSPECTION_CHECK], +-[ +- _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1]) +-]) +- +-dnl Usage: +-dnl GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version]) +- +- +-AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE], +-[ +- _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require]) +-]) +-- +2.29.0.rc2 + diff --git a/0004-build-Remove-dependency-on-perl-Sys-Virt.patch b/0004-build-Remove-dependency-on-perl-Sys-Virt.patch new file mode 100644 index 0000000..e11a19e --- /dev/null +++ b/0004-build-Remove-dependency-on-perl-Sys-Virt.patch @@ -0,0 +1,30 @@ +From 47efe06984ae1e0ba914ebcf9306d348a5ecd366 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 23 Mar 2021 13:52:19 +0000 +Subject: [PATCH 4/7] build: Remove dependency on perl Sys::Virt. + +In libguestfs this used to be required to run tests against local +guests, but it's not needed in either libguestfs or guestfs-tools any +longer. + +Fixes: commit 4354a3126152a2748cc9097cba139b3908ccc342 +--- + m4/guestfs-perl.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/m4/guestfs-perl.m4 b/m4/guestfs-perl.m4 +index 4c889d843a..c8337ed9b5 100644 +--- a/m4/guestfs-perl.m4 ++++ b/m4/guestfs-perl.m4 +@@ -66,7 +66,7 @@ AM_CONDITIONAL([HAVE_PERL], + dnl Check for Perl modules needed by Perl virt tools (virt-df, etc.) + AS_IF([test "x$PERL" != "xno"],[ + missing_perl_modules=no +- for pm in Pod::Usage Getopt::Long Sys::Virt Locale::TextDomain Win::Hivex Win::Hivex::Regedit ; do ++ for pm in Pod::Usage Getopt::Long Locale::TextDomain Win::Hivex Win::Hivex::Regedit ; do + AC_MSG_CHECKING([for $pm]) + if ! $PERL -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then + AC_MSG_RESULT([no]) +-- +2.29.0.rc2 + diff --git a/0005-builder-Get-rid-of-etc-xdg-and-XDG_CONFIG_DIRS-nonse.patch b/0005-builder-Get-rid-of-etc-xdg-and-XDG_CONFIG_DIRS-nonse.patch new file mode 100644 index 0000000..2b7563f --- /dev/null +++ b/0005-builder-Get-rid-of-etc-xdg-and-XDG_CONFIG_DIRS-nonse.patch @@ -0,0 +1,203 @@ +From f66af6b6ddfefcbd6ecd6f4d47e0fa4ca231b125 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 23 Mar 2021 14:06:12 +0000 +Subject: [PATCH 5/7] builder: Get rid of /etc/xdg and XDG_CONFIG_DIRS + nonsense. + +Put the configuration in /etc/virt-builder as god intended. +--- + builder/Makefile.am | 8 ++------ + builder/libguestfs.conf.in | 4 ++-- + builder/opensuse.conf.in | 2 +- + builder/paths.ml | 4 ++-- + builder/paths.mli | 4 ++-- + builder/test-virt-builder-cacheall.sh | 2 +- + builder/test-virt-builder-list-simplestreams.sh | 2 +- + builder/test-virt-builder-list.sh | 2 +- + builder/test-virt-builder-planner.sh | 2 +- + builder/test-virt-builder.sh | 2 +- + builder/virt-builder.pod | 8 ++++---- + run.in | 6 +++--- + 12 files changed, 21 insertions(+), 25 deletions(-) + +diff --git a/builder/Makefile.am b/builder/Makefile.am +index d67c8e0ded..4d2e07843c 100644 +--- a/builder/Makefile.am ++++ b/builder/Makefile.am +@@ -423,12 +423,8 @@ endif + + # virt-builder's default repository + +-repoconfdir = $(sysconfdir)/xdg/virt-builder/repos.d +-repoconf_DATA = libguestfs.conf libguestfs.gpg \ +- opensuse.conf opensuse.gpg +- +-install-exec-hook: +- $(LN_S) -f xdg/virt-builder $(DESTDIR)$(sysconfdir)/virt-builder ++repoconfdir = $(sysconfdir)/virt-builder/repos.d ++repoconf_DATA = libguestfs.conf libguestfs.gpg opensuse.conf opensuse.gpg + + # Build a small C index validator program. + bin_PROGRAMS += virt-index-validate +diff --git a/builder/libguestfs.conf.in b/builder/libguestfs.conf.in +index 412079df64..8d8feab756 100644 +--- a/builder/libguestfs.conf.in ++++ b/builder/libguestfs.conf.in +@@ -1,7 +1,7 @@ + [libguestfs.org] + uri=http://builder.libguestfs.org/index.asc +-gpgkey=file://@SYSCONFDIR@/xdg/virt-builder/repos.d/libguestfs.gpg ++gpgkey=file://@SYSCONFDIR@/virt-builder/repos.d/libguestfs.gpg + + [archive.libguestfs.org] + uri=http://archive.libguestfs.org/builder/index.asc +-gpgkey=file://@SYSCONFDIR@/xdg/virt-builder/repos.d/libguestfs.gpg ++gpgkey=file://@SYSCONFDIR@/virt-builder/repos.d/libguestfs.gpg +diff --git a/builder/opensuse.conf.in b/builder/opensuse.conf.in +index 80db267113..19f9796992 100644 +--- a/builder/opensuse.conf.in ++++ b/builder/opensuse.conf.in +@@ -1,3 +1,3 @@ + [opensuse.org] + uri=http://download.opensuse.org/repositories/Virtualization:/virt-builder-images/images/index +-gpgkey=file://@SYSCONFDIR@/xdg/virt-builder/repos.d/opensuse.gpg ++gpgkey=file://@SYSCONFDIR@/virt-builder/repos.d/opensuse.gpg +diff --git a/builder/paths.ml b/builder/paths.ml +index b8ce57191e..a7b1f4cc63 100644 +--- a/builder/paths.ml ++++ b/builder/paths.ml +@@ -35,8 +35,8 @@ let xdg_config_home () = + + let xdg_config_dirs () = + let dirs = +- try Sys.getenv "XDG_CONFIG_DIRS" +- with Not_found -> "/etc/xdg" in ++ try Sys.getenv "VIRT_BUILDER_DIRS" ++ with Not_found -> "/etc" in + let dirs = String.nsplit ":" dirs in + let dirs = List.filter (fun x -> x <> "") dirs in + List.map (fun x -> x // prog) dirs +diff --git a/builder/paths.mli b/builder/paths.mli +index 566c323e57..f4897da952 100644 +--- a/builder/paths.mli ++++ b/builder/paths.mli +@@ -23,6 +23,6 @@ val xdg_config_home : unit -> string option + (** [$XDG_CONFIG_HOME/prog] or [$HOME/.config/prog] or [None]. *) + + val xdg_config_dirs : unit -> string list +-(** [$XDG_CONFIG_DIRS] (which is a colon-separated path), split. Empty ++(** [$VIRT_BUILDER_DIRS] (which is a colon-separated path), split. Empty + elements are removed from the list. If the environment variable +- is not set [["/etc/xdg"]] is returned instead. *) ++ is not set [["/etc/virt-builder"]] is returned instead. *) +diff --git a/builder/test-virt-builder-cacheall.sh b/builder/test-virt-builder-cacheall.sh +index c80d9ecd2a..26298228a0 100755 +--- a/builder/test-virt-builder-cacheall.sh ++++ b/builder/test-virt-builder-cacheall.sh +@@ -68,7 +68,7 @@ uri=$indexfile + EOF + + export XDG_CONFIG_HOME= +-export XDG_CONFIG_DIRS="$tmpdir" ++export VIRT_BUILDER_DIRS="$tmpdir" + export XDG_CACHE_HOME="$cachedir" + + short_list=$($VG virt-builder --no-check-signature --no-cache --list) +diff --git a/builder/test-virt-builder-list-simplestreams.sh b/builder/test-virt-builder-list-simplestreams.sh +index 3158066b16..4467971a90 100755 +--- a/builder/test-virt-builder-list-simplestreams.sh ++++ b/builder/test-virt-builder-list-simplestreams.sh +@@ -22,7 +22,7 @@ $TEST_FUNCTIONS + skip_if_skipped + + export XDG_CONFIG_HOME= +-export XDG_CONFIG_DIRS="$abs_builddir/test-simplestreams" ++export VIRT_BUILDER_DIRS="$abs_builddir/test-simplestreams" + + short_list=$($VG virt-builder --no-check-signature --no-cache --list) + +diff --git a/builder/test-virt-builder-list.sh b/builder/test-virt-builder-list.sh +index 66910fcc3d..a66c1b5d0f 100755 +--- a/builder/test-virt-builder-list.sh ++++ b/builder/test-virt-builder-list.sh +@@ -24,7 +24,7 @@ $TEST_FUNCTIONS + skip_if_skipped + + export XDG_CONFIG_HOME= +-export XDG_CONFIG_DIRS="$abs_builddir/test-config" ++export VIRT_BUILDER_DIRS="$abs_builddir/test-config" + + short_list=$($VG virt-builder --no-check-signature --no-cache --list) + +diff --git a/builder/test-virt-builder-planner.sh b/builder/test-virt-builder-planner.sh +index 108b70e95f..135319398c 100755 +--- a/builder/test-virt-builder-planner.sh ++++ b/builder/test-virt-builder-planner.sh +@@ -24,7 +24,7 @@ skip_if_skipped + skip_if_backend uml + + export XDG_CONFIG_HOME= +-export XDG_CONFIG_DIRS="$abs_builddir/test-config" ++export VIRT_BUILDER_DIRS="$abs_builddir/test-config" + + if [ ! -f fedora.xz -o ! -f fedora.qcow2 -o ! -f fedora.qcow2.xz ]; then + echo "$0: test skipped because there is no fedora.xz, fedora.qcow2 or fedora.qcow2.xz in the build directory" +diff --git a/builder/test-virt-builder.sh b/builder/test-virt-builder.sh +index 18673874a3..fe06071370 100755 +--- a/builder/test-virt-builder.sh ++++ b/builder/test-virt-builder.sh +@@ -22,7 +22,7 @@ $TEST_FUNCTIONS + skip_if_skipped + + export XDG_CONFIG_HOME= +-export XDG_CONFIG_DIRS="$abs_builddir/test-config" ++export VIRT_BUILDER_DIRS="$abs_builddir/test-config" + + if [ ! -f fedora.xz ]; then + echo "$0: test skipped because there is no fedora.xz in the build directory" +diff --git a/builder/virt-builder.pod b/builder/virt-builder.pod +index eddadc7962..a56fa89cb1 100644 +--- a/builder/virt-builder.pod ++++ b/builder/virt-builder.pod +@@ -1146,9 +1146,9 @@ F<$HOME/.config> if not set). + + =item * + +-$XDG_CONFIG_DIRS/virt-builder/repos.d/ (where C<$XDG_CONFIG_DIRS> +-means any of the directories in that environment variable, or just F +-if not set) ++$VIRT_BUILDER_DIRS/virt-builder/repos.d/ (where C<$VIRT_BUILDER_DIRS> ++means any of the directories in that environment variable, or just F ++if not set). + + =back + +@@ -1866,7 +1866,7 @@ Used to determine the location of the template cache. See L. + Used to determine the location of the user' sources. See + L. + +-=item C ++=item C + + Used to determine the location of the system sources. See + L. +diff --git a/run.in b/run.in +index 5e36aa819b..7b401870d5 100755 +--- a/run.in ++++ b/run.in +@@ -95,9 +95,9 @@ export PATH + + # Make virt-builder use the local website copy to avoid hitting + # the network all the time. +-if [ -z "$XDG_CONFIG_DIRS" ]; then +- prepend XDG_CONFIG_DIRS "$b/builder/test-website" +- export XDG_CONFIG_DIRS ++if [ -z "$VIRT_BUILDER_DIRS" ]; then ++ prepend VIRT_BUILDER_DIRS "$b/builder/test-website" ++ export VIRT_BUILDER_DIRS + fi + + # This is a cheap way to find some use-after-free and uninitialized +-- +2.29.0.rc2 + diff --git a/0006-builder-Use-correct-ounit2-module.patch b/0006-builder-Use-correct-ounit2-module.patch new file mode 100644 index 0000000..6d0ed19 --- /dev/null +++ b/0006-builder-Use-correct-ounit2-module.patch @@ -0,0 +1,64 @@ +From b470270d44e8dc37a2417c1157eefdd9c3d65dd1 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 24 Mar 2021 18:30:45 +0000 +Subject: [PATCH 6/7] builder: Use correct ounit2 module. + +Fixes: commit 4354a3126152a2748cc9097cba139b3908ccc342 +--- + builder/Makefile.am | 2 +- + m4/guestfs-ocaml.m4 | 10 +++++----- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/builder/Makefile.am b/builder/Makefile.am +index 4d2e07843c..f49a3b0aaa 100644 +--- a/builder/Makefile.am ++++ b/builder/Makefile.am +@@ -192,7 +192,7 @@ if HAVE_OCAML_PKG_GETTEXT + OCAMLPACKAGES += -package gettext-stub + endif + if HAVE_OCAML_PKG_OUNIT +-OCAMLPACKAGES_TESTS += -package oUnit ++OCAMLPACKAGES_TESTS += -package ounit2 + endif + + OCAMLCLIBS = \ +diff --git a/m4/guestfs-ocaml.m4 b/m4/guestfs-ocaml.m4 +index a2f6cada9f..f5ac7eff29 100644 +--- a/m4/guestfs-ocaml.m4 ++++ b/m4/guestfs-ocaml.m4 +@@ -105,7 +105,7 @@ if test "x$OCAML_PKG_guestfs" = "xno"; then + fi + + OCAML_PKG_gettext=no +-OCAML_PKG_oUnit=no ++OCAML_PKG_ounit2=no + ounit_is_v2=no + have_Bytes_module=no + AS_IF([test "x$OCAMLC" != "xno"],[ +@@ -117,11 +117,11 @@ AS_IF([test "x$OCAMLC" != "xno"],[ + + GUESTFS_CREATE_COMMON_GETTEXT_ML([common/mlgettext/common_gettext.ml]) + +- AC_CHECK_OCAML_PKG(oUnit) ++ AC_CHECK_OCAML_PKG(ounit2) + + # oUnit >= 2 is required, so check that it has OUnit2. +- if test "x$OCAML_PKG_oUnit" != "xno"; then +- AC_CHECK_OCAML_MODULE(ounit_is_v2,[OUnit.OUnit2],OUnit2,[+oUnit]) ++ if test "x$OCAML_PKG_ounit2" != "xno"; then ++ AC_CHECK_OCAML_MODULE(ounit_is_v2,[OUnit.OUnit2],OUnit2,[+ounit2]) + fi + + # Check if we have the 'Bytes' module. If not (OCaml < 4.02) then +@@ -141,7 +141,7 @@ AS_IF([test "x$OCAMLC" != "xno"],[ + AM_CONDITIONAL([HAVE_OCAML_PKG_GETTEXT], + [test "x$OCAML_PKG_gettext" != "xno"]) + AM_CONDITIONAL([HAVE_OCAML_PKG_OUNIT], +- [test "x$OCAML_PKG_oUnit" != "xno" && test "x$ounit_is_v2" != "xno"]) ++ [test "x$OCAML_PKG_ounit2" != "xno" && test "x$ounit_is_v2" != "xno"]) + + AC_CHECK_PROG([OCAML_GETTEXT],[ocaml-gettext],[ocaml-gettext],[no]) + AM_CONDITIONAL([HAVE_OCAML_GETTEXT], +-- +2.29.0.rc2 + diff --git a/0007-Update-common-submodule-to-latest.patch b/0007-Update-common-submodule-to-latest.patch new file mode 100644 index 0000000..19f7cd2 --- /dev/null +++ b/0007-Update-common-submodule-to-latest.patch @@ -0,0 +1,95 @@ +From 6e80a33b70f89c18cd2fbde739243e8c5a7efc25 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 25 Mar 2021 08:14:49 +0000 +Subject: [PATCH 7/7] Update common submodule to latest. + +--- + common | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Submodule common ca8a16a926..7c39a06fe3: +diff --git a/common/mlstdutils/Makefile.am b/common/mlstdutils/Makefile.am +index 2b4aed8..650f18c 100644 +--- a/common/mlstdutils/Makefile.am ++++ b/common/mlstdutils/Makefile.am +@@ -85,7 +85,7 @@ OCAMLPACKAGES = \ + -I $(builddir) + OCAMLPACKAGES_TESTS = $(MLSTDUTILS_CMA) + if HAVE_OCAML_PKG_OUNIT +-OCAMLPACKAGES_TESTS += -package oUnit ++OCAMLPACKAGES_TESTS += -package ounit2 + endif + + OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) -ccopt '$(CFLAGS)' +diff --git a/common/mltools/Makefile.am b/common/mltools/Makefile.am +index 6bb2b88..5cec178 100644 +--- a/common/mltools/Makefile.am ++++ b/common/mltools/Makefile.am +@@ -129,7 +129,7 @@ if HAVE_OCAML_PKG_GETTEXT + OCAMLPACKAGES += -package gettext-stub + endif + if HAVE_OCAML_PKG_OUNIT +-OCAMLPACKAGES_TESTS += -package oUnit ++OCAMLPACKAGES_TESTS += -package ounit2 + endif + + OCAMLCLIBS = \ +@@ -263,7 +263,8 @@ tools_utils_tests_DEPENDENCIES = \ + $(MLTOOLS_CMA) \ + $(top_srcdir)/ocaml-link.sh + tools_utils_tests_LINK = \ +- $(top_srcdir)/ocaml-link.sh -cclib '-lutils $(LIBXML2_LIBS) -lgnu' -- \ ++ $(top_srcdir)/ocaml-link.sh \ ++ -cclib '-pthread -lpthread -lutils $(LIBXML2_LIBS) -lgnu' -- \ + $(OCAMLFIND) $(BEST) $(OCAMLFLAGS) $(OCAMLLINKFLAGS) \ + $(OCAMLPACKAGES) $(OCAMLPACKAGES_TESTS) \ + $(tools_utils_tests_THEOBJECTS) -o $@ +@@ -290,7 +291,8 @@ JSON_tests_DEPENDENCIES = \ + $(MLTOOLS_CMA) \ + $(top_srcdir)/ocaml-link.sh + JSON_tests_LINK = \ +- $(top_srcdir)/ocaml-link.sh -- \ ++ $(top_srcdir)/ocaml-link.sh \ ++ -cclib '-pthread -lpthread' -- \ + $(OCAMLFIND) $(BEST) $(OCAMLFLAGS) $(OCAMLLINKFLAGS) \ + $(OCAMLPACKAGES) $(OCAMLPACKAGES_TESTS) \ + $(JSON_tests_THEOBJECTS) -o $@ +@@ -303,7 +305,8 @@ JSON_parser_tests_DEPENDENCIES = \ + $(MLTOOLS_CMA) \ + $(top_srcdir)/ocaml-link.sh + JSON_parser_tests_LINK = \ +- $(top_srcdir)/ocaml-link.sh -cclib '$(OCAMLCLIBS)' -- \ ++ $(top_srcdir)/ocaml-link.sh \ ++ -cclib '-pthread -lpthread $(OCAMLCLIBS)' -- \ + $(OCAMLFIND) $(BEST) $(OCAMLFLAGS) $(OCAMLLINKFLAGS) \ + $(OCAMLPACKAGES) $(OCAMLPACKAGES_TESTS) \ + $(JSON_parser_tests_THEOBJECTS) -o $@ +diff --git a/common/mlutils/Makefile.am b/common/mlutils/Makefile.am +index e86d7bb..17dfac3 100644 +--- a/common/mlutils/Makefile.am ++++ b/common/mlutils/Makefile.am +@@ -112,10 +112,10 @@ c_utils_unit_tests_CFLAGS = $(libmlcutils_a_CFLAGS) + if !HAVE_OCAMLOPT + # Can't call this c_utils_unit_tests_OBJECTS because automake gets confused. + c_utils_unit_tests_THEOBJECTS = $(c_utils_unit_tests_BOBJECTS) +-c_utils_unit_tests.cmo: OCAMLPACKAGES += -package oUnit ++c_utils_unit_tests.cmo: OCAMLPACKAGES += -package ounit2 + else + c_utils_unit_tests_THEOBJECTS = $(c_utils_unit_tests_XOBJECTS) +-c_utils_unit_tests.cmx: OCAMLPACKAGES += -package oUnit ++c_utils_unit_tests.cmx: OCAMLPACKAGES += -package ounit2 + endif + + OCAMLLINKFLAGS = \ +@@ -131,7 +131,7 @@ c_utils_unit_tests_DEPENDENCIES = \ + c_utils_unit_tests_LINK = \ + $(top_srcdir)/ocaml-link.sh -cclib '-lutils -lgnu' -- \ + $(OCAMLFIND) $(BEST) $(OCAMLFLAGS) \ +- $(OCAMLPACKAGES) -package oUnit \ ++ $(OCAMLPACKAGES) -package ounit2 \ + $(OCAMLLINKFLAGS) \ + $(c_utils_unit_tests_THEOBJECTS) -o $@ + +-- +2.29.0.rc2 + diff --git a/guestfs-tools.spec b/guestfs-tools.spec new file mode 100644 index 0000000..bbe236f --- /dev/null +++ b/guestfs-tools.spec @@ -0,0 +1,406 @@ +# Architectures that we run the test suite on. +# +# As the test suite takes a very long time to run and is somewhat +# unreliable on !x86 architectures, only run it on x86-64. +%if !0%{?rhel} +%global test_arches x86_64 +%else +# RHEL 9 only: +# x86-64: "/lib64/libc.so.6: CPU ISA level is lower than required" +# (RHBZ#1919389) +%global test_arches NONE +%endif + +# Verify tarball signature with GPGv2. +%global verify_tarball_signature 1 + +# If there are patches which touch autotools files, set this to 1. +%global patches_touch_autotools 1 + +# The source directory. +%global source_directory 1.45-development + +# Filter perl provides. +%{?perl_default_filter} + +Summary: Tools to access and modify virtual machine disk images +Name: guestfs-tools +Version: 1.45.2 +Release: 4%{?dist} +License: GPLv2+ + +# Build only for architectures that have a kernel +ExclusiveArch: %{kernel_arches} + +# Source and patches. +URL: http://libguestfs.org/ +Source0: http://download.libguestfs.org/guestfs-tools/%{source_directory}/%{name}-%{version}.tar.gz +%if 0%{verify_tarball_signature} +Source1: http://download.libguestfs.org/guestfs-tools/%{source_directory}/%{name}-%{version}.tar.gz.sig +%endif + +# Keyring used to verify tarball signature. +%if 0%{verify_tarball_signature} +Source2: libguestfs.keyring +%endif + +# Upstream patches to fix various build issues discovered while +# packaging this for Fedora. +Patch1: 0001-po-docs-podfiles-Fix-bogus-directories-in-this-file.patch +Patch2: 0002-po-docs-Don-t-try-to-install-.3-and-.5-files-which-d.patch +Patch3: 0003-build-Remove-dependency-on-gobject-introspection.patch +Patch4: 0004-build-Remove-dependency-on-perl-Sys-Virt.patch +Patch5: 0005-builder-Get-rid-of-etc-xdg-and-XDG_CONFIG_DIRS-nonse.patch +Patch6: 0006-builder-Use-correct-ounit2-module.patch +Patch7: 0007-Update-common-submodule-to-latest.patch + +%if 0%{patches_touch_autotools} +BuildRequires: autoconf, automake, libtool, gettext-devel +%endif + +# Basic build requirements. +BuildRequires: gcc, gcc-c++ +BuildRequires: make +BuildRequires: libguestfs-devel >= 1.44.0 +BuildRequires: libguestfs-xfs +BuildRequires: perl(Pod::Simple) +BuildRequires: perl(Pod::Man) +BuildRequires: perl(Module::Build) +BuildRequires: perl(Test::More) +BuildRequires: /usr/bin/pod2text +BuildRequires: po4a +BuildRequires: pcre2-devel +BuildRequires: libxml2-devel +BuildRequires: jansson-devel +BuildRequires: libvirt-devel +BuildRequires: libxcrypt-devel +BuildRequires: ncurses-devel +BuildRequires: ocaml-libguestfs-devel +BuildRequires: ocaml-findlib-devel +BuildRequires: ocaml-gettext-devel +%if !0%{?rhel} +BuildRequires: ocaml-ounit-devel +%endif +BuildRequires: flex +BuildRequires: bison +BuildRequires: xz-devel +%if !0%{?rhel} +BuildRequires: zip +BuildRequires: unzip +%endif +%if !0%{?rhel} +BuildRequires: perl(Expect) +%endif +BuildRequires: bash-completion +BuildRequires: /usr/bin/qemu-img +BuildRequires: perl(Locale::TextDomain) +BuildRequires: perl(Sys::Guestfs) +BuildRequires: perl(Win::Hivex) +BuildRequires: perl(Win::Hivex::Regedit) + +%if 0%{verify_tarball_signature} +BuildRequires: gnupg2 +%endif + +# For virt-builder: +Requires: curl +Requires: gnupg2 +Requires: /usr/bin/qemu-img +Requires: xz + +# For virt-builder-repository: +Suggests: osinfo-db + +# For virt-inspector, since Fedora and RHEL >= 7 use XFS: +Recommends: libguestfs-xfs + +# For virt-edit and virt-customize: +Suggests: perl + +# This replaces the libguestfs-tools-c package. +Provides: libguestfs-tools-c = 1:%{version}-%{release} +Obsoletes: libguestfs-tools-c <= 1:1.45.2-1 + + +%description +guestfs-tools is a set of tools that can be used to make batch +configuration changes to guests, get disk used/free statistics +(virt-df), perform backups and guest clones, change +registry/UUID/hostname info, build guests from scratch (virt-builder) +and much more. + +Virt-alignment-scan scans virtual machines looking for partition +alignment problems. + +Virt-builder is a command line tool for rapidly making disk images +of popular free operating systems. + +Virt-cat is a command line tool to display the contents of a file in a +virtual machine. + +Virt-customize is a command line tool for customizing virtual machine +disk images. + +Virt-df is a command line tool to display free space on virtual +machine filesystems. Unlike other tools, it doesn’t just display the +amount of space allocated to a virtual machine, but can look inside +the virtual machine to see how much space is really being used. It is +like the df(1) command, but for virtual machines, except that it also +works for Windows virtual machines. + +Virt-diff shows the differences between virtual machines. + +Virt-edit is a command line tool to edit the contents of a file in a +virtual machine. + +Virt-filesystems is a command line tool to display the filesystems, +partitions, block devices, LVs, VGs and PVs found in a disk image +or virtual machine. It replaces the deprecated programs +virt-list-filesystems and virt-list-partitions with a much more +capable tool. + +Virt-format is a command line tool to erase and make blank disks. + +Virt-get-kernel extracts a kernel/initrd from a disk image. + +Virt-inspector examines a virtual machine and tries to determine the +version of the OS, the kernel version, what drivers are installed, +whether the virtual machine is fully virtualized (FV) or +para-virtualized (PV), what applications are installed and more. + +Virt-log is a command line tool to display the log files from a +virtual machine. + +Virt-ls is a command line tool to list out files in a virtual machine. + +Virt-make-fs is a command line tool to build a filesystem out of +a collection of files or a tarball. + +Virt-resize can resize existing virtual machine disk images. + +Virt-sparsify makes virtual machine disk images sparse (thin-provisioned). + +Virt-sysprep lets you reset or unconfigure virtual machines in +preparation for cloning them. + +Virt-tail follows (tails) a log file within a guest, like 'tail -f'. + + +%package -n virt-win-reg +Summary: Access and modify the Windows Registry of a Windows VM +License: GPLv2+ +BuildArch: noarch + +# This replaces the libguestfs-tools package. +Provides: libguestfs-tools = 1:%{version}-%{release} +Obsoletes: libguestfs-tools <= 1:1.45.2-1 + + +%description -n virt-win-reg +Virt-win-reg lets you look at and modify the Windows Registry of +Windows virtual machines. + + +%if !0%{?rhel} +%package -n virt-dib +Summary: Safe and secure diskimage-builder replacement +License: GPLv2+ + +Requires: libguestfs-dib >= 1:1.45.2-1 + + +%description -n virt-dib +Virt-dib is a safe and secure alternative to the OpenStack +diskimage-builder command. It is compatible with most +diskimage-builder elements. +%endif + + +%package bash-completion +Summary: Bash tab-completion scripts for %{name} +BuildArch: noarch +Requires: bash-completion >= 2.0 +Requires: %{name} = %{version}-%{release} + + +%description bash-completion +Install this package if you want intelligent bash tab-completion +for the virt-* tools. + + +%package man-pages-ja +Summary: Japanese (ja) man pages for %{name} +BuildArch: noarch +Requires: %{name} = %{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} = %{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='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' +%endif +%setup -q +%autopatch -p1 + +%if 0%{patches_touch_autotools} +autoreconf -i +%endif + + +%build +%{configure} + +# Building index-parse.c by hand works around a race condition in the +# autotools cruft, where two or more copies of yacc race with each +# other, resulting in a corrupted file. +make -j1 -C builder index-parse.c + +make V=1 %{?_smp_mflags} + + +%check +%ifarch %{test_arches} +# Enable debugging. +export LIBGUESTFS_DEBUG=1 +export LIBGUESTFS_TRACE=1 + +# This test is currently broken and needs further investigation. +export SKIP_TEST_MACHINE_READABLE_SH=1 + +# This test fails for me in local mock and Koji, but not when running +# in an unrestricted environment. +export SKIP_TEST_VIRT_FORMAT_SH=1 + +if ! make check -k ; then + # Dump out the log files of any failing tests to make + # debugging test failures easier. + for f in `find -name test-suite.log | xargs grep -l ^FAIL:`; do + echo '*****' $f '*****' + cat $f + echo + done + exit 1 +fi +%endif + + +%install +make DESTDIR=$RPM_BUILD_ROOT install + +# Delete libtool files. +find $RPM_BUILD_ROOT -name '*.la' -delete + +# Move installed documentation back to the source directory so +# we can install it using a %%doc rule. +mv $RPM_BUILD_ROOT%{_docdir}/%{name} installed-docs +gzip --best installed-docs/*.xml + + +# Find locale files. +%find_lang %{name} + + +%files -f %{name}.lang +%license COPYING +%doc README +%doc installed-docs/* +%dir %{_sysconfdir}/virt-builder +%dir %{_sysconfdir}/virt-builder/repos.d +%config(noreplace) %{_sysconfdir}/virt-builder/repos.d/* +%{_bindir}/virt-alignment-scan +%{_bindir}/virt-builder +%{_bindir}/virt-builder-repository +%{_bindir}/virt-cat +%{_bindir}/virt-customize +%{_bindir}/virt-df +%{_bindir}/virt-diff +%{_bindir}/virt-edit +%{_bindir}/virt-filesystems +%{_bindir}/virt-format +%{_bindir}/virt-get-kernel +%{_bindir}/virt-index-validate +%{_bindir}/virt-inspector +%{_bindir}/virt-log +%{_bindir}/virt-ls +%{_bindir}/virt-make-fs +%{_bindir}/virt-resize +%{_bindir}/virt-sparsify +%{_bindir}/virt-sysprep +%{_bindir}/virt-tail +%{_mandir}/man1/virt-alignment-scan.1* +%{_mandir}/man1/virt-builder-repository.1* +%{_mandir}/man1/virt-builder.1* +%{_mandir}/man1/virt-cat.1* +%{_mandir}/man1/virt-customize.1* +%{_mandir}/man1/virt-df.1* +%{_mandir}/man1/virt-diff.1* +%{_mandir}/man1/virt-edit.1* +%{_mandir}/man1/virt-filesystems.1* +%{_mandir}/man1/virt-format.1* +%{_mandir}/man1/virt-get-kernel.1* +%{_mandir}/man1/virt-index-validate.1* +%{_mandir}/man1/virt-inspector.1* +%{_mandir}/man1/virt-log.1* +%{_mandir}/man1/virt-ls.1* +%{_mandir}/man1/virt-make-fs.1* +%{_mandir}/man1/virt-resize.1* +%{_mandir}/man1/virt-sparsify.1* +%{_mandir}/man1/virt-sysprep.1* +%{_mandir}/man1/virt-tail.1* + + +%files -n virt-win-reg +%license COPYING +%doc README +%{_bindir}/virt-win-reg +%{_mandir}/man1/virt-win-reg.1* + + +%if !0%{?rhel} +%files -n virt-dib +%license COPYING +%doc README +%{_bindir}/virt-dib +%{_mandir}/man1/virt-dib.1* +%endif + + +%files bash-completion +%license COPYING +%dir %{_datadir}/bash-completion/completions +%{_datadir}/bash-completion/completions/virt-* + + +%files man-pages-ja +%lang(ja) %{_mandir}/ja/man1/*.1* + + +%files man-pages-uk +%lang(uk) %{_mandir}/uk/man1/*.1* + + +%changelog +* Thu Mar 25 2021 Richard W.M. Jones - 1.45.2-4 +- Add perl(Test::More) dependency for the Perl test suite. +- Add perl(Module::Build) dependency for the Perl bindings. +- Fix ounit2 dependency again. + +* Wed Mar 24 2021 Richard W.M. Jones - 1.45.2-2 +- Add perl(Locale::TextDomain) dependency for virt-win-reg. +- Fix ounit2 dependency upstream. + +* Tue Mar 23 2021 Richard W.M. Jones - 1.45.2-1 +- New guestfs-tools package, split off from libguestfs. diff --git a/libguestfs.keyring b/libguestfs.keyring new file mode 100644 index 0000000..bb3eb55 Binary files /dev/null and b/libguestfs.keyring differ diff --git a/sources b/sources new file mode 100644 index 0000000..7dd9501 --- /dev/null +++ b/sources @@ -0,0 +1,2 @@ +SHA512 (guestfs-tools-1.45.2.tar.gz) = 8cf9a77209ad5f724b68dba8865cd5ea1d2d65f22a7c6c85796eccbff9fd9591cc9cf9d95c5426c60d15005b7bb4e23ce392cefc641e46fa4c0dfca4a6541edd +SHA512 (guestfs-tools-1.45.2.tar.gz.sig) = 52a49d652766e896390e135dd9efa5d109b4094cc1e4a34e5ec8540f992b491754e10c889e3d545a5e4d08bafe3f0ec64af69d494fb39221a4a0f5e74ff18268