diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c1d0e1b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/guestfs-tools-1.46.1.tar.gz +SOURCES/libguestfs.keyring diff --git a/.guestfs-tools.metadata b/.guestfs-tools.metadata new file mode 100644 index 0000000..578f68a --- /dev/null +++ b/.guestfs-tools.metadata @@ -0,0 +1,2 @@ +a34069426419e2c5cabf951f5282cb57a7ba788d SOURCES/guestfs-tools-1.46.1.tar.gz +1bbc40f501a7fef9eef2a39b701a71aee2fea7c4 SOURCES/libguestfs.keyring diff --git a/SOURCES/0001-win-reg-Fix-output-of-virt-win-reg-version.patch b/SOURCES/0001-win-reg-Fix-output-of-virt-win-reg-version.patch new file mode 100644 index 0000000..9910422 --- /dev/null +++ b/SOURCES/0001-win-reg-Fix-output-of-virt-win-reg-version.patch @@ -0,0 +1,191 @@ +From 83de85e717ad525423b0eabe153b48ff8af90bd1 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 17 May 2021 15:18:04 +0100 +Subject: [PATCH] win-reg: Fix output of virt-win-reg --version + +Before we split libguestfs and guestfs-tools the version of programs +was exactly the same as the version of libguestfs. This was +convenient for virt-win-reg where it is difficult to encode the +version into the script, because virt-win-reg could simply use the +version from Sys::Guestfs (ie. libguestfs). However after the split +this no longer applies, so we must do the difficult thing. + +After this change virt-win-reg will print both the version of +guestfs-tools and the version of libguestfs, eg: + + $ virt-win-reg --version + virt-win-reg 1.47.1 + libguestfs 1.45.5fedora=35,release=1.fc35,libvirt + +Reported-by: Yongkui Guo +Fixes: commit 4354a3126152a2748cc9097cba139b3908ccc342 +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1961160 +(cherry picked from commit 9e9eeeaf4c4b478eca82bf0d4c3e680a624d6d91) +--- + .gitignore | 1 + + configure.ac | 2 ++ + po-docs/podfiles | 2 +- + po/POTFILES-pl | 2 +- + po/guestfs-tools.pot | 18 +++++++++--------- + win-reg/Makefile.am | 6 ------ + win-reg/{virt-win-reg => virt-win-reg.in} | 5 +++-- + 7 files changed, 17 insertions(+), 19 deletions(-) + rename win-reg/{virt-win-reg => virt-win-reg.in} (99%) + +diff --git a/.gitignore b/.gitignore +index 006042a8..6bc509fa 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -163,3 +163,4 @@ Makefile.in + /test-data/phony-guests/windows-software + /test-data/phony-guests/windows-system + /website/*.html ++/win-reg/virt-win-reg +diff --git a/configure.ac b/configure.ac +index 56cfef57..ef412670 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -99,6 +99,8 @@ AC_CONFIG_FILES([podwrapper.pl], + [chmod +x,-w podwrapper.pl]) + AC_CONFIG_FILES([run], + [chmod +x,-w run]) ++AC_CONFIG_FILES([win-reg/virt-win-reg], ++ [chmod +x,-w win-reg/virt-win-reg]) + + AC_CONFIG_FILES([Makefile + align/Makefile +diff --git a/po-docs/podfiles b/po-docs/podfiles +index d7ef1389..6b0c481f 100644 +--- a/po-docs/podfiles ++++ b/po-docs/podfiles +@@ -26,4 +26,4 @@ sparsify/virt-sparsify.pod + sysprep/sysprep-extra-options.pod + sysprep/sysprep-operations.pod + sysprep/virt-sysprep.pod +-win-reg/virt-win-reg ++win-reg/virt-win-reg.in +diff --git a/po/POTFILES-pl b/po/POTFILES-pl +index 47d30fc8..c6520cea 100644 +--- a/po/POTFILES-pl ++++ b/po/POTFILES-pl +@@ -1 +1 @@ +-win-reg/virt-win-reg ++win-reg/virt-win-reg.in +diff --git a/po/guestfs-tools.pot b/po/guestfs-tools.pot +index a3be1b95..d7e9a3a7 100644 +--- a/po/guestfs-tools.pot ++++ b/po/guestfs-tools.pot +@@ -9,7 +9,7 @@ msgstr "" + "Project-Id-Version: guestfs-tools 1.46.1\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2021-05-08 08:57+0100\n" ++"POT-Creation-Date: 2021-05-17 15:25+0100\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: FULL NAME \n" + "Language-Team: LANGUAGE \n" +@@ -4213,11 +4213,11 @@ msgstr "" + msgid "%s: subprocess failed\n" + msgstr "" + +-#: win-reg/virt-win-reg:260 ++#: win-reg/virt-win-reg.in:261 + msgid "no libvirt domain name or disk image given\n" + msgstr "" + +-#: win-reg/virt-win-reg:316 ++#: win-reg/virt-win-reg.in:317 + #, perl-brace-format + msgid "" + "{prog}: No operating system could be detected inside this disk image.\n" +@@ -4230,33 +4230,33 @@ msgid "" + "information about the disk image as possible.\n" + msgstr "" + +-#: win-reg/virt-win-reg:320 ++#: win-reg/virt-win-reg.in:321 + #, perl-brace-format + msgid "{prog}: multiboot operating systems are not supported.\n" + msgstr "" + +-#: win-reg/virt-win-reg:342 ++#: win-reg/virt-win-reg.in:343 + msgid "" + "expecting 1 or 2 more parameters, subkey path and optionally the value to " + "export\n" + msgstr "" + +-#: win-reg/virt-win-reg:502 ++#: win-reg/virt-win-reg.in:503 + #, perl-brace-format + msgid "virt-win-reg: {p}: cannot find user directory\n" + msgstr "" + +-#: win-reg/virt-win-reg:507 ++#: win-reg/virt-win-reg.in:508 + #, perl-brace-format + msgid "virt-win-reg: {p}: not a supported Windows Registry path\n" + msgstr "" + +-#: win-reg/virt-win-reg:580 ++#: win-reg/virt-win-reg.in:581 + #, perl-brace-format + msgid "virt-win-reg: {p}: could not download registry file: {err}\n" + msgstr "" + +-#: win-reg/virt-win-reg:597 ++#: win-reg/virt-win-reg.in:598 + #, perl-brace-format + msgid "virt-win-reg: {p}: could not upload registry file: {err}\n" + msgstr "" +diff --git a/win-reg/Makefile.am b/win-reg/Makefile.am +index 22a22db4..61ec066a 100644 +--- a/win-reg/Makefile.am ++++ b/win-reg/Makefile.am +@@ -17,8 +17,6 @@ + + include $(top_srcdir)/subdir-rules.mk + +-EXTRA_DIST = virt-win-reg +- + bin_SCRIPTS = virt-win-reg + + # Manual pages and HTML files for the website. +@@ -36,7 +34,3 @@ stamp-virt-win-reg.pod: virt-win-reg + --warning custom \ + $< + touch $@ +- +-all-local: +- for f in virt-win-reg; do echo win-reg/$$f; done \ +- > $(top_srcdir)/po/POTFILES-pl +diff --git a/win-reg/virt-win-reg b/win-reg/virt-win-reg.in +similarity index 99% +rename from win-reg/virt-win-reg +rename to win-reg/virt-win-reg.in +index 1a936c5d..6d9d0a28 100755 +--- a/win-reg/virt-win-reg ++++ b/win-reg/virt-win-reg.in +@@ -1,6 +1,6 @@ + #!/usr/bin/env perl + # virt-win-reg +-# Copyright (C) 2010 Red Hat Inc. ++# Copyright (C) 2010-2021 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 +@@ -234,9 +234,10 @@ my %opts = ("help|?" => \$help, + GetOptions (%opts) or pod2usage (2); + pod2usage (1) if $help; + if ($version) { ++ print "virt-win-reg @PACKAGE_VERSION@\n"; + my $g = Sys::Guestfs->new (); + my %h = $g->version (); +- print "virt-win-reg $h{major}.$h{minor}.$h{release}$h{extra}\n"; ++ print "libguestfs $h{major}.$h{minor}.$h{release}$h{extra}\n"; + exit + } + +-- +2.31.1 + diff --git a/SOURCES/0002-m4-guestfs-ocaml.m4-Fix-deprecated-warning-format.patch b/SOURCES/0002-m4-guestfs-ocaml.m4-Fix-deprecated-warning-format.patch new file mode 100644 index 0000000..df01d43 --- /dev/null +++ b/SOURCES/0002-m4-guestfs-ocaml.m4-Fix-deprecated-warning-format.patch @@ -0,0 +1,32 @@ +From 662e12ba1a2c2f06151b0f06814e6da0025cff2d Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 5 Oct 2021 20:51:19 +0100 +Subject: [PATCH] m4/guestfs-ocaml.m4: Fix deprecated warning format + +In OCaml 4.13: + +Alert ocaml_deprecated_cli: Setting a warning with a sequence of lowercase or uppercase letters, +like 'CDEFLMPSUVYZX', is deprecated. +Use the equivalent signed form: +C+D+E+F+L+M+P+S+U+V+Y+Z+X+52-3. + +(cherry picked from commit fa4f59e1d99c08d7e0bae2a7cb54f254a6506d67) +--- + m4/guestfs-ocaml.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/m4/guestfs-ocaml.m4 b/m4/guestfs-ocaml.m4 +index f5ac7eff..d2b3804a 100644 +--- a/m4/guestfs-ocaml.m4 ++++ b/m4/guestfs-ocaml.m4 +@@ -166,7 +166,7 @@ EOF + ]) + + dnl Flags we want to pass to every OCaml compiler call. +-OCAML_WARN_ERROR="-warn-error CDEFLMPSUVYZX+52-3" ++OCAML_WARN_ERROR="-warn-error +C+D+E+F+L+M+P+S+U+V+Y+Z+X+52-3" + AC_SUBST([OCAML_WARN_ERROR]) + OCAML_FLAGS="-g -annot $safe_string_option" + AC_SUBST([OCAML_FLAGS]) +-- +2.31.1 + diff --git a/SOURCES/0003-customize-Suppress-OCaml-warning.patch b/SOURCES/0003-customize-Suppress-OCaml-warning.patch new file mode 100644 index 0000000..3335206 --- /dev/null +++ b/SOURCES/0003-customize-Suppress-OCaml-warning.patch @@ -0,0 +1,33 @@ +From 89617fbe8867254b8c5a77c7fd28ab7746338751 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 5 Oct 2021 20:53:25 +0100 +Subject: [PATCH] customize: Suppress OCaml warning + +In OCaml 4.13: + +File "perl_edit.ml", line 30, characters 2-13: +30 | c_edit_file (verbose ()) g (Guestfs.c_pointer g) file expr + ^^^^^^^^^^^ +Error (warning 6 [labels-omitted]): label verbose was omitted in the application of this function. + +(cherry picked from commit a4930f5fad82e5358d565b8cf3610970e9646259) +--- + m4/guestfs-ocaml.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/m4/guestfs-ocaml.m4 b/m4/guestfs-ocaml.m4 +index d2b3804a..8a23877c 100644 +--- a/m4/guestfs-ocaml.m4 ++++ b/m4/guestfs-ocaml.m4 +@@ -166,7 +166,7 @@ EOF + ]) + + dnl Flags we want to pass to every OCaml compiler call. +-OCAML_WARN_ERROR="-warn-error +C+D+E+F+L+M+P+S+U+V+Y+Z+X+52-3" ++OCAML_WARN_ERROR="-warn-error +C+D+E+F+L+M+P+S+U+V+Y+Z+X+52-3-6" + AC_SUBST([OCAML_WARN_ERROR]) + OCAML_FLAGS="-g -annot $safe_string_option" + AC_SUBST([OCAML_FLAGS]) +-- +2.31.1 + diff --git a/SOURCES/0004-virt-inspector.rng-recognize-kalilinux-and-msdos-dis.patch b/SOURCES/0004-virt-inspector.rng-recognize-kalilinux-and-msdos-dis.patch new file mode 100644 index 0000000..bf6a1b8 --- /dev/null +++ b/SOURCES/0004-virt-inspector.rng-recognize-kalilinux-and-msdos-dis.patch @@ -0,0 +1,38 @@ +From e8148241cfd6019e493269580c7fe74d62e0fbdc Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 13 Oct 2021 18:30:42 +0200 +Subject: [PATCH] virt-inspector.rng: recognize "kalilinux" and "msdos" distros + +As of libguestfs @ e597fc5317e0, the "string_of_distro" function +[daemon/inspect_types.ml] may output "kalilinux" and "msdos" beyond what +"virt-inspector.rng" currently accepts. Add these distro identifiers to +"virt-inspector.rng" now. + +Signed-off-by: Laszlo Ersek +Message-Id: <20211013163043.21837-2-lersek@redhat.com> +Acked-by: Richard W.M. Jones +(cherry picked from commit aefdf0dcd4954b822e6a098f7258899f1b6a72b7) +--- + inspector/virt-inspector.rng | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/inspector/virt-inspector.rng b/inspector/virt-inspector.rng +index 7807e4d7..0a81538e 100644 +--- a/inspector/virt-inspector.rng ++++ b/inspector/virt-inspector.rng +@@ -87,10 +87,12 @@ + freedos + frugalware + gentoo ++ kalilinux + linuxmint + mageia + mandriva + meego ++ msdos + neokylin + netbsd + openbsd +-- +2.31.1 + diff --git a/SOURCES/0005-virt-inspector.rng-Add-support-for-Kylin-RHBZ-199539.patch b/SOURCES/0005-virt-inspector.rng-Add-support-for-Kylin-RHBZ-199539.patch new file mode 100644 index 0000000..017e9d9 --- /dev/null +++ b/SOURCES/0005-virt-inspector.rng-Add-support-for-Kylin-RHBZ-199539.patch @@ -0,0 +1,29 @@ +From 8dad474829a8f6874c01a6d85749d8fd66d192ae Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 13 Oct 2021 18:30:43 +0200 +Subject: [PATCH] virt-inspector.rng: Add support for Kylin (RHBZ#1995391). + +Similar-to: b8bc491ff59cc1cc24a1935be99cee0c5edfb5be +Signed-off-by: Laszlo Ersek +Message-Id: <20211013163043.21837-3-lersek@redhat.com> +Acked-by: Richard W.M. Jones +(cherry picked from commit f041a5e24d8c5850daf7ad8f8e1a284e0445266b) +--- + inspector/virt-inspector.rng | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/inspector/virt-inspector.rng b/inspector/virt-inspector.rng +index 0a81538e..5b460b36 100644 +--- a/inspector/virt-inspector.rng ++++ b/inspector/virt-inspector.rng +@@ -88,6 +88,7 @@ + frugalware + gentoo + kalilinux ++ kylin + linuxmint + mageia + mandriva +-- +2.31.1 + diff --git a/SOURCES/0006-sysprep-remove-system-local-NetworkManager-connectio.patch b/SOURCES/0006-sysprep-remove-system-local-NetworkManager-connectio.patch new file mode 100644 index 0000000..187f906 --- /dev/null +++ b/SOURCES/0006-sysprep-remove-system-local-NetworkManager-connectio.patch @@ -0,0 +1,96 @@ +From 6f8c270b3fb7b5b3109d2553fef38f128b6137ac Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 2 Dec 2021 14:10:06 +0100 +Subject: [PATCH] sysprep: remove system-local NetworkManager connection + profiles (keyfiles) + +Add a simple (default) operation to remove + + /etc/NetworkManager/system-connections/*.nmconnection + +which arguably carry stale information after the initial creation of the +system disk image. + +Note: no side effect callback is invoked. Before commit 576f1541a20c +("sysprep: Use customize module for customizing the guest after +sysprepping.", 2014-03-25), the "delete" operation had been native to +virt-sysprep ("sysprep/sysprep_operation_delete.ml"), and it didn't invoke +side effects. In said commit, "delete" was delegated to virt-customize, +and that was when "side_effects#created_file" was introduced (most likely) +as a catch-all. (We still have the "XXX Did we?" comment today.) + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1980922 +Signed-off-by: Laszlo Ersek +Message-Id: <20211202131006.12774-1-lersek@redhat.com> +Acked-by: Richard W.M. Jones +(cherry picked from commit 903819ecf480bcefec108bdbd7e9bdec1b3b5a49) +--- + sysprep/Makefile.am | 1 + + sysprep/sysprep_operation_net_nmconn.ml | 43 +++++++++++++++++++++++++ + 2 files changed, 44 insertions(+) + create mode 100644 sysprep/sysprep_operation_net_nmconn.ml + +diff --git a/sysprep/Makefile.am b/sysprep/Makefile.am +index d32ab20e..561a71ae 100644 +--- a/sysprep/Makefile.am ++++ b/sysprep/Makefile.am +@@ -52,6 +52,7 @@ operations = \ + mail_spool \ + net_hostname \ + net_hwaddr \ ++ net_nmconn \ + pacct_log \ + package_manager_cache \ + pam_data \ +diff --git a/sysprep/sysprep_operation_net_nmconn.ml b/sysprep/sysprep_operation_net_nmconn.ml +new file mode 100644 +index 00000000..2d8667f1 +--- /dev/null ++++ b/sysprep/sysprep_operation_net_nmconn.ml +@@ -0,0 +1,43 @@ ++(* virt-sysprep ++ * Copyright (C) 2012-2021 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. ++ *) ++ ++open Common_gettext.Gettext ++open Sysprep_operation ++ ++let glob = "/etc/NetworkManager/system-connections/*.nmconnection" ++ ++let net_nmconn_perform (g : Guestfs.guestfs) root side_effects = ++ let typ = g#inspect_get_type root in ++ let distro = g#inspect_get_distro root in ++ match typ, distro with ++ | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"| ++ "redhat-based") -> Array.iter g#rm_f (g#glob_expand glob) ++ | _ -> () ++ ++let op = { ++ defaults with ++ name = "net-nmconn"; ++ enabled_by_default = true; ++ heading = s_"Remove system-local NetworkManager connection profiles \ ++ (keyfiles)"; ++ pod_description = Some (s_"On Fedora and Red Hat Enterprise Linux, remove \ ++ the C<" ^ glob ^ "> files."); ++ perform_on_filesystems = Some net_nmconn_perform; ++} ++ ++let () = register_operation op +-- +2.31.1 + diff --git a/SOURCES/copy-patches.sh b/SOURCES/copy-patches.sh new file mode 100755 index 0000000..03de548 --- /dev/null +++ b/SOURCES/copy-patches.sh @@ -0,0 +1,60 @@ +#!/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=guestfs-tools +rhel_version=9.0 + +# 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 ;; + lersek) git_checkout=$HOME/src/guestfs-tools/$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 format-patch -N --submodule=diff $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/SOURCES/guestfs-tools-1.46.1.tar.gz.sig b/SOURCES/guestfs-tools-1.46.1.tar.gz.sig new file mode 100644 index 0000000..5f9b475 --- /dev/null +++ b/SOURCES/guestfs-tools-1.46.1.tar.gz.sig @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- + +iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmCWR4QRHHJpY2hAYW5u +ZXhpYS5vcmcACgkQkXOPc+G3aKB9Qg/5AYHa5Jges5uviaps3aDahEWZjKHdkHOR +ttZ3LGxqUeY8qxwaoLpGfTpFVmTI8VQj6mQES3IeSPOpBYVPeACz7j3GCvhedsv7 +naKVIl3RO1koG8IvPUc3H9P3iaNwp9w/8I8qUinbz2++xhP3tideeomz5js0taud +beEry79TvkxRtGRDz50YD3KOv4kVDWS46WN+tms2XJOSTX7SdZavK6VMmX+zt8aT +8oFL6kbGKyk9bswoBLSnbrholBS6l09UbIbfhKr+xvqBgUGvbm2wqTNR7I3T2rPj +19MPW1o/jrjRjPW7j3H73piHP/nD8S8M1Y+yEUycIZh1FEn4EDbVsiVGSbOxWZwP +SKn0+sfuLnoINzT/PyrRKHqoP9U3kUKeanPXk1jZerCF1aBqYL/8a1fExy5Ha4LW +JVq9P9KrWzQ5hfb5Emp+5dR2quroPfBQcRCJP8PC/5Nc0PN/JCngDfPQNScyH4lR +PI51zDIo/E9OHqoAzrOws+Jir4AaZabERO2JDBaibtbZlbOqISOdf05SYaHFfm0u +Tf2PFdDCd9tN1rfcv4zP5EB5Ty/APPkIa0nlhyk0QZPkx23PLF60iuyl4UOZxL5r +IQRadagD17iaYQ9dm+V61YOuYDSr2luRh4FnyPOVJUeeCjbivz/e0f3dmRVlZzpo +s8mtYmo7vUM= +=qllH +-----END PGP SIGNATURE----- diff --git a/SPECS/guestfs-tools.spec b/SPECS/guestfs-tools.spec new file mode 100644 index 0000000..22e9879 --- /dev/null +++ b/SPECS/guestfs-tools.spec @@ -0,0 +1,487 @@ +# 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.46-stable + +# Filter perl provides. +%{?perl_default_filter} + +Summary: Tools to access and modify virtual machine disk images +Name: guestfs-tools +Version: 1.46.1 +Release: 6%{?dist} +License: GPLv2+ + +# 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://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 + +# Maintainer script which helps with handling patches. +Source3: copy-patches.sh + +# Patches are maintained in the following repository: +# https://github.com/rwmjones/guestfs-tools/commits/rhel-9.0.0 + +# Fix virt-win-reg --version (RHBZ#1961160) +Patch0001: 0001-win-reg-Fix-output-of-virt-win-reg-version.patch + +# Fix detection of Kylin Desktop (RHBZ#2025950) +Patch0002: 0002-m4-guestfs-ocaml.m4-Fix-deprecated-warning-format.patch +Patch0003: 0003-customize-Suppress-OCaml-warning.patch +Patch0004: 0004-virt-inspector.rng-recognize-kalilinux-and-msdos-dis.patch +Patch0005: 0005-virt-inspector.rng-Add-support-for-Kylin-RHBZ-199539.patch + +# Clean up NetworkManager connection files (RHBZ#1980922) +Patch0006: 0006-sysprep-remove-system-local-NetworkManager-connectio.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.45.3-1 +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: xorriso +BuildRequires: perl(Locale::TextDomain) +BuildRequires: perl(Sys::Guestfs) +BuildRequires: perl(Win::Hivex) +BuildRequires: perl(Win::Hivex::Regedit) +BuildRequires: perl-generators + +%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+ +# This subpackage (only) must have an Epoch of 1 because it +# replaces a package in libguestfs which had an Epoch of 1. +Epoch: 1 + +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 + +# This test takes too long to run under Koji and times out. It runs +# fine with KVM enabled. +export SKIP_TEST_VIRT_RESIZE_PL=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 + +%if 0%{?rhel} +# Remove virt-dib if it was built. +rm -f $RPM_BUILD_ROOT%{_bindir}/virt-dib +rm -f $RPM_BUILD_ROOT%{_mandir}/man1/virt-dib.1* +%endif + +# Find locale files. +%find_lang %{name} + + +# Fix upgrades from old libguestfs-tools-c package +# which had /etc/virt-builder -> xdg/virt-builder. +# https://docs.fedoraproject.org/en-US/packaging-guidelines/Directory_Replacement/ +# This can be removed in Fedora > 36. +%pretrans -p +path = "/etc/virt-builder" +st = posix.stat(path) +if st and st.type == "link" then + os.remove(path) +end + + +%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 +* Sat Dec 04 2021 Richard W.M. Jones - 1.46.1-6 +- Clean up NetworkManager connection files +- Add the copy-patches.sh script from virt-v2v + resolves: rhbz#1980922 + +* Tue Nov 23 2021 Richard W.M. Jones - 1.46.1-5 +- Fix detection of Kylin Desktop + resolves: rhbz#2025950 + +* Mon Aug 09 2021 Mohan Boddu - 1.46.1-4.1 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Wed Jun 2 2021 Richard W.M. Jones - 1.46.1-3.el9.1 +- Add gating tests (for RHEL 9) + +* Mon May 17 2021 Richard W.M. Jones - 1.46.1-3 +- Fix virt-win-reg --version + resolves: rhbz#1961160 + +* Thu May 13 2021 Richard W.M. Jones - 1.46.1-2 +- BR perl-generators so deps of virt-win-reg subpackage are correct. + resolves: rhbz#1960191 + +* Sat May 08 2021 Richard W.M. Jones - 1.46.1-1 +- New stable branch version 1.46.1. + +* Tue Apr 27 2021 Richard W.M. Jones - 1.46.0-1 +- New stable branch version 1.46.0. + +* Wed Apr 07 2021 Richard W.M. Jones - 1.45.3-4 +- Use Epoch 1 for virt-dib subpackage (only). + +* Wed Mar 31 2021 Richard W.M. Jones - 1.45.3-3 +- Add BR xorriso, needed to run the tests. + +* Mon Mar 29 2021 Richard W.M. Jones - 1.45.3-1 +- New upstream version 1.45.3. +- Fix symlink replacement of virt-builder directory (RHBZ#1943838). + +* Fri Mar 26 2021 Richard W.M. Jones - 1.45.2-5 +- Skip test-virt-resize.pl that takes too long to run. + +* 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.