[Libguestfs] [PATCH 0/2] allow alternative guest tools directories for distributions

2019-01-26 Thread Tomáš Golembiovský
First patch just fixes installing guest tools from directory that was broken.
Second patch revamps how virt-v2v chooses from which directory install guest
tools on Linux. Details in commit message.

Tomáš Golembiovský (2):
  v2v: fix path to source when copying files from guest tools directory
  v2v: allow alternative directories for distributions

 v2v/windows_virtio.ml | 67 +--
 1 file changed, 39 insertions(+), 28 deletions(-)

-- 
2.20.1

___
Libguestfs mailing list
Libguestfs@redhat.com
https://www.redhat.com/mailman/listinfo/libguestfs

[Libguestfs] [PATCH 2/2] v2v: allow alternative directories for distributions

2019-01-26 Thread Tomáš Golembiovský
Allow multiple alternative directory names for distributions (or
distribution familiy) when installing Linux guest tools packages.
Original naming required that there is a separate directory for every
version of a distribution (e.g. fc28, fc29, ...). This is inconvenient
when users want to keep just a single version of the package for the
distribution.

For each distribution one can have either a common directory (e.g.
fedora) or a versioned directory (fedora28). This can also be combined.
I.e. one can have both `fedora` and `fedora28` in which case `fedora28`
will be used when converting Fedora 28 guest wheres `fedora` will be
used when converting guests with any other Fedora version.

To have better names for unversioned directories the original names
were changed this way:

fc -> fedora
el -> rhel
lp -> suse

The original directory names are kept for backward compatibility and are
aliased to new names as described below. When both new and old name are
present on file system the new name takes precedence.

fc28 -> fedora
el6 -> rhel6
el7 -> rhel7
lp151 -> suse

Signed-off-by: Tomáš Golembiovský 
---
 v2v/windows_virtio.ml | 65 +--
 1 file changed, 38 insertions(+), 27 deletions(-)

diff --git a/v2v/windows_virtio.ml b/v2v/windows_virtio.ml
index 94c4774b7..cc33d9502 100644
--- a/v2v/windows_virtio.ml
+++ b/v2v/windows_virtio.ml
@@ -186,14 +186,18 @@ let rec install_drivers ((g, _) as reg) inspect rcaps =
 and install_linux_tools g inspect =
   let os =
 match inspect.i_distro with
-| "fedora" -> Some "fc28"
+| "fedora" -> Some [
+  (sprintf "fedora%d" inspect.i_major_version); "fedora"; "fc28"]
 | "rhel" | "centos" | "scientificlinux" | "redhat-based"
-| "oraclelinux" ->
-  (match inspect.i_major_version with
-   | 6 -> Some "el6"
-   | 7 -> Some "el7"
-   | _ -> None)
-| "sles" | "suse-based" | "opensuse" -> Some "lp151"
+| "oraclelinux" -> Some (
+  [(sprintf "rhel%d" inspect.i_major_version)]
+  @ (match inspect.i_major_version with
+   | 6 -> ["el6"]
+   | 7 -> ["el7"]
+   | _ -> [])
+  @ ["rhel"])
+| "sles" | "suse-based" | "opensuse" -> Some [
+  (sprintf "fedora%d" inspect.i_major_version); "suse"; "lp151"]
 | _ -> None in
 
   match os with
@@ -201,15 +205,15 @@ and install_linux_tools g inspect =
   warning (f_"don't know how to install guest tools on %s-%d")
 inspect.i_distro inspect.i_major_version
   | Some os ->
-  let src_path = "linux" // os in
+  let src_paths = List.map ((//) "linux") os in
   let dst_path = "/var/tmp" in
-  debug "locating packages in %s" src_path;
+  debug "locating packages in: %s" (String.concat ", " src_paths);
   let packages =
-copy_from_virtio_win g inspect src_path dst_path
+copy_from_virtio_win g inspect src_paths dst_path
  (fun _ _ -> true)
  (fun () ->
-   warning (f_"guest tools directory ‘%s’ is 
missing from the virtio-win directory or ISO.\n\nGuest tools are only provided 
in the RHV Guest Tools ISO, so this can happen if you are using the version of 
virtio-win which contains just the virtio drivers.  In this case only virtio 
drivers can be installed in the guest, and installation of Guest Tools will be 
skipped.")
-   src_path) in
+   warning (f_"none of the guest tools directories 
‘[%s]’ was found on the virtio-win directory or ISO.\n\nGuest tools are only 
provided in the oVirt/RHV Guest Tools ISO, so this can happen if you are using 
the version of virtio-win which contains just the virtio drivers.  In this case 
only virtio drivers can be installed in the guest, and installation of Guest 
Tools will be skipped.")
+  (String.concat ", " src_paths)) in
   debug "done copying %d files" (List.length packages);
   let packages = List.map ((//) dst_path) packages in
   try
@@ -290,29 +294,34 @@ and ddb_regedits inspect drv_name drv_pciid =
  * been copied.
  *)
 and copy_drivers g inspect driverdir =
-  [] <> copy_from_virtio_win g inspect "/" driverdir
+  [] <> copy_from_virtio_win g inspect ["/"] driverdir
 virtio_iso_path_matches_guest_os
 (fun () ->
   error (f_"root directory ‘/’ is missing from the virtio-win directory or 
ISO.\n\nThis should not happen and may indicate that virtio-win or virt-v2v is 
broken in some way.  Please report this as a bug with a full debug log."))
 
-(* Copy all files from virtio_win directory/ISO located in [srcdir]
- * subdirectory and all its subdirectories to the [destdir]. The directory
- * hierarchy is not preserved, meaning all files will be directly in [destdir].
- * The file list is filtered based on [filter] function.
+(* Find first existing direcotry from [scrdirs] list located in virtio_win
+ * 

[Libguestfs] [PATCH 1/2] v2v: fix path to source when copying files from guest tools directory

2019-01-26 Thread Tomáš Golembiovský
The debug message was slightly changed too to better match the similar
message for ISO case. It refers to the root directory instead of the
specific subdirectory inside guest tools.

Signed-off-by: Tomáš Golembiovský 
---
 v2v/windows_virtio.ml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/v2v/windows_virtio.ml b/v2v/windows_virtio.ml
index 92bf3ec60..94c4774b7 100644
--- a/v2v/windows_virtio.ml
+++ b/v2v/windows_virtio.ml
@@ -308,10 +308,10 @@ and copy_drivers g inspect driverdir =
 and copy_from_virtio_win g inspect srcdir destdir filter missing =
   let ret = ref [] in
   if is_directory virtio_win then (
-let dir = virtio_win // srcdir in
-debug "windows: copy_from_virtio_win: guest tools source directory %s" dir;
+debug "windows: copy_from_virtio_win: guest tools source directory %s" 
virtio_win;
 
-if not (is_directory srcdir) then missing ()
+let dir = virtio_win // srcdir in
+if not (is_directory dir) then missing ()
 else (
   let cmd = sprintf "cd %s && find -L -type f" (quote dir) in
   let paths = external_command cmd in
-- 
2.20.1

___
Libguestfs mailing list
Libguestfs@redhat.com
https://www.redhat.com/mailman/listinfo/libguestfs