[Libguestfs] [PATCH 2/4] v2v: consolidate virtio-win file copying

Richard W.M. Jones rjones at redhat.com
Tue Aug 11 18:04:40 UTC 2015


On Mon, Aug 10, 2015 at 06:55:30PM +0300, Roman Kagan wrote:
> Copy the appropriate driver files from the virtio-win storage into
> %SYSTEMROOT%\Drivers\VirtIO once they are discovered, and stick to using
> those copies later on.
> 
> This way the knowledge of where the drivers come from originally is
> consolidated in one place, so the lifetime of the associated entities
> becomes easier to control (to be implemented in followup patches).
> 
> Signed-off-by: Roman Kagan <rkagan at virtuozzo.com>
> ---
>  v2v/convert_windows.ml | 128 ++++++++++++++++++++++---------------------------
>  1 file changed, 56 insertions(+), 72 deletions(-)
> 
> diff --git a/v2v/convert_windows.ml b/v2v/convert_windows.ml
> index 9e83df8..26609f2 100644
> --- a/v2v/convert_windows.ml
> +++ b/v2v/convert_windows.ml
> @@ -231,12 +231,9 @@ echo uninstalling Xen PV driver
>      with
>        Not_found -> ()
>  
> -  and install_virtio_drivers root current_cs =
> -    (* Copy the virtio drivers to the guest. *)
> -    let driverdir = sprintf "%s/Drivers/VirtIO" systemroot in
> -    g#mkdir_p driverdir;
> +  and copy_virtio_drivers driverdir =
> +    (* Copy the matching drivers to the driverdir. *)
>  
> -    (* Load the list of drivers available. *)
>      let drivers = find_virtio_win_drivers virtio_win in
>  
>      (* Filter out only drivers matching the current guest. *)
> @@ -260,73 +257,60 @@ echo uninstalling Xen PV driver
>        flush stdout
>      );
>  
> -    match drivers with
> -    | [] ->
> -       warning (f_"there are no virtio drivers available for this version of Windows (%d.%d %s %s).  virt-v2v looks for drivers in %s\n\nThe guest will be configured to use slower emulated devices.")
> -               inspect.i_major_version inspect.i_minor_version
> -               inspect.i_arch inspect.i_product_variant
> -               virtio_win;
> -       ( IDE, RTL8139, Cirrus )
> -
> -    | drivers ->
> -       (* Can we install the block driver? *)
> -       let block : guestcaps_block_type =
> -         try
> -           let viostor_sys_file =
> -             List.find
> -               (fun { vwd_filename = filename } -> filename = "viostor.sys")
> -               drivers in
> -           (* Get the actual file contents of the .sys file. *)
> -           let content = viostor_sys_file.vwd_get_contents () in
> -           let target = sprintf "%s/system32/drivers/viostor.sys" systemroot in
> -           let target = g#case_sensitive_path target in
> -           g#write target content;
> -           add_viostor_to_critical_device_database root current_cs;
> -           Virtio_blk
> -         with Not_found ->
> -           warning (f_"there is no viostor (virtio block device) driver for this version of Windows (%d.%d %s).  virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.")
> -                   inspect.i_major_version inspect.i_minor_version
> -                   inspect.i_arch virtio_win;
> -           IDE in
> -
> -       (* Can we install the virtio-net driver? *)
> -       let net : guestcaps_net_type =
> -         if not (List.exists
> -                   (fun { vwd_filename = filename } -> filename = "netkvm.inf")
> -                   drivers) then (
> -           warning (f_"there is no virtio network driver for this version of Windows (%d.%d %s).  virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.")
> -                   inspect.i_major_version inspect.i_minor_version
> -                   inspect.i_arch virtio_win;
> -           RTL8139
> -         )
> -         else
> -           (* It will be installed at firstboot. *)
> -           Virtio_net in
> -
> -       (* Can we install the QXL driver? *)
> -       let video : guestcaps_video_type =
> -         if not (List.exists
> -                   (fun { vwd_filename = filename } -> filename = "qxl.inf")
> -                   drivers) then (
> -           warning (f_"there is no QXL driver for this version of Windows (%d.%d %s).  virt-v2v looks for this driver in %s\n\nThe guest will be configured to use standard VGA.")
> -                   inspect.i_major_version inspect.i_minor_version
> -                   inspect.i_arch virtio_win;
> -           Cirrus
> -         )
> -         else
> -           (* It will be installed at firstboot. *)
> -           QXL in
> -
> -       (* Copy all the drivers to the driverdir.  They will be
> -        * installed at firstboot.
> -        *)
> -       List.iter (
> -         fun driver ->
> -           let content = driver.vwd_get_contents () in
> -           g#write (driverdir // driver.vwd_filename) content
> -       ) drivers;
> -
> -       (block, net, video)
> +    List.iter (
> +      fun driver ->
> +        let content = driver.vwd_get_contents () in
> +        g#write (driverdir // driver.vwd_filename) content
> +    ) drivers
> +
> +  and install_virtio_drivers root current_cs =
> +    (* Copy the virtio drivers to the guest. *)
> +    let driverdir = sprintf "%s/Drivers/VirtIO" systemroot in
> +    g#mkdir_p driverdir;
> +
> +    copy_virtio_drivers driverdir;
> +
> +    (* Can we install the block driver? *)
> +    let block : guestcaps_block_type =
> +      let source = driverdir // "viostor.sys" in
> +      if (g#exists source) then (
> +        let target = sprintf "%s/system32/drivers/viostor.sys" systemroot in
> +        let target = g#case_sensitive_path target in
> +        g#cp source target;
> +        add_viostor_to_critical_device_database root current_cs;
> +        Virtio_blk
> +      ) else (
> +        warning (f_"there is no viostor (virtio block device) driver for this version of Windows (%d.%d %s).  virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.")
> +                inspect.i_major_version inspect.i_minor_version
> +                inspect.i_arch virtio_win;
> +        IDE
> +      ) in
> +
> +    (* Can we install the virtio-net driver? *)
> +    let net : guestcaps_net_type =
> +      if not (g#exists (driverdir // "netkvm.inf")) then (
> +        warning (f_"there is no virtio network driver for this version of Windows (%d.%d %s).  virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.")
> +                inspect.i_major_version inspect.i_minor_version
> +                inspect.i_arch virtio_win;
> +        RTL8139
> +      )
> +      else
> +        (* It will be installed at firstboot. *)
> +        Virtio_net in
> +
> +    (* Can we install the QXL driver? *)
> +    let video : guestcaps_video_type =
> +      if not (g#exists (driverdir // "qxl.inf")) then (
> +        warning (f_"there is no QXL driver for this version of Windows (%d.%d %s).  virt-v2v looks for this driver in %s\n\nThe guest will be configured to use standard VGA.")
> +                inspect.i_major_version inspect.i_minor_version
> +                inspect.i_arch virtio_win;
> +        Cirrus
> +      )
> +      else
> +        (* It will be installed at firstboot. *)
> +        QXL in
> +
> +    (block, net, video)
>  
>    and add_viostor_to_critical_device_database root current_cs =
>      let { i_major_version = major; i_minor_version = minor;
> -- 
> 2.4.3

This looks good to me (once I used the 'git diff -w' option to show
the true changes).

So likely ACK.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/




More information about the Libguestfs mailing list