diff --git a/SOURCES/0001-Switch-from-YAJL-to-Jansson.patch b/SOURCES/0001-Switch-from-YAJL-to-Jansson.patch
index 0ec2f15..4d20339 100644
--- a/SOURCES/0001-Switch-from-YAJL-to-Jansson.patch
+++ b/SOURCES/0001-Switch-from-YAJL-to-Jansson.patch
@@ -969,5 +969,5 @@ index 78a9e792f..2fdbd9669 100644
dnl Check for C++ (optional, we just use this to test the header works).
AC_PROG_CXX
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0002-qemu-Fix-transcription-error-in-conversion-of-yajl-t.patch b/SOURCES/0002-qemu-Fix-transcription-error-in-conversion-of-yajl-t.patch
index e079e1a..50411a8 100644
--- a/SOURCES/0002-qemu-Fix-transcription-error-in-conversion-of-yajl-t.patch
+++ b/SOURCES/0002-qemu-Fix-transcription-error-in-conversion-of-yajl-t.patch
@@ -27,5 +27,5 @@ index a50eca988..3e7f15946 100644
STREQ (json_string_value (name), "locking"))
return 1;
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0003-v2v-ovf-Create-OVF-more-aligned-with-the-standard.patch b/SOURCES/0003-v2v-ovf-Create-OVF-more-aligned-with-the-standard.patch
index 3c95c8a..b605340 100644
--- a/SOURCES/0003-v2v-ovf-Create-OVF-more-aligned-with-the-standard.patch
+++ b/SOURCES/0003-v2v-ovf-Create-OVF-more-aligned-with-the-standard.patch
@@ -338,5 +338,5 @@ index c5e904ba1..ce286d327 100644
(* Write it to the metadata file. *)
let file = vdsm_options.ovf_output // vdsm_options.vm_uuid ^ ".ovf" in
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0004-v2v-vdsm-add-vdsm-fixed-ovf-option.patch b/SOURCES/0004-v2v-vdsm-add-vdsm-fixed-ovf-option.patch
index 238e64b..67dc38e 100644
--- a/SOURCES/0004-v2v-vdsm-add-vdsm-fixed-ovf-option.patch
+++ b/SOURCES/0004-v2v-vdsm-add-vdsm-fixed-ovf-option.patch
@@ -209,5 +209,5 @@ index cced114f3..0ea5fa97f 100644
=item B<--verbose>
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0005-v2v-OVF-Code-formatting.patch b/SOURCES/0005-v2v-OVF-Code-formatting.patch
index 39de8ca..bad357f 100644
--- a/SOURCES/0005-v2v-OVF-Code-formatting.patch
+++ b/SOURCES/0005-v2v-OVF-Code-formatting.patch
@@ -120,5 +120,5 @@ index d0735afce..0e07afea8 100644
let item =
e "Item" [] [
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0006-v2v-DOM-Add-doc_to_string-function.patch b/SOURCES/0006-v2v-DOM-Add-doc_to_string-function.patch
index b5f9f45..8461c8f 100644
--- a/SOURCES/0006-v2v-DOM-Add-doc_to_string-function.patch
+++ b/SOURCES/0006-v2v-DOM-Add-doc_to_string-function.patch
@@ -123,5 +123,5 @@ index 1aa89b7e7..99223c389 100644
(** Write the XML document to an output channel. *)
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0007-v2v-Add-op-output-password-file-option.patch b/SOURCES/0007-v2v-Add-op-output-password-file-option.patch
index 79afa1e..cf6f959 100644
--- a/SOURCES/0007-v2v-Add-op-output-password-file-option.patch
+++ b/SOURCES/0007-v2v-Add-op-output-password-file-option.patch
@@ -134,5 +134,5 @@ index 0ea5fa97f..00ba45555 100644
The location of the storage for the converted guest.
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0008-v2v-cmdline-Move-definition-to-before-its-only-use.patch b/SOURCES/0008-v2v-cmdline-Move-definition-to-before-its-only-use.patch
index e5adf73..7de5647 100644
--- a/SOURCES/0008-v2v-cmdline-Move-definition-to-before-its-only-use.patch
+++ b/SOURCES/0008-v2v-cmdline-Move-definition-to-before-its-only-use.patch
@@ -31,5 +31,5 @@ index 2a067741e..a83fcbae0 100644
let argspec = [
[ S 'b'; L"bridge" ], Getopt.String ("in:out", add_bridge),
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0009-v2v-Add-general-mechanism-for-input-and-output-optio.patch b/SOURCES/0009-v2v-Add-general-mechanism-for-input-and-output-optio.patch
index 0963e7b..1a4b8dc 100644
--- a/SOURCES/0009-v2v-Add-general-mechanism-for-input-and-output-optio.patch
+++ b/SOURCES/0009-v2v-Add-general-mechanism-for-input-and-output-optio.patch
@@ -1264,5 +1264,5 @@ index 00ba45555..69ca23dfd 100644
=head2 VDDK: DEBUGGING VDDK FAILURES
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0010-v2v-OVF-write-ovirt-id-attribute-for-the-OS-in-OVirt.patch b/SOURCES/0010-v2v-OVF-write-ovirt-id-attribute-for-the-OS-in-OVirt.patch
index 6ec645b..bb98e90 100644
--- a/SOURCES/0010-v2v-OVF-write-ovirt-id-attribute-for-the-OS-in-OVirt.patch
+++ b/SOURCES/0010-v2v-OVF-write-ovirt-id-attribute-for-the-OS-in-OVirt.patch
@@ -243,5 +243,5 @@ index 0e07afea8..730ab64b4 100644
| RHVExportStorageDomain ->
e "Section" ["ovf:id", vm_uuid; "ovf:required", "false";
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0011-v2v-OVF-fix-ovf-id-for-VirtualSystem-in-OVirt-flavou.patch b/SOURCES/0011-v2v-OVF-fix-ovf-id-for-VirtualSystem-in-OVirt-flavou.patch
index f1a7c0b..7410ec6 100644
--- a/SOURCES/0011-v2v-OVF-fix-ovf-id-for-VirtualSystem-in-OVirt-flavou.patch
+++ b/SOURCES/0011-v2v-OVF-fix-ovf-id-for-VirtualSystem-in-OVirt-flavou.patch
@@ -28,5 +28,5 @@ index 730ab64b4..b1ab8df3f 100644
e "Content" ["ovf:id", "out"; "xsi:type", "ovf:VirtualSystem_Type"]
!content_subnodes
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0012-v2v-Add-o-rhv-upload-output-mode-RHBZ-1557273.patch b/SOURCES/0012-v2v-Add-o-rhv-upload-output-mode-RHBZ-1557273.patch
index 046488b..82216b4 100644
--- a/SOURCES/0012-v2v-Add-o-rhv-upload-output-mode-RHBZ-1557273.patch
+++ b/SOURCES/0012-v2v-Add-o-rhv-upload-output-mode-RHBZ-1557273.patch
@@ -1760,5 +1760,5 @@ index 69ca23dfd..2d2f8cfd3 100644
virt-v2v from the RHV-M user interface, then behind the scenes the
import is managed by VDSM using the I<-o vdsm> output mode (which end
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0013-v2v-refer-to-the-right-embed-script-in-EXTRA_DIST.patch b/SOURCES/0013-v2v-refer-to-the-right-embed-script-in-EXTRA_DIST.patch
index d51e7ef..293efd6 100644
--- a/SOURCES/0013-v2v-refer-to-the-right-embed-script-in-EXTRA_DIST.patch
+++ b/SOURCES/0013-v2v-refer-to-the-right-embed-script-in-EXTRA_DIST.patch
@@ -24,5 +24,5 @@ index 694a64573..3a0c80f44 100644
rhv-upload-plugin.py \
rhv-upload-precheck.py \
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0014-v2v-o-rhv-upload-Don-t-require-of-raw-parameter.patch b/SOURCES/0014-v2v-o-rhv-upload-Don-t-require-of-raw-parameter.patch
index 83c34e9..7bc509c 100644
--- a/SOURCES/0014-v2v-o-rhv-upload-Don-t-require-of-raw-parameter.patch
+++ b/SOURCES/0014-v2v-o-rhv-upload-Don-t-require-of-raw-parameter.patch
@@ -80,5 +80,5 @@ index 129461242..dc0d96d53 100644
error (f_"rhv-upload: -of %s: Only output format ‘raw’ or ‘qcow2’ is supported. If the input is in a different format then force one of these output formats by adding either ‘-of raw’ or ‘-of qcow2’ on the command line.")
t.target_format in
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0015-v2v-o-rhv-upload-install-RHV-tools-RHBZ-1561828.patch b/SOURCES/0015-v2v-o-rhv-upload-install-RHV-tools-RHBZ-1561828.patch
index a5b0312..c5af50c 100644
--- a/SOURCES/0015-v2v-o-rhv-upload-install-RHV-tools-RHBZ-1561828.patch
+++ b/SOURCES/0015-v2v-o-rhv-upload-install-RHV-tools-RHBZ-1561828.patch
@@ -27,5 +27,5 @@ index dc0d96d53..0152b8d5a 100644
let output_name = source.s_name in
let json_params =
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0016-v2v-Map-Windows-Server-2012-R2-x86-64-to-ovirt-ID-25.patch b/SOURCES/0016-v2v-Map-Windows-Server-2012-R2-x86-64-to-ovirt-ID-25.patch
index 6e149e8..1bcdd9e 100644
--- a/SOURCES/0016-v2v-Map-Windows-Server-2012-R2-x86-64-to-ovirt-ID-25.patch
+++ b/SOURCES/0016-v2v-Map-Windows-Server-2012-R2-x86-64-to-ovirt-ID-25.patch
@@ -26,5 +26,5 @@ index b1ab8df3f..b3beb1eba 100644
| { i_type = "windows"; i_major_version = 10; i_minor_version = 0;
i_arch = "i386" } ->
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0017-v2v-fix-build-rules-for-output_rhv_upload_-_source.m.patch b/SOURCES/0017-v2v-fix-build-rules-for-output_rhv_upload_-_source.m.patch
index eba4322..60d632e 100644
--- a/SOURCES/0017-v2v-fix-build-rules-for-output_rhv_upload_-_source.m.patch
+++ b/SOURCES/0017-v2v-fix-build-rules-for-output_rhv_upload_-_source.m.patch
@@ -50,5 +50,5 @@ index 3a0c80f44..7de050b06 100644
-include .depend
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0018-v2v-fix-rhevexp-typo-in-documentation.patch b/SOURCES/0018-v2v-fix-rhevexp-typo-in-documentation.patch
index 9f4f779..ec30ca2 100644
--- a/SOURCES/0018-v2v-fix-rhevexp-typo-in-documentation.patch
+++ b/SOURCES/0018-v2v-fix-rhevexp-typo-in-documentation.patch
@@ -33,5 +33,5 @@ index 2d2f8cfd3..f012ea533 100644
=item B<-op> file
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0019-v2v-add-and-use-Create_ovf.ovf_flavour_to_string.patch b/SOURCES/0019-v2v-add-and-use-Create_ovf.ovf_flavour_to_string.patch
index bd23b8b..df1dc44 100644
--- a/SOURCES/0019-v2v-add-and-use-Create_ovf.ovf_flavour_to_string.patch
+++ b/SOURCES/0019-v2v-add-and-use-Create_ovf.ovf_flavour_to_string.patch
@@ -62,5 +62,5 @@ index 92b3fd122..9a1b748bc 100644
method supported_firmware = [ TargetBIOS ]
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0020-v2v-o-rhv-upload-Set-inactivity-timeout-RHBZ-1586198.patch b/SOURCES/0020-v2v-o-rhv-upload-Set-inactivity-timeout-RHBZ-1586198.patch
index 1ff5740..f2b06af 100644
--- a/SOURCES/0020-v2v-o-rhv-upload-Set-inactivity-timeout-RHBZ-1586198.patch
+++ b/SOURCES/0020-v2v-o-rhv-upload-Set-inactivity-timeout-RHBZ-1586198.patch
@@ -38,5 +38,5 @@ index 791c9e7d2..b4557b83c 100644
)
debug("transfer.id = %r" % transfer.id)
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0021-New-API-inspect_get_osinfo.patch b/SOURCES/0021-New-API-inspect_get_osinfo.patch
index ba61da3..a5796d6 100644
--- a/SOURCES/0021-New-API-inspect_get_osinfo.patch
+++ b/SOURCES/0021-New-API-inspect_get_osinfo.patch
@@ -132,5 +132,5 @@ index 000000000..816d317f1
+ return safe_strdup (g, "unknown");
+}
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0022-inspector-show-the-per-OS-osinfo-guess-RHBZ-1544842.patch b/SOURCES/0022-inspector-show-the-per-OS-osinfo-guess-RHBZ-1544842.patch
index dfbf66d..ce63327 100644
--- a/SOURCES/0022-inspector-show-the-per-OS-osinfo-guess-RHBZ-1544842.patch
+++ b/SOURCES/0022-inspector-show-the-per-OS-osinfo-guess-RHBZ-1544842.patch
@@ -95,5 +95,5 @@ index 314785202..1e3a58af8 100644
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0023-v2v-o-rhv-upload-Optimize-http-request-sending.patch b/SOURCES/0023-v2v-o-rhv-upload-Optimize-http-request-sending.patch
index e30f494..0dcf716 100644
--- a/SOURCES/0023-v2v-o-rhv-upload-Optimize-http-request-sending.patch
+++ b/SOURCES/0023-v2v-o-rhv-upload-Optimize-http-request-sending.patch
@@ -86,5 +86,5 @@ index b4557b83c..9ad354b84 100644
r = http.getresponse()
if r.status != 200:
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0024-v2v-o-rhv-upload-Log-full-imageio-response-on-failur.patch b/SOURCES/0024-v2v-o-rhv-upload-Log-full-imageio-response-on-failur.patch
index 58bbfa4..4bbc3fb 100644
--- a/SOURCES/0024-v2v-o-rhv-upload-Log-full-imageio-response-on-failur.patch
+++ b/SOURCES/0024-v2v-o-rhv-upload-Log-full-imageio-response-on-failur.patch
@@ -149,5 +149,5 @@ index 9ad354b84..7c5084efd 100644
def delete_disk_on_failure(h):
disk_service = h['disk_service']
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0025-v2v-rvh-upload-plugin-Always-read-the-response.patch b/SOURCES/0025-v2v-rvh-upload-plugin-Always-read-the-response.patch
index 04e02ad..6ef3f33 100644
--- a/SOURCES/0025-v2v-rvh-upload-plugin-Always-read-the-response.patch
+++ b/SOURCES/0025-v2v-rvh-upload-plugin-Always-read-the-response.patch
@@ -108,5 +108,5 @@ index 7c5084efd..2eec375f7 100644
disk_service = h['disk_service']
disk_service.remove()
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0026-v2v-rhv-upload-plugin-Fix-name-error.patch b/SOURCES/0026-v2v-rhv-upload-plugin-Fix-name-error.patch
index 7b1951c..a060ee6 100644
--- a/SOURCES/0026-v2v-rhv-upload-plugin-Fix-name-error.patch
+++ b/SOURCES/0026-v2v-rhv-upload-plugin-Fix-name-error.patch
@@ -31,5 +31,5 @@ index 2eec375f7..10887c031 100644
# Since we've just created a new disk it's safe to ignore these
# requests as long as they are smaller than the highest write seen.
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0027-v2v-rhv-upload-plugin-Remove-unused-variables.patch b/SOURCES/0027-v2v-rhv-upload-plugin-Remove-unused-variables.patch
index cba76b5..6fe81d7 100644
--- a/SOURCES/0027-v2v-rhv-upload-plugin-Remove-unused-variables.patch
+++ b/SOURCES/0027-v2v-rhv-upload-plugin-Remove-unused-variables.patch
@@ -48,5 +48,5 @@ index 10887c031..5c036c46a 100644
# Construct the JSON request for flushing.
buf = json.dumps({'op': "flush"}).encode()
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0028-v2v-o-rhv-upload-Always-fetch-server-options-when-op.patch b/SOURCES/0028-v2v-o-rhv-upload-Always-fetch-server-options-when-op.patch
index b1b83a6..5beb1d9 100644
--- a/SOURCES/0028-v2v-o-rhv-upload-Always-fetch-server-options-when-op.patch
+++ b/SOURCES/0028-v2v-o-rhv-upload-Always-fetch-server-options-when-op.patch
@@ -118,5 +118,5 @@ index 5c036c46a..f215eaecf 100644
def get_size(h):
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0029-v2v-o-rhv-upload-Use-Unix-domain-socket-to-access-im.patch b/SOURCES/0029-v2v-o-rhv-upload-Use-Unix-domain-socket-to-access-im.patch
index 604d06f..fcf9f43 100644
--- a/SOURCES/0029-v2v-o-rhv-upload-Use-Unix-domain-socket-to-access-im.patch
+++ b/SOURCES/0029-v2v-o-rhv-upload-Use-Unix-domain-socket-to-access-im.patch
@@ -137,5 +137,5 @@ index f215eaecf..8805e3552 100644
+ self.sock.settimeout(timeout)
+ self.sock.connect(self.path)
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0030-v2v-improve-os-documentation-for-rhv-upload.patch b/SOURCES/0030-v2v-improve-os-documentation-for-rhv-upload.patch
index 7b47c16..df374d6 100644
--- a/SOURCES/0030-v2v-improve-os-documentation-for-rhv-upload.patch
+++ b/SOURCES/0030-v2v-improve-os-documentation-for-rhv-upload.patch
@@ -25,5 +25,5 @@ index f012ea533..893e47fb9 100644
of the form ChostE:EpathE>, eg:
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0031-v2v-rhv-upload-plugin-Remove-unneeded-auth.patch b/SOURCES/0031-v2v-rhv-upload-plugin-Remove-unneeded-auth.patch
index 031cb22..e7df93e 100644
--- a/SOURCES/0031-v2v-rhv-upload-plugin-Remove-unneeded-auth.patch
+++ b/SOURCES/0031-v2v-rhv-upload-plugin-Remove-unneeded-auth.patch
@@ -65,5 +65,5 @@ index 8805e3552..f404bd758 100644
http.putheader("Authorization", transfer.signed_ticket)
http.putheader("Content-Range",
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0032-v2v-rhv-upload-plugin-Improve-error-handling.patch b/SOURCES/0032-v2v-rhv-upload-plugin-Improve-error-handling.patch
index 1c2899c..c86a08f 100644
--- a/SOURCES/0032-v2v-rhv-upload-plugin-Improve-error-handling.patch
+++ b/SOURCES/0032-v2v-rhv-upload-plugin-Improve-error-handling.patch
@@ -62,5 +62,5 @@ index f404bd758..8e4052048 100644
# Save everything we need to make requests in the handle.
return {
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0033-v2v-rhv-upload-plugin-Optimize-only-direct-upload.patch b/SOURCES/0033-v2v-rhv-upload-plugin-Optimize-only-direct-upload.patch
index 755fdc9..006b510 100644
--- a/SOURCES/0033-v2v-rhv-upload-plugin-Optimize-only-direct-upload.patch
+++ b/SOURCES/0033-v2v-rhv-upload-plugin-Optimize-only-direct-upload.patch
@@ -28,5 +28,5 @@ index 8e4052048..da309e288 100644
types.ImageTransfer(
disk = types.Disk(id = disk.id),
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0034-v2v-rhv-plugin-find-suitable-host-RHBZ-1596810-RHBZ-.patch b/SOURCES/0034-v2v-rhv-plugin-find-suitable-host-RHBZ-1596810-RHBZ-.patch
index 2d0ccf8..100554d 100644
--- a/SOURCES/0034-v2v-rhv-plugin-find-suitable-host-RHBZ-1596810-RHBZ-.patch
+++ b/SOURCES/0034-v2v-rhv-plugin-find-suitable-host-RHBZ-1596810-RHBZ-.patch
@@ -57,5 +57,5 @@ index da309e288..931fcfaa2 100644
host = hosts[0]
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0035-v2v-change-QXL-ResourceType-in-OVirt-flavour-RHBZ-15.patch b/SOURCES/0035-v2v-change-QXL-ResourceType-in-OVirt-flavour-RHBZ-15.patch
index e0973ae..a384841 100644
--- a/SOURCES/0035-v2v-change-QXL-ResourceType-in-OVirt-flavour-RHBZ-15.patch
+++ b/SOURCES/0035-v2v-change-QXL-ResourceType-in-OVirt-flavour-RHBZ-15.patch
@@ -37,5 +37,5 @@ index 9e0c772fd..5db239d66 100644
e "rasd:VirtualQuantity" [] [PCData "1"];
e "rasd:Device" [] [PCData "qxl"];
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0036-v2v-o-rhv-upload-check-for-ovirtsdk4-RHBZ-1601943.patch b/SOURCES/0036-v2v-o-rhv-upload-check-for-ovirtsdk4-RHBZ-1601943.patch
index 33d7fbd..a6d91d9 100644
--- a/SOURCES/0036-v2v-o-rhv-upload-check-for-ovirtsdk4-RHBZ-1601943.patch
+++ b/SOURCES/0036-v2v-o-rhv-upload-check-for-ovirtsdk4-RHBZ-1601943.patch
@@ -36,5 +36,5 @@ index 0152b8d5a..63fa2411a 100644
error_unless_nbdkit_python3_working ();
error_unless_output_alloc_sparse ();
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0037-v2v-rhv-plugin-fix-DC-search-string.patch b/SOURCES/0037-v2v-rhv-plugin-fix-DC-search-string.patch
index 2b19997..d3b0f69 100644
--- a/SOURCES/0037-v2v-rhv-plugin-fix-DC-search-string.patch
+++ b/SOURCES/0037-v2v-rhv-plugin-fix-DC-search-string.patch
@@ -25,5 +25,5 @@ index 931fcfaa2..8274f1ee1 100644
)
if len(data_centers) == 0:
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0038-v2v-rhv-plugin-case-sensitive-search-queries.patch b/SOURCES/0038-v2v-rhv-plugin-case-sensitive-search-queries.patch
index 0545f34..9030fa4 100644
--- a/SOURCES/0038-v2v-rhv-plugin-case-sensitive-search-queries.patch
+++ b/SOURCES/0038-v2v-rhv-plugin-case-sensitive-search-queries.patch
@@ -31,5 +31,5 @@ index 8274f1ee1..4fad27fb8 100644
if len(hosts) == 0:
# Couldn't find a host that's fulfilling the following criteria:
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0039-uefi-remove-last-references-to-kraxel-s-old-edk2-bui.patch b/SOURCES/0039-uefi-remove-last-references-to-kraxel-s-old-edk2-bui.patch
index 89f3431..e320dad 100644
--- a/SOURCES/0039-uefi-remove-last-references-to-kraxel-s-old-edk2-bui.patch
+++ b/SOURCES/0039-uefi-remove-last-references-to-kraxel-s-old-edk2-bui.patch
@@ -40,5 +40,5 @@ index e880001eb..67e2028f3 100644
| "aarch64" -> Uefi.uefi_aarch64_firmware
| arch ->
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0040-v2v-parse_libvirt_xml-handle-srN-CDROM-devices-RHBZ-.patch b/SOURCES/0040-v2v-parse_libvirt_xml-handle-srN-CDROM-devices-RHBZ-.patch
index 5dc70ae..a9d5701 100644
--- a/SOURCES/0040-v2v-parse_libvirt_xml-handle-srN-CDROM-devices-RHBZ-.patch
+++ b/SOURCES/0040-v2v-parse_libvirt_xml-handle-srN-CDROM-devices-RHBZ-.patch
@@ -34,5 +34,5 @@ index 03a201e77..44723014c 100644
let rec loop = function
| [] ->
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0041-v2v-o-rhv-upload-Fix-error-message-disk-numbering-RH.patch b/SOURCES/0041-v2v-o-rhv-upload-Fix-error-message-disk-numbering-RH.patch
index a70a9f8..35d89c9 100644
--- a/SOURCES/0041-v2v-o-rhv-upload-Fix-error-message-disk-numbering-RH.patch
+++ b/SOURCES/0041-v2v-o-rhv-upload-Fix-error-message-disk-numbering-RH.patch
@@ -39,5 +39,5 @@ index 63fa2411a..7dbd98a0d 100644
diskid
) targets in
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0042-v2v-o-rhv-upload-Properly-replace-SD_UUID-in-OVF-RHB.patch b/SOURCES/0042-v2v-o-rhv-upload-Properly-replace-SD_UUID-in-OVF-RHB.patch
index 8346af1..8850bef 100644
--- a/SOURCES/0042-v2v-o-rhv-upload-Properly-replace-SD_UUID-in-OVF-RHB.patch
+++ b/SOURCES/0042-v2v-o-rhv-upload-Properly-replace-SD_UUID-in-OVF-RHB.patch
@@ -26,5 +26,5 @@ index a34627ec8..1d0e8c95d 100644
vms_service = system_service.vms_service()
vm = vms_service.add(
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0043-ppc64le-Don-t-use-cpu-parameter-under-any-circumstan.patch b/SOURCES/0043-ppc64le-Don-t-use-cpu-parameter-under-any-circumstan.patch
index b22b600..074ab41 100644
--- a/SOURCES/0043-ppc64le-Don-t-use-cpu-parameter-under-any-circumstan.patch
+++ b/SOURCES/0043-ppc64le-Don-t-use-cpu-parameter-under-any-circumstan.patch
@@ -24,5 +24,5 @@ index a6c1b0faf..fa1bae3f9 100644
/* On most architectures, it is faster to pass the CPU host model to
* the appliance, allowing maximum speed for things like checksums
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0044-tools-Link-OCaml-programs-with-runtime-variant-_pic-.patch b/SOURCES/0044-tools-Link-OCaml-programs-with-runtime-variant-_pic-.patch
index e774ebe..bc17b77 100644
--- a/SOURCES/0044-tools-Link-OCaml-programs-with-runtime-variant-_pic-.patch
+++ b/SOURCES/0044-tools-Link-OCaml-programs-with-runtime-variant-_pic-.patch
@@ -104,5 +104,5 @@ index 855637534..fbcc07951 100755
+ -linkpkg \
+ -cclib "${cclib}"
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0045-tools-Ensure-CFLAGS-and-LDFLAGS-are-passed-to-all-OC.patch b/SOURCES/0045-tools-Ensure-CFLAGS-and-LDFLAGS-are-passed-to-all-OC.patch
index 443208e..a966250 100644
--- a/SOURCES/0045-tools-Ensure-CFLAGS-and-LDFLAGS-are-passed-to-all-OC.patch
+++ b/SOURCES/0045-tools-Ensure-CFLAGS-and-LDFLAGS-are-passed-to-all-OC.patch
@@ -324,5 +324,5 @@ index d69188969..22c3b8c49 100644
BOBJECTS = \
$(SOURCES_ML:.ml=.cmo) \
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0046-ocaml-make-sure-to-pass-LDFLAGS-to-ocamlmklibs-linke.patch b/SOURCES/0046-ocaml-make-sure-to-pass-LDFLAGS-to-ocamlmklibs-linke.patch
index 283b782..3f26fd5 100644
--- a/SOURCES/0046-ocaml-make-sure-to-pass-LDFLAGS-to-ocamlmklibs-linke.patch
+++ b/SOURCES/0046-ocaml-make-sure-to-pass-LDFLAGS-to-ocamlmklibs-linke.patch
@@ -36,5 +36,5 @@ index 752fc109c..4d13eed97 100644
-L../lib/.libs -lguestfs
endif
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0047-v2v-Model-machine-type-explicitly.patch b/SOURCES/0047-v2v-Model-machine-type-explicitly.patch
index 24a56c7..8f60cc2 100644
--- a/SOURCES/0047-v2v-Model-machine-type-explicitly.patch
+++ b/SOURCES/0047-v2v-Model-machine-type-explicitly.patch
@@ -319,5 +319,5 @@ index f60e5c98f..5e33b1de9 100644
val string_of_guestcaps : guestcaps -> string
val string_of_requested_guestcaps : requested_guestcaps -> string
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0048-v2v-windows-Fix-rhev-apt-command-line-RHBZ-1624902.patch b/SOURCES/0048-v2v-windows-Fix-rhev-apt-command-line-RHBZ-1624902.patch
index 548cc88..dd0bb65 100644
--- a/SOURCES/0048-v2v-windows-Fix-rhev-apt-command-line-RHBZ-1624902.patch
+++ b/SOURCES/0048-v2v-windows-Fix-rhev-apt-command-line-RHBZ-1624902.patch
@@ -33,5 +33,5 @@ index 1e058136e..0346ba4fe 100644
echo starting rhev-apt
net start rhev-apt
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0049-v2v-docs-Describe-support-for-SHA-2-certs-for-Window.patch b/SOURCES/0049-v2v-docs-Describe-support-for-SHA-2-certs-for-Window.patch
index 5065dfb..6595e48 100644
--- a/SOURCES/0049-v2v-docs-Describe-support-for-SHA-2-certs-for-Window.patch
+++ b/SOURCES/0049-v2v-docs-Describe-support-for-SHA-2-certs-for-Window.patch
@@ -36,5 +36,5 @@ index 893e47fb9..dc443b717 100644
VMware allows you to present UEFI firmware to guests (instead of the
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0050-v2v-docs-Remove-sentence-about-supporting-qemu-kvm-r.patch b/SOURCES/0050-v2v-docs-Remove-sentence-about-supporting-qemu-kvm-r.patch
index 77def1d..6004ae8 100644
--- a/SOURCES/0050-v2v-docs-Remove-sentence-about-supporting-qemu-kvm-r.patch
+++ b/SOURCES/0050-v2v-docs-Remove-sentence-about-supporting-qemu-kvm-r.patch
@@ -35,5 +35,5 @@ index dc443b717..4b53cdc0e 100644
Not supported.
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0051-v2v-linux-improve-regex-for-resume-entries-RHBZ-1651.patch b/SOURCES/0051-v2v-linux-improve-regex-for-resume-entries-RHBZ-1651.patch
index 11e6a5f..72bfcff 100644
--- a/SOURCES/0051-v2v-linux-improve-regex-for-resume-entries-RHBZ-1651.patch
+++ b/SOURCES/0051-v2v-linux-improve-regex-for-resume-entries-RHBZ-1651.patch
@@ -29,5 +29,5 @@ index fd6b71ba4..da06352a0 100644
and rex_device = PCRE.compile "^/dev/([a-z]+)(\\d*)?$" in
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0052-inspection-Parse-os-release-opensuse-leap-as-opensus.patch b/SOURCES/0052-inspection-Parse-os-release-opensuse-leap-as-opensus.patch
index 4be07d6..ad43f4d 100644
--- a/SOURCES/0052-inspection-Parse-os-release-opensuse-leap-as-opensus.patch
+++ b/SOURCES/0052-inspection-Parse-os-release-opensuse-leap-as-opensus.patch
@@ -23,5 +23,5 @@ index f4b2fea14..33b93256f 100644
| "rhel" -> Some DISTRO_RHEL
| "sles" | "sled" -> Some DISTRO_SLES
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0053-inspect-handle-os-release-opensuse-tumbleweed-as-ope.patch b/SOURCES/0053-inspect-handle-os-release-opensuse-tumbleweed-as-ope.patch
index b3aa66b..378a641 100644
--- a/SOURCES/0053-inspect-handle-os-release-opensuse-tumbleweed-as-ope.patch
+++ b/SOURCES/0053-inspect-handle-os-release-opensuse-tumbleweed-as-ope.patch
@@ -26,5 +26,5 @@ index 33b93256f..6c3ab6e34 100644
| "rhel" -> Some DISTRO_RHEL
| "sles" | "sled" -> Some DISTRO_SLES
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0054-v2v-update-docs-for-VMware-roles-RHBZ-1530967.patch b/SOURCES/0054-v2v-update-docs-for-VMware-roles-RHBZ-1530967.patch
index 8fb25ea..0a10895 100644
--- a/SOURCES/0054-v2v-update-docs-for-VMware-roles-RHBZ-1530967.patch
+++ b/SOURCES/0054-v2v-update-docs-for-VMware-roles-RHBZ-1530967.patch
@@ -39,5 +39,5 @@ index 4b53cdc0e..d4d8578cb 100644
=back
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0055-v2v-o-rhv-upload-decouple-name-of-nbdkit-python-plug.patch b/SOURCES/0055-v2v-o-rhv-upload-decouple-name-of-nbdkit-python-plug.patch
index fcb46c2..aa07e6b 100644
--- a/SOURCES/0055-v2v-o-rhv-upload-decouple-name-of-nbdkit-python-plug.patch
+++ b/SOURCES/0055-v2v-o-rhv-upload-decouple-name-of-nbdkit-python-plug.patch
@@ -46,5 +46,5 @@ index 7dbd98a0d..79a2fc8fd 100644
] in
let args = if verbose () then args @ ["--verbose"] else args in
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0056-v2v-further-doc-update-for-VMware-roles.patch b/SOURCES/0056-v2v-further-doc-update-for-VMware-roles.patch
index fcee497..286bc72 100644
--- a/SOURCES/0056-v2v-further-doc-update-for-VMware-roles.patch
+++ b/SOURCES/0056-v2v-further-doc-update-for-VMware-roles.patch
@@ -26,5 +26,5 @@ index d4d8578cb..f4d200e3d 100644
=back
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0057-python-fix-call-of-Python-handlers-of-events.patch b/SOURCES/0057-python-fix-call-of-Python-handlers-of-events.patch
index f2e87bb..d8e6a65 100644
--- a/SOURCES/0057-python-fix-call-of-Python-handlers-of-events.patch
+++ b/SOURCES/0057-python-fix-call-of-Python-handlers-of-events.patch
@@ -36,5 +36,5 @@ index 1ffa4588a..13a93ad8c 100644
if (PyEval_ThreadsInitialized ())
PyGILState_Release (py_save);
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0058-python-change-types-for-RBufferOut-FBuffer-with-Pyth.patch b/SOURCES/0058-python-change-types-for-RBufferOut-FBuffer-with-Pyth.patch
index b1b2b23..f31e4e7 100644
--- a/SOURCES/0058-python-change-types-for-RBufferOut-FBuffer-with-Pyth.patch
+++ b/SOURCES/0058-python-change-types-for-RBufferOut-FBuffer-with-Pyth.patch
@@ -50,5 +50,5 @@ index 8fa0b17c0..a75b5f375 100644
pr " if (py_r == NULL) goto out;\n";
);
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0059-Revert-launch-libvirt-Use-qemu-bridge-helper-to-impl.patch b/SOURCES/0059-Revert-launch-libvirt-Use-qemu-bridge-helper-to-impl.patch
index d4b2c90..e9607b2 100644
--- a/SOURCES/0059-Revert-launch-libvirt-Use-qemu-bridge-helper-to-impl.patch
+++ b/SOURCES/0059-Revert-launch-libvirt-Use-qemu-bridge-helper-to-impl.patch
@@ -234,5 +234,5 @@ index 7121aee1b..4df26825a 100644
free (data->secrets[i].secret);
free (data->secrets);
--
-2.21.0
+2.20.1
diff --git a/SOURCES/0060-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch b/SOURCES/0060-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch
new file mode 100644
index 0000000..1e35756
--- /dev/null
+++ b/SOURCES/0060-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch
@@ -0,0 +1,38 @@
+From 3f9e952ef7c825e1458986e40fad3153fb09473d Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Fri, 21 Dec 2012 15:50:11 +0000
+Subject: [PATCH] RHEL 8: Remove libguestfs live (RHBZ#798980).
+
+This isn't supported in RHEL 8.
+---
+ lib/launch-unix.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/lib/launch-unix.c b/lib/launch-unix.c
+index 9af481fd9..974336ccd 100644
+--- a/lib/launch-unix.c
++++ b/lib/launch-unix.c
+@@ -37,6 +37,12 @@
+ static int
+ launch_unix (guestfs_h *g, void *datav, const char *sockpath)
+ {
++ error (g,
++ "launch: In RHEL, only the 'libvirt' or 'direct' method is supported.\n"
++ "In particular, \"libguestfs live\" is not supported.");
++ return -1;
++
++#if 0
+ int r, daemon_sock = -1;
+ struct sockaddr_un addr;
+ uint32_t size;
+@@ -106,6 +112,7 @@ launch_unix (guestfs_h *g, void *datav, const char *sockpath)
+ g->conn = NULL;
+ }
+ return -1;
++#endif
+ }
+
+ static int
+--
+2.20.1
+
diff --git a/SOURCES/0060-inspect-fix-inspection-of-partition-less-devices-RHB.patch b/SOURCES/0060-inspect-fix-inspection-of-partition-less-devices-RHB.patch
deleted file mode 100644
index 88486aa..0000000
--- a/SOURCES/0060-inspect-fix-inspection-of-partition-less-devices-RHB.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 02d16cdeada455e692a972b34cd86e18a6081c05 Mon Sep 17 00:00:00 2001
-From: Pino Toscano
-Date: Mon, 14 Jan 2019 17:07:45 +0100
-Subject: [PATCH] inspect: fix inspection of partition-less devices
- (RHBZ#1661038)
-
-When parsing "xdev"-kind devices, do not assume that the partition
-number can be converted to integer: re_xdev accepts an empty part of the
-partition number, so just handle as it is, as string.
-
-This fixes a regression due to the conversion of the inspection code to
-OCaml, as the old C version did not have this issue.
-
-(cherry picked from commit cf6b527824b2a8dc6e8bc65e38ebdceb227e6db1)
----
- daemon/inspect_fs_unix_fstab.ml | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/daemon/inspect_fs_unix_fstab.ml b/daemon/inspect_fs_unix_fstab.ml
-index 170440d2c..3428ad75c 100644
---- a/daemon/inspect_fs_unix_fstab.ml
-+++ b/daemon/inspect_fs_unix_fstab.ml
-@@ -347,7 +347,7 @@ and resolve_fstab_device spec md_map os_type =
- debug_matching "xdev";
- let typ = PCRE.sub 1
- and disk = PCRE.sub 2
-- and part = int_of_string (PCRE.sub 3) in
-+ and part = PCRE.sub 3 in
- resolve_xdev typ disk part default
- )
-
-@@ -464,7 +464,7 @@ and resolve_fstab_device spec md_map os_type =
- debug_matching "Hurd";
- let typ = PCRE.sub 1
- and disk = int_of_string (PCRE.sub 2)
-- and part = int_of_string (PCRE.sub 3) in
-+ and part = PCRE.sub 3 in
-
- (* Hurd disk devices are like /dev/hdNsM, where hdN is the
- * N-th disk and M is the M-th partition on that disk.
-@@ -501,7 +501,7 @@ and resolve_xdev typ disk part default =
- let i = drive_index disk in
- if i >= 0 && i < Array.length devices then (
- let dev = Array.get devices i in
-- let dev = dev ^ string_of_int part in
-+ let dev = dev ^ part in
- if is_partition dev then
- Mountable.of_device dev
- else
---
-2.21.0
-
diff --git a/SOURCES/0061-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch b/SOURCES/0061-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch
new file mode 100644
index 0000000..17d07f2
--- /dev/null
+++ b/SOURCES/0061-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch
@@ -0,0 +1,372 @@
+From 28c43ee7f5ae33ea421732455bfef898235a2e5c Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Thu, 18 Jul 2013 18:31:53 +0100
+Subject: [PATCH] RHEL 8: Remove 9p APIs from RHEL (RHBZ#921710).
+
+---
+ Makefile.am | 2 +-
+ daemon/9p.c | 224 --------------------------------------
+ daemon/Makefile.am | 1 -
+ docs/C_SOURCE_FILES | 1 -
+ generator/actions_core.ml | 21 ----
+ generator/proc_nr.ml | 2 -
+ gobject/Makefile.inc | 2 -
+ po/POTFILES | 2 -
+ 8 files changed, 1 insertion(+), 254 deletions(-)
+ delete mode 100644 daemon/9p.c
+
+diff --git a/Makefile.am b/Makefile.am
+index cc363341f..8fb25a57c 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -78,7 +78,7 @@ SUBDIRS += tests/xfs
+ SUBDIRS += tests/charsets
+ SUBDIRS += tests/xml
+ SUBDIRS += tests/mount-local
+-SUBDIRS += tests/9p
++#SUBDIRS += tests/9p
+ SUBDIRS += tests/rsync
+ SUBDIRS += tests/bigdirs
+ SUBDIRS += tests/disk-labels
+diff --git a/daemon/9p.c b/daemon/9p.c
+deleted file mode 100644
+index 55644249d..000000000
+--- a/daemon/9p.c
++++ /dev/null
+@@ -1,224 +0,0 @@
+-/* libguestfs - the guestfsd daemon
+- * Copyright (C) 2011 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
+-
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-
+-#include "daemon.h"
+-#include "actions.h"
+-
+-#define BUS_PATH "/sys/bus/virtio/drivers/9pnet_virtio"
+-
+-static char *read_whole_file (const char *filename);
+-
+-/* https://bugzilla.redhat.com/show_bug.cgi?id=714981#c1 */
+-char **
+-do_list_9p (void)
+-{
+- CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (r);
+-
+- DIR *dir;
+-
+- dir = opendir (BUS_PATH);
+- if (!dir) {
+- perror ("opendir: " BUS_PATH);
+- if (errno != ENOENT) {
+- reply_with_perror ("opendir: " BUS_PATH);
+- return NULL;
+- }
+-
+- /* If this directory doesn't exist, it probably means that
+- * the virtio driver isn't loaded. Don't return an error
+- * in this case, but return an empty list.
+- */
+- if (end_stringsbuf (&r) == -1)
+- return NULL;
+-
+- return take_stringsbuf (&r);
+- }
+-
+- while (1) {
+- struct dirent *d;
+-
+- errno = 0;
+- d = readdir (dir);
+- if (d == NULL) break;
+-
+- if (STRPREFIX (d->d_name, "virtio")) {
+- CLEANUP_FREE char *mount_tag_path = NULL;
+- if (asprintf (&mount_tag_path, BUS_PATH "/%s/mount_tag",
+- d->d_name) == -1) {
+- reply_with_perror ("asprintf");
+- closedir (dir);
+- return NULL;
+- }
+-
+- /* A bit unclear, but it looks like the virtio transport allows
+- * the mount tag length to be unlimited (or up to 65536 bytes).
+- * See: linux/include/linux/virtio_9p.h
+- */
+- CLEANUP_FREE char *mount_tag = read_whole_file (mount_tag_path);
+- if (mount_tag == 0)
+- continue;
+-
+- if (add_string (&r, mount_tag) == -1) {
+- closedir (dir);
+- return NULL;
+- }
+- }
+- }
+-
+- /* Check readdir didn't fail */
+- if (errno != 0) {
+- reply_with_perror ("readdir: /sys/block");
+- closedir (dir);
+- return NULL;
+- }
+-
+- /* Close the directory handle */
+- if (closedir (dir) == -1) {
+- reply_with_perror ("closedir: /sys/block");
+- return NULL;
+- }
+-
+- /* Sort the tags. */
+- if (r.size > 0)
+- sort_strings (r.argv, r.size);
+-
+- /* NULL terminate the list */
+- if (end_stringsbuf (&r) == -1)
+- return NULL;
+-
+- return take_stringsbuf (&r);
+-}
+-
+-/* Read whole file into dynamically allocated array. If there is an
+- * error, DON'T call reply_with_perror, just return NULL. Returns a
+- * \0-terminated string.
+- */
+-static char *
+-read_whole_file (const char *filename)
+-{
+- char *r = NULL;
+- size_t alloc = 0, size = 0;
+- int fd;
+-
+- fd = open (filename, O_RDONLY|O_CLOEXEC);
+- if (fd == -1) {
+- perror (filename);
+- return NULL;
+- }
+-
+- while (1) {
+- alloc += 256;
+- char *r2 = realloc (r, alloc);
+- if (r2 == NULL) {
+- perror ("realloc");
+- free (r);
+- close (fd);
+- return NULL;
+- }
+- r = r2;
+-
+- /* The '- 1' in the size calculation ensures there is space below
+- * to add \0 to the end of the input.
+- */
+- ssize_t n = read (fd, r + size, alloc - size - 1);
+- if (n == -1) {
+- fprintf (stderr, "read: %s: %m\n", filename);
+- free (r);
+- close (fd);
+- return NULL;
+- }
+- if (n == 0)
+- break;
+- size += n;
+- }
+-
+- if (close (fd) == -1) {
+- fprintf (stderr, "close: %s: %m\n", filename);
+- free (r);
+- return NULL;
+- }
+-
+- r[size] = '\0';
+-
+- return r;
+-}
+-
+-/* Takes optional arguments, consult optargs_bitmask. */
+-int
+-do_mount_9p (const char *mount_tag, const char *mountpoint, const char *options)
+-{
+- CLEANUP_FREE char *mp = NULL, *opts = NULL, *err = NULL;
+- struct stat statbuf;
+- int r;
+-
+- ABS_PATH (mountpoint, 0, return -1);
+-
+- mp = sysroot_path (mountpoint);
+- if (!mp) {
+- reply_with_perror ("malloc");
+- return -1;
+- }
+-
+- /* Check the mountpoint exists and is a directory. */
+- if (stat (mp, &statbuf) == -1) {
+- reply_with_perror ("%s", mountpoint);
+- return -1;
+- }
+- if (!S_ISDIR (statbuf.st_mode)) {
+- reply_with_perror ("%s: mount point is not a directory", mountpoint);
+- return -1;
+- }
+-
+- /* Add trans=virtio to the options. */
+- if ((optargs_bitmask & GUESTFS_MOUNT_9P_OPTIONS_BITMASK) &&
+- STRNEQ (options, "")) {
+- if (asprintf (&opts, "trans=virtio,%s", options) == -1) {
+- reply_with_perror ("asprintf");
+- return -1;
+- }
+- }
+- else {
+- opts = strdup ("trans=virtio");
+- if (opts == NULL) {
+- reply_with_perror ("strdup");
+- return -1;
+- }
+- }
+-
+- r = command (NULL, &err,
+- "mount", "-o", opts, "-t", "9p", mount_tag, mp, NULL);
+- if (r == -1) {
+- reply_with_error ("%s on %s: %s", mount_tag, mountpoint, err);
+- return -1;
+- }
+-
+- return 0;
+-}
+diff --git a/daemon/Makefile.am b/daemon/Makefile.am
+index dcae1a66c..75bef5500 100644
+--- a/daemon/Makefile.am
++++ b/daemon/Makefile.am
+@@ -76,7 +76,6 @@ guestfsd_SOURCES = \
+ ../common/protocol/guestfs_protocol.h \
+ ../common/utils/cleanups.h \
+ ../common/utils/guestfs-utils.h \
+- 9p.c \
+ acl.c \
+ actions.h \
+ available.c \
+diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES
+index f3ee61e0d..e8b1d5283 100644
+--- a/docs/C_SOURCE_FILES
++++ b/docs/C_SOURCE_FILES
+@@ -70,7 +70,6 @@ common/windows/windows.h
+ customize/crypt-c.c
+ customize/dummy.c
+ customize/perl_edit-c.c
+-daemon/9p.c
+ daemon/acl.c
+ daemon/actions.h
+ daemon/augeas.c
+diff --git a/generator/actions_core.ml b/generator/actions_core.ml
+index 2ae3ec1d9..237edafce 100644
+--- a/generator/actions_core.ml
++++ b/generator/actions_core.ml
+@@ -6179,27 +6179,6 @@ This returns true iff the device exists and contains all zero bytes.
+
+ Note that for large devices this can take a long time to run." };
+
+- { defaults with
+- name = "list_9p"; added = (1, 11, 12);
+- style = RStringList (RPlainString, "mounttags"), [], [];
+- shortdesc = "list 9p filesystems";
+- longdesc = "\
+-List all 9p filesystems attached to the guest. A list of
+-mount tags is returned." };
+-
+- { defaults with
+- name = "mount_9p"; added = (1, 11, 12);
+- style = RErr, [String (PlainString, "mounttag"); String (PlainString, "mountpoint")], [OString "options"];
+- camel_name = "Mount9P";
+- shortdesc = "mount 9p filesystem";
+- longdesc = "\
+-Mount the virtio-9p filesystem with the tag C on the
+-directory C.
+-
+-If required, C will be automatically added to the options.
+-Any other options required can be passed in the optional C
+-parameter." };
+-
+ { defaults with
+ name = "list_dm_devices"; added = (1, 11, 15);
+ style = RStringList (RDevice, "devices"), [], [];
+diff --git a/generator/proc_nr.ml b/generator/proc_nr.ml
+index 9e16ab14a..e6b018c62 100644
+--- a/generator/proc_nr.ml
++++ b/generator/proc_nr.ml
+@@ -295,8 +295,6 @@ let proc_nr = [
+ 282, "internal_autosync";
+ 283, "is_zero";
+ 284, "is_zero_device";
+-285, "list_9p";
+-286, "mount_9p";
+ 287, "list_dm_devices";
+ 288, "ntfsresize";
+ 289, "btrfs_filesystem_resize";
+diff --git a/gobject/Makefile.inc b/gobject/Makefile.inc
+index 5aa2dcafe..b8f8e9226 100644
+--- a/gobject/Makefile.inc
++++ b/gobject/Makefile.inc
+@@ -93,7 +93,6 @@ guestfs_gobject_headers= \
+ include/guestfs-gobject/optargs-mksquashfs.h \
+ include/guestfs-gobject/optargs-mkswap.h \
+ include/guestfs-gobject/optargs-mktemp.h \
+- include/guestfs-gobject/optargs-mount_9p.h \
+ include/guestfs-gobject/optargs-mount_local.h \
+ include/guestfs-gobject/optargs-ntfsclone_out.h \
+ include/guestfs-gobject/optargs-ntfsfix.h \
+@@ -186,7 +185,6 @@ guestfs_gobject_sources= \
+ src/optargs-mksquashfs.c \
+ src/optargs-mkswap.c \
+ src/optargs-mktemp.c \
+- src/optargs-mount_9p.c \
+ src/optargs-mount_local.c \
+ src/optargs-ntfsclone_out.c \
+ src/optargs-ntfsfix.c \
+diff --git a/po/POTFILES b/po/POTFILES
+index a049d66fe..5daec8a89 100644
+--- a/po/POTFILES
++++ b/po/POTFILES
+@@ -58,7 +58,6 @@ customize/crypt-c.c
+ customize/dummy.c
+ customize/perl_edit-c.c
+ customize/test-password.pl
+-daemon/9p.c
+ daemon/acl.c
+ daemon/augeas.c
+ daemon/available.c
+@@ -290,7 +289,6 @@ gobject/src/optargs-mkfs_btrfs.c
+ gobject/src/optargs-mksquashfs.c
+ gobject/src/optargs-mkswap.c
+ gobject/src/optargs-mktemp.c
+-gobject/src/optargs-mount_9p.c
+ gobject/src/optargs-mount_local.c
+ gobject/src/optargs-ntfsclone_out.c
+ gobject/src/optargs-ntfsfix.c
+--
+2.20.1
+
diff --git a/SOURCES/0061-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch b/SOURCES/0061-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch
deleted file mode 100644
index 29c9352..0000000
--- a/SOURCES/0061-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From ba47c0afc593c329189d9064e718ca81e7d6ef49 Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Fri, 21 Dec 2012 15:50:11 +0000
-Subject: [PATCH] RHEL 8: Remove libguestfs live (RHBZ#798980).
-
-This isn't supported in RHEL 8.
----
- lib/launch-unix.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/lib/launch-unix.c b/lib/launch-unix.c
-index 9af481fd9..974336ccd 100644
---- a/lib/launch-unix.c
-+++ b/lib/launch-unix.c
-@@ -37,6 +37,12 @@
- static int
- launch_unix (guestfs_h *g, void *datav, const char *sockpath)
- {
-+ error (g,
-+ "launch: In RHEL, only the 'libvirt' or 'direct' method is supported.\n"
-+ "In particular, \"libguestfs live\" is not supported.");
-+ return -1;
-+
-+#if 0
- int r, daemon_sock = -1;
- struct sockaddr_un addr;
- uint32_t size;
-@@ -106,6 +112,7 @@ launch_unix (guestfs_h *g, void *datav, const char *sockpath)
- g->conn = NULL;
- }
- return -1;
-+#endif
- }
-
- static int
---
-2.21.0
-
diff --git a/SOURCES/0062-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch b/SOURCES/0062-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch
new file mode 100644
index 0000000..96a30cd
--- /dev/null
+++ b/SOURCES/0062-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch
@@ -0,0 +1,609 @@
+From ff52a86d87cd1e36fd3b59beb1c3e590dd475d34 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Mon, 29 Jul 2013 14:47:56 +0100
+Subject: [PATCH] RHEL 8: 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 8.
+---
+ 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 f558964bf..8f264ed17 100644
+--- a/docs/guestfs-testing.pod
++++ b/docs/guestfs-testing.pod
+@@ -109,26 +109,6 @@ image. To exit, type C.
+ If you get an error, try enabling debugging (add C<-v> to the command
+ line). Also make sure that L 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 succeeds.
+-
+ =head2 Run virt-alignment-scan on all your guests.
+
+ Run L on guests or disk images:
+diff --git a/fish/guestfish.pod b/fish/guestfish.pod
+index bbf43aad5..f4762f929 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
+
+@@ -1127,12 +1127,12 @@ L>.
+ 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 be used with the L command. The equivalent
+ command using the API directly is:
+
+- > add /disk.img protocol:ssh server:tcp:example.com username:root
++ > add /disk.img protocol:nbd server:tcp:example.com
+
+ The possible I<-a URI> formats are described below.
+
+@@ -1142,40 +1142,6 @@ The possible I<-a URI> formats are described below.
+
+ Add the local disk image (or device) called F.
+
+-=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:
+-
+- > 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, and may be C.
+-
+-The equivalent API command would be:
+-
+- > 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:
+-
+- > 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>
+@@ -1210,35 +1176,13 @@ The equivalent API command would be:
+
+ > 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:
+-
+- > 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:
+-
+- > add /disk protocol:ssh server:tcp:example.com [username:user]
+-
+ Note that the URIs follow the syntax of
+ L: in particular, there
+ are restrictions on the allowed characters for the various components
+ of the URI. Characters such as C<:>, C<@>, and C> B 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.
+
+diff --git a/fish/test-add-uri.sh b/fish/test-add-uri.sh
+index 756df997b..8f84fd31b 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 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 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 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 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 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 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 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 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 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 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 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 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 237edafce..aca5b1f43 100644
+--- a/generator/actions_core.ml
++++ b/generator/actions_core.ml
+@@ -297,29 +297,6 @@ F is interpreted as a local file or device.
+ This is the default if the optional protocol parameter
+ is omitted.
+
+-=item C
+-
+-Connect to a remote FTP, HTTP or TFTP server.
+-The C parameter must also be supplied - see below.
+-
+-See also: L
+-
+-=item C
+-
+-Connect to the GlusterFS server.
+-The C parameter must also be supplied - see below.
+-
+-See also: L
+-
+-=item C
+-
+-Connect to the iSCSI server.
+-The C parameter must also be supplied - see below.
+-The C parameter may be supplied. See below.
+-The C parameter may be supplied. See below.
+-
+-See also: L.
+-
+ =item C
+
+ Connect to the Network Block Device server.
+@@ -336,22 +313,6 @@ The C parameter may be supplied. See below.
+
+ See also: L.
+
+-=item C
+-
+-Connect to the Sheepdog server.
+-The C parameter may also be supplied - see below.
+-
+-See also: L.
+-
+-=item C
+-
+-Connect to the Secure Shell (ssh) server.
+-
+-The C parameter must be supplied.
+-The C parameter may be supplied. See below.
+-
+-See also: L.
+-
+ =back
+
+ =item C
+@@ -362,13 +323,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:
+@@ -384,10 +340,10 @@ for the protocol is used (see F).
+
+ =item C
+
+-For the C, C, C, C, C, C, C
+-and C protocols, this specifies the remote username.
++For the C
++protocol, this specifies the remote username.
+
+-If not given, then the local username is used for C, 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. If in doubt,
+diff --git a/lib/drives.c b/lib/drives.c
+index 82ef30093..3d712c6e4 100644
+--- a/lib/drives.c
++++ b/lib/drives.c
+@@ -165,6 +165,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)
+@@ -223,6 +224,7 @@ create_drive_gluster (guestfs_h *g,
+
+ return create_drive_non_file (g, data);
+ }
++#endif /* DISABLED IN RHEL 8 */
+
+ static int
+ nbd_port (void)
+@@ -291,6 +293,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)
+@@ -391,6 +394,7 @@ create_drive_iscsi (guestfs_h *g,
+
+ return create_drive_non_file (g, data);
+ }
++#endif /* DISABLED IN RHEL 8 */
+
+ /**
+ * Create the special F drive.
+@@ -826,6 +830,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);
+@@ -850,6 +855,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);
+@@ -858,6 +864,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);
+@@ -870,6 +877,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 c7fbeef03..18e336a1f 100644
+--- a/lib/guestfs.pod
++++ b/lib/guestfs.pod
+@@ -714,70 +714,6 @@ servers. The server string is documented in
+ L. The C and C parameters are
+ also optional, and if not given, then no authentication will be used.
+
+-=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 and C parameters of
+-L 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 can be one of C<"ftp">, C<"ftps">, C<"http">,
+-C<"https"> or C<"tftp">.
+-
+-C (the C 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.
+-
+-=head3 GLUSTER
+-
+-Libguestfs can access Gluster disks.
+-
+-To do this, set the optional C and C parameters of
+-L 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 (the C 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.
+-
+-Note that gluster usually requires the client process (ie. libguestfs)
+-to run as B 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 and C 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 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.
+-
+ =head3 NETWORK BLOCK DEVICE
+
+ Libguestfs can access Network Block Device (NBD) disks remotely.
+@@ -840,42 +776,6 @@ L
+
+ =back
+
+-=head3 SHEEPDOG
+-
+-Libguestfs can access Sheepdog disks.
+-
+-To do this, set the optional C and C parameters of
+-L 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 may be zero or more server addresses
+-(C<"hostname:port">). The format of the server strings is documented
+-in L.
+-
+-=head3 SSH
+-
+-Libguestfs can access disks over a Secure Shell (SSH) connection.
+-
+-To do this, set the C and C and (optionally)
+-C parameters of L 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.
+-
+ =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 ab8052de1..ad22b2fbb 100755
+--- a/tests/disks/test-qemu-drive-libvirt.sh
++++ b/tests/disks/test-qemu-drive-libvirt.sh
+@@ -64,34 +64,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 19dd60a2f..583e031bd 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 <
-Date: Thu, 18 Jul 2013 18:31:53 +0100
-Subject: [PATCH] RHEL 8: Remove 9p APIs from RHEL (RHBZ#921710).
-
----
- Makefile.am | 2 +-
- daemon/9p.c | 224 --------------------------------------
- daemon/Makefile.am | 1 -
- docs/C_SOURCE_FILES | 1 -
- generator/actions_core.ml | 21 ----
- generator/proc_nr.ml | 2 -
- gobject/Makefile.inc | 2 -
- po/POTFILES | 2 -
- 8 files changed, 1 insertion(+), 254 deletions(-)
- delete mode 100644 daemon/9p.c
-
-diff --git a/Makefile.am b/Makefile.am
-index cc363341f..8fb25a57c 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -78,7 +78,7 @@ SUBDIRS += tests/xfs
- SUBDIRS += tests/charsets
- SUBDIRS += tests/xml
- SUBDIRS += tests/mount-local
--SUBDIRS += tests/9p
-+#SUBDIRS += tests/9p
- SUBDIRS += tests/rsync
- SUBDIRS += tests/bigdirs
- SUBDIRS += tests/disk-labels
-diff --git a/daemon/9p.c b/daemon/9p.c
-deleted file mode 100644
-index 55644249d..000000000
---- a/daemon/9p.c
-+++ /dev/null
-@@ -1,224 +0,0 @@
--/* libguestfs - the guestfsd daemon
-- * Copyright (C) 2011 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
--
--#include
--#include
--#include
--#include
--#include
--#include
--#include
--#include
--#include
--#include
--
--#include "daemon.h"
--#include "actions.h"
--
--#define BUS_PATH "/sys/bus/virtio/drivers/9pnet_virtio"
--
--static char *read_whole_file (const char *filename);
--
--/* https://bugzilla.redhat.com/show_bug.cgi?id=714981#c1 */
--char **
--do_list_9p (void)
--{
-- CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (r);
--
-- DIR *dir;
--
-- dir = opendir (BUS_PATH);
-- if (!dir) {
-- perror ("opendir: " BUS_PATH);
-- if (errno != ENOENT) {
-- reply_with_perror ("opendir: " BUS_PATH);
-- return NULL;
-- }
--
-- /* If this directory doesn't exist, it probably means that
-- * the virtio driver isn't loaded. Don't return an error
-- * in this case, but return an empty list.
-- */
-- if (end_stringsbuf (&r) == -1)
-- return NULL;
--
-- return take_stringsbuf (&r);
-- }
--
-- while (1) {
-- struct dirent *d;
--
-- errno = 0;
-- d = readdir (dir);
-- if (d == NULL) break;
--
-- if (STRPREFIX (d->d_name, "virtio")) {
-- CLEANUP_FREE char *mount_tag_path = NULL;
-- if (asprintf (&mount_tag_path, BUS_PATH "/%s/mount_tag",
-- d->d_name) == -1) {
-- reply_with_perror ("asprintf");
-- closedir (dir);
-- return NULL;
-- }
--
-- /* A bit unclear, but it looks like the virtio transport allows
-- * the mount tag length to be unlimited (or up to 65536 bytes).
-- * See: linux/include/linux/virtio_9p.h
-- */
-- CLEANUP_FREE char *mount_tag = read_whole_file (mount_tag_path);
-- if (mount_tag == 0)
-- continue;
--
-- if (add_string (&r, mount_tag) == -1) {
-- closedir (dir);
-- return NULL;
-- }
-- }
-- }
--
-- /* Check readdir didn't fail */
-- if (errno != 0) {
-- reply_with_perror ("readdir: /sys/block");
-- closedir (dir);
-- return NULL;
-- }
--
-- /* Close the directory handle */
-- if (closedir (dir) == -1) {
-- reply_with_perror ("closedir: /sys/block");
-- return NULL;
-- }
--
-- /* Sort the tags. */
-- if (r.size > 0)
-- sort_strings (r.argv, r.size);
--
-- /* NULL terminate the list */
-- if (end_stringsbuf (&r) == -1)
-- return NULL;
--
-- return take_stringsbuf (&r);
--}
--
--/* Read whole file into dynamically allocated array. If there is an
-- * error, DON'T call reply_with_perror, just return NULL. Returns a
-- * \0-terminated string.
-- */
--static char *
--read_whole_file (const char *filename)
--{
-- char *r = NULL;
-- size_t alloc = 0, size = 0;
-- int fd;
--
-- fd = open (filename, O_RDONLY|O_CLOEXEC);
-- if (fd == -1) {
-- perror (filename);
-- return NULL;
-- }
--
-- while (1) {
-- alloc += 256;
-- char *r2 = realloc (r, alloc);
-- if (r2 == NULL) {
-- perror ("realloc");
-- free (r);
-- close (fd);
-- return NULL;
-- }
-- r = r2;
--
-- /* The '- 1' in the size calculation ensures there is space below
-- * to add \0 to the end of the input.
-- */
-- ssize_t n = read (fd, r + size, alloc - size - 1);
-- if (n == -1) {
-- fprintf (stderr, "read: %s: %m\n", filename);
-- free (r);
-- close (fd);
-- return NULL;
-- }
-- if (n == 0)
-- break;
-- size += n;
-- }
--
-- if (close (fd) == -1) {
-- fprintf (stderr, "close: %s: %m\n", filename);
-- free (r);
-- return NULL;
-- }
--
-- r[size] = '\0';
--
-- return r;
--}
--
--/* Takes optional arguments, consult optargs_bitmask. */
--int
--do_mount_9p (const char *mount_tag, const char *mountpoint, const char *options)
--{
-- CLEANUP_FREE char *mp = NULL, *opts = NULL, *err = NULL;
-- struct stat statbuf;
-- int r;
--
-- ABS_PATH (mountpoint, 0, return -1);
--
-- mp = sysroot_path (mountpoint);
-- if (!mp) {
-- reply_with_perror ("malloc");
-- return -1;
-- }
--
-- /* Check the mountpoint exists and is a directory. */
-- if (stat (mp, &statbuf) == -1) {
-- reply_with_perror ("%s", mountpoint);
-- return -1;
-- }
-- if (!S_ISDIR (statbuf.st_mode)) {
-- reply_with_perror ("%s: mount point is not a directory", mountpoint);
-- return -1;
-- }
--
-- /* Add trans=virtio to the options. */
-- if ((optargs_bitmask & GUESTFS_MOUNT_9P_OPTIONS_BITMASK) &&
-- STRNEQ (options, "")) {
-- if (asprintf (&opts, "trans=virtio,%s", options) == -1) {
-- reply_with_perror ("asprintf");
-- return -1;
-- }
-- }
-- else {
-- opts = strdup ("trans=virtio");
-- if (opts == NULL) {
-- reply_with_perror ("strdup");
-- return -1;
-- }
-- }
--
-- r = command (NULL, &err,
-- "mount", "-o", opts, "-t", "9p", mount_tag, mp, NULL);
-- if (r == -1) {
-- reply_with_error ("%s on %s: %s", mount_tag, mountpoint, err);
-- return -1;
-- }
--
-- return 0;
--}
-diff --git a/daemon/Makefile.am b/daemon/Makefile.am
-index dcae1a66c..75bef5500 100644
---- a/daemon/Makefile.am
-+++ b/daemon/Makefile.am
-@@ -76,7 +76,6 @@ guestfsd_SOURCES = \
- ../common/protocol/guestfs_protocol.h \
- ../common/utils/cleanups.h \
- ../common/utils/guestfs-utils.h \
-- 9p.c \
- acl.c \
- actions.h \
- available.c \
-diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES
-index f3ee61e0d..e8b1d5283 100644
---- a/docs/C_SOURCE_FILES
-+++ b/docs/C_SOURCE_FILES
-@@ -70,7 +70,6 @@ common/windows/windows.h
- customize/crypt-c.c
- customize/dummy.c
- customize/perl_edit-c.c
--daemon/9p.c
- daemon/acl.c
- daemon/actions.h
- daemon/augeas.c
-diff --git a/generator/actions_core.ml b/generator/actions_core.ml
-index 2ae3ec1d9..237edafce 100644
---- a/generator/actions_core.ml
-+++ b/generator/actions_core.ml
-@@ -6179,27 +6179,6 @@ This returns true iff the device exists and contains all zero bytes.
-
- Note that for large devices this can take a long time to run." };
-
-- { defaults with
-- name = "list_9p"; added = (1, 11, 12);
-- style = RStringList (RPlainString, "mounttags"), [], [];
-- shortdesc = "list 9p filesystems";
-- longdesc = "\
--List all 9p filesystems attached to the guest. A list of
--mount tags is returned." };
--
-- { defaults with
-- name = "mount_9p"; added = (1, 11, 12);
-- style = RErr, [String (PlainString, "mounttag"); String (PlainString, "mountpoint")], [OString "options"];
-- camel_name = "Mount9P";
-- shortdesc = "mount 9p filesystem";
-- longdesc = "\
--Mount the virtio-9p filesystem with the tag C on the
--directory C.
--
--If required, C will be automatically added to the options.
--Any other options required can be passed in the optional C
--parameter." };
--
- { defaults with
- name = "list_dm_devices"; added = (1, 11, 15);
- style = RStringList (RDevice, "devices"), [], [];
-diff --git a/generator/proc_nr.ml b/generator/proc_nr.ml
-index 9e16ab14a..e6b018c62 100644
---- a/generator/proc_nr.ml
-+++ b/generator/proc_nr.ml
-@@ -295,8 +295,6 @@ let proc_nr = [
- 282, "internal_autosync";
- 283, "is_zero";
- 284, "is_zero_device";
--285, "list_9p";
--286, "mount_9p";
- 287, "list_dm_devices";
- 288, "ntfsresize";
- 289, "btrfs_filesystem_resize";
-diff --git a/gobject/Makefile.inc b/gobject/Makefile.inc
-index 5aa2dcafe..b8f8e9226 100644
---- a/gobject/Makefile.inc
-+++ b/gobject/Makefile.inc
-@@ -93,7 +93,6 @@ guestfs_gobject_headers= \
- include/guestfs-gobject/optargs-mksquashfs.h \
- include/guestfs-gobject/optargs-mkswap.h \
- include/guestfs-gobject/optargs-mktemp.h \
-- include/guestfs-gobject/optargs-mount_9p.h \
- include/guestfs-gobject/optargs-mount_local.h \
- include/guestfs-gobject/optargs-ntfsclone_out.h \
- include/guestfs-gobject/optargs-ntfsfix.h \
-@@ -186,7 +185,6 @@ guestfs_gobject_sources= \
- src/optargs-mksquashfs.c \
- src/optargs-mkswap.c \
- src/optargs-mktemp.c \
-- src/optargs-mount_9p.c \
- src/optargs-mount_local.c \
- src/optargs-ntfsclone_out.c \
- src/optargs-ntfsfix.c \
-diff --git a/po/POTFILES b/po/POTFILES
-index a049d66fe..5daec8a89 100644
---- a/po/POTFILES
-+++ b/po/POTFILES
-@@ -58,7 +58,6 @@ customize/crypt-c.c
- customize/dummy.c
- customize/perl_edit-c.c
- customize/test-password.pl
--daemon/9p.c
- daemon/acl.c
- daemon/augeas.c
- daemon/available.c
-@@ -290,7 +289,6 @@ gobject/src/optargs-mkfs_btrfs.c
- gobject/src/optargs-mksquashfs.c
- gobject/src/optargs-mkswap.c
- gobject/src/optargs-mktemp.c
--gobject/src/optargs-mount_9p.c
- gobject/src/optargs-mount_local.c
- gobject/src/optargs-ntfsclone_out.c
- gobject/src/optargs-ntfsfix.c
---
-2.21.0
-
diff --git a/SOURCES/0063-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch b/SOURCES/0063-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch
deleted file mode 100644
index eab7488..0000000
--- a/SOURCES/0063-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch
+++ /dev/null
@@ -1,609 +0,0 @@
-From f60a4cc89c5c06360b0bc5ebc6fab10b5ef24077 Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Mon, 29 Jul 2013 14:47:56 +0100
-Subject: [PATCH] RHEL 8: 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 8.
----
- 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 f558964bf..8f264ed17 100644
---- a/docs/guestfs-testing.pod
-+++ b/docs/guestfs-testing.pod
-@@ -109,26 +109,6 @@ image. To exit, type C.
- If you get an error, try enabling debugging (add C<-v> to the command
- line). Also make sure that L 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 succeeds.
--
- =head2 Run virt-alignment-scan on all your guests.
-
- Run L on guests or disk images:
-diff --git a/fish/guestfish.pod b/fish/guestfish.pod
-index bbf43aad5..f4762f929 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
-
-@@ -1127,12 +1127,12 @@ L>.
- 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 be used with the L command. The equivalent
- command using the API directly is:
-
-- > add /disk.img protocol:ssh server:tcp:example.com username:root
-+ > add /disk.img protocol:nbd server:tcp:example.com
-
- The possible I<-a URI> formats are described below.
-
-@@ -1142,40 +1142,6 @@ The possible I<-a URI> formats are described below.
-
- Add the local disk image (or device) called F.
-
--=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:
--
-- > 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, and may be C.
--
--The equivalent API command would be:
--
-- > 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:
--
-- > 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>
-@@ -1210,35 +1176,13 @@ The equivalent API command would be:
-
- > 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:
--
-- > 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:
--
-- > add /disk protocol:ssh server:tcp:example.com [username:user]
--
- Note that the URIs follow the syntax of
- L: in particular, there
- are restrictions on the allowed characters for the various components
- of the URI. Characters such as C<:>, C<@>, and C> B 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.
-
-diff --git a/fish/test-add-uri.sh b/fish/test-add-uri.sh
-index 756df997b..8f84fd31b 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 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 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 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 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 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 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 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 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 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 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 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 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 237edafce..aca5b1f43 100644
---- a/generator/actions_core.ml
-+++ b/generator/actions_core.ml
-@@ -297,29 +297,6 @@ F is interpreted as a local file or device.
- This is the default if the optional protocol parameter
- is omitted.
-
--=item C
--
--Connect to a remote FTP, HTTP or TFTP server.
--The C parameter must also be supplied - see below.
--
--See also: L
--
--=item C
--
--Connect to the GlusterFS server.
--The C parameter must also be supplied - see below.
--
--See also: L
--
--=item C
--
--Connect to the iSCSI server.
--The C parameter must also be supplied - see below.
--The C parameter may be supplied. See below.
--The C parameter may be supplied. See below.
--
--See also: L.
--
- =item C
-
- Connect to the Network Block Device server.
-@@ -336,22 +313,6 @@ The C parameter may be supplied. See below.
-
- See also: L.
-
--=item C
--
--Connect to the Sheepdog server.
--The C parameter may also be supplied - see below.
--
--See also: L.
--
--=item C
--
--Connect to the Secure Shell (ssh) server.
--
--The C parameter must be supplied.
--The C parameter may be supplied. See below.
--
--See also: L.
--
- =back
-
- =item C
-@@ -362,13 +323,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:
-@@ -384,10 +340,10 @@ for the protocol is used (see F).
-
- =item C
-
--For the C, C, C, C, C, C, C
--and C protocols, this specifies the remote username.
-+For the C
-+protocol, this specifies the remote username.
-
--If not given, then the local username is used for C, 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. If in doubt,
-diff --git a/lib/drives.c b/lib/drives.c
-index 82ef30093..3d712c6e4 100644
---- a/lib/drives.c
-+++ b/lib/drives.c
-@@ -165,6 +165,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)
-@@ -223,6 +224,7 @@ create_drive_gluster (guestfs_h *g,
-
- return create_drive_non_file (g, data);
- }
-+#endif /* DISABLED IN RHEL 8 */
-
- static int
- nbd_port (void)
-@@ -291,6 +293,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)
-@@ -391,6 +394,7 @@ create_drive_iscsi (guestfs_h *g,
-
- return create_drive_non_file (g, data);
- }
-+#endif /* DISABLED IN RHEL 8 */
-
- /**
- * Create the special F drive.
-@@ -826,6 +830,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);
-@@ -850,6 +855,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);
-@@ -858,6 +864,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);
-@@ -870,6 +877,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 c7fbeef03..18e336a1f 100644
---- a/lib/guestfs.pod
-+++ b/lib/guestfs.pod
-@@ -714,70 +714,6 @@ servers. The server string is documented in
- L. The C and C parameters are
- also optional, and if not given, then no authentication will be used.
-
--=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 and C parameters of
--L 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 can be one of C<"ftp">, C<"ftps">, C<"http">,
--C<"https"> or C<"tftp">.
--
--C (the C 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.
--
--=head3 GLUSTER
--
--Libguestfs can access Gluster disks.
--
--To do this, set the optional C and C parameters of
--L 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 (the C 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.
--
--Note that gluster usually requires the client process (ie. libguestfs)
--to run as B 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 and C 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 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.
--
- =head3 NETWORK BLOCK DEVICE
-
- Libguestfs can access Network Block Device (NBD) disks remotely.
-@@ -840,42 +776,6 @@ L
-
- =back
-
--=head3 SHEEPDOG
--
--Libguestfs can access Sheepdog disks.
--
--To do this, set the optional C and C parameters of
--L 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 may be zero or more server addresses
--(C<"hostname:port">). The format of the server strings is documented
--in L.
--
--=head3 SSH
--
--Libguestfs can access disks over a Secure Shell (SSH) connection.
--
--To do this, set the C and C and (optionally)
--C parameters of L 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.
--
- =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 ab8052de1..ad22b2fbb 100755
---- a/tests/disks/test-qemu-drive-libvirt.sh
-+++ b/tests/disks/test-qemu-drive-libvirt.sh
-@@ -64,34 +64,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 19dd60a2f..583e031bd 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 <
+Date: Fri, 19 Sep 2014 13:38:20 +0100
+Subject: [PATCH] RHEL 8: Remove User-Mode Linux (RHBZ#1144197).
+
+This isn't supported in RHEL 8.
+---
+ lib/launch-uml.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/lib/launch-uml.c b/lib/launch-uml.c
+index b8825cf56..1acf8db27 100644
+--- a/lib/launch-uml.c
++++ b/lib/launch-uml.c
+@@ -44,7 +44,9 @@ struct backend_uml_data {
+ char umid[UML_UMID_LEN+1]; /* umid=<...> unique ID. */
+ };
+
++#if 0
+ static void print_vmlinux_command_line (guestfs_h *g, char **argv);
++#endif
+
+ /* Run uml_mkcow to create a COW overlay. */
+ static char *
+@@ -81,6 +83,7 @@ create_cow_overlay_uml (guestfs_h *g, void *datav, struct drive *drv)
+ return make_cow_overlay (g, drv->src.u.path);
+ }
+
++#if 0
+ /* Test for features which are not supported by the UML backend.
+ * Possibly some of these should just be warnings, not errors.
+ */
+@@ -128,10 +131,17 @@ uml_supported (guestfs_h *g)
+
+ return true;
+ }
++#endif
+
+ static int
+ launch_uml (guestfs_h *g, void *datav, const char *arg)
+ {
++ error (g,
++ "launch: In RHEL, only the 'libvirt' or 'direct' method is supported.\n"
++ "In particular, User-Mode Linux (UML) is not supported.");
++ return -1;
++
++#if 0
+ struct backend_uml_data *data = datav;
+ CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (cmdline);
+ int console_sock = -1, daemon_sock = -1;
+@@ -491,8 +501,10 @@ launch_uml (guestfs_h *g, void *datav, const char *arg)
+ }
+ g->state = CONFIG;
+ return -1;
++#endif
+ }
+
++#if 0
+ /* This is called from the forked subprocess just before vmlinux runs,
+ * so it can just print the message straight to stderr, where it will
+ * be picked up and funnelled through the usual appliance event API.
+@@ -522,6 +534,7 @@ print_vmlinux_command_line (guestfs_h *g, char **argv)
+
+ fputc ('\n', stderr);
+ }
++#endif
+
+ static int
+ shutdown_uml (guestfs_h *g, void *datav, int check_for_errors)
+--
+2.20.1
+
diff --git a/SOURCES/0064-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch b/SOURCES/0064-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch
deleted file mode 100644
index 88a3d19..0000000
--- a/SOURCES/0064-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From a981faec152d26fc98e6a6ed9bf0a338b7dda934 Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Fri, 19 Sep 2014 13:38:20 +0100
-Subject: [PATCH] RHEL 8: Remove User-Mode Linux (RHBZ#1144197).
-
-This isn't supported in RHEL 8.
----
- lib/launch-uml.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/lib/launch-uml.c b/lib/launch-uml.c
-index b8825cf56..1acf8db27 100644
---- a/lib/launch-uml.c
-+++ b/lib/launch-uml.c
-@@ -44,7 +44,9 @@ struct backend_uml_data {
- char umid[UML_UMID_LEN+1]; /* umid=<...> unique ID. */
- };
-
-+#if 0
- static void print_vmlinux_command_line (guestfs_h *g, char **argv);
-+#endif
-
- /* Run uml_mkcow to create a COW overlay. */
- static char *
-@@ -81,6 +83,7 @@ create_cow_overlay_uml (guestfs_h *g, void *datav, struct drive *drv)
- return make_cow_overlay (g, drv->src.u.path);
- }
-
-+#if 0
- /* Test for features which are not supported by the UML backend.
- * Possibly some of these should just be warnings, not errors.
- */
-@@ -128,10 +131,17 @@ uml_supported (guestfs_h *g)
-
- return true;
- }
-+#endif
-
- static int
- launch_uml (guestfs_h *g, void *datav, const char *arg)
- {
-+ error (g,
-+ "launch: In RHEL, only the 'libvirt' or 'direct' method is supported.\n"
-+ "In particular, User-Mode Linux (UML) is not supported.");
-+ return -1;
-+
-+#if 0
- struct backend_uml_data *data = datav;
- CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (cmdline);
- int console_sock = -1, daemon_sock = -1;
-@@ -491,8 +501,10 @@ launch_uml (guestfs_h *g, void *datav, const char *arg)
- }
- g->state = CONFIG;
- return -1;
-+#endif
- }
-
-+#if 0
- /* This is called from the forked subprocess just before vmlinux runs,
- * so it can just print the message straight to stderr, where it will
- * be picked up and funnelled through the usual appliance event API.
-@@ -522,6 +534,7 @@ print_vmlinux_command_line (guestfs_h *g, char **argv)
-
- fputc ('\n', stderr);
- }
-+#endif
-
- static int
- shutdown_uml (guestfs_h *g, void *datav, int check_for_errors)
---
-2.21.0
-
diff --git a/SOURCES/0064-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch b/SOURCES/0064-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch
new file mode 100644
index 0000000..88eedfe
--- /dev/null
+++ b/SOURCES/0064-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch
@@ -0,0 +1,33 @@
+From 81901b3a74d76fbee7a709dee91374c0d0069365 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Sun, 28 Sep 2014 19:14:43 +0100
+Subject: [PATCH] RHEL 8: v2v: Select correct qemu binary for -o qemu mode
+ (RHBZ#1147313).
+
+RHEL 8 does not have qemu-system-x86_64 (etc), and in addition the
+qemu binary is located in /usr/libexec. Encode the path to this
+binary directly in the script.
+
+Note that we don't support people running qemu directly like this.
+It's just for quick testing of converted VMs, and to help us with
+support cases.
+---
+ v2v/output_qemu.ml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/v2v/output_qemu.ml b/v2v/output_qemu.ml
+index e23f22e12..c2f43119a 100644
+--- a/v2v/output_qemu.ml
++++ b/v2v/output_qemu.ml
+@@ -79,7 +79,7 @@ object
+ * module deals with shell and qemu comma quoting.
+ *)
+ let cmd = Qemuopts.create () in
+- Qemuopts.set_binary_by_arch cmd (Some guestcaps.gcaps_arch);
++ Qemuopts.set_binary cmd "/usr/libexec/qemu-kvm";
+
+ let flag = Qemuopts.flag cmd
+ and arg = Qemuopts.arg cmd
+--
+2.20.1
+
diff --git a/SOURCES/0065-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch b/SOURCES/0065-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch
new file mode 100644
index 0000000..5424a87
--- /dev/null
+++ b/SOURCES/0065-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch
@@ -0,0 +1,77 @@
+From d18a3011c9953961db0533d150fc687d691bdc43 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Tue, 30 Sep 2014 10:50:27 +0100
+Subject: [PATCH] RHEL 8: v2v: Disable the --qemu-boot option (RHBZ#1147313).
+
+This cannot work because there is no Gtk or SDL output mode
+in RHEL 8's qemu-kvm.
+
+In addition you will have to edit the -display option in the
+qemu script.
+---
+ v2v/cmdline.ml | 3 ++-
+ v2v/virt-v2v.pod | 13 -------------
+ 2 files changed, 2 insertions(+), 14 deletions(-)
+
+diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
+index 97d4f4377..6bca12ce3 100644
+--- a/v2v/cmdline.ml
++++ b/v2v/cmdline.ml
+@@ -228,7 +228,6 @@ let parse_cmdline () =
+ s_"Use password from file";
+ [ L"print-source" ], Getopt.Set print_source,
+ s_"Print source and stop";
+- [ L"qemu-boot" ], Getopt.Set qemu_boot, s_"Boot in qemu (-o qemu only)";
+ [ L"root" ], Getopt.String ("ask|... ", set_root_choice),
+ s_"How to choose root filesystem";
+ [ L"vddk-config" ], Getopt.String ("filename", set_input_option_compat "vddk-config"),
+@@ -564,6 +563,8 @@ read the man page virt-v2v(1).
+ | Some d when not (is_directory d) ->
+ error (f_"-os %s: output directory does not exist or is not a directory") d
+ | Some d -> d in
++ if qemu_boot then
++ error (f_"-o qemu: the --qemu-boot option cannot be used in RHEL");
+ Output_qemu.output_qemu os qemu_boot,
+ output_format, output_alloc
+
+diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
+index f4d200e3d..a5b1c218a 100644
+--- a/v2v/virt-v2v.pod
++++ b/v2v/virt-v2v.pod
+@@ -115,11 +115,6 @@ Since F contains the path(s) to the guest disk
+ image(s) you do not need to specify the name of the disk image on the
+ command line.
+
+-To convert a local disk image and immediately boot it in local
+-qemu, do:
+-
+- virt-v2v -i disk disk.img -o qemu -os /var/tmp --qemu-boot
+-
+ =head1 INPUT AND OUTPUT MODES
+
+ ┌────────────┐ ┌─────────▶ -o null
+@@ -564,9 +559,6 @@ This is similar to I<-o local>, except that a shell script is written
+ which you can use to boot the guest in qemu. The converted disks and
+ shell script are written to the directory specified by I<-os>.
+
+-When using this output mode, you can also specify the I<--qemu-boot>
+-option which boots the guest under qemu immediately.
+-
+ =item B<-o> B
+
+ This is the same as I<-o rhv>.
+@@ -791,11 +783,6 @@ Print information about the source guest and stop. This option is
+ useful when you are setting up network and bridge maps.
+ See L.
+
+-=item B<--qemu-boot>
+-
+-When using I<-o qemu> only, this boots the guest immediately after
+-virt-v2v finishes.
+-
+ =item B<-q>
+
+ =item B<--quiet>
+--
+2.20.1
+
diff --git a/SOURCES/0065-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch b/SOURCES/0065-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch
deleted file mode 100644
index e20dfad..0000000
--- a/SOURCES/0065-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From f0c89d705d1fe68b456ddadb5da10437c69f16ca Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Sun, 28 Sep 2014 19:14:43 +0100
-Subject: [PATCH] RHEL 8: v2v: Select correct qemu binary for -o qemu mode
- (RHBZ#1147313).
-
-RHEL 8 does not have qemu-system-x86_64 (etc), and in addition the
-qemu binary is located in /usr/libexec. Encode the path to this
-binary directly in the script.
-
-Note that we don't support people running qemu directly like this.
-It's just for quick testing of converted VMs, and to help us with
-support cases.
----
- v2v/output_qemu.ml | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/v2v/output_qemu.ml b/v2v/output_qemu.ml
-index e23f22e12..c2f43119a 100644
---- a/v2v/output_qemu.ml
-+++ b/v2v/output_qemu.ml
-@@ -79,7 +79,7 @@ object
- * module deals with shell and qemu comma quoting.
- *)
- let cmd = Qemuopts.create () in
-- Qemuopts.set_binary_by_arch cmd (Some guestcaps.gcaps_arch);
-+ Qemuopts.set_binary cmd "/usr/libexec/qemu-kvm";
-
- let flag = Qemuopts.flag cmd
- and arg = Qemuopts.arg cmd
---
-2.21.0
-
diff --git a/SOURCES/0066-RHEL-8-Disable-alternate-Augeas-lenses.patch b/SOURCES/0066-RHEL-8-Disable-alternate-Augeas-lenses.patch
new file mode 100644
index 0000000..c44d0a7
--- /dev/null
+++ b/SOURCES/0066-RHEL-8-Disable-alternate-Augeas-lenses.patch
@@ -0,0 +1,60 @@
+From 2d9866c3d979a54da7a1abd0e8d611890a41212c Mon Sep 17 00:00:00 2001
+From: Pino Toscano
+Date: Fri, 24 Oct 2014 16:33:50 +0100
+Subject: [PATCH] RHEL 8: Disable alternate Augeas lenses.
+
+These are included in the RHEL augeas package, and therefore not
+required.
+
+See:
+https://www.redhat.com/archives/libguestfs/2014-October/msg00220.html
+---
+ appliance/Makefile.am | 1 -
+ daemon/augeas.c | 5 ++++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/appliance/Makefile.am b/appliance/Makefile.am
+index 6cba8d158..16714b197 100644
+--- a/appliance/Makefile.am
++++ b/appliance/Makefile.am
+@@ -91,7 +91,6 @@ supermin.d/daemon.tar.gz: ../daemon/guestfsd guestfs_shadow.aug
+ rm -rf tmp-d
+ mkdir -p tmp-d$(DAEMON_SUPERMIN_DIR) tmp-d/etc tmp-d/usr/share/guestfs
+ ln ../daemon/guestfsd tmp-d$(DAEMON_SUPERMIN_DIR)/guestfsd
+- ln $(srcdir)/guestfs_shadow.aug tmp-d/usr/share/guestfs/guestfs_shadow.aug
+ ( cd tmp-d && tar zcf - * ) > $@-t
+ rm -r tmp-d
+ mv $@-t $@
+diff --git a/daemon/augeas.c b/daemon/augeas.c
+index 453251337..5bbfffa2d 100644
+--- a/daemon/augeas.c
++++ b/daemon/augeas.c
+@@ -134,7 +134,7 @@ do_aug_init (const char *root, int flags)
+ }
+
+ /* Pass AUG_NO_ERR_CLOSE so we can display detailed errors. */
+- aug = aug_init (buf, "/usr/share/guestfs/", flags | AUG_NO_ERR_CLOSE);
++ aug = aug_init (buf, NULL, flags | AUG_NO_ERR_CLOSE);
+
+ if (!aug) {
+ reply_with_error ("augeas initialization failed");
+@@ -148,6 +148,8 @@ do_aug_init (const char *root, int flags)
+ return -1;
+ }
+
++ /* We already have the needed lenses in RHEL 8 */
++#if 0
+ if (!augeas_is_version (1, 2, 1)) {
+ int r = aug_transform (aug, "guestfs_shadow", "/etc/shadow",
+ 0 /* = included */);
+@@ -166,6 +168,7 @@ do_aug_init (const char *root, int flags)
+ }
+ }
+ }
++#endif
+
+ return 0;
+ }
+--
+2.20.1
+
diff --git a/SOURCES/0066-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch b/SOURCES/0066-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch
deleted file mode 100644
index 4535cc8..0000000
--- a/SOURCES/0066-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From adb584859d0f894b6e228b124ac6678f15b5a6b7 Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Tue, 30 Sep 2014 10:50:27 +0100
-Subject: [PATCH] RHEL 8: v2v: Disable the --qemu-boot option (RHBZ#1147313).
-
-This cannot work because there is no Gtk or SDL output mode
-in RHEL 8's qemu-kvm.
-
-In addition you will have to edit the -display option in the
-qemu script.
----
- v2v/cmdline.ml | 3 ++-
- v2v/virt-v2v.pod | 13 -------------
- 2 files changed, 2 insertions(+), 14 deletions(-)
-
-diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
-index 97d4f4377..6bca12ce3 100644
---- a/v2v/cmdline.ml
-+++ b/v2v/cmdline.ml
-@@ -228,7 +228,6 @@ let parse_cmdline () =
- s_"Use password from file";
- [ L"print-source" ], Getopt.Set print_source,
- s_"Print source and stop";
-- [ L"qemu-boot" ], Getopt.Set qemu_boot, s_"Boot in qemu (-o qemu only)";
- [ L"root" ], Getopt.String ("ask|... ", set_root_choice),
- s_"How to choose root filesystem";
- [ L"vddk-config" ], Getopt.String ("filename", set_input_option_compat "vddk-config"),
-@@ -564,6 +563,8 @@ read the man page virt-v2v(1).
- | Some d when not (is_directory d) ->
- error (f_"-os %s: output directory does not exist or is not a directory") d
- | Some d -> d in
-+ if qemu_boot then
-+ error (f_"-o qemu: the --qemu-boot option cannot be used in RHEL");
- Output_qemu.output_qemu os qemu_boot,
- output_format, output_alloc
-
-diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
-index f4d200e3d..a5b1c218a 100644
---- a/v2v/virt-v2v.pod
-+++ b/v2v/virt-v2v.pod
-@@ -115,11 +115,6 @@ Since F contains the path(s) to the guest disk
- image(s) you do not need to specify the name of the disk image on the
- command line.
-
--To convert a local disk image and immediately boot it in local
--qemu, do:
--
-- virt-v2v -i disk disk.img -o qemu -os /var/tmp --qemu-boot
--
- =head1 INPUT AND OUTPUT MODES
-
- ┌────────────┐ ┌─────────▶ -o null
-@@ -564,9 +559,6 @@ This is similar to I<-o local>, except that a shell script is written
- which you can use to boot the guest in qemu. The converted disks and
- shell script are written to the directory specified by I<-os>.
-
--When using this output mode, you can also specify the I<--qemu-boot>
--option which boots the guest under qemu immediately.
--
- =item B<-o> B
-
- This is the same as I<-o rhv>.
-@@ -791,11 +783,6 @@ Print information about the source guest and stop. This option is
- useful when you are setting up network and bridge maps.
- See L.
-
--=item B<--qemu-boot>
--
--When using I<-o qemu> only, this boots the guest immediately after
--virt-v2v finishes.
--
- =item B<-q>
-
- =item B<--quiet>
---
-2.21.0
-
diff --git a/SOURCES/0067-RHEL-8-Disable-alternate-Augeas-lenses.patch b/SOURCES/0067-RHEL-8-Disable-alternate-Augeas-lenses.patch
deleted file mode 100644
index 2ff40d8..0000000
--- a/SOURCES/0067-RHEL-8-Disable-alternate-Augeas-lenses.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 45879864c06bc7e293302d1025a6cdc92af654ca Mon Sep 17 00:00:00 2001
-From: Pino Toscano
-Date: Fri, 24 Oct 2014 16:33:50 +0100
-Subject: [PATCH] RHEL 8: Disable alternate Augeas lenses.
-
-These are included in the RHEL augeas package, and therefore not
-required.
-
-See:
-https://www.redhat.com/archives/libguestfs/2014-October/msg00220.html
----
- appliance/Makefile.am | 1 -
- daemon/augeas.c | 5 ++++-
- 2 files changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/appliance/Makefile.am b/appliance/Makefile.am
-index 6cba8d158..16714b197 100644
---- a/appliance/Makefile.am
-+++ b/appliance/Makefile.am
-@@ -91,7 +91,6 @@ supermin.d/daemon.tar.gz: ../daemon/guestfsd guestfs_shadow.aug
- rm -rf tmp-d
- mkdir -p tmp-d$(DAEMON_SUPERMIN_DIR) tmp-d/etc tmp-d/usr/share/guestfs
- ln ../daemon/guestfsd tmp-d$(DAEMON_SUPERMIN_DIR)/guestfsd
-- ln $(srcdir)/guestfs_shadow.aug tmp-d/usr/share/guestfs/guestfs_shadow.aug
- ( cd tmp-d && tar zcf - * ) > $@-t
- rm -r tmp-d
- mv $@-t $@
-diff --git a/daemon/augeas.c b/daemon/augeas.c
-index 453251337..5bbfffa2d 100644
---- a/daemon/augeas.c
-+++ b/daemon/augeas.c
-@@ -134,7 +134,7 @@ do_aug_init (const char *root, int flags)
- }
-
- /* Pass AUG_NO_ERR_CLOSE so we can display detailed errors. */
-- aug = aug_init (buf, "/usr/share/guestfs/", flags | AUG_NO_ERR_CLOSE);
-+ aug = aug_init (buf, NULL, flags | AUG_NO_ERR_CLOSE);
-
- if (!aug) {
- reply_with_error ("augeas initialization failed");
-@@ -148,6 +148,8 @@ do_aug_init (const char *root, int flags)
- return -1;
- }
-
-+ /* We already have the needed lenses in RHEL 8 */
-+#if 0
- if (!augeas_is_version (1, 2, 1)) {
- int r = aug_transform (aug, "guestfs_shadow", "/etc/shadow",
- 0 /* = included */);
-@@ -166,6 +168,7 @@ do_aug_init (const char *root, int flags)
- }
- }
- }
-+#endif
-
- return 0;
- }
---
-2.21.0
-
diff --git a/SOURCES/0067-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch b/SOURCES/0067-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch
new file mode 100644
index 0000000..68649b3
--- /dev/null
+++ b/SOURCES/0067-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch
@@ -0,0 +1,34 @@
+From 615c592af0b26a48d9e9b955257d8793e1c040fd Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Fri, 24 Apr 2015 09:45:41 -0400
+Subject: [PATCH] RHEL 8: Fix list of supported sound cards to match RHEL qemu
+ (RHBZ#1176493).
+
+---
+ v2v/utils.ml | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/v2v/utils.ml b/v2v/utils.ml
+index 67e2028f3..436acb5f1 100644
+--- a/v2v/utils.ml
++++ b/v2v/utils.ml
+@@ -51,13 +51,14 @@ let kvm_arch = function
+ (* Does qemu support the given sound card? *)
+ let qemu_supports_sound_card = function
+ | Types.AC97
+- | Types.ES1370
+ | Types.ICH6
+ | Types.ICH9
+ | Types.PCSpeaker
++ -> true
++ | Types.ES1370
+ | Types.SB16
+ | Types.USBAudio
+- -> true
++ -> false
+
+ (* Find the UEFI firmware. *)
+ let find_uefi_firmware guest_arch =
+--
+2.20.1
+
diff --git a/SOURCES/0068-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch b/SOURCES/0068-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch
deleted file mode 100644
index f5b721a..0000000
--- a/SOURCES/0068-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From d7263adc656e8a23a9707984ae0fcc6761ef3ca0 Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Fri, 24 Apr 2015 09:45:41 -0400
-Subject: [PATCH] RHEL 8: Fix list of supported sound cards to match RHEL qemu
- (RHBZ#1176493).
-
----
- v2v/utils.ml | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/v2v/utils.ml b/v2v/utils.ml
-index 67e2028f3..436acb5f1 100644
---- a/v2v/utils.ml
-+++ b/v2v/utils.ml
-@@ -51,13 +51,14 @@ let kvm_arch = function
- (* Does qemu support the given sound card? *)
- let qemu_supports_sound_card = function
- | Types.AC97
-- | Types.ES1370
- | Types.ICH6
- | Types.ICH9
- | Types.PCSpeaker
-+ -> true
-+ | Types.ES1370
- | Types.SB16
- | Types.USBAudio
-- -> true
-+ -> false
-
- (* Find the UEFI firmware. *)
- let find_uefi_firmware guest_arch =
---
-2.21.0
-
diff --git a/SOURCES/0068-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch b/SOURCES/0068-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch
new file mode 100644
index 0000000..f9c99f7
--- /dev/null
+++ b/SOURCES/0068-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch
@@ -0,0 +1,40 @@
+From 5618fda1d155350ff2c5277faa81cf257f1f6dea Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Tue, 7 Jul 2015 09:28:03 -0400
+Subject: [PATCH] RHEL 8: Reject use of libguestfs-winsupport features except
+ for virt-* tools (RHBZ#1240276).
+
+---
+ generator/c.ml | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/generator/c.ml b/generator/c.ml
+index 0366866e2..ded9685dc 100644
+--- a/generator/c.ml
++++ b/generator/c.ml
+@@ -1832,6 +1832,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.
+ *)
+--
+2.20.1
+
diff --git a/SOURCES/0069-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch b/SOURCES/0069-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch
new file mode 100644
index 0000000..73d7fcf
--- /dev/null
+++ b/SOURCES/0069-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch
@@ -0,0 +1,93 @@
+From 31bfcd182f183d15e996170105c64fb47c553e50 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Sun, 30 Aug 2015 03:21:57 -0400
+Subject: [PATCH] RHEL 8: Fix tests for libguestfs-winsupport.
+
+It doesn't let us use guestfish for arbitrary Windows edits.
+---
+ test-data/phony-guests/make-windows-img.sh | 1 +
+ tests/charsets/test-charset-fidelity.c | 2 ++
+ v2v/test-v2v-virtio-win-iso.sh | 8 +++++++-
+ v2v/test-v2v-windows-conversion.sh | 8 +++++++-
+ 4 files changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh
+index d7c3ec9cf..9e556215a 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 < "$script"
+ :> "$expected"
+
++cat >> "$script" < "$response"
++guestfish --ro -a "$d/windows-sda" < "$script" > "$response"
+ diff -u "$expected" "$response"
+
+ rm -r $d
+diff --git a/v2v/test-v2v-windows-conversion.sh b/v2v/test-v2v-windows-conversion.sh
+index f1da222a9..ff94fe39b 100755
+--- a/v2v/test-v2v-windows-conversion.sh
++++ b/v2v/test-v2v-windows-conversion.sh
+@@ -73,6 +73,12 @@ mktest ()
+ :> "$script"
+ :> "$expected"
+
++cat >> "$script" < "$response"
++guestfish --ro -a "$d/windows-sda" < "$script" > "$response"
+ diff -u "$expected" "$response"
+
+ # We also update the Registry several times, for firstboot, and (ONLY
+--
+2.20.1
+
diff --git a/SOURCES/0069-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch b/SOURCES/0069-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch
deleted file mode 100644
index f858fb3..0000000
--- a/SOURCES/0069-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 75c3b624fd9d86906363ae5a433458ce6e853a83 Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Tue, 7 Jul 2015 09:28:03 -0400
-Subject: [PATCH] RHEL 8: Reject use of libguestfs-winsupport features except
- for virt-* tools (RHBZ#1240276).
-
----
- generator/c.ml | 16 ++++++++++++++++
- 1 file changed, 16 insertions(+)
-
-diff --git a/generator/c.ml b/generator/c.ml
-index 0366866e2..ded9685dc 100644
---- a/generator/c.ml
-+++ b/generator/c.ml
-@@ -1832,6 +1832,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.
- *)
---
-2.21.0
-
diff --git a/SOURCES/0070-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch b/SOURCES/0070-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch
deleted file mode 100644
index ce0a201..0000000
--- a/SOURCES/0070-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 056a6a9d07619008622d4d0bd0594654b6c02e70 Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Sun, 30 Aug 2015 03:21:57 -0400
-Subject: [PATCH] RHEL 8: Fix tests for libguestfs-winsupport.
-
-It doesn't let us use guestfish for arbitrary Windows edits.
----
- test-data/phony-guests/make-windows-img.sh | 1 +
- tests/charsets/test-charset-fidelity.c | 2 ++
- v2v/test-v2v-virtio-win-iso.sh | 8 +++++++-
- v2v/test-v2v-windows-conversion.sh | 8 +++++++-
- 4 files changed, 17 insertions(+), 2 deletions(-)
-
-diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh
-index d7c3ec9cf..9e556215a 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 < "$script"
- :> "$expected"
-
-+cat >> "$script" < "$response"
-+guestfish --ro -a "$d/windows-sda" < "$script" > "$response"
- diff -u "$expected" "$response"
-
- rm -r $d
-diff --git a/v2v/test-v2v-windows-conversion.sh b/v2v/test-v2v-windows-conversion.sh
-index f1da222a9..ff94fe39b 100755
---- a/v2v/test-v2v-windows-conversion.sh
-+++ b/v2v/test-v2v-windows-conversion.sh
-@@ -73,6 +73,12 @@ mktest ()
- :> "$script"
- :> "$expected"
-
-+cat >> "$script" < "$response"
-+guestfish --ro -a "$d/windows-sda" < "$script" > "$response"
- diff -u "$expected" "$response"
-
- # We also update the Registry several times, for firstboot, and (ONLY
---
-2.21.0
-
diff --git a/SOURCES/0070-RHEL-8-Revert-v2v-Add-a-support-matrix-to-the-manual.patch b/SOURCES/0070-RHEL-8-Revert-v2v-Add-a-support-matrix-to-the-manual.patch
new file mode 100644
index 0000000..9f34ff5
--- /dev/null
+++ b/SOURCES/0070-RHEL-8-Revert-v2v-Add-a-support-matrix-to-the-manual.patch
@@ -0,0 +1,125 @@
+From b141da6653cf2cd6b73470b7aa0a956fc04802e0 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Mon, 21 Sep 2015 15:49:17 +0100
+Subject: [PATCH] RHEL 8: Revert "v2v: Add a support matrix to the manual
+ page."
+
+This reverts commit a03bffa15a5357d5d0244595caf99607be1ec3ab.
+---
+ v2v/virt-v2v.pod | 100 -----------------------------------------------
+ 1 file changed, 100 deletions(-)
+
+diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
+index a5b1c218a..86046f891 100644
+--- a/v2v/virt-v2v.pod
++++ b/v2v/virt-v2v.pod
+@@ -167,106 +167,6 @@ only used when virt-v2v runs under VDSM control.
+ I<--in-place> instructs virt-v2v to customize the guest OS in the input
+ virtual machine, instead of creating a new VM in the target hypervisor.
+
+-=head1 SUPPORT MATRIX
+-
+-=head2 Hypervisors (Input)
+-
+-=over 4
+-
+-=item VMware ESXi
+-
+-Must be managed by VMware vCenter E 5.0 unless VDDK is available.
+-
+-=item OVA exported from VMware
+-
+-OVAs from other hypervisors will not work.
+-
+-=item VMX from VMware
+-
+-VMX files generated by other hypervisors will not work.
+-
+-=item RHEL 5 Xen
+-
+-=item SUSE Xen
+-
+-=item Citrix Xen
+-
+-Citrix Xen has not been recently tested.
+-
+-=item Hyper-V
+-
+-Not recently tested. Requires that you export the disk or use
+-L on Hyper-V.
+-
+-=item Direct from disk images
+-
+-Only disk images exported from supported hypervisors, and using
+-container formats supported by qemu.
+-
+-=item Physical machines
+-
+-Using the L tool.
+-
+-=back
+-
+-=head2 Hypervisors (Output)
+-
+-QEMU and KVM only.
+-
+-=head2 Virtualization management systems (Output)
+-
+-=over 4
+-
+-=item OpenStack Glance
+-
+-=item Red Hat Virtualization (RHV) 4.1 and up
+-
+-=item Local libvirt
+-
+-And hence L, L, and similar tools.
+-
+-=item Local disk
+-
+-=back
+-
+-=head2 Guests
+-
+-=over 4
+-
+-=item Red Hat Enterprise Linux 3, 4, 5, 6, 7
+-
+-=item CentOS 3, 4, 5, 6, 7
+-
+-=item Scientific Linux 3, 4, 5, 6, 7
+-
+-=item Oracle Linux
+-
+-=item Fedora
+-
+-=item SLES 10 and up
+-
+-=item OpenSUSE 10 and up
+-
+-=item Debian 6 and up
+-
+-=item Ubuntu 10.04, 12.04, 14.04, 16.04, and up
+-
+-=item Windows XP to Windows 10 / Windows Server 2016
+-
+-We use Windows internal version numbers, see
+-L
+-
+-Currently NT 5.2 to NT 6.3 are supported.
+-
+-See L below for additional notes on converting Windows
+-guests.
+-
+-=back
+-
+-=head2 Guest firmware
+-
+-BIOS or UEFI for all guest types (but see L below).
+-
+ =head1 OPTIONS
+
+ =over 4
+--
+2.20.1
+
diff --git a/SOURCES/0071-RHEL-8-Revert-v2v-Add-a-support-matrix-to-the-manual.patch b/SOURCES/0071-RHEL-8-Revert-v2v-Add-a-support-matrix-to-the-manual.patch
deleted file mode 100644
index 43a96c0..0000000
--- a/SOURCES/0071-RHEL-8-Revert-v2v-Add-a-support-matrix-to-the-manual.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From 97261c9b087afa7bc9b48a6bfd132fcf98f7897a Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Mon, 21 Sep 2015 15:49:17 +0100
-Subject: [PATCH] RHEL 8: Revert "v2v: Add a support matrix to the manual
- page."
-
-This reverts commit a03bffa15a5357d5d0244595caf99607be1ec3ab.
----
- v2v/virt-v2v.pod | 100 -----------------------------------------------
- 1 file changed, 100 deletions(-)
-
-diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
-index a5b1c218a..86046f891 100644
---- a/v2v/virt-v2v.pod
-+++ b/v2v/virt-v2v.pod
-@@ -167,106 +167,6 @@ only used when virt-v2v runs under VDSM control.
- I<--in-place> instructs virt-v2v to customize the guest OS in the input
- virtual machine, instead of creating a new VM in the target hypervisor.
-
--=head1 SUPPORT MATRIX
--
--=head2 Hypervisors (Input)
--
--=over 4
--
--=item VMware ESXi
--
--Must be managed by VMware vCenter E 5.0 unless VDDK is available.
--
--=item OVA exported from VMware
--
--OVAs from other hypervisors will not work.
--
--=item VMX from VMware
--
--VMX files generated by other hypervisors will not work.
--
--=item RHEL 5 Xen
--
--=item SUSE Xen
--
--=item Citrix Xen
--
--Citrix Xen has not been recently tested.
--
--=item Hyper-V
--
--Not recently tested. Requires that you export the disk or use
--L on Hyper-V.
--
--=item Direct from disk images
--
--Only disk images exported from supported hypervisors, and using
--container formats supported by qemu.
--
--=item Physical machines
--
--Using the L tool.
--
--=back
--
--=head2 Hypervisors (Output)
--
--QEMU and KVM only.
--
--=head2 Virtualization management systems (Output)
--
--=over 4
--
--=item OpenStack Glance
--
--=item Red Hat Virtualization (RHV) 4.1 and up
--
--=item Local libvirt
--
--And hence L, L, and similar tools.
--
--=item Local disk
--
--=back
--
--=head2 Guests
--
--=over 4
--
--=item Red Hat Enterprise Linux 3, 4, 5, 6, 7
--
--=item CentOS 3, 4, 5, 6, 7
--
--=item Scientific Linux 3, 4, 5, 6, 7
--
--=item Oracle Linux
--
--=item Fedora
--
--=item SLES 10 and up
--
--=item OpenSUSE 10 and up
--
--=item Debian 6 and up
--
--=item Ubuntu 10.04, 12.04, 14.04, 16.04, and up
--
--=item Windows XP to Windows 10 / Windows Server 2016
--
--We use Windows internal version numbers, see
--L
--
--Currently NT 5.2 to NT 6.3 are supported.
--
--See L below for additional notes on converting Windows
--guests.
--
--=back
--
--=head2 Guest firmware
--
--BIOS or UEFI for all guest types (but see L below).
--
- =head1 OPTIONS
-
- =over 4
---
-2.21.0
-
diff --git a/SOURCES/0071-RHEL-8-tests-Disable-daemon-tests-that-require-the-u.patch b/SOURCES/0071-RHEL-8-tests-Disable-daemon-tests-that-require-the-u.patch
new file mode 100644
index 0000000..167cf85
--- /dev/null
+++ b/SOURCES/0071-RHEL-8-tests-Disable-daemon-tests-that-require-the-u.patch
@@ -0,0 +1,28 @@
+From 2f2626d6e3de4e3e4db056eb0816a2a112f8c070 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Mon, 21 Sep 2015 13:12:43 -0400
+Subject: [PATCH] RHEL 8: tests: Disable daemon tests that require the 'unix'
+ backend.
+
+---
+ tests/daemon/Makefile.am | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/tests/daemon/Makefile.am b/tests/daemon/Makefile.am
+index 053cad3e1..0d723fee4 100644
+--- a/tests/daemon/Makefile.am
++++ b/tests/daemon/Makefile.am
+@@ -23,9 +23,7 @@ include $(top_srcdir)/subdir-rules.mk
+
+ check_DATA = captive-daemon.pm
+
+-TESTS = \
+- test-daemon-start.pl \
+- test-btrfs.pl
++TESTS =
+
+ TESTS_ENVIRONMENT = $(top_builddir)/run --test
+
+--
+2.20.1
+
diff --git a/SOURCES/0072-RHEL-8-tests-Disable-daemon-tests-that-require-the-u.patch b/SOURCES/0072-RHEL-8-tests-Disable-daemon-tests-that-require-the-u.patch
deleted file mode 100644
index 0815890..0000000
--- a/SOURCES/0072-RHEL-8-tests-Disable-daemon-tests-that-require-the-u.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From e9ba6411d8a2535db43f59e32cd4dd61acdadd6a Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Mon, 21 Sep 2015 13:12:43 -0400
-Subject: [PATCH] RHEL 8: tests: Disable daemon tests that require the 'unix'
- backend.
-
----
- tests/daemon/Makefile.am | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/tests/daemon/Makefile.am b/tests/daemon/Makefile.am
-index 053cad3e1..0d723fee4 100644
---- a/tests/daemon/Makefile.am
-+++ b/tests/daemon/Makefile.am
-@@ -23,9 +23,7 @@ include $(top_srcdir)/subdir-rules.mk
-
- check_DATA = captive-daemon.pm
-
--TESTS = \
-- test-daemon-start.pl \
-- test-btrfs.pl
-+TESTS =
-
- TESTS_ENVIRONMENT = $(top_builddir)/run --test
-
---
-2.21.0
-
diff --git a/SOURCES/0072-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch b/SOURCES/0072-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch
new file mode 100644
index 0000000..028d0bf
--- /dev/null
+++ b/SOURCES/0072-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch
@@ -0,0 +1,284 @@
+From 3391284ce7368506fd03ea2c55cb2bef8253ec3a Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Thu, 14 Jan 2016 11:53:42 -0500
+Subject: [PATCH] RHEL 8: v2v: Disable the virt-v2v --in-place option.
+
+This disables the virt-v2v --in-place option which we do not
+wish to support in RHEL.
+(See commit d0069559a939e47e5f29973ed9a69a13f0b58301).
+---
+ v2v/Makefile.am | 2 -
+ v2v/cmdline.ml | 8 +--
+ v2v/test-v2v-docs.sh | 1 +
+ v2v/test-v2v-in-place.sh | 108 ---------------------------------------
+ v2v/virt-v2v.pod | 46 +----------------
+ 5 files changed, 7 insertions(+), 158 deletions(-)
+ delete mode 100755 v2v/test-v2v-in-place.sh
+
+diff --git a/v2v/Makefile.am b/v2v/Makefile.am
+index 7a1ac329e..156f8ad5b 100644
+--- a/v2v/Makefile.am
++++ b/v2v/Makefile.am
+@@ -358,7 +358,6 @@ if HAVE_LIBVIRT
+ TESTS += \
+ test-v2v-cdrom.sh \
+ test-v2v-floppy.sh \
+- test-v2v-in-place.sh \
+ test-v2v-networks-and-bridges.sh \
+ test-v2v-no-copy.sh \
+ test-v2v-o-glance.sh \
+@@ -497,7 +496,6 @@ EXTRA_DIST += \
+ test-v2v-i-vmx-3.vmx \
+ test-v2v-i-vmx-4.vmx \
+ test-v2v-i-vmx-5.vmx \
+- test-v2v-in-place.sh \
+ test-v2v-it-vddk-io-query.sh \
+ test-v2v-machine-readable.sh \
+ test-v2v-networks-and-bridges-expected.xml \
+diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
+index 6bca12ce3..0efff4c1d 100644
+--- a/v2v/cmdline.ml
++++ b/v2v/cmdline.ml
+@@ -198,8 +198,7 @@ let parse_cmdline () =
+ s_"Set option for input mode";
+ [ M"it" ], Getopt.String ("transport", set_string_option_once "-it" input_transport),
+ s_"Input transport";
+- [ L"in-place" ], Getopt.Set in_place,
+- s_"Only tune the guest in the input VM";
++ [ L"in-place" ], Getopt.Set in_place, Getopt.hidden_option_description;
+ [ L"machine-readable" ], Getopt.Set machine_readable,
+ s_"Make output machine readable";
+ [ S 'n'; L"network" ], Getopt.String ("in:out", add_network),
+@@ -336,7 +335,6 @@ read the man page virt-v2v(1).
+ printf "vddk\n";
+ printf "colours-option\n";
+ printf "vdsm-compat-option\n";
+- printf "in-place\n";
+ printf "io/oo\n";
+ List.iter (printf "input:%s\n") (Modules_list.input_modules ());
+ List.iter (printf "output:%s\n") (Modules_list.output_modules ());
+@@ -485,6 +483,10 @@ read the man page virt-v2v(1).
+ error (f_"only ‘-it ssh’ can be used here") in
+ Input_vmx.input_vmx input_transport arg in
+
++ (* Prevent use of --in-place option in RHEL. *)
++ if in_place then
++ error (f_"--in-place cannot be used in RHEL");
++
+ (* Common error message. *)
+ let error_option_cannot_be_used_in_output_mode mode opt =
+ error (f_"-o %s: %s option cannot be used in this output mode") mode opt
+diff --git a/v2v/test-v2v-docs.sh b/v2v/test-v2v-docs.sh
+index e1e22b599..da98050ee 100755
+--- a/v2v/test-v2v-docs.sh
++++ b/v2v/test-v2v-docs.sh
+@@ -26,6 +26,7 @@ $top_srcdir/podcheck.pl virt-v2v.pod virt-v2v \
+ --debug-overlay,\
+ --ic,\
+ --if,\
++--in-place,\
+ --io,\
+ --it,\
+ --no-trim,\
+diff --git a/v2v/test-v2v-in-place.sh b/v2v/test-v2v-in-place.sh
+deleted file mode 100755
+index 6f7d78f39..000000000
+--- a/v2v/test-v2v-in-place.sh
++++ /dev/null
+@@ -1,108 +0,0 @@
+-#!/bin/bash -
+-# libguestfs virt-v2v test script
+-# Copyright (C) 2014 Red Hat Inc.
+-# Copyright (C) 2015 Parallels IP Holdings GmbH.
+-#
+-# 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.
+-
+-# Test --in-place.
+-
+-unset CDPATH
+-export LANG=C
+-set -e
+-
+-$TEST_FUNCTIONS
+-skip_if_skipped
+-skip_if_backend uml
+-skip_unless_phony_guest windows.img
+-
+-img_base="$abs_top_builddir/test-data/phony-guests/windows.img"
+-
+-export VIRT_TOOLS_DATA_DIR="$top_srcdir/test-data/fake-virt-tools"
+-export VIRTIO_WIN="$top_srcdir/test-data/fake-virtio-win"
+-
+-d=$PWD/test-v2v-in-place.d
+-rm -rf $d
+-mkdir $d
+-
+-img="$d/test.qcow2"
+-rm -f $img
+-qemu-img create -f qcow2 -b $img_base -o compat=1.1,backing_fmt=raw $img
+-md5="$(do_md5 $img_base)"
+-
+-libvirt_xml="$d/test.xml"
+-rm -f $libvirt_xml
+-n=windows-overlay
+-cat > $libvirt_xml <
+-
+- $n
+- 1048576
+-
+- hvm
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-EOF
+-
+-$VG virt-v2v --debug-gc -i libvirt -ic "test://$libvirt_xml" $n --in-place
+-
+-# Test that the drivers have been copied over into the guest
+-script="$d/test.fish"
+-expected="$d/expected"
+-response="$d/response"
+-
+-mktest ()
+-{
+- local cmd="$1" exp="$2"
+-
+- echo "echo '$cmd'" >> "$script"
+- echo "$cmd" >> "$expected"
+-
+- echo "$cmd" >> "$script"
+- echo "$exp" >> "$expected"
+-}
+-
+-:> "$script"
+-:> "$expected"
+-
+-firstboot_dir="/Program Files/Guestfs/Firstboot"
+-mktest "is-dir \"$firstboot_dir\"" true
+-mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
+-mktest "is-dir \"$firstboot_dir/scripts\"" true
+-virtio_dir="/Windows/Drivers/VirtIO"
+-mktest "is-dir \"$virtio_dir\"" true
+-for drv in netkvm qxl vioscsi viostor; do
+- for sfx in cat inf sys; do
+- mktest "is-file \"$virtio_dir/$drv.$sfx\"" true
+- done
+-done
+-
+-guestfish --ro -a "$img" -i < "$script" > "$response"
+-diff -u "$expected" "$response"
+-
+-# Test the base image remained untouched
+-test "$md5" = "$(do_md5 $img_base)"
+-
+-# Clean up.
+-rm -r $d
+diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
+index 86046f891..e095a6f82 100644
+--- a/v2v/virt-v2v.pod
++++ b/v2v/virt-v2v.pod
+@@ -18,8 +18,6 @@ virt-v2v - Convert a guest to use KVM
+ -oo rhv-cafile=/tmp/ca.pem -oo rhv-direct \
+ --bridge ovirtmgmt
+
+- virt-v2v -ic qemu:///system qemu_guest --in-place
+-
+ =head1 DESCRIPTION
+
+ Virt-v2v converts guests from a foreign hypervisor to run on KVM. It
+@@ -164,9 +162,6 @@ I<-o rhv-upload> is used to write to a RHV / oVirt target. I<-o rhv>
+ is a legacy method to write to RHV / oVirt E 4.2. I<-o vdsm> is
+ only used when virt-v2v runs under VDSM control.
+
+-I<--in-place> instructs virt-v2v to customize the guest OS in the input
+-virtual machine, instead of creating a new VM in the target hypervisor.
+-
+ =head1 OPTIONS
+
+ =over 4
+@@ -280,20 +275,6 @@ For I<-i disk> only, this specifies the format of the input disk
+ image. For other input methods you should specify the input
+ format in the metadata.
+
+-=item B<--in-place>
+-
+-Do not create an output virtual machine in the target hypervisor.
+-Instead, adjust the guest OS in the source VM to run in the input
+-hypervisor.
+-
+-This mode is meant for integration with other toolsets, which take the
+-responsibility of converting the VM configuration, providing for
+-rollback in case of errors, transforming the storage, etc.
+-
+-See L below.
+-
+-Conflicts with all I<-o *> options.
+-
+ =item B<-io> OPTION=VALUE
+
+ Set input option(s) related to the current input mode or transport.
+@@ -2160,7 +2141,7 @@ Minimum free space: 10 MB
+ =head2 Minimum free space check in the host
+
+ You must have sufficient free space in the host directory used to
+-store temporary overlays (except in I<--in-place> mode). To find out
++store temporary overlays. To find out
+ which directory this is, use:
+
+ $ df -h "`guestfish get-cachedir`"
+@@ -2292,31 +2273,6 @@ that instead.
+
+
+
+-=head1 IN PLACE CONVERSION
+-
+-It is also possible to use virt-v2v in scenarios where a foreign VM
+-has already been imported into a KVM-based hypervisor, but still needs
+-adjustments in the guest to make it run in the new virtual hardware.
+-
+-In that case it is assumed that a third-party tool has created the
+-target VM in the supported KVM-based hypervisor based on the source VM
+-configuration and contents, but using virtual devices more appropriate
+-for KVM (e.g. virtio storage and network, etc.).
+-
+-Then, to make the guest OS boot and run in the changed environment,
+-one can use:
+-
+- virt-v2v -ic qemu:///system converted_vm --in-place
+-
+-Virt-v2v will analyze the configuration of C in the
+-C libvirt instance, and apply various fixups to the
+-guest OS configuration to make it match the VM configuration. This
+-may include installing virtio drivers, configuring the bootloader, the
+-mountpoints, the network interfaces, and so on.
+-
+-Should an error occur during the operation, virt-v2v exits with an
+-error code leaving the VM in an undefined state.
+-
+ =head1 MACHINE READABLE OUTPUT
+
+ The I<--machine-readable> option can be used to make the output more
+--
+2.20.1
+
diff --git a/SOURCES/0073-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch b/SOURCES/0073-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch
deleted file mode 100644
index 8ce1832..0000000
--- a/SOURCES/0073-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch
+++ /dev/null
@@ -1,284 +0,0 @@
-From e62ba81a68c66cbe15f182c9baa3667c5646e348 Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Thu, 14 Jan 2016 11:53:42 -0500
-Subject: [PATCH] RHEL 8: v2v: Disable the virt-v2v --in-place option.
-
-This disables the virt-v2v --in-place option which we do not
-wish to support in RHEL.
-(See commit d0069559a939e47e5f29973ed9a69a13f0b58301).
----
- v2v/Makefile.am | 2 -
- v2v/cmdline.ml | 8 +--
- v2v/test-v2v-docs.sh | 1 +
- v2v/test-v2v-in-place.sh | 108 ---------------------------------------
- v2v/virt-v2v.pod | 46 +----------------
- 5 files changed, 7 insertions(+), 158 deletions(-)
- delete mode 100755 v2v/test-v2v-in-place.sh
-
-diff --git a/v2v/Makefile.am b/v2v/Makefile.am
-index 7a1ac329e..156f8ad5b 100644
---- a/v2v/Makefile.am
-+++ b/v2v/Makefile.am
-@@ -358,7 +358,6 @@ if HAVE_LIBVIRT
- TESTS += \
- test-v2v-cdrom.sh \
- test-v2v-floppy.sh \
-- test-v2v-in-place.sh \
- test-v2v-networks-and-bridges.sh \
- test-v2v-no-copy.sh \
- test-v2v-o-glance.sh \
-@@ -497,7 +496,6 @@ EXTRA_DIST += \
- test-v2v-i-vmx-3.vmx \
- test-v2v-i-vmx-4.vmx \
- test-v2v-i-vmx-5.vmx \
-- test-v2v-in-place.sh \
- test-v2v-it-vddk-io-query.sh \
- test-v2v-machine-readable.sh \
- test-v2v-networks-and-bridges-expected.xml \
-diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
-index 6bca12ce3..0efff4c1d 100644
---- a/v2v/cmdline.ml
-+++ b/v2v/cmdline.ml
-@@ -198,8 +198,7 @@ let parse_cmdline () =
- s_"Set option for input mode";
- [ M"it" ], Getopt.String ("transport", set_string_option_once "-it" input_transport),
- s_"Input transport";
-- [ L"in-place" ], Getopt.Set in_place,
-- s_"Only tune the guest in the input VM";
-+ [ L"in-place" ], Getopt.Set in_place, Getopt.hidden_option_description;
- [ L"machine-readable" ], Getopt.Set machine_readable,
- s_"Make output machine readable";
- [ S 'n'; L"network" ], Getopt.String ("in:out", add_network),
-@@ -336,7 +335,6 @@ read the man page virt-v2v(1).
- printf "vddk\n";
- printf "colours-option\n";
- printf "vdsm-compat-option\n";
-- printf "in-place\n";
- printf "io/oo\n";
- List.iter (printf "input:%s\n") (Modules_list.input_modules ());
- List.iter (printf "output:%s\n") (Modules_list.output_modules ());
-@@ -485,6 +483,10 @@ read the man page virt-v2v(1).
- error (f_"only ‘-it ssh’ can be used here") in
- Input_vmx.input_vmx input_transport arg in
-
-+ (* Prevent use of --in-place option in RHEL. *)
-+ if in_place then
-+ error (f_"--in-place cannot be used in RHEL");
-+
- (* Common error message. *)
- let error_option_cannot_be_used_in_output_mode mode opt =
- error (f_"-o %s: %s option cannot be used in this output mode") mode opt
-diff --git a/v2v/test-v2v-docs.sh b/v2v/test-v2v-docs.sh
-index e1e22b599..da98050ee 100755
---- a/v2v/test-v2v-docs.sh
-+++ b/v2v/test-v2v-docs.sh
-@@ -26,6 +26,7 @@ $top_srcdir/podcheck.pl virt-v2v.pod virt-v2v \
- --debug-overlay,\
- --ic,\
- --if,\
-+--in-place,\
- --io,\
- --it,\
- --no-trim,\
-diff --git a/v2v/test-v2v-in-place.sh b/v2v/test-v2v-in-place.sh
-deleted file mode 100755
-index 6f7d78f39..000000000
---- a/v2v/test-v2v-in-place.sh
-+++ /dev/null
-@@ -1,108 +0,0 @@
--#!/bin/bash -
--# libguestfs virt-v2v test script
--# Copyright (C) 2014 Red Hat Inc.
--# Copyright (C) 2015 Parallels IP Holdings GmbH.
--#
--# 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.
--
--# Test --in-place.
--
--unset CDPATH
--export LANG=C
--set -e
--
--$TEST_FUNCTIONS
--skip_if_skipped
--skip_if_backend uml
--skip_unless_phony_guest windows.img
--
--img_base="$abs_top_builddir/test-data/phony-guests/windows.img"
--
--export VIRT_TOOLS_DATA_DIR="$top_srcdir/test-data/fake-virt-tools"
--export VIRTIO_WIN="$top_srcdir/test-data/fake-virtio-win"
--
--d=$PWD/test-v2v-in-place.d
--rm -rf $d
--mkdir $d
--
--img="$d/test.qcow2"
--rm -f $img
--qemu-img create -f qcow2 -b $img_base -o compat=1.1,backing_fmt=raw $img
--md5="$(do_md5 $img_base)"
--
--libvirt_xml="$d/test.xml"
--rm -f $libvirt_xml
--n=windows-overlay
--cat > $libvirt_xml <
--
-- $n
-- 1048576
--
-- hvm
--
--
--
--
--
--
--
--
--
--
--
--EOF
--
--$VG virt-v2v --debug-gc -i libvirt -ic "test://$libvirt_xml" $n --in-place
--
--# Test that the drivers have been copied over into the guest
--script="$d/test.fish"
--expected="$d/expected"
--response="$d/response"
--
--mktest ()
--{
-- local cmd="$1" exp="$2"
--
-- echo "echo '$cmd'" >> "$script"
-- echo "$cmd" >> "$expected"
--
-- echo "$cmd" >> "$script"
-- echo "$exp" >> "$expected"
--}
--
--:> "$script"
--:> "$expected"
--
--firstboot_dir="/Program Files/Guestfs/Firstboot"
--mktest "is-dir \"$firstboot_dir\"" true
--mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
--mktest "is-dir \"$firstboot_dir/scripts\"" true
--virtio_dir="/Windows/Drivers/VirtIO"
--mktest "is-dir \"$virtio_dir\"" true
--for drv in netkvm qxl vioscsi viostor; do
-- for sfx in cat inf sys; do
-- mktest "is-file \"$virtio_dir/$drv.$sfx\"" true
-- done
--done
--
--guestfish --ro -a "$img" -i < "$script" > "$response"
--diff -u "$expected" "$response"
--
--# Test the base image remained untouched
--test "$md5" = "$(do_md5 $img_base)"
--
--# Clean up.
--rm -r $d
-diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
-index 86046f891..e095a6f82 100644
---- a/v2v/virt-v2v.pod
-+++ b/v2v/virt-v2v.pod
-@@ -18,8 +18,6 @@ virt-v2v - Convert a guest to use KVM
- -oo rhv-cafile=/tmp/ca.pem -oo rhv-direct \
- --bridge ovirtmgmt
-
-- virt-v2v -ic qemu:///system qemu_guest --in-place
--
- =head1 DESCRIPTION
-
- Virt-v2v converts guests from a foreign hypervisor to run on KVM. It
-@@ -164,9 +162,6 @@ I<-o rhv-upload> is used to write to a RHV / oVirt target. I<-o rhv>
- is a legacy method to write to RHV / oVirt E 4.2. I<-o vdsm> is
- only used when virt-v2v runs under VDSM control.
-
--I<--in-place> instructs virt-v2v to customize the guest OS in the input
--virtual machine, instead of creating a new VM in the target hypervisor.
--
- =head1 OPTIONS
-
- =over 4
-@@ -280,20 +275,6 @@ For I<-i disk> only, this specifies the format of the input disk
- image. For other input methods you should specify the input
- format in the metadata.
-
--=item B<--in-place>
--
--Do not create an output virtual machine in the target hypervisor.
--Instead, adjust the guest OS in the source VM to run in the input
--hypervisor.
--
--This mode is meant for integration with other toolsets, which take the
--responsibility of converting the VM configuration, providing for
--rollback in case of errors, transforming the storage, etc.
--
--See L below.
--
--Conflicts with all I<-o *> options.
--
- =item B<-io> OPTION=VALUE
-
- Set input option(s) related to the current input mode or transport.
-@@ -2160,7 +2141,7 @@ Minimum free space: 10 MB
- =head2 Minimum free space check in the host
-
- You must have sufficient free space in the host directory used to
--store temporary overlays (except in I<--in-place> mode). To find out
-+store temporary overlays. To find out
- which directory this is, use:
-
- $ df -h "`guestfish get-cachedir`"
-@@ -2292,31 +2273,6 @@ that instead.
-
-
-
--=head1 IN PLACE CONVERSION
--
--It is also possible to use virt-v2v in scenarios where a foreign VM
--has already been imported into a KVM-based hypervisor, but still needs
--adjustments in the guest to make it run in the new virtual hardware.
--
--In that case it is assumed that a third-party tool has created the
--target VM in the supported KVM-based hypervisor based on the source VM
--configuration and contents, but using virtual devices more appropriate
--for KVM (e.g. virtio storage and network, etc.).
--
--Then, to make the guest OS boot and run in the changed environment,
--one can use:
--
-- virt-v2v -ic qemu:///system converted_vm --in-place
--
--Virt-v2v will analyze the configuration of C in the
--C libvirt instance, and apply various fixups to the
--guest OS configuration to make it match the VM configuration. This
--may include installing virtio drivers, configuring the bootloader, the
--mountpoints, the network interfaces, and so on.
--
--Should an error occur during the operation, virt-v2v exits with an
--error code leaving the VM in an undefined state.
--
- =head1 MACHINE READABLE OUTPUT
-
- The I<--machine-readable> option can be used to make the output more
---
-2.21.0
-
diff --git a/SOURCES/0073-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/SOURCES/0073-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
new file mode 100644
index 0000000..9c11d92
--- /dev/null
+++ b/SOURCES/0073-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
@@ -0,0 +1,26 @@
+From 24a339f74a0abca4f84fd00d3a2afc9c2564b8eb Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Thu, 2 Mar 2017 14:21:37 +0100
+Subject: [PATCH] RHEL 8: v2v: -i disk: force VNC as display (RHBZ#1372671)
+
+The SDL output mode is not supported in RHEL 8's qemu-kvm.
+---
+ v2v/input_disk.ml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/v2v/input_disk.ml b/v2v/input_disk.ml
+index 7ecd19fd3..e2b16cf70 100644
+--- a/v2v/input_disk.ml
++++ b/v2v/input_disk.ml
+@@ -87,7 +87,7 @@ class input_disk input_format disk = object
+ s_features = [ "acpi"; "apic"; "pae" ];
+ s_firmware = UnknownFirmware; (* causes virt-v2v to autodetect *)
+ s_display =
+- Some { s_display_type = Window; s_keymap = None; s_password = None;
++ Some { s_display_type = VNC; s_keymap = None; s_password = None;
+ s_listen = LNoListen; s_port = None };
+ s_video = None;
+ s_sound = None;
+--
+2.20.1
+
diff --git a/SOURCES/0074-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch b/SOURCES/0074-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch
new file mode 100644
index 0000000..93c1bfa
--- /dev/null
+++ b/SOURCES/0074-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch
@@ -0,0 +1,27 @@
+From e6f868a3949ee95f0528561453a12c323394f5a4 Mon Sep 17 00:00:00 2001
+From: Pino Toscano
+Date: Wed, 8 Mar 2017 11:03:40 +0100
+Subject: [PATCH] RHEL 8: v2v: do not mention SUSE Xen hosts (RHBZ#1430203)
+
+They are not supported in RHEL 8.
+---
+ v2v/virt-v2v.pod | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
+index e095a6f82..8e3a06434 100644
+--- a/v2v/virt-v2v.pod
++++ b/v2v/virt-v2v.pod
+@@ -1639,8 +1639,7 @@ verbose messages.
+
+ =head1 INPUT FROM XEN
+
+-Virt-v2v is able to import Xen guests from RHEL 5 Xen or SLES and
+-openSUSE Xen hosts.
++Virt-v2v is able to import Xen guests from RHEL 5 Xen hosts.
+
+ Virt-v2v uses libvirt for access to the remote Xen host, and therefore
+ the input mode should be I<-i libvirt>. As this is the default, you
+--
+2.20.1
+
diff --git a/SOURCES/0074-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/SOURCES/0074-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
deleted file mode 100644
index 45f3171..0000000
--- a/SOURCES/0074-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 97a0e8b9a0e9da9c10f739e3234cb2442011dff3 Mon Sep 17 00:00:00 2001
-From: "Richard W.M. Jones"
-Date: Thu, 2 Mar 2017 14:21:37 +0100
-Subject: [PATCH] RHEL 8: v2v: -i disk: force VNC as display (RHBZ#1372671)
-
-The SDL output mode is not supported in RHEL 8's qemu-kvm.
----
- v2v/input_disk.ml | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/v2v/input_disk.ml b/v2v/input_disk.ml
-index 7ecd19fd3..e2b16cf70 100644
---- a/v2v/input_disk.ml
-+++ b/v2v/input_disk.ml
-@@ -87,7 +87,7 @@ class input_disk input_format disk = object
- s_features = [ "acpi"; "apic"; "pae" ];
- s_firmware = UnknownFirmware; (* causes virt-v2v to autodetect *)
- s_display =
-- Some { s_display_type = Window; s_keymap = None; s_password = None;
-+ Some { s_display_type = VNC; s_keymap = None; s_password = None;
- s_listen = LNoListen; s_port = None };
- s_video = None;
- s_sound = None;
---
-2.21.0
-
diff --git a/SOURCES/0075-RHEL-8-v2v-disable-unconfig-of-manually-installed-VM.patch b/SOURCES/0075-RHEL-8-v2v-disable-unconfig-of-manually-installed-VM.patch
new file mode 100644
index 0000000..c7fe689
--- /dev/null
+++ b/SOURCES/0075-RHEL-8-v2v-disable-unconfig-of-manually-installed-VM.patch
@@ -0,0 +1,36 @@
+From 8f6ea87fbc19896afbe0e1d0a8441d9283042bdc Mon Sep 17 00:00:00 2001
+From: Pino Toscano
+Date: Mon, 14 Aug 2017 10:02:13 +0200
+Subject: [PATCH] RHEL 8: v2v: disable unconfig of manually installed VMware
+ tools (RHBZ#1477905)
+
+It looks like they may require connection to the VMware servers, which
+is not always available during conversion.
+---
+ v2v/convert_linux.ml | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/v2v/convert_linux.ml b/v2v/convert_linux.ml
+index da06352a0..c9cf99570 100644
+--- a/v2v/convert_linux.ml
++++ b/v2v/convert_linux.ml
+@@ -359,6 +359,7 @@ let convert (g : G.guestfs) inspect source output rcaps =
+ let remove = !remove in
+ Linux.remove g inspect remove;
+
++(*
+ (* VMware Tools may have been installed from a tarball, so the
+ * above code won't remove it. Look for the uninstall tool and run
+ * if present.
+@@ -380,6 +381,8 @@ let convert (g : G.guestfs) inspect source output rcaps =
+ warning (f_"VMware tools was detected, but uninstallation failed. The error message was: %s (ignored)")
+ msg
+ )
++*)
++ ()
+
+ and unconfigure_citrix () =
+ let pkgs =
+--
+2.20.1
+
diff --git a/SOURCES/0075-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch b/SOURCES/0075-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch
deleted file mode 100644
index 3bd38d7..0000000
--- a/SOURCES/0075-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 8ac67cd2284a3ec92429aea7688a0467d6cffc3b Mon Sep 17 00:00:00 2001
-From: Pino Toscano
-Date: Wed, 8 Mar 2017 11:03:40 +0100
-Subject: [PATCH] RHEL 8: v2v: do not mention SUSE Xen hosts (RHBZ#1430203)
-
-They are not supported in RHEL 8.
----
- v2v/virt-v2v.pod | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
-index e095a6f82..8e3a06434 100644
---- a/v2v/virt-v2v.pod
-+++ b/v2v/virt-v2v.pod
-@@ -1639,8 +1639,7 @@ verbose messages.
-
- =head1 INPUT FROM XEN
-
--Virt-v2v is able to import Xen guests from RHEL 5 Xen or SLES and
--openSUSE Xen hosts.
-+Virt-v2v is able to import Xen guests from RHEL 5 Xen hosts.
-
- Virt-v2v uses libvirt for access to the remote Xen host, and therefore
- the input mode should be I<-i libvirt>. As this is the default, you
---
-2.21.0
-
diff --git a/SOURCES/0076-RHEL-8-v2v-disable-unconfig-of-manually-installed-VM.patch b/SOURCES/0076-RHEL-8-v2v-disable-unconfig-of-manually-installed-VM.patch
deleted file mode 100644
index 288ed40..0000000
--- a/SOURCES/0076-RHEL-8-v2v-disable-unconfig-of-manually-installed-VM.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From aabd2d506e60d0b7bb69fb7582ae1b4ecb8f19e6 Mon Sep 17 00:00:00 2001
-From: Pino Toscano
-Date: Mon, 14 Aug 2017 10:02:13 +0200
-Subject: [PATCH] RHEL 8: v2v: disable unconfig of manually installed VMware
- tools (RHBZ#1477905)
-
-It looks like they may require connection to the VMware servers, which
-is not always available during conversion.
----
- v2v/convert_linux.ml | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/v2v/convert_linux.ml b/v2v/convert_linux.ml
-index da06352a0..c9cf99570 100644
---- a/v2v/convert_linux.ml
-+++ b/v2v/convert_linux.ml
-@@ -359,6 +359,7 @@ let convert (g : G.guestfs) inspect source output rcaps =
- let remove = !remove in
- Linux.remove g inspect remove;
-
-+(*
- (* VMware Tools may have been installed from a tarball, so the
- * above code won't remove it. Look for the uninstall tool and run
- * if present.
-@@ -380,6 +381,8 @@ let convert (g : G.guestfs) inspect source output rcaps =
- warning (f_"VMware tools was detected, but uninstallation failed. The error message was: %s (ignored)")
- msg
- )
-+*)
-+ ()
-
- and unconfigure_citrix () =
- let pkgs =
---
-2.21.0
-
diff --git a/SOURCES/0076-RHEL-8-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch b/SOURCES/0076-RHEL-8-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch
new file mode 100644
index 0000000..f1ddb45
--- /dev/null
+++ b/SOURCES/0076-RHEL-8-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch
@@ -0,0 +1,82 @@
+From 1a6907340ef1023ad42750ef723f15bf7d8c1649 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Mon, 14 May 2018 10:16:58 +0100
+Subject: [PATCH] RHEL 8: v2v: rhv-upload: Remove restriction on -oa sparse.
+
+See: https://bugzilla.redhat.com/show_bug.cgi?id=1565681
+and the v2v-devel private thread "Do we already support migration using FC?"
+---
+ v2v/output_rhv_upload.ml | 11 +----------
+ v2v/rhv-upload-plugin.py | 4 +---
+ v2v/virt-v2v.pod | 6 ------
+ 3 files changed, 2 insertions(+), 19 deletions(-)
+
+diff --git a/v2v/output_rhv_upload.ml b/v2v/output_rhv_upload.ml
+index 79a2fc8fd..59911f32c 100644
+--- a/v2v/output_rhv_upload.ml
++++ b/v2v/output_rhv_upload.ml
+@@ -177,19 +177,11 @@ See also \"OUTPUT TO RHV\" in the virt-v2v(1) manual.")
+ error (f_"nbdkit was compiled without SELinux support. You will have to recompile nbdkit with libselinux-devel installed, or else set SELinux to Permissive mode while doing the conversion.")
+ in
+
+- (* Output format/sparse must be raw/sparse. We may be able to
+- * lift this limitation in future, but it requires changes on the
+- * RHV side. See TODO file for details. XXX
+- *)
++ (* Output format must be raw. *)
+ let error_current_limitation required_param =
+ error (f_"rhv-upload: currently you must use ‘%s’. This restriction will be loosened in a future version.") required_param
+ in
+
+- let error_unless_output_alloc_sparse () =
+- if output_alloc <> Sparse then
+- error_current_limitation "-oa sparse"
+- in
+-
+ (* JSON parameters which are invariant between disks. *)
+ let json_params = [
+ "verbose", JSON.Bool (verbose ());
+@@ -242,7 +234,6 @@ object
+ error_unless_ovirtsdk4_module_available ();
+ error_unless_nbdkit_working ();
+ error_unless_nbdkit_python3_working ();
+- error_unless_output_alloc_sparse ();
+ if have_selinux then
+ error_unless_nbdkit_compiled_with_selinux ()
+
+diff --git a/v2v/rhv-upload-plugin.py b/v2v/rhv-upload-plugin.py
+index 4fad27fb8..41cb29992 100644
+--- a/v2v/rhv-upload-plugin.py
++++ b/v2v/rhv-upload-plugin.py
+@@ -139,10 +139,8 @@ def open(readonly):
+ format = disk_format,
+ initial_size = params['disk_size'],
+ provisioned_size = params['disk_size'],
+- # XXX Ignores params['output_sparse'].
+- # Handling this properly will be complex, see:
+ # https://www.redhat.com/archives/libguestfs/2018-March/msg00177.html
+- sparse = True,
++ sparse = params['output_sparse'],
+ storage_domains = [
+ types.StorageDomain(
+ name = params['output_storage'],
+diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
+index 8e3a06434..944b0fade 100644
+--- a/v2v/virt-v2v.pod
++++ b/v2v/virt-v2v.pod
+@@ -1846,12 +1846,6 @@ username is not specified then virt-v2v defaults to using
+ C which is the typical superuser account for oVirt
+ instances.
+
+-=item I<-of raw>
+-
+-Currently you must use I<-of raw> and you cannot use I<-oa preallocated>.
+-
+-These restrictions will be loosened in a future version.
+-
+ =item I<-op> F
+
+ A file containing a password to be used when connecting to the oVirt
+--
+2.20.1
+
diff --git a/SOURCES/0077-RHEL-8-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch b/SOURCES/0077-RHEL-8-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch
new file mode 100644
index 0000000..72a2b52
--- /dev/null
+++ b/SOURCES/0077-RHEL-8-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch
@@ -0,0 +1,33 @@
+From b2f6280262ec17ee7d6e66223808d432ea4f2e3f Mon Sep 17 00:00:00 2001
+From: Pino Toscano