From 5c13d37c70e2893f85c0b9422e32aafd1c67ea72 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Mar 31 2020 09:38:00 +0000 Subject: import libguestfs-1.40.2-9.el7 --- diff --git a/SOURCES/0013-v2v-rhv-upload-plugin-improve-wait-logic-after-final.patch b/SOURCES/0013-v2v-rhv-upload-plugin-improve-wait-logic-after-final.patch index 8e90601..dd7febc 100644 --- a/SOURCES/0013-v2v-rhv-upload-plugin-improve-wait-logic-after-final.patch +++ b/SOURCES/0013-v2v-rhv-upload-plugin-improve-wait-logic-after-final.patch @@ -1,4 +1,4 @@ -From 82991dd35be56cf7173f55a7152a401a0eae71ce Mon Sep 17 00:00:00 2001 +From 93e40ab489cdfd7df2cb12de07183e7df6c6c36c Mon Sep 17 00:00:00 2001 From: Daniel Erez Date: Mon, 18 Mar 2019 18:51:26 +0200 Subject: [PATCH] v2v: rhv-upload-plugin - improve wait logic after finalize diff --git a/SOURCES/0014-options-Fix-segfault-when-multiple-key-parameters-gi.patch b/SOURCES/0014-options-Fix-segfault-when-multiple-key-parameters-gi.patch deleted file mode 100644 index be5c456..0000000 --- a/SOURCES/0014-options-Fix-segfault-when-multiple-key-parameters-gi.patch +++ /dev/null @@ -1,47 +0,0 @@ -From a3b5f37553d569a5abd9ebcde05ea4c45cc52f50 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 12 Nov 2019 18:15:44 +0000 -Subject: [PATCH] options: Fix segfault when multiple --key parameters given. - -Easily reproducible using: - - $ guestfish --key dev1:key:key1 --key dev2:key:key2 - -causing this stack trace (or others depending on where the memory -corruption was caught): - - Program received signal SIGABRT, Aborted. - 0x00007ffff7905625 in raise () from /lib64/libc.so.6 - (gdb) bt - #0 0x00007ffff7905625 in raise () from /lib64/libc.so.6 - #1 0x00007ffff78ee8d9 in abort () from /lib64/libc.so.6 - #2 0x00007ffff79494af in __libc_message () from /lib64/libc.so.6 - #3 0x00007ffff7950a6c in malloc_printerr () from /lib64/libc.so.6 - #4 0x00007ffff79528d0 in _int_free () from /lib64/libc.so.6 - #5 0x00005555555bdd6e in free_key_store () - #6 0x0000555555589027 in main () - (gdb) quit - -(cherry picked from commit 8c42f772614b44a8cb974afa904ec9f518431ab2 -in libguestfs-common) ---- - common/options/keys.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/common/options/keys.c b/common/options/keys.c -index 7f689866b..f783066ff 100644 ---- a/common/options/keys.c -+++ b/common/options/keys.c -@@ -216,7 +216,8 @@ key_store_import_key (struct key_store *ks, const struct key_store_key *key) - } - assert (ks != NULL); - -- new_keys = realloc (ks->keys, sizeof (*ks->keys) + 1); -+ new_keys = realloc (ks->keys, -+ (ks->nr_keys + 1) * sizeof (struct key_store_key)); - if (!new_keys) - error (EXIT_FAILURE, errno, "realloc"); - --- -2.21.0 - diff --git a/SOURCES/0014-v2v-Allow-Windows-virtio-ISO-to-be-a-block-device-as.patch b/SOURCES/0014-v2v-Allow-Windows-virtio-ISO-to-be-a-block-device-as.patch new file mode 100644 index 0000000..cc47dc7 --- /dev/null +++ b/SOURCES/0014-v2v-Allow-Windows-virtio-ISO-to-be-a-block-device-as.patch @@ -0,0 +1,28 @@ +From 9dd17c25f1134b573e2dbf277ce111a33fc7845e Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 4 Jul 2019 15:51:25 +0100 +Subject: [PATCH] v2v: Allow Windows virtio ISO to be a block device as well as + a regular file. + +Thanks: Steven Rosenberg +(cherry picked from commit c22a8b68fe5729d3a8907b41eef287cd9f3a55c0) +--- + v2v/windows_virtio.ml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/v2v/windows_virtio.ml b/v2v/windows_virtio.ml +index 59b0bf493..56c7a6757 100644 +--- a/v2v/windows_virtio.ml ++++ b/v2v/windows_virtio.ml +@@ -338,7 +338,7 @@ and copy_from_virtio_win g inspect srcdir destdir filter missing = + ) paths + ) + ) +- else if is_regular_file virtio_win then ( ++ else if is_regular_file virtio_win || is_block_device virtio_win then ( + debug "windows: copy_from_virtio_win: guest tools source ISO %s" virtio_win; + + try +-- +2.21.0 + diff --git a/SOURCES/0015-RHEL-7-Remove-libguestfs-live-RHBZ-798980.patch b/SOURCES/0015-RHEL-7-Remove-libguestfs-live-RHBZ-798980.patch deleted file mode 100644 index 959f54c..0000000 --- a/SOURCES/0015-RHEL-7-Remove-libguestfs-live-RHBZ-798980.patch +++ /dev/null @@ -1,38 +0,0 @@ -From e2a305b43c5fd3102ddae6ea926a169953e34a7b Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 21 Dec 2012 15:50:11 +0000 -Subject: [PATCH] RHEL 7: Remove libguestfs live (RHBZ#798980). - -This isn't supported in RHEL 7. ---- - lib/launch-unix.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/lib/launch-unix.c b/lib/launch-unix.c -index 4794a7b13..993b83601 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/0015-v2v-Set-DISKTYPE-2-in-RHV-and-VDSM-meta-files-RHBZ-1.patch b/SOURCES/0015-v2v-Set-DISKTYPE-2-in-RHV-and-VDSM-meta-files-RHBZ-1.patch new file mode 100644 index 0000000..c5d539a --- /dev/null +++ b/SOURCES/0015-v2v-Set-DISKTYPE-2-in-RHV-and-VDSM-meta-files-RHBZ-1.patch @@ -0,0 +1,46 @@ +From 893336672393500172bf750d05980a94f489b2f6 Mon Sep 17 00:00:00 2001 +From: Nir Soffer +Date: Mon, 2 Sep 2019 17:45:13 +0100 +Subject: [PATCH] v2v: Set DISKTYPE=2 in RHV and VDSM meta files + (RHBZ#1746699). + +Added in virt-p2v commit: + + commit e83b6f50af34ce650063ecc520bfabab400e8e73 + Author: Matthew Booth + Date: Fri Mar 26 09:40:20 2010 +0000 + + Add export to RHEV + + Allow guests to be written to a RHEV NFS export storage domain. + + Add 'rhev' output method and -osd command-line option. + Example command line: + + virt-v2v -f virt-v2v.conf -ic 'esx://yellow.rhev.marston/' \ + -o rhev -osd blue:/export/export RHEL3-32 + + This will connect to an ESX server and write the guest 'RHEL3-32' to + blue:/export/export, which is a pre-initialised RHEV export storage domain. + +(cherry picked from commit fcfdbc9420b07e3003df38481afb9ccd22045e1a) +--- + v2v/create_ovf.ml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/v2v/create_ovf.ml b/v2v/create_ovf.ml +index 91ff5198d..9aad5dd15 100644 +--- a/v2v/create_ovf.ml ++++ b/v2v/create_ovf.ml +@@ -501,7 +501,7 @@ let create_meta_files output_alloc sd_uuid image_uuids overlays = + bpf "CTIME=%.0f\n" time; + bpf "MTIME=%.0f\n" time; + bpf "IMAGE=%s\n" image_uuid; +- bpf "DISKTYPE=1\n"; ++ bpf "DISKTYPE=2\n"; + bpf "PUUID=00000000-0000-0000-0000-000000000000\n"; + bpf "LEGALITY=LEGAL\n"; + bpf "POOL_UUID=\n"; +-- +2.21.0 + diff --git a/SOURCES/0016-RHEL-7-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch b/SOURCES/0016-RHEL-7-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch deleted file mode 100644 index dfae1f5..0000000 --- a/SOURCES/0016-RHEL-7-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch +++ /dev/null @@ -1,372 +0,0 @@ -From 4b5967ab0a4c38972d03e855afd0ef9ee53b1457 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 18 Jul 2013 18:31:53 +0100 -Subject: [PATCH] RHEL 7: 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 0067d7b7b..e9351eadc 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 5d1c222db..a9b40be25 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 7f1c60b30..f45e7124d 100644 ---- a/docs/C_SOURCE_FILES -+++ b/docs/C_SOURCE_FILES -@@ -71,7 +71,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 7b6568b90..f4f0d0ab6 100644 ---- a/generator/actions_core.ml -+++ b/generator/actions_core.ml -@@ -6167,27 +6167,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 efa8c5d21..3fd365d28 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 067f861a9..7afe83c59 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 79f4b8c56..b99333d0d 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 -@@ -291,7 +290,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/0016-v2v-Fix-default-graphics-driver-for-SUSE-guests.patch b/SOURCES/0016-v2v-Fix-default-graphics-driver-for-SUSE-guests.patch new file mode 100644 index 0000000..a1cecfa --- /dev/null +++ b/SOURCES/0016-v2v-Fix-default-graphics-driver-for-SUSE-guests.patch @@ -0,0 +1,40 @@ +From 671a0fcc1ee68c178852fbed9a44e123ccf9b73c Mon Sep 17 00:00:00 2001 +From: Mike Latimer +Date: Mon, 25 Mar 2019 14:38:00 +0000 +Subject: [PATCH] v2v: Fix default graphics driver for SUSE guests. + +See discussion in this upstream thread: +https://www.redhat.com/archives/libguestfs/2019-February/thread.html#00047 + +Thanks: Mike Latimer, Pino Toscano. +(cherry picked from commit 612f170e6062f2ff74643b6096b7e0765b52cfbd) +--- + v2v/convert_linux.ml | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/v2v/convert_linux.ml b/v2v/convert_linux.ml +index b4b2f24c4..f9e811c8d 100644 +--- a/v2v/convert_linux.ml ++++ b/v2v/convert_linux.ml +@@ -104,7 +104,7 @@ let convert (g : G.guestfs) inspect source output rcaps = + + let video = + match rcaps.rcaps_video with +- | None -> get_display_driver () ++ | None -> QXL + | Some video -> video in + + let block_type = +@@ -783,9 +783,6 @@ let convert (g : G.guestfs) inspect source output rcaps = + else + true + +- and get_display_driver () = +- if family = `SUSE_family then Cirrus else QXL +- + and configure_display_driver video = + let video_driver = match video with QXL -> "qxl" | Cirrus -> "cirrus" in + +-- +2.21.0 + diff --git a/SOURCES/0017-RHEL-7-Disable-unsupported-remote-drive-protocols-RH.patch b/SOURCES/0017-RHEL-7-Disable-unsupported-remote-drive-protocols-RH.patch deleted file mode 100644 index fb25889..0000000 --- a/SOURCES/0017-RHEL-7-Disable-unsupported-remote-drive-protocols-RH.patch +++ /dev/null @@ -1,611 +0,0 @@ -From 53062071eb82372eb2ab363392d30e0fa157801f Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 29 Jul 2013 14:47:56 +0100 -Subject: [PATCH] RHEL 7: 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 7. - -In RHEL 7.2: rbd (Ceph) support was enabled. ---- - 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 06644c5b8..15e20c427 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 - -@@ -1144,12 +1144,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. - -@@ -1159,40 +1159,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> -@@ -1227,35 +1193,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 f4f0d0ab6..eb82c21b0 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..ba5d07ed0 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 7 */ - 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 7 */ - - 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 7 */ - 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 7 */ - - /** - * 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 7 */ - 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 7 */ - 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 7 */ - 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 7 */ - else { - error (g, _("unknown protocol ‘%s’"), protocol); - drv = NULL; /*FALLTHROUGH*/ -diff --git a/lib/guestfs.pod b/lib/guestfs.pod -index 53cece2da..6d61759c0 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 e49c69b43..9b1abc4ec 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: Tue, 12 Nov 2019 18:15:44 +0000 +Subject: [PATCH] options: Fix segfault when multiple --key parameters given. + +Easily reproducible using: + + $ guestfish --key dev1:key:key1 --key dev2:key:key2 + +causing this stack trace (or others depending on where the memory +corruption was caught): + + Program received signal SIGABRT, Aborted. + 0x00007ffff7905625 in raise () from /lib64/libc.so.6 + (gdb) bt + #0 0x00007ffff7905625 in raise () from /lib64/libc.so.6 + #1 0x00007ffff78ee8d9 in abort () from /lib64/libc.so.6 + #2 0x00007ffff79494af in __libc_message () from /lib64/libc.so.6 + #3 0x00007ffff7950a6c in malloc_printerr () from /lib64/libc.so.6 + #4 0x00007ffff79528d0 in _int_free () from /lib64/libc.so.6 + #5 0x00005555555bdd6e in free_key_store () + #6 0x0000555555589027 in main () + (gdb) quit + +(cherry picked from commit 8c42f772614b44a8cb974afa904ec9f518431ab2 +in libguestfs-common) +--- + common/options/keys.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/common/options/keys.c b/common/options/keys.c +index 7f689866b..f783066ff 100644 +--- a/common/options/keys.c ++++ b/common/options/keys.c +@@ -216,7 +216,8 @@ key_store_import_key (struct key_store *ks, const struct key_store_key *key) + } + assert (ks != NULL); + +- new_keys = realloc (ks->keys, sizeof (*ks->keys) + 1); ++ new_keys = realloc (ks->keys, ++ (ks->nr_keys + 1) * sizeof (struct key_store_key)); + if (!new_keys) + error (EXIT_FAILURE, errno, "realloc"); + +-- +2.21.0 + diff --git a/SOURCES/0018-RHEL-7-Remove-User-Mode-Linux-RHBZ-1144197.patch b/SOURCES/0018-RHEL-7-Remove-User-Mode-Linux-RHBZ-1144197.patch deleted file mode 100644 index 56a2957..0000000 --- a/SOURCES/0018-RHEL-7-Remove-User-Mode-Linux-RHBZ-1144197.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 781b0af000fa8e67d550b7baa64e9b515a8f1baf Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 19 Sep 2014 13:38:20 +0100 -Subject: [PATCH] RHEL 7: Remove User-Mode Linux (RHBZ#1144197). - -This isn't supported in RHEL 7. ---- - lib/launch-uml.c | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/lib/launch-uml.c b/lib/launch-uml.c -index da20c17d9..a5e0e8179 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/0018-RHEL-7-Remove-libguestfs-live-RHBZ-798980.patch b/SOURCES/0018-RHEL-7-Remove-libguestfs-live-RHBZ-798980.patch new file mode 100644 index 0000000..f179eae --- /dev/null +++ b/SOURCES/0018-RHEL-7-Remove-libguestfs-live-RHBZ-798980.patch @@ -0,0 +1,38 @@ +From d1addddd0ef341d111cd485cdce68f57c9c857a3 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 21 Dec 2012 15:50:11 +0000 +Subject: [PATCH] RHEL 7: Remove libguestfs live (RHBZ#798980). + +This isn't supported in RHEL 7. +--- + lib/launch-unix.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/lib/launch-unix.c b/lib/launch-unix.c +index 4794a7b13..993b83601 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/0019-RHEL-7-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch b/SOURCES/0019-RHEL-7-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch new file mode 100644 index 0000000..c2976d4 --- /dev/null +++ b/SOURCES/0019-RHEL-7-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch @@ -0,0 +1,372 @@ +From 7c3638f8efda60f0c483fbc8149e6b27a55fdd96 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 18 Jul 2013 18:31:53 +0100 +Subject: [PATCH] RHEL 7: 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 0067d7b7b..e9351eadc 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 5d1c222db..a9b40be25 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 7f1c60b30..f45e7124d 100644 +--- a/docs/C_SOURCE_FILES ++++ b/docs/C_SOURCE_FILES +@@ -71,7 +71,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 7b6568b90..f4f0d0ab6 100644 +--- a/generator/actions_core.ml ++++ b/generator/actions_core.ml +@@ -6167,27 +6167,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 efa8c5d21..3fd365d28 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 067f861a9..7afe83c59 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 79f4b8c56..b99333d0d 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 +@@ -291,7 +290,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/0019-RHEL-7-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch b/SOURCES/0019-RHEL-7-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch deleted file mode 100644 index 9aa9238..0000000 --- a/SOURCES/0019-RHEL-7-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch +++ /dev/null @@ -1,33 +0,0 @@ -From c884ca521d8b351bf3dd435fbe17a2f5512c5ead Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Sun, 28 Sep 2014 19:14:43 +0100 -Subject: [PATCH] RHEL 7: v2v: Select correct qemu binary for -o qemu mode - (RHBZ#1147313). - -RHEL 7 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 1f6798aaf..8665d7b5c 100644 ---- a/v2v/output_qemu.ml -+++ b/v2v/output_qemu.ml -@@ -81,7 +81,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/0020-RHEL-7-Disable-unsupported-remote-drive-protocols-RH.patch b/SOURCES/0020-RHEL-7-Disable-unsupported-remote-drive-protocols-RH.patch new file mode 100644 index 0000000..2694ad7 --- /dev/null +++ b/SOURCES/0020-RHEL-7-Disable-unsupported-remote-drive-protocols-RH.patch @@ -0,0 +1,611 @@ +From 3ae9471d6b1f976e19d524f7ee6d9c532b414d5e Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 29 Jul 2013 14:47:56 +0100 +Subject: [PATCH] RHEL 7: 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 7. + +In RHEL 7.2: rbd (Ceph) support was enabled. +--- + 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 06644c5b8..15e20c427 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 + +@@ -1144,12 +1144,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. + +@@ -1159,40 +1159,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> +@@ -1227,35 +1193,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 f4f0d0ab6..eb82c21b0 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..ba5d07ed0 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 7 */ + 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 7 */ + + 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 7 */ + 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 7 */ + + /** + * 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 7 */ + 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 7 */ + 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 7 */ + 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 7 */ + else { + error (g, _("unknown protocol ‘%s’"), protocol); + drv = NULL; /*FALLTHROUGH*/ +diff --git a/lib/guestfs.pod b/lib/guestfs.pod +index 53cece2da..6d61759c0 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 e49c69b43..9b1abc4ec 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: Tue, 30 Sep 2014 10:50:27 +0100 -Subject: [PATCH] RHEL 7: v2v: Disable the --qemu-boot option (RHBZ#1147313). - -This cannot work because there is no Gtk or SDL output mode -in RHEL 7's qemu-kvm. - -In addition you will have to edit the -display option in the -qemu script. ---- - v2v/cmdline.ml | 3 ++- - v2v/virt-v2v-output-local.pod | 6 ++---- - v2v/virt-v2v.pod | 13 ------------- - 3 files changed, 4 insertions(+), 18 deletions(-) - -diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml -index 46f6910d0..aa89428c5 100644 ---- a/v2v/cmdline.ml -+++ b/v2v/cmdline.ml -@@ -240,7 +240,6 @@ let parse_cmdline () = - s_"Estimate size of source and stop"; - [ 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"), -@@ -588,6 +587,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-output-local.pod b/v2v/virt-v2v-output-local.pod -index 7427b1ed7..455d51fba 100644 ---- a/v2v/virt-v2v-output-local.pod -+++ b/v2v/virt-v2v-output-local.pod -@@ -9,7 +9,7 @@ or libvirt - - virt-v2v [-i* options] -o local -os DIRECTORY - -- virt-v2v [-i* options] -o qemu -os DIRECTORY [--qemu-boot] -+ virt-v2v [-i* options] -o qemu -os DIRECTORY - - virt-v2v [-i* options] -o null - -@@ -47,12 +47,10 @@ where C is the guest name. - - =item B<-o qemu -os> C - --=item B<-o qemu -os> C B<--qemu-boot> -- - This converts the guest to files in C. Unlike I<-o local> - above, a shell script is created which contains the raw qemu command - you would need to boot the guest. However the shell script is not --run, I you also add the I<--qemu-boot> option. -+run. - - =item B<-o null> - -diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod -index cf9464834..0e9627829 100644 ---- a/v2v/virt-v2v.pod -+++ b/v2v/virt-v2v.pod -@@ -142,11 +142,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 OPTIONS - - =over 4 -@@ -480,9 +475,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>. -@@ -758,11 +750,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/0021-RHEL-7-Disable-alternate-Augeas-lenses.patch b/SOURCES/0021-RHEL-7-Disable-alternate-Augeas-lenses.patch deleted file mode 100644 index 4ed7059..0000000 --- a/SOURCES/0021-RHEL-7-Disable-alternate-Augeas-lenses.patch +++ /dev/null @@ -1,60 +0,0 @@ -From ac0e2a2137ff807b0707262daad3d391eddc02dc Mon Sep 17 00:00:00 2001 -From: Pino Toscano -Date: Fri, 24 Oct 2014 16:33:50 +0100 -Subject: [PATCH] RHEL 7: Disable alternate Augeas lenses. - -These are included in the RHEL 7.1 augeas package, and therefore -not required in RHEL. - -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 fc424b1d0..5efc5c036 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..003fcd313 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 7 */ -+#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/0021-RHEL-7-Remove-User-Mode-Linux-RHBZ-1144197.patch b/SOURCES/0021-RHEL-7-Remove-User-Mode-Linux-RHBZ-1144197.patch new file mode 100644 index 0000000..c4e07f6 --- /dev/null +++ b/SOURCES/0021-RHEL-7-Remove-User-Mode-Linux-RHBZ-1144197.patch @@ -0,0 +1,72 @@ +From bfdcdc5b1b16c96e95986388a8a82f86ca0df7e4 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 19 Sep 2014 13:38:20 +0100 +Subject: [PATCH] RHEL 7: Remove User-Mode Linux (RHBZ#1144197). + +This isn't supported in RHEL 7. +--- + lib/launch-uml.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/lib/launch-uml.c b/lib/launch-uml.c +index da20c17d9..a5e0e8179 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/0022-RHEL-7-Fix-list-of-supported-sound-cards-to-match-RH.patch b/SOURCES/0022-RHEL-7-Fix-list-of-supported-sound-cards-to-match-RH.patch deleted file mode 100644 index b60696b..0000000 --- a/SOURCES/0022-RHEL-7-Fix-list-of-supported-sound-cards-to-match-RH.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 82a2d6838f20e9cd48124e615438bfb65fb69fe4 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 24 Apr 2015 09:45:41 -0400 -Subject: [PATCH] RHEL 7: 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 74b501f81..21e9c9c15 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/0022-RHEL-7-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch b/SOURCES/0022-RHEL-7-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch new file mode 100644 index 0000000..b6fe447 --- /dev/null +++ b/SOURCES/0022-RHEL-7-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch @@ -0,0 +1,33 @@ +From 90a972c95251c6ae47a33c4d3703fcbdfbb910f7 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Sun, 28 Sep 2014 19:14:43 +0100 +Subject: [PATCH] RHEL 7: v2v: Select correct qemu binary for -o qemu mode + (RHBZ#1147313). + +RHEL 7 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 1f6798aaf..8665d7b5c 100644 +--- a/v2v/output_qemu.ml ++++ b/v2v/output_qemu.ml +@@ -81,7 +81,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/0023-RHEL-7-Reject-use-of-libguestfs-winsupport-features-.patch b/SOURCES/0023-RHEL-7-Reject-use-of-libguestfs-winsupport-features-.patch deleted file mode 100644 index 4a7df5f..0000000 --- a/SOURCES/0023-RHEL-7-Reject-use-of-libguestfs-winsupport-features-.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 3bdb0c87cef6d296182d0f0c6c0b72a3c9cbab28 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 7 Jul 2015 09:28:03 -0400 -Subject: [PATCH] RHEL 7: Reject use of libguestfs-winsupport features except - for virt-* tools (RHBZ#1240276). - ---- - generator/c.ml | 17 +++++++++++++++++ - 1 file changed, 17 insertions(+) - -diff --git a/generator/c.ml b/generator/c.ml -index 86f7d89a3..9d7c491c2 100644 ---- a/generator/c.ml -+++ b/generator/c.ml -@@ -1826,12 +1826,29 @@ and generate_client_actions actions () = - pr " const uint64_t progress_hint = 0;\n"; - - pr "\n"; -+ - enter_event name; - check_null_strings c_name style; - reject_unknown_optargs c_name style; - check_args_validity c_name style; - trace_call name c_name style; - -+ (* RHEL 7 *) -+ 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/0023-RHEL-7-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch b/SOURCES/0023-RHEL-7-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch new file mode 100644 index 0000000..1a0d544 --- /dev/null +++ b/SOURCES/0023-RHEL-7-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch @@ -0,0 +1,105 @@ +From 0ebcba77cba8f01d511e13428d627f16c0635701 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 30 Sep 2014 10:50:27 +0100 +Subject: [PATCH] RHEL 7: v2v: Disable the --qemu-boot option (RHBZ#1147313). + +This cannot work because there is no Gtk or SDL output mode +in RHEL 7's qemu-kvm. + +In addition you will have to edit the -display option in the +qemu script. +--- + v2v/cmdline.ml | 3 ++- + v2v/virt-v2v-output-local.pod | 6 ++---- + v2v/virt-v2v.pod | 13 ------------- + 3 files changed, 4 insertions(+), 18 deletions(-) + +diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml +index 46f6910d0..aa89428c5 100644 +--- a/v2v/cmdline.ml ++++ b/v2v/cmdline.ml +@@ -240,7 +240,6 @@ let parse_cmdline () = + s_"Estimate size of source and stop"; + [ 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"), +@@ -588,6 +587,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-output-local.pod b/v2v/virt-v2v-output-local.pod +index 7427b1ed7..455d51fba 100644 +--- a/v2v/virt-v2v-output-local.pod ++++ b/v2v/virt-v2v-output-local.pod +@@ -9,7 +9,7 @@ or libvirt + + virt-v2v [-i* options] -o local -os DIRECTORY + +- virt-v2v [-i* options] -o qemu -os DIRECTORY [--qemu-boot] ++ virt-v2v [-i* options] -o qemu -os DIRECTORY + + virt-v2v [-i* options] -o null + +@@ -47,12 +47,10 @@ where C is the guest name. + + =item B<-o qemu -os> C + +-=item B<-o qemu -os> C B<--qemu-boot> +- + This converts the guest to files in C. Unlike I<-o local> + above, a shell script is created which contains the raw qemu command + you would need to boot the guest. However the shell script is not +-run, I you also add the I<--qemu-boot> option. ++run. + + =item B<-o null> + +diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod +index cf9464834..0e9627829 100644 +--- a/v2v/virt-v2v.pod ++++ b/v2v/virt-v2v.pod +@@ -142,11 +142,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 OPTIONS + + =over 4 +@@ -480,9 +475,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>. +@@ -758,11 +750,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/0024-RHEL-7-Disable-alternate-Augeas-lenses.patch b/SOURCES/0024-RHEL-7-Disable-alternate-Augeas-lenses.patch new file mode 100644 index 0000000..fa52124 --- /dev/null +++ b/SOURCES/0024-RHEL-7-Disable-alternate-Augeas-lenses.patch @@ -0,0 +1,60 @@ +From 67a5b36a48067002c5f4a101612b717dab010909 Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Fri, 24 Oct 2014 16:33:50 +0100 +Subject: [PATCH] RHEL 7: Disable alternate Augeas lenses. + +These are included in the RHEL 7.1 augeas package, and therefore +not required in RHEL. + +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 fc424b1d0..5efc5c036 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..003fcd313 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 7 */ ++#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/0024-RHEL-7-daemon-umount-all-Hack-to-avoid-umount-sysroo.patch b/SOURCES/0024-RHEL-7-daemon-umount-all-Hack-to-avoid-umount-sysroo.patch deleted file mode 100644 index 0b33163..0000000 --- a/SOURCES/0024-RHEL-7-daemon-umount-all-Hack-to-avoid-umount-sysroo.patch +++ /dev/null @@ -1,40 +0,0 @@ -From a257cb6739b9fcd0a2d611de66454132134da172 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 23 Jul 2015 18:15:36 -0400 -Subject: [PATCH] RHEL 7: daemon: umount-all: Hack to avoid umount: /sysroot: - target is busy (RHBZ#1246032). - -This bug is not properly understood (although readily reproducible). -However this hack makes it go away for now. - -https://bugzilla.redhat.com/show_bug.cgi?id=1246032 ---- - daemon/mount.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/daemon/mount.c b/daemon/mount.c -index 61ce64449..b038a89c3 100644 ---- a/daemon/mount.c -+++ b/daemon/mount.c -@@ -28,6 +28,8 @@ - #include - #include - -+#include "ignore-value.h" -+ - #include "daemon.h" - #include "actions.h" - -@@ -306,6 +308,9 @@ do_umount_all (void) - if (mounts.size > 0) - qsort (mounts.argv, mounts.size, sizeof (char *), compare_longest_first); - -+ /* Hack to work around RHBZ#1246032. */ -+ ignore_value (system ("lsof /sysroot")); -+ - /* Unmount them. */ - for (i = 0; i < mounts.size; ++i) { - CLEANUP_FREE char *err = NULL; --- -2.21.0 - diff --git a/SOURCES/0025-RHEL-7-Fix-list-of-supported-sound-cards-to-match-RH.patch b/SOURCES/0025-RHEL-7-Fix-list-of-supported-sound-cards-to-match-RH.patch new file mode 100644 index 0000000..f53d7aa --- /dev/null +++ b/SOURCES/0025-RHEL-7-Fix-list-of-supported-sound-cards-to-match-RH.patch @@ -0,0 +1,34 @@ +From de0b9f2740712a6d792eb820aacf6efe0bbc1c67 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 24 Apr 2015 09:45:41 -0400 +Subject: [PATCH] RHEL 7: 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 74b501f81..21e9c9c15 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/0025-RHEL-7-Fix-tests-for-libguestfs-winsupport-7.2.patch b/SOURCES/0025-RHEL-7-Fix-tests-for-libguestfs-winsupport-7.2.patch deleted file mode 100644 index 319eaa7..0000000 --- a/SOURCES/0025-RHEL-7-Fix-tests-for-libguestfs-winsupport-7.2.patch +++ /dev/null @@ -1,93 +0,0 @@ -From 4f137a2c4e38fb8912969713fd9bcbed9c903c82 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Sun, 30 Aug 2015 03:21:57 -0400 -Subject: [PATCH] RHEL 7: Fix tests for libguestfs-winsupport 7.2. - -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 8676b5ac0..1a88d9fc9 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/0026-RHEL-7-All-qemu-kvm-in-RHEL-7-supports-discard-of-qc.patch b/SOURCES/0026-RHEL-7-All-qemu-kvm-in-RHEL-7-supports-discard-of-qc.patch deleted file mode 100644 index 5c39dd0..0000000 --- a/SOURCES/0026-RHEL-7-All-qemu-kvm-in-RHEL-7-supports-discard-of-qc.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 71a8005191f04c2bbfda75403f5acd4425274a95 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Wed, 27 May 2015 10:03:00 -0400 -Subject: [PATCH] RHEL 7: All qemu-kvm in RHEL 7 supports discard of qcow2 - (RHBZ#1225467). - -For rationale behind this, see: - - https://bugzilla.redhat.com/show_bug.cgi?id=1225467#c2 ---- - lib/qemu.c | 12 ++---------- - 1 file changed, 2 insertions(+), 10 deletions(-) - -diff --git a/lib/qemu.c b/lib/qemu.c -index 10bb83105..26b63c3b6 100644 ---- a/lib/qemu.c -+++ b/lib/qemu.c -@@ -988,10 +988,6 @@ guestfs_int_discard_possible (guestfs_h *g, struct drive *drv, - * discard option on -drive at all. - */ - bool qemu15 = guestfs_int_version_ge (qemu_version, 1, 5, 0); -- /* qemu >= 1.6. This was the first version that supported unmap on -- * qcow2 backing files. -- */ -- bool qemu16 = guestfs_int_version_ge (qemu_version, 1, 6, 0); - - if (!qemu15) - NOT_SUPPORTED (g, false, -@@ -1016,12 +1012,8 @@ guestfs_int_discard_possible (guestfs_h *g, struct drive *drv, - } - else if (STREQ (drv->src.format, "raw")) - /* OK */ ; -- else if (STREQ (drv->src.format, "qcow2")) { -- if (!qemu16) -- NOT_SUPPORTED (g, false, -- _("discard cannot be enabled on this drive: " -- "qemu < 1.6 cannot do discard on qcow2 files")); -- } -+ else if (STREQ (drv->src.format, "qcow2")) -+ /* OK */ ; - else { - /* It's possible in future other formats will support discard, but - * currently (qemu 1.7) none of them do. --- -2.21.0 - diff --git a/SOURCES/0026-RHEL-7-Reject-use-of-libguestfs-winsupport-features-.patch b/SOURCES/0026-RHEL-7-Reject-use-of-libguestfs-winsupport-features-.patch new file mode 100644 index 0000000..0e2a14c --- /dev/null +++ b/SOURCES/0026-RHEL-7-Reject-use-of-libguestfs-winsupport-features-.patch @@ -0,0 +1,47 @@ +From bde317aebdf229935880ab33e222eea325e7fe8c Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 7 Jul 2015 09:28:03 -0400 +Subject: [PATCH] RHEL 7: Reject use of libguestfs-winsupport features except + for virt-* tools (RHBZ#1240276). + +--- + generator/c.ml | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/generator/c.ml b/generator/c.ml +index 86f7d89a3..9d7c491c2 100644 +--- a/generator/c.ml ++++ b/generator/c.ml +@@ -1826,12 +1826,29 @@ and generate_client_actions actions () = + pr " const uint64_t progress_hint = 0;\n"; + + pr "\n"; ++ + enter_event name; + check_null_strings c_name style; + reject_unknown_optargs c_name style; + check_args_validity c_name style; + trace_call name c_name style; + ++ (* RHEL 7 *) ++ 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/0027-RHEL-7-daemon-umount-all-Hack-to-avoid-umount-sysroo.patch b/SOURCES/0027-RHEL-7-daemon-umount-all-Hack-to-avoid-umount-sysroo.patch new file mode 100644 index 0000000..2126f54 --- /dev/null +++ b/SOURCES/0027-RHEL-7-daemon-umount-all-Hack-to-avoid-umount-sysroo.patch @@ -0,0 +1,40 @@ +From 5e9b9fbba8b3f98cdf0abb0dbf8b30e12cc70709 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 23 Jul 2015 18:15:36 -0400 +Subject: [PATCH] RHEL 7: daemon: umount-all: Hack to avoid umount: /sysroot: + target is busy (RHBZ#1246032). + +This bug is not properly understood (although readily reproducible). +However this hack makes it go away for now. + +https://bugzilla.redhat.com/show_bug.cgi?id=1246032 +--- + daemon/mount.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/daemon/mount.c b/daemon/mount.c +index 61ce64449..b038a89c3 100644 +--- a/daemon/mount.c ++++ b/daemon/mount.c +@@ -28,6 +28,8 @@ + #include + #include + ++#include "ignore-value.h" ++ + #include "daemon.h" + #include "actions.h" + +@@ -306,6 +308,9 @@ do_umount_all (void) + if (mounts.size > 0) + qsort (mounts.argv, mounts.size, sizeof (char *), compare_longest_first); + ++ /* Hack to work around RHBZ#1246032. */ ++ ignore_value (system ("lsof /sysroot")); ++ + /* Unmount them. */ + for (i = 0; i < mounts.size; ++i) { + CLEANUP_FREE char *err = NULL; +-- +2.21.0 + diff --git a/SOURCES/0027-RHEL-7-tests-Disable-daemon-tests-that-require-the-u.patch b/SOURCES/0027-RHEL-7-tests-Disable-daemon-tests-that-require-the-u.patch deleted file mode 100644 index e1abd1e..0000000 --- a/SOURCES/0027-RHEL-7-tests-Disable-daemon-tests-that-require-the-u.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 2b669a216ba0ef65b6e54946dfbbff7193e70620 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 21 Sep 2015 13:12:43 -0400 -Subject: [PATCH] RHEL 7: 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/0028-RHEL-7-Fix-tests-for-libguestfs-winsupport-7.2.patch b/SOURCES/0028-RHEL-7-Fix-tests-for-libguestfs-winsupport-7.2.patch new file mode 100644 index 0000000..a633d6c --- /dev/null +++ b/SOURCES/0028-RHEL-7-Fix-tests-for-libguestfs-winsupport-7.2.patch @@ -0,0 +1,93 @@ +From 67bce5071792f8199b9a32cb8cc158b4c5b9aec8 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Sun, 30 Aug 2015 03:21:57 -0400 +Subject: [PATCH] RHEL 7: Fix tests for libguestfs-winsupport 7.2. + +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 8676b5ac0..1a88d9fc9 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/0028-RHEL-7-v2v-Disable-the-virt-v2v-in-place-option.patch b/SOURCES/0028-RHEL-7-v2v-Disable-the-virt-v2v-in-place-option.patch deleted file mode 100644 index 9e193be..0000000 --- a/SOURCES/0028-RHEL-7-v2v-Disable-the-virt-v2v-in-place-option.patch +++ /dev/null @@ -1,286 +0,0 @@ -From 27a3e261a050e60b7753acebd598141a3265f810 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 14 Jan 2016 11:53:42 -0500 -Subject: [PATCH] RHEL 7: 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 | 48 +---------------- - 5 files changed, 7 insertions(+), 160 deletions(-) - delete mode 100755 v2v/test-v2v-in-place.sh - -diff --git a/v2v/Makefile.am b/v2v/Makefile.am -index 2312812fb..946170b5d 100644 ---- a/v2v/Makefile.am -+++ b/v2v/Makefile.am -@@ -457,7 +457,6 @@ if HAVE_LIBVIRT - TESTS += \ - test-v2v-cdrom.sh \ - test-v2v-floppy.sh \ -- test-v2v-in-place.sh \ - test-v2v-mac.sh \ - test-v2v-networks-and-bridges.sh \ - test-v2v-no-copy.sh \ -@@ -609,7 +608,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-mac-expected.xml \ -diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml -index aa89428c5..b7a7f9ad8 100644 ---- a/v2v/cmdline.ml -+++ b/v2v/cmdline.ml -@@ -208,8 +208,7 @@ let parse_cmdline () = - s_"Use password from file to connect to input hypervisor"; - [ 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"mac" ], Getopt.String ("mac:network|bridge:out", add_mac), - s_"Map NIC to network or bridge"; - [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), -@@ -346,7 +345,6 @@ read the man page virt-v2v(1). - pr "vddk\n"; - pr "colours-option\n"; - pr "vdsm-compat-option\n"; -- pr "in-place\n"; - pr "io/oo\n"; - pr "mac-option\n"; - List.iter (pr "input:%s\n") (Modules_list.input_modules ()); -@@ -509,6 +507,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 7"); -+ - (* 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 dfb12bb14..2e45705a3 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,\ - --ip,\ - --it,\ -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 0e9627829..fdaaecfc5 100644 ---- a/v2v/virt-v2v.pod -+++ b/v2v/virt-v2v.pod -@@ -8,10 +8,6 @@ virt-v2v - Convert a guest to use KVM - [-o mode] [other -o* options] - [guest|filename] - -- virt-v2v --in-place -- [-i mode] [other -i* options] -- [guest|filename] -- - =head1 DESCRIPTION - - Virt-v2v converts a single guest from a foreign hypervisor to run on -@@ -39,9 +35,6 @@ these sides of virt-v2v are documented separately in this manual. - - Virt-v2v normally copies from the input to the output, called "copying - mode". In this case the source guest is always left unchanged. --In-place conversion (I<--in-place>) only uses the I<-i*> options and --modifies the source guest in-place. (See L --below.) - - =head2 Other virt-v2v topics - -@@ -255,20 +248,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. -@@ -1270,7 +1249,7 @@ Minimum free space: 10 MB - =head3 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`" -@@ -1373,31 +1352,6 @@ that instead. - - - --=head2 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. -- - =head2 Machine readable output - - The I<--machine-readable> option can be used to make the output more --- -2.21.0 - diff --git a/SOURCES/0029-RHEL-7-All-qemu-kvm-in-RHEL-7-supports-discard-of-qc.patch b/SOURCES/0029-RHEL-7-All-qemu-kvm-in-RHEL-7-supports-discard-of-qc.patch new file mode 100644 index 0000000..95120e6 --- /dev/null +++ b/SOURCES/0029-RHEL-7-All-qemu-kvm-in-RHEL-7-supports-discard-of-qc.patch @@ -0,0 +1,46 @@ +From e652aa29e63a25cb99fcf290f4a2ff2bc121f09a Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 27 May 2015 10:03:00 -0400 +Subject: [PATCH] RHEL 7: All qemu-kvm in RHEL 7 supports discard of qcow2 + (RHBZ#1225467). + +For rationale behind this, see: + + https://bugzilla.redhat.com/show_bug.cgi?id=1225467#c2 +--- + lib/qemu.c | 12 ++---------- + 1 file changed, 2 insertions(+), 10 deletions(-) + +diff --git a/lib/qemu.c b/lib/qemu.c +index 10bb83105..26b63c3b6 100644 +--- a/lib/qemu.c ++++ b/lib/qemu.c +@@ -988,10 +988,6 @@ guestfs_int_discard_possible (guestfs_h *g, struct drive *drv, + * discard option on -drive at all. + */ + bool qemu15 = guestfs_int_version_ge (qemu_version, 1, 5, 0); +- /* qemu >= 1.6. This was the first version that supported unmap on +- * qcow2 backing files. +- */ +- bool qemu16 = guestfs_int_version_ge (qemu_version, 1, 6, 0); + + if (!qemu15) + NOT_SUPPORTED (g, false, +@@ -1016,12 +1012,8 @@ guestfs_int_discard_possible (guestfs_h *g, struct drive *drv, + } + else if (STREQ (drv->src.format, "raw")) + /* OK */ ; +- else if (STREQ (drv->src.format, "qcow2")) { +- if (!qemu16) +- NOT_SUPPORTED (g, false, +- _("discard cannot be enabled on this drive: " +- "qemu < 1.6 cannot do discard on qcow2 files")); +- } ++ else if (STREQ (drv->src.format, "qcow2")) ++ /* OK */ ; + else { + /* It's possible in future other formats will support discard, but + * currently (qemu 1.7) none of them do. +-- +2.21.0 + diff --git a/SOURCES/0029-RHEL-7-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/SOURCES/0029-RHEL-7-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch deleted file mode 100644 index 45d633b..0000000 --- a/SOURCES/0029-RHEL-7-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 56a87507ae227a28e6c135d21d07b305d1f2daaa Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 2 Mar 2017 14:21:37 +0100 -Subject: [PATCH] RHEL 7: v2v: -i disk: force VNC as display (RHBZ#1372671) - -The SDL output mode is not supported in RHEL 7'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 8321a2a8c..6bd9f43f8 100644 ---- a/v2v/input_disk.ml -+++ b/v2v/input_disk.ml -@@ -89,7 +89,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/0030-RHEL-7-tests-Disable-daemon-tests-that-require-the-u.patch b/SOURCES/0030-RHEL-7-tests-Disable-daemon-tests-that-require-the-u.patch new file mode 100644 index 0000000..b1aca06 --- /dev/null +++ b/SOURCES/0030-RHEL-7-tests-Disable-daemon-tests-that-require-the-u.patch @@ -0,0 +1,28 @@ +From 5ed05d71c9739538744fa75c6f560eb833724771 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 21 Sep 2015 13:12:43 -0400 +Subject: [PATCH] RHEL 7: 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/0030-RHEL-7-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch b/SOURCES/0030-RHEL-7-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch deleted file mode 100644 index 7b71a4b..0000000 --- a/SOURCES/0030-RHEL-7-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 183bf89bc219a8987f226fe1e13d3f6a6beba060 Mon Sep 17 00:00:00 2001 -From: Pino Toscano -Date: Wed, 8 Mar 2017 11:03:40 +0100 -Subject: [PATCH] RHEL 7: v2v: do not mention SUSE Xen hosts (RHBZ#1430203) - -They are not supported in RHEL 7. ---- - v2v/virt-v2v-input-xen.pod | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/v2v/virt-v2v-input-xen.pod b/v2v/virt-v2v-input-xen.pod -index 4bb5d2dc2..4cd8e86b4 100644 ---- a/v2v/virt-v2v-input-xen.pod -+++ b/v2v/virt-v2v-input-xen.pod -@@ -10,7 +10,7 @@ virt-v2v-input-xen - Using virt-v2v to convert guests from Xen - =head1 DESCRIPTION - - This page documents how to use L to convert guests from --RHEL 5 Xen, or SLES and OpenSUSE Xen hosts. -+RHEL 5 Xen hosts. - - =head1 INPUT FROM XEN - --- -2.21.0 - diff --git a/SOURCES/0031-RHEL-7-v2v-Disable-the-virt-v2v-in-place-option.patch b/SOURCES/0031-RHEL-7-v2v-Disable-the-virt-v2v-in-place-option.patch new file mode 100644 index 0000000..df69847 --- /dev/null +++ b/SOURCES/0031-RHEL-7-v2v-Disable-the-virt-v2v-in-place-option.patch @@ -0,0 +1,286 @@ +From 172bc9d8d9c1023485abfe1c466906caefa6cf29 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 14 Jan 2016 11:53:42 -0500 +Subject: [PATCH] RHEL 7: 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 | 48 +---------------- + 5 files changed, 7 insertions(+), 160 deletions(-) + delete mode 100755 v2v/test-v2v-in-place.sh + +diff --git a/v2v/Makefile.am b/v2v/Makefile.am +index 2312812fb..946170b5d 100644 +--- a/v2v/Makefile.am ++++ b/v2v/Makefile.am +@@ -457,7 +457,6 @@ if HAVE_LIBVIRT + TESTS += \ + test-v2v-cdrom.sh \ + test-v2v-floppy.sh \ +- test-v2v-in-place.sh \ + test-v2v-mac.sh \ + test-v2v-networks-and-bridges.sh \ + test-v2v-no-copy.sh \ +@@ -609,7 +608,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-mac-expected.xml \ +diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml +index aa89428c5..b7a7f9ad8 100644 +--- a/v2v/cmdline.ml ++++ b/v2v/cmdline.ml +@@ -208,8 +208,7 @@ let parse_cmdline () = + s_"Use password from file to connect to input hypervisor"; + [ 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"mac" ], Getopt.String ("mac:network|bridge:out", add_mac), + s_"Map NIC to network or bridge"; + [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), +@@ -346,7 +345,6 @@ read the man page virt-v2v(1). + pr "vddk\n"; + pr "colours-option\n"; + pr "vdsm-compat-option\n"; +- pr "in-place\n"; + pr "io/oo\n"; + pr "mac-option\n"; + List.iter (pr "input:%s\n") (Modules_list.input_modules ()); +@@ -509,6 +507,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 7"); ++ + (* 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 dfb12bb14..2e45705a3 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,\ + --ip,\ + --it,\ +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 0e9627829..fdaaecfc5 100644 +--- a/v2v/virt-v2v.pod ++++ b/v2v/virt-v2v.pod +@@ -8,10 +8,6 @@ virt-v2v - Convert a guest to use KVM + [-o mode] [other -o* options] + [guest|filename] + +- virt-v2v --in-place +- [-i mode] [other -i* options] +- [guest|filename] +- + =head1 DESCRIPTION + + Virt-v2v converts a single guest from a foreign hypervisor to run on +@@ -39,9 +35,6 @@ these sides of virt-v2v are documented separately in this manual. + + Virt-v2v normally copies from the input to the output, called "copying + mode". In this case the source guest is always left unchanged. +-In-place conversion (I<--in-place>) only uses the I<-i*> options and +-modifies the source guest in-place. (See L +-below.) + + =head2 Other virt-v2v topics + +@@ -255,20 +248,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. +@@ -1270,7 +1249,7 @@ Minimum free space: 10 MB + =head3 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`" +@@ -1373,31 +1352,6 @@ that instead. + + + +-=head2 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. +- + =head2 Machine readable output + + The I<--machine-readable> option can be used to make the output more +-- +2.21.0 + diff --git a/SOURCES/0031-RHEL-7-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch b/SOURCES/0031-RHEL-7-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch deleted file mode 100644 index 5169aed..0000000 --- a/SOURCES/0031-RHEL-7-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 5415d805746434a95c44033cd223ab0779095392 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 14 May 2018 10:16:58 +0100 -Subject: [PATCH] RHEL 7: 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-output-rhv.pod | 8 +------- - 3 files changed, 3 insertions(+), 20 deletions(-) - -diff --git a/v2v/output_rhv_upload.ml b/v2v/output_rhv_upload.ml -index c2a5c72c7..3d6d99008 100644 ---- a/v2v/output_rhv_upload.ml -+++ b/v2v/output_rhv_upload.ml -@@ -164,19 +164,11 @@ See also the virt-v2v-output-rhv(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 ()); -@@ -229,7 +221,6 @@ object - error_unless_ovirtsdk4_module_available (); - error_unless_nbdkit_working (); - error_unless_nbdkit_python_plugin_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 4d61a089b..a631d54d6 100644 ---- a/v2v/rhv-upload-plugin.py -+++ b/v2v/rhv-upload-plugin.py -@@ -140,10 +140,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-output-rhv.pod b/v2v/virt-v2v-output-rhv.pod -index 651f61dae..4608cac45 100644 ---- a/v2v/virt-v2v-output-rhv.pod -+++ b/v2v/virt-v2v-output-rhv.pod -@@ -5,7 +5,7 @@ virt-v2v-output-rhv - Using virt-v2v to convert guests to oVirt or RHV - =head1 SYNOPSIS - - virt-v2v [-i* options] -o rhv-upload [-oc ENGINE_URL] -os STORAGE -- [-op PASSWORD] [-of raw] -+ [-op PASSWORD] - [-oo rhv-cafile=FILE] - [-oo rhv-cluster=CLUSTER] - [-oo rhv-direct] -@@ -78,12 +78,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.21.0 - diff --git a/SOURCES/0032-RHEL-7-o-rhv-upload-Use-Python-2-instead-of-Python-3.patch b/SOURCES/0032-RHEL-7-o-rhv-upload-Use-Python-2-instead-of-Python-3.patch deleted file mode 100644 index edb3e4d..0000000 --- a/SOURCES/0032-RHEL-7-o-rhv-upload-Use-Python-2-instead-of-Python-3.patch +++ /dev/null @@ -1,283 +0,0 @@ -From ba6c173f2bb97fd9015a7aa516827e794afdd812 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 22 Jul 2019 13:32:54 +0200 -Subject: [PATCH] RHEL 7: -o rhv-upload: Use Python 2 instead of Python 3. - -[Pino: few additional bits edited by me] ---- - v2v/output_rhv_upload.ml | 2 +- - v2v/python_script.ml | 2 +- - v2v/rhv-upload-createvm.py | 20 ++++++++++++--- - v2v/rhv-upload-plugin.py | 46 +++++++++++++++++++++++------------ - v2v/rhv-upload-precheck.py | 22 +++++++++++++---- - v2v/test-v2v-python-syntax.sh | 2 +- - 6 files changed, 67 insertions(+), 27 deletions(-) - -diff --git a/v2v/output_rhv_upload.ml b/v2v/output_rhv_upload.ml -index 3d6d99008..051ce086f 100644 ---- a/v2v/output_rhv_upload.ml -+++ b/v2v/output_rhv_upload.ml -@@ -135,7 +135,7 @@ class output_rhv_upload output_alloc output_conn - error (f_"nbdkit is not new enough, you need to upgrade to nbdkit ≥ 1.1.16") - in - -- (* Check that the python3 plugin is installed and working -+ (* Check that the python plugin is installed and working - * and can load the plugin script. - *) - let error_unless_nbdkit_python_plugin_working () = -diff --git a/v2v/python_script.ml b/v2v/python_script.ml -index 3159373a1..fa052d697 100644 ---- a/v2v/python_script.ml -+++ b/v2v/python_script.ml -@@ -24,7 +24,7 @@ open Unix_utils - - open Common_gettext.Gettext - --let python = "python3" (* Defined by PEP 394 *) -+let python = "python" - - type script = { - tmpdir : string; (* Temporary directory. *) -diff --git a/v2v/rhv-upload-createvm.py b/v2v/rhv-upload-createvm.py -index 1d0e8c95d..3f2fae4c6 100644 ---- a/v2v/rhv-upload-createvm.py -+++ b/v2v/rhv-upload-createvm.py -@@ -1,5 +1,6 @@ - # -*- python -*- --# oVirt or RHV upload create VM used by ‘virt-v2v -o rhv-upload’ -+# coding: utf-8 -+# oVirt or RHV upload create VM used by 'virt-v2v -o rhv-upload' - # Copyright (C) 2018 Red Hat Inc. - # - # This program is free software; you can redistribute it and/or modify -@@ -21,8 +22,8 @@ import logging - import sys - import time - --from http.client import HTTPSConnection --from urllib.parse import urlparse -+from httplib import HTTPSConnection -+from urlparse import urlparse - - import ovirtsdk4 as sdk - import ovirtsdk4.types as types -@@ -37,8 +38,19 @@ if len(sys.argv) != 3: - raise RuntimeError("incorrect number of parameters") - - # Parameters are passed in via a JSON document. -+# https://stackoverflow.com/a/13105359 -+def byteify(input): -+ if isinstance(input, dict): -+ return {byteify(key): byteify(value) -+ for key, value in input.iteritems()} -+ elif isinstance(input, list): -+ return [byteify(element) for element in input] -+ elif isinstance(input, unicode): -+ return input.encode('utf-8') -+ else: -+ return input - with open(sys.argv[1], 'r') as fp: -- params = json.load(fp) -+ params = byteify(json.load(fp)) - - # What is passed in is a password file, read the actual password. - with open(params['output_password'], 'r') as fp: -diff --git a/v2v/rhv-upload-plugin.py b/v2v/rhv-upload-plugin.py -index a631d54d6..adace732b 100644 ---- a/v2v/rhv-upload-plugin.py -+++ b/v2v/rhv-upload-plugin.py -@@ -1,5 +1,6 @@ - # -*- python -*- --# oVirt or RHV upload nbdkit plugin used by ‘virt-v2v -o rhv-upload’ -+# coding: utf-8 -+# oVirt or RHV upload nbdkit plugin used by 'virt-v2v -o rhv-upload' - # Copyright (C) 2018 Red Hat Inc. - # - # This program is free software; you can redistribute it and/or modify -@@ -16,16 +17,17 @@ - # with this program; if not, write to the Free Software Foundation, Inc., - # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - --import builtins -+from __builtin__ import open as builtin_open - import json - import logging - import socket - import ssl - import sys - import time -+import errno - --from http.client import HTTPSConnection, HTTPConnection --from urllib.parse import urlparse -+from httplib import HTTPSConnection, HTTPConnection -+from urlparse import urlparse - - import ovirtsdk4 as sdk - import ovirtsdk4.types as types -@@ -37,14 +39,25 @@ timeout = 5*60 - # Parameters are passed in via a JSON doc from the OCaml code. - # Because this Python code ships embedded inside virt-v2v there - # is no formal API here. -+# https://stackoverflow.com/a/13105359 -+def byteify(input): -+ if isinstance(input, dict): -+ return {byteify(key): byteify(value) -+ for key, value in input.iteritems()} -+ elif isinstance(input, list): -+ return [byteify(element) for element in input] -+ elif isinstance(input, unicode): -+ return input.encode('utf-8') -+ else: -+ return input - params = None - - def config(key, value): - global params - - if key == "params": -- with builtins.open(value, 'r') as fp: -- params = json.load(fp) -+ with builtin_open(value, 'r') as fp: -+ params = byteify(json.load(fp)) - else: - raise RuntimeError("unknown configuration key '%s'" % key) - -@@ -54,13 +67,14 @@ def config_complete(): - - def debug(s): - if params['verbose']: -- print(s, file=sys.stderr) -+ sys.stderr.write(s) -+ sys.stderr.write("\n") - sys.stderr.flush() - - def find_host(connection): - """Return the current host object or None.""" - try: -- with builtins.open("/etc/vdsm/vdsm.id") as f: -+ with builtin_open("/etc/vdsm/vdsm.id") as f: - vdsm_id = f.readline().strip() - except Exception as e: - # This is most likely not an oVirt host. -@@ -111,7 +125,7 @@ def open(readonly): - username = parsed.username or "admin@internal" - - # Read the password from file. -- with builtins.open(params['output_password'], 'r') as fp: -+ with builtin_open(params['output_password'], 'r') as fp: - password = fp.read() - password = password.rstrip() - -@@ -244,7 +258,7 @@ def open(readonly): - # New imageio never needs authentication. - needs_auth = False - -- j = json.loads(data) -+ j = byteify(json.loads(data)) - can_flush = "flush" in j['features'] - can_trim = "trim" in j['features'] - can_zero = "zero" in j['features'] -@@ -369,8 +383,9 @@ def pwrite(h, buf, offset): - - try: - http.send(buf) -- except BrokenPipeError: -- pass -+ except EnvironmentError as e: -+ if e.errno != errno.EPIPE: -+ raise - - r = http.getresponse() - if r.status != 200: -@@ -432,8 +447,9 @@ def emulate_zero(h, count, offset): - http.send(buf) - count -= len(buf) - http.send(memoryview(buf)[:count]) -- except BrokenPipeError: -- pass -+ except EnvironmentError as e: -+ if e.errno != errno.EPIPE: -+ raise - - r = http.getresponse() - if r.status != 200: -@@ -540,7 +556,7 @@ def close(h): - raise RuntimeError("transfer failed: disk %s not found" % disk_id) - - # Write the disk ID file. Only do this on successful completion. -- with builtins.open(params['diskid_file'], 'w') as fp: -+ with builtin_open(params['diskid_file'], 'w') as fp: - fp.write(disk.id) - - except: -diff --git a/v2v/rhv-upload-precheck.py b/v2v/rhv-upload-precheck.py -index 2798a29dd..5b650899f 100644 ---- a/v2v/rhv-upload-precheck.py -+++ b/v2v/rhv-upload-precheck.py -@@ -1,5 +1,6 @@ - # -*- python -*- --# oVirt or RHV pre-upload checks used by ‘virt-v2v -o rhv-upload’ -+# coding: utf-8 -+# oVirt or RHV pre-upload checks used by 'virt-v2v -o rhv-upload' - # Copyright (C) 2018 Red Hat Inc. - # - # This program is free software; you can redistribute it and/or modify -@@ -21,8 +22,8 @@ import logging - import sys - import time - --from http.client import HTTPSConnection --from urllib.parse import urlparse -+from httplib import HTTPSConnection -+from urlparse import urlparse - - import ovirtsdk4 as sdk - import ovirtsdk4.types as types -@@ -36,8 +37,19 @@ if len(sys.argv) != 2: - raise RuntimeError("incorrect number of parameters") - - # Parameters are passed in via a JSON document. -+# https://stackoverflow.com/a/13105359 -+def byteify(input): -+ if isinstance(input, dict): -+ return {byteify(key): byteify(value) -+ for key, value in input.iteritems()} -+ elif isinstance(input, list): -+ return [byteify(element) for element in input] -+ elif isinstance(input, unicode): -+ return input.encode('utf-8') -+ else: -+ return input - with open(sys.argv[1], 'r') as fp: -- params = json.load(fp) -+ params = byteify(json.load(fp)) - - # What is passed in is a password file, read the actual password. - with open(params['output_password'], 'r') as fp: -@@ -67,7 +79,7 @@ vms = vms_service.list( - ) - if len(vms) > 0: - vm = vms[0] -- raise RuntimeError("VM already exists with name ‘%s’, id ‘%s’" % -+ raise RuntimeError("VM already exists with name '%s', id '%s'" % - (params['output_name'], vm.id)) - - # Otherwise everything is OK, exit with no error. -diff --git a/v2v/test-v2v-python-syntax.sh b/v2v/test-v2v-python-syntax.sh -index b167f4610..8d5924e3c 100755 ---- a/v2v/test-v2v-python-syntax.sh -+++ b/v2v/test-v2v-python-syntax.sh -@@ -25,7 +25,7 @@ skip_if_skipped - files="rhv-upload-createvm.py rhv-upload-plugin.py rhv-upload-precheck.py" - - # Base version of Python. --python=python3 -+python=python - - # Checks the files are syntactically correct, but not very much else. - for f in $files; do --- -2.21.0 - diff --git a/SOURCES/0032-RHEL-7-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/SOURCES/0032-RHEL-7-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch new file mode 100644 index 0000000..a0e3d7e --- /dev/null +++ b/SOURCES/0032-RHEL-7-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch @@ -0,0 +1,26 @@ +From c1312b5e770f6e8a7384e2fe65fd449affc49cfc Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 2 Mar 2017 14:21:37 +0100 +Subject: [PATCH] RHEL 7: v2v: -i disk: force VNC as display (RHBZ#1372671) + +The SDL output mode is not supported in RHEL 7'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 8321a2a8c..6bd9f43f8 100644 +--- a/v2v/input_disk.ml ++++ b/v2v/input_disk.ml +@@ -89,7 +89,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/0033-RHEL-7-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch b/SOURCES/0033-RHEL-7-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch new file mode 100644 index 0000000..007429f --- /dev/null +++ b/SOURCES/0033-RHEL-7-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch @@ -0,0 +1,26 @@ +From 11d40d6557941a40e878e31526aeda6e120d871c Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Wed, 8 Mar 2017 11:03:40 +0100 +Subject: [PATCH] RHEL 7: v2v: do not mention SUSE Xen hosts (RHBZ#1430203) + +They are not supported in RHEL 7. +--- + v2v/virt-v2v-input-xen.pod | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/v2v/virt-v2v-input-xen.pod b/v2v/virt-v2v-input-xen.pod +index 4bb5d2dc2..4cd8e86b4 100644 +--- a/v2v/virt-v2v-input-xen.pod ++++ b/v2v/virt-v2v-input-xen.pod +@@ -10,7 +10,7 @@ virt-v2v-input-xen - Using virt-v2v to convert guests from Xen + =head1 DESCRIPTION + + This page documents how to use L to convert guests from +-RHEL 5 Xen, or SLES and OpenSUSE Xen hosts. ++RHEL 5 Xen hosts. + + =head1 INPUT FROM XEN + +-- +2.21.0 + diff --git a/SOURCES/0033-RHEL-7-v2v-rhv-upload-Disable-Nagle-algorithm.patch b/SOURCES/0033-RHEL-7-v2v-rhv-upload-Disable-Nagle-algorithm.patch deleted file mode 100644 index efabb63..0000000 --- a/SOURCES/0033-RHEL-7-v2v-rhv-upload-Disable-Nagle-algorithm.patch +++ /dev/null @@ -1,75 +0,0 @@ -From ed1fe48ffa9382af8575ce64df67e447166f67a9 Mon Sep 17 00:00:00 2001 -From: Nir Soffer -Date: Fri, 15 Jun 2018 22:57:32 +0300 -Subject: [PATCH] RHEL 7: v2v: rhv-upload: Disable Nagle algorithm - -When sending a PUT request, the http header may be sent in the first -packet when calling con.endheaders(). When we send the first chunk, the -kernel may delay the send because the header packet was not acked yet. - -We have seen PUT requests delayed by 40 milliseconds on the server side -during virt-v2v upload to ovirt. Here is example log from current RHEL -virt-v2v version, uploading to RHV 4.2.3: - -2018-06-12 17:04:01,750 INFO (Thread-2) [images] Writing 52736 bytes -at offset 0 flush False to /path/to/image for ticket -374bec27-930d-4097-8e41-e4bc23324eb0 - -2018-06-12 17:04:01,790 INFO (Thread-2) [directio] Operation stats: - - -The server spent 40 milliseconds reading 52736 bytes form -rhv_upload_plugin running on the same host. - -This issue was fixed in python 3.5 by using the TCP_NO_DELAY option -after connecting[1]. I backported this change from python 3.5. - -I tested the same change using imageio example upload script. With this -change and with optimized PATCH requests, upload time of 4G sparse image -was reduced from 7 minutes to 1 minute. - -See this ovirt patch for more details: -https://gerrit.ovirt.org/#/c/92276/ - -This change is needed only for python 2. - -[1] https://bugs.python.org/issue23302 ---- - v2v/rhv-upload-plugin.py | 14 +++++++++++++- - 1 file changed, 13 insertions(+), 1 deletion(-) - -diff --git a/v2v/rhv-upload-plugin.py b/v2v/rhv-upload-plugin.py -index adace732b..8f13ce1b2 100644 ---- a/v2v/rhv-upload-plugin.py -+++ b/v2v/rhv-upload-plugin.py -@@ -26,7 +26,7 @@ import sys - import time - import errno - --from httplib import HTTPSConnection, HTTPConnection -+from httplib import HTTPSConnection as _HTTPSConnection, HTTPConnection - from urlparse import urlparse - - import ovirtsdk4 as sdk -@@ -52,6 +52,18 @@ def byteify(input): - return input - params = None - -+class HTTPSConnection(_HTTPSConnection): -+ def connect(self): -+ """ -+ Using TCP_NO_DELAY avoids delays when sending small payload, such as -+ ovirt PATCH requests. -+ -+ This issue was fixed in python 3.5, see: -+ https://bugs.python.org/issue23302 -+ """ -+ _HTTPSConnection.connect(self) -+ self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) -+ - def config(key, value): - global params - --- -2.21.0 - diff --git a/SOURCES/0034-RHEL-7-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch b/SOURCES/0034-RHEL-7-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch deleted file mode 100644 index 524f4f6..0000000 --- a/SOURCES/0034-RHEL-7-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 9bf3ad431294632d0cc97525ca2df7c2ab6c4090 Mon Sep 17 00:00:00 2001 -From: Pino Toscano -Date: Thu, 19 Jul 2018 13:30:17 +0200 -Subject: [PATCH] RHEL 7: p2v: ignore 'rhv-upload' driver (RHBZ#1590220) - -The 'rhv-upload' output mode requires few options, and virt-p2v does not -have the GUI bits for specifying them. ---- - p2v/ssh.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/p2v/ssh.c b/p2v/ssh.c -index c8528033d..8aac2685d 100644 ---- a/p2v/ssh.c -+++ b/p2v/ssh.c -@@ -1021,8 +1021,12 @@ add_input_driver (const char *name, size_t len) - static void - add_output_driver (const char *name, size_t len) - { -- /* Ignore the 'vdsm' driver, since that should only be used by VDSM. */ -- if (len != 4 || memcmp (name, "vdsm", 4) != 0) -+ /* Ignore the 'vdsm' driver, since that should only be used by VDSM. -+ * Ignore the 'rhv-upload' driver, since we do not support passing all the -+ * options for it. -+ */ -+ if ((len != 4 || memcmp (name, "vdsm", 4) != 0) && -+ (len != 10 || memcmp (name, "rhv-upload", 10) != 0)) - add_option ("output", &output_drivers, name, len); - } - --- -2.21.0 - diff --git a/SOURCES/0034-RHEL-7-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch b/SOURCES/0034-RHEL-7-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch new file mode 100644 index 0000000..ef0661a --- /dev/null +++ b/SOURCES/0034-RHEL-7-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch @@ -0,0 +1,91 @@ +From f6a1a8a4ec5258a8cef504e3fc412b1d7e90af44 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 14 May 2018 10:16:58 +0100 +Subject: [PATCH] RHEL 7: 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-output-rhv.pod | 8 +------- + 3 files changed, 3 insertions(+), 20 deletions(-) + +diff --git a/v2v/output_rhv_upload.ml b/v2v/output_rhv_upload.ml +index c2a5c72c7..3d6d99008 100644 +--- a/v2v/output_rhv_upload.ml ++++ b/v2v/output_rhv_upload.ml +@@ -164,19 +164,11 @@ See also the virt-v2v-output-rhv(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 ()); +@@ -229,7 +221,6 @@ object + error_unless_ovirtsdk4_module_available (); + error_unless_nbdkit_working (); + error_unless_nbdkit_python_plugin_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 4d61a089b..a631d54d6 100644 +--- a/v2v/rhv-upload-plugin.py ++++ b/v2v/rhv-upload-plugin.py +@@ -140,10 +140,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-output-rhv.pod b/v2v/virt-v2v-output-rhv.pod +index 651f61dae..4608cac45 100644 +--- a/v2v/virt-v2v-output-rhv.pod ++++ b/v2v/virt-v2v-output-rhv.pod +@@ -5,7 +5,7 @@ virt-v2v-output-rhv - Using virt-v2v to convert guests to oVirt or RHV + =head1 SYNOPSIS + + virt-v2v [-i* options] -o rhv-upload [-oc ENGINE_URL] -os STORAGE +- [-op PASSWORD] [-of raw] ++ [-op PASSWORD] + [-oo rhv-cafile=FILE] + [-oo rhv-cluster=CLUSTER] + [-oo rhv-direct] +@@ -78,12 +78,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.21.0 + diff --git a/SOURCES/0035-RHEL-7-o-rhv-upload-Use-Python-2-instead-of-Python-3.patch b/SOURCES/0035-RHEL-7-o-rhv-upload-Use-Python-2-instead-of-Python-3.patch new file mode 100644 index 0000000..3f6af6c --- /dev/null +++ b/SOURCES/0035-RHEL-7-o-rhv-upload-Use-Python-2-instead-of-Python-3.patch @@ -0,0 +1,283 @@ +From 31983aa7f449ad6a2dbfe2ea84b30a146dfa40ff Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 22 Jul 2019 13:32:54 +0200 +Subject: [PATCH] RHEL 7: -o rhv-upload: Use Python 2 instead of Python 3. + +[Pino: few additional bits edited by me] +--- + v2v/output_rhv_upload.ml | 2 +- + v2v/python_script.ml | 2 +- + v2v/rhv-upload-createvm.py | 20 ++++++++++++--- + v2v/rhv-upload-plugin.py | 46 +++++++++++++++++++++++------------ + v2v/rhv-upload-precheck.py | 22 +++++++++++++---- + v2v/test-v2v-python-syntax.sh | 2 +- + 6 files changed, 67 insertions(+), 27 deletions(-) + +diff --git a/v2v/output_rhv_upload.ml b/v2v/output_rhv_upload.ml +index 3d6d99008..051ce086f 100644 +--- a/v2v/output_rhv_upload.ml ++++ b/v2v/output_rhv_upload.ml +@@ -135,7 +135,7 @@ class output_rhv_upload output_alloc output_conn + error (f_"nbdkit is not new enough, you need to upgrade to nbdkit ≥ 1.1.16") + in + +- (* Check that the python3 plugin is installed and working ++ (* Check that the python plugin is installed and working + * and can load the plugin script. + *) + let error_unless_nbdkit_python_plugin_working () = +diff --git a/v2v/python_script.ml b/v2v/python_script.ml +index 3159373a1..fa052d697 100644 +--- a/v2v/python_script.ml ++++ b/v2v/python_script.ml +@@ -24,7 +24,7 @@ open Unix_utils + + open Common_gettext.Gettext + +-let python = "python3" (* Defined by PEP 394 *) ++let python = "python" + + type script = { + tmpdir : string; (* Temporary directory. *) +diff --git a/v2v/rhv-upload-createvm.py b/v2v/rhv-upload-createvm.py +index 1d0e8c95d..3f2fae4c6 100644 +--- a/v2v/rhv-upload-createvm.py ++++ b/v2v/rhv-upload-createvm.py +@@ -1,5 +1,6 @@ + # -*- python -*- +-# oVirt or RHV upload create VM used by ‘virt-v2v -o rhv-upload’ ++# coding: utf-8 ++# oVirt or RHV upload create VM used by 'virt-v2v -o rhv-upload' + # Copyright (C) 2018 Red Hat Inc. + # + # This program is free software; you can redistribute it and/or modify +@@ -21,8 +22,8 @@ import logging + import sys + import time + +-from http.client import HTTPSConnection +-from urllib.parse import urlparse ++from httplib import HTTPSConnection ++from urlparse import urlparse + + import ovirtsdk4 as sdk + import ovirtsdk4.types as types +@@ -37,8 +38,19 @@ if len(sys.argv) != 3: + raise RuntimeError("incorrect number of parameters") + + # Parameters are passed in via a JSON document. ++# https://stackoverflow.com/a/13105359 ++def byteify(input): ++ if isinstance(input, dict): ++ return {byteify(key): byteify(value) ++ for key, value in input.iteritems()} ++ elif isinstance(input, list): ++ return [byteify(element) for element in input] ++ elif isinstance(input, unicode): ++ return input.encode('utf-8') ++ else: ++ return input + with open(sys.argv[1], 'r') as fp: +- params = json.load(fp) ++ params = byteify(json.load(fp)) + + # What is passed in is a password file, read the actual password. + with open(params['output_password'], 'r') as fp: +diff --git a/v2v/rhv-upload-plugin.py b/v2v/rhv-upload-plugin.py +index a631d54d6..adace732b 100644 +--- a/v2v/rhv-upload-plugin.py ++++ b/v2v/rhv-upload-plugin.py +@@ -1,5 +1,6 @@ + # -*- python -*- +-# oVirt or RHV upload nbdkit plugin used by ‘virt-v2v -o rhv-upload’ ++# coding: utf-8 ++# oVirt or RHV upload nbdkit plugin used by 'virt-v2v -o rhv-upload' + # Copyright (C) 2018 Red Hat Inc. + # + # This program is free software; you can redistribute it and/or modify +@@ -16,16 +17,17 @@ + # with this program; if not, write to the Free Software Foundation, Inc., + # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-import builtins ++from __builtin__ import open as builtin_open + import json + import logging + import socket + import ssl + import sys + import time ++import errno + +-from http.client import HTTPSConnection, HTTPConnection +-from urllib.parse import urlparse ++from httplib import HTTPSConnection, HTTPConnection ++from urlparse import urlparse + + import ovirtsdk4 as sdk + import ovirtsdk4.types as types +@@ -37,14 +39,25 @@ timeout = 5*60 + # Parameters are passed in via a JSON doc from the OCaml code. + # Because this Python code ships embedded inside virt-v2v there + # is no formal API here. ++# https://stackoverflow.com/a/13105359 ++def byteify(input): ++ if isinstance(input, dict): ++ return {byteify(key): byteify(value) ++ for key, value in input.iteritems()} ++ elif isinstance(input, list): ++ return [byteify(element) for element in input] ++ elif isinstance(input, unicode): ++ return input.encode('utf-8') ++ else: ++ return input + params = None + + def config(key, value): + global params + + if key == "params": +- with builtins.open(value, 'r') as fp: +- params = json.load(fp) ++ with builtin_open(value, 'r') as fp: ++ params = byteify(json.load(fp)) + else: + raise RuntimeError("unknown configuration key '%s'" % key) + +@@ -54,13 +67,14 @@ def config_complete(): + + def debug(s): + if params['verbose']: +- print(s, file=sys.stderr) ++ sys.stderr.write(s) ++ sys.stderr.write("\n") + sys.stderr.flush() + + def find_host(connection): + """Return the current host object or None.""" + try: +- with builtins.open("/etc/vdsm/vdsm.id") as f: ++ with builtin_open("/etc/vdsm/vdsm.id") as f: + vdsm_id = f.readline().strip() + except Exception as e: + # This is most likely not an oVirt host. +@@ -111,7 +125,7 @@ def open(readonly): + username = parsed.username or "admin@internal" + + # Read the password from file. +- with builtins.open(params['output_password'], 'r') as fp: ++ with builtin_open(params['output_password'], 'r') as fp: + password = fp.read() + password = password.rstrip() + +@@ -244,7 +258,7 @@ def open(readonly): + # New imageio never needs authentication. + needs_auth = False + +- j = json.loads(data) ++ j = byteify(json.loads(data)) + can_flush = "flush" in j['features'] + can_trim = "trim" in j['features'] + can_zero = "zero" in j['features'] +@@ -369,8 +383,9 @@ def pwrite(h, buf, offset): + + try: + http.send(buf) +- except BrokenPipeError: +- pass ++ except EnvironmentError as e: ++ if e.errno != errno.EPIPE: ++ raise + + r = http.getresponse() + if r.status != 200: +@@ -432,8 +447,9 @@ def emulate_zero(h, count, offset): + http.send(buf) + count -= len(buf) + http.send(memoryview(buf)[:count]) +- except BrokenPipeError: +- pass ++ except EnvironmentError as e: ++ if e.errno != errno.EPIPE: ++ raise + + r = http.getresponse() + if r.status != 200: +@@ -540,7 +556,7 @@ def close(h): + raise RuntimeError("transfer failed: disk %s not found" % disk_id) + + # Write the disk ID file. Only do this on successful completion. +- with builtins.open(params['diskid_file'], 'w') as fp: ++ with builtin_open(params['diskid_file'], 'w') as fp: + fp.write(disk.id) + + except: +diff --git a/v2v/rhv-upload-precheck.py b/v2v/rhv-upload-precheck.py +index 2798a29dd..5b650899f 100644 +--- a/v2v/rhv-upload-precheck.py ++++ b/v2v/rhv-upload-precheck.py +@@ -1,5 +1,6 @@ + # -*- python -*- +-# oVirt or RHV pre-upload checks used by ‘virt-v2v -o rhv-upload’ ++# coding: utf-8 ++# oVirt or RHV pre-upload checks used by 'virt-v2v -o rhv-upload' + # Copyright (C) 2018 Red Hat Inc. + # + # This program is free software; you can redistribute it and/or modify +@@ -21,8 +22,8 @@ import logging + import sys + import time + +-from http.client import HTTPSConnection +-from urllib.parse import urlparse ++from httplib import HTTPSConnection ++from urlparse import urlparse + + import ovirtsdk4 as sdk + import ovirtsdk4.types as types +@@ -36,8 +37,19 @@ if len(sys.argv) != 2: + raise RuntimeError("incorrect number of parameters") + + # Parameters are passed in via a JSON document. ++# https://stackoverflow.com/a/13105359 ++def byteify(input): ++ if isinstance(input, dict): ++ return {byteify(key): byteify(value) ++ for key, value in input.iteritems()} ++ elif isinstance(input, list): ++ return [byteify(element) for element in input] ++ elif isinstance(input, unicode): ++ return input.encode('utf-8') ++ else: ++ return input + with open(sys.argv[1], 'r') as fp: +- params = json.load(fp) ++ params = byteify(json.load(fp)) + + # What is passed in is a password file, read the actual password. + with open(params['output_password'], 'r') as fp: +@@ -67,7 +79,7 @@ vms = vms_service.list( + ) + if len(vms) > 0: + vm = vms[0] +- raise RuntimeError("VM already exists with name ‘%s’, id ‘%s’" % ++ raise RuntimeError("VM already exists with name '%s', id '%s'" % + (params['output_name'], vm.id)) + + # Otherwise everything is OK, exit with no error. +diff --git a/v2v/test-v2v-python-syntax.sh b/v2v/test-v2v-python-syntax.sh +index b167f4610..8d5924e3c 100755 +--- a/v2v/test-v2v-python-syntax.sh ++++ b/v2v/test-v2v-python-syntax.sh +@@ -25,7 +25,7 @@ skip_if_skipped + files="rhv-upload-createvm.py rhv-upload-plugin.py rhv-upload-precheck.py" + + # Base version of Python. +-python=python3 ++python=python + + # Checks the files are syntactically correct, but not very much else. + for f in $files; do +-- +2.21.0 + diff --git a/SOURCES/0035-RHEL-7-point-to-KB-for-supported-v2v-hypervisors-gue.patch b/SOURCES/0035-RHEL-7-point-to-KB-for-supported-v2v-hypervisors-gue.patch deleted file mode 100644 index f00efed..0000000 --- a/SOURCES/0035-RHEL-7-point-to-KB-for-supported-v2v-hypervisors-gue.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 883bf0e559d9d5618ca25ceb45071fc85d6cd88f Mon Sep 17 00:00:00 2001 -From: Pino Toscano -Date: Tue, 26 Mar 2019 09:42:25 +0100 -Subject: [PATCH] RHEL 7: point to KB for supported v2v hypervisors/guests - ---- - v2v/virt-v2v-support.pod | 102 ++------------------------------------- - 1 file changed, 4 insertions(+), 98 deletions(-) - -diff --git a/v2v/virt-v2v-support.pod b/v2v/virt-v2v-support.pod -index a22506068..4ec1a07c1 100644 ---- a/v2v/virt-v2v-support.pod -+++ b/v2v/virt-v2v-support.pod -@@ -8,104 +8,10 @@ systems and guests in virt-v2v - This page documents which foreign hypervisors, virtualization - management systems and guest types that L can support. - --Note this page applies to upstream virt-v2v from --L and in downstream distributions of virt-v2v --sometimes features are intentionally removed, or are present but not --supported. -- --=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 -- --=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 -+For more information on supported hypervisors, and guest types in -+RHEL, please consult the following Knowledgebase article on these -+Red Hat Customer Portal: -+L. - - =head2 Guest firmware - --- -2.21.0 - diff --git a/SOURCES/0036-RHEL-7-v2v-rhv-upload-Disable-Nagle-algorithm.patch b/SOURCES/0036-RHEL-7-v2v-rhv-upload-Disable-Nagle-algorithm.patch new file mode 100644 index 0000000..98d7142 --- /dev/null +++ b/SOURCES/0036-RHEL-7-v2v-rhv-upload-Disable-Nagle-algorithm.patch @@ -0,0 +1,75 @@ +From 3958577f0ca22fb1f376232a89d8812217b57c58 Mon Sep 17 00:00:00 2001 +From: Nir Soffer +Date: Fri, 15 Jun 2018 22:57:32 +0300 +Subject: [PATCH] RHEL 7: v2v: rhv-upload: Disable Nagle algorithm + +When sending a PUT request, the http header may be sent in the first +packet when calling con.endheaders(). When we send the first chunk, the +kernel may delay the send because the header packet was not acked yet. + +We have seen PUT requests delayed by 40 milliseconds on the server side +during virt-v2v upload to ovirt. Here is example log from current RHEL +virt-v2v version, uploading to RHV 4.2.3: + +2018-06-12 17:04:01,750 INFO (Thread-2) [images] Writing 52736 bytes +at offset 0 flush False to /path/to/image for ticket +374bec27-930d-4097-8e41-e4bc23324eb0 + +2018-06-12 17:04:01,790 INFO (Thread-2) [directio] Operation stats: + + +The server spent 40 milliseconds reading 52736 bytes form +rhv_upload_plugin running on the same host. + +This issue was fixed in python 3.5 by using the TCP_NO_DELAY option +after connecting[1]. I backported this change from python 3.5. + +I tested the same change using imageio example upload script. With this +change and with optimized PATCH requests, upload time of 4G sparse image +was reduced from 7 minutes to 1 minute. + +See this ovirt patch for more details: +https://gerrit.ovirt.org/#/c/92276/ + +This change is needed only for python 2. + +[1] https://bugs.python.org/issue23302 +--- + v2v/rhv-upload-plugin.py | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +diff --git a/v2v/rhv-upload-plugin.py b/v2v/rhv-upload-plugin.py +index adace732b..8f13ce1b2 100644 +--- a/v2v/rhv-upload-plugin.py ++++ b/v2v/rhv-upload-plugin.py +@@ -26,7 +26,7 @@ import sys + import time + import errno + +-from httplib import HTTPSConnection, HTTPConnection ++from httplib import HTTPSConnection as _HTTPSConnection, HTTPConnection + from urlparse import urlparse + + import ovirtsdk4 as sdk +@@ -52,6 +52,18 @@ def byteify(input): + return input + params = None + ++class HTTPSConnection(_HTTPSConnection): ++ def connect(self): ++ """ ++ Using TCP_NO_DELAY avoids delays when sending small payload, such as ++ ovirt PATCH requests. ++ ++ This issue was fixed in python 3.5, see: ++ https://bugs.python.org/issue23302 ++ """ ++ _HTTPSConnection.connect(self) ++ self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) ++ + def config(key, value): + global params + +-- +2.21.0 + diff --git a/SOURCES/0037-RHEL-7-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch b/SOURCES/0037-RHEL-7-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch new file mode 100644 index 0000000..a3547ed --- /dev/null +++ b/SOURCES/0037-RHEL-7-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch @@ -0,0 +1,33 @@ +From bfeb72190d75bbba4def4909f61701bc3853a48c Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Thu, 19 Jul 2018 13:30:17 +0200 +Subject: [PATCH] RHEL 7: p2v: ignore 'rhv-upload' driver (RHBZ#1590220) + +The 'rhv-upload' output mode requires few options, and virt-p2v does not +have the GUI bits for specifying them. +--- + p2v/ssh.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/p2v/ssh.c b/p2v/ssh.c +index c8528033d..8aac2685d 100644 +--- a/p2v/ssh.c ++++ b/p2v/ssh.c +@@ -1021,8 +1021,12 @@ add_input_driver (const char *name, size_t len) + static void + add_output_driver (const char *name, size_t len) + { +- /* Ignore the 'vdsm' driver, since that should only be used by VDSM. */ +- if (len != 4 || memcmp (name, "vdsm", 4) != 0) ++ /* Ignore the 'vdsm' driver, since that should only be used by VDSM. ++ * Ignore the 'rhv-upload' driver, since we do not support passing all the ++ * options for it. ++ */ ++ if ((len != 4 || memcmp (name, "vdsm", 4) != 0) && ++ (len != 10 || memcmp (name, "rhv-upload", 10) != 0)) + add_option ("output", &output_drivers, name, len); + } + +-- +2.21.0 + diff --git a/SOURCES/0038-RHEL-7-point-to-KB-for-supported-v2v-hypervisors-gue.patch b/SOURCES/0038-RHEL-7-point-to-KB-for-supported-v2v-hypervisors-gue.patch new file mode 100644 index 0000000..6605331 --- /dev/null +++ b/SOURCES/0038-RHEL-7-point-to-KB-for-supported-v2v-hypervisors-gue.patch @@ -0,0 +1,125 @@ +From 74bc995be6a67a4d6835a9e1df883ab7551083b4 Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Tue, 26 Mar 2019 09:42:25 +0100 +Subject: [PATCH] RHEL 7: point to KB for supported v2v hypervisors/guests + +--- + v2v/virt-v2v-support.pod | 102 ++------------------------------------- + 1 file changed, 4 insertions(+), 98 deletions(-) + +diff --git a/v2v/virt-v2v-support.pod b/v2v/virt-v2v-support.pod +index a22506068..4ec1a07c1 100644 +--- a/v2v/virt-v2v-support.pod ++++ b/v2v/virt-v2v-support.pod +@@ -8,104 +8,10 @@ systems and guests in virt-v2v + This page documents which foreign hypervisors, virtualization + management systems and guest types that L can support. + +-Note this page applies to upstream virt-v2v from +-L and in downstream distributions of virt-v2v +-sometimes features are intentionally removed, or are present but not +-supported. +- +-=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 +- +-=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 ++For more information on supported hypervisors, and guest types in ++RHEL, please consult the following Knowledgebase article on these ++Red Hat Customer Portal: ++L. + + =head2 Guest firmware + +-- +2.21.0 + diff --git a/SOURCES/copy-patches.sh b/SOURCES/copy-patches.sh index 3ae6d62..79f039a 100755 --- a/SOURCES/copy-patches.sh +++ b/SOURCES/copy-patches.sh @@ -6,7 +6,7 @@ set -e # directory. Use it like this: # ./copy-patches.sh -rhel_version=7.7 +rhel_version=7.8 # Check we're in the right directory. if [ ! -f libguestfs.spec ]; then diff --git a/SPECS/libguestfs.spec b/SPECS/libguestfs.spec index d3f3400..ca244ad 100644 --- a/SPECS/libguestfs.spec +++ b/SPECS/libguestfs.spec @@ -21,7 +21,7 @@ Summary: Access and modify virtual machine disk images Name: libguestfs Epoch: 1 Version: 1.40.2 -Release: 5%{?dist}.3 +Release: 9%{?dist} License: LGPLv2+ # Source and patches. @@ -35,7 +35,7 @@ Source1: http://libguestfs.org/download/1.40-stable/%{name}-%{version}.tar ExclusiveArch: x86_64 %{power64} aarch64 s390x # RHEL 7 git repository is: -# https://github.com/libguestfs/libguestfs/tree/rhel-7.7 +# https://github.com/libguestfs/libguestfs/tree/rhel-7.8 # Use 'copy-patches.sh' to copy the patches from the git repo # to the current directory. @@ -53,28 +53,31 @@ Patch0010: 0010-v2v-fix-path-to-source-when-copying-files-from-guest.patch Patch0011: 0011-v2v-warn-when-the-guest-has-direct-network-interface.patch Patch0012: 0012-Use-proper-label-for-nbdkit-sockets.patch Patch0013: 0013-v2v-rhv-upload-plugin-improve-wait-logic-after-final.patch -Patch0014: 0014-options-Fix-segfault-when-multiple-key-parameters-gi.patch -Patch0015: 0015-RHEL-7-Remove-libguestfs-live-RHBZ-798980.patch -Patch0016: 0016-RHEL-7-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch -Patch0017: 0017-RHEL-7-Disable-unsupported-remote-drive-protocols-RH.patch -Patch0018: 0018-RHEL-7-Remove-User-Mode-Linux-RHBZ-1144197.patch -Patch0019: 0019-RHEL-7-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch -Patch0020: 0020-RHEL-7-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch -Patch0021: 0021-RHEL-7-Disable-alternate-Augeas-lenses.patch -Patch0022: 0022-RHEL-7-Fix-list-of-supported-sound-cards-to-match-RH.patch -Patch0023: 0023-RHEL-7-Reject-use-of-libguestfs-winsupport-features-.patch -Patch0024: 0024-RHEL-7-daemon-umount-all-Hack-to-avoid-umount-sysroo.patch -Patch0025: 0025-RHEL-7-Fix-tests-for-libguestfs-winsupport-7.2.patch -Patch0026: 0026-RHEL-7-All-qemu-kvm-in-RHEL-7-supports-discard-of-qc.patch -Patch0027: 0027-RHEL-7-tests-Disable-daemon-tests-that-require-the-u.patch -Patch0028: 0028-RHEL-7-v2v-Disable-the-virt-v2v-in-place-option.patch -Patch0029: 0029-RHEL-7-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch -Patch0030: 0030-RHEL-7-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch -Patch0031: 0031-RHEL-7-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch -Patch0032: 0032-RHEL-7-o-rhv-upload-Use-Python-2-instead-of-Python-3.patch -Patch0033: 0033-RHEL-7-v2v-rhv-upload-Disable-Nagle-algorithm.patch -Patch0034: 0034-RHEL-7-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch -Patch0035: 0035-RHEL-7-point-to-KB-for-supported-v2v-hypervisors-gue.patch +Patch0014: 0014-v2v-Allow-Windows-virtio-ISO-to-be-a-block-device-as.patch +Patch0015: 0015-v2v-Set-DISKTYPE-2-in-RHV-and-VDSM-meta-files-RHBZ-1.patch +Patch0016: 0016-v2v-Fix-default-graphics-driver-for-SUSE-guests.patch +Patch0017: 0017-options-Fix-segfault-when-multiple-key-parameters-gi.patch +Patch0018: 0018-RHEL-7-Remove-libguestfs-live-RHBZ-798980.patch +Patch0019: 0019-RHEL-7-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch +Patch0020: 0020-RHEL-7-Disable-unsupported-remote-drive-protocols-RH.patch +Patch0021: 0021-RHEL-7-Remove-User-Mode-Linux-RHBZ-1144197.patch +Patch0022: 0022-RHEL-7-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch +Patch0023: 0023-RHEL-7-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch +Patch0024: 0024-RHEL-7-Disable-alternate-Augeas-lenses.patch +Patch0025: 0025-RHEL-7-Fix-list-of-supported-sound-cards-to-match-RH.patch +Patch0026: 0026-RHEL-7-Reject-use-of-libguestfs-winsupport-features-.patch +Patch0027: 0027-RHEL-7-daemon-umount-all-Hack-to-avoid-umount-sysroo.patch +Patch0028: 0028-RHEL-7-Fix-tests-for-libguestfs-winsupport-7.2.patch +Patch0029: 0029-RHEL-7-All-qemu-kvm-in-RHEL-7-supports-discard-of-qc.patch +Patch0030: 0030-RHEL-7-tests-Disable-daemon-tests-that-require-the-u.patch +Patch0031: 0031-RHEL-7-v2v-Disable-the-virt-v2v-in-place-option.patch +Patch0032: 0032-RHEL-7-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +Patch0033: 0033-RHEL-7-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch +Patch0034: 0034-RHEL-7-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch +Patch0035: 0035-RHEL-7-o-rhv-upload-Use-Python-2-instead-of-Python-3.patch +Patch0036: 0036-RHEL-7-v2v-rhv-upload-Disable-Nagle-algorithm.patch +Patch0037: 0037-RHEL-7-p2v-ignore-rhv-upload-driver-RHBZ-1590220.patch +Patch0038: 0038-RHEL-7-point-to-KB-for-supported-v2v-hypervisors-gue.patch # Use git for patch management. BuildRequires: git @@ -1291,13 +1294,23 @@ install -m 0644 utils/boot-benchmark/boot-benchmark.1 $RPM_BUILD_ROOT%{_mandir}/ %changelog -* Mon Dec 09 2019 Pino Toscano - 1:1.40.2-5.el7_7.3 +* Thu Dec 05 2019 Pino Toscano - 1:1.40.2-9 - Do not crash when using multiple --key options in tools - resolves: rhbz#1781154 + resolves: rhbz#1776468 -* Wed Sep 18 2019 Pino Toscano - 1:1.40.2-5.el7_7.2 +* Wed Sep 18 2019 Pino Toscano - 1:1.40.2-8 +- v2v: set the video mode to QXL for SUSE guests + resolves: rhbz#1753085 + +* Tue Sep 10 2019 Pino Toscano - 1:1.40.2-7 - v2v: -o rhv-upload: improve wait logic after finalize - resolves: rhbz#1753121 + resolves: rhbz#1680361 +- v2v: fix DISKTYPE value in generated .ovf files + resolves: rhbz#1750719 + +* Wed Aug 14 2019 Pino Toscano - 1:1.40.2-6 +- v2v: allow block devices as virtio-win ISO path + resolves: rhbz#1727164 * Mon Jul 22 2019 Pino Toscano - 1:1.40.2-5.el7_7.1 - v2v: fix a couple of Python 2 porting issues in the nbdkit Python script