[Libguestfs] [V2V PATCH v3 1/1] convert_windows: add firstboot script to install drivers with pnputil

Laszlo Ersek lersek at redhat.com
Tue Mar 14 11:52:09 UTC 2023


On 3/14/23 11:45, Andrey Drobyshev wrote:
> During conversion we copy the necessary drivers to the directory
> "%systemroot%\Drivers\Virtio", adding it to the DevicePath registry
> value.  As documented in [1], this should be enough for Windows to find
> device drivers and successfully install them.
> 
> However, it doesn't always happen.  Commit 73e009c04 ("v2v: windows:
> Document use of pnputil to install drivers.") describes such issues with
> Win2k12R2.  I'm seeing the same problem with Win2k16 and netkvm.sys
> driver not being installed.
> 
> That same commit 73e009c04 suggests adding a firstboot script invoking
> pnputil at an early stage to install all the drivers we put into the
> drivers store.  So let's add such a script to make sure all the
> necessary drivers are installed.
> 
> [1] https://learn.microsoft.com/en-us/windows-hardware/drivers/install/how-windows-selects-a-driver-for-a-device
> 
> Signed-off-by: Andrey Drobyshev <andrey.drobyshev at virtuozzo.com>
> ---
>  convert/convert_windows.ml | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml
> index b5dc06ed..0f4dd70f 100644
> --- a/convert/convert_windows.ml
> +++ b/convert/convert_windows.ml
> @@ -295,9 +295,11 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips =
>      | Virt -> Virt
>  
>    and configure_firstboot () =
> -    (* Note that pnp_wait.exe must be the first firstboot script as it
> -     * suppresses PnP for all following scripts.
> +    (* Run the firstboot script with pnputil.exe before the one with
> +     * pnp_wait.exe as the latter suppresses PnP for all following scripts.
>       *)
> +    configure_pnputil_install ();
> +
>      let tool_path = virt_tools_data_dir () // "pnp_wait.exe" in
>      if Sys.file_exists tool_path then
>        configure_wait_pnp tool_path
> @@ -345,6 +347,18 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips =
>                        strkey name value
>      | None -> sprintf "reg delete \"%s\" /v %s /f" strkey name
>  
> +  and configure_pnputil_install () =
> +    let fb_script = "@echo off\n\
> +                     \n\
> +                     echo Wait for VirtIO drivers to be installed\n\
> +                     %systemroot%\\Sysnative\\PnPutil -i -a \
> +                     %systemroot%\\Drivers\\Virtio\\*.inf \
> +                    " in

I think the last line could be written as

                     %systemroot%\\Drivers\\Virtio\\*.inf" in

but that's not worth a respin.

Acked-by: Laszlo Ersek <lersek at redhat.com>

Thanks!
Laszlo

> +
> +    (* Set priority higher than that of "v2vnetcf.ps1" firstboot script. *)
> +    Firstboot.add_firstboot_script g inspect.i_root ~prio:2000
> +      "pnputil install drivers" fb_script;
> +
>    and configure_wait_pnp tool_path =
>      (* Prevent destructive interactions of firstboot with PnP. *)
>  



More information about the Libguestfs mailing list