On Thu, Mar 09, 2023 at 03:47:10PM +0200, Andrey Drobyshev wrote: > On 3/8/23 22:52, Richard W.M. Jones wrote: > > On Wed, Mar 08, 2023 at 08:05:35PM +0200, 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.drobys...@virtuozzo.com> > >> --- > >> convert/convert_windows.ml | 16 ++++++++++++++-- > >> 1 file changed, 14 insertions(+), 2 deletions(-) > >> > >> diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml > >> index 6bc2343b..e15a5e62 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,16 @@ 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 >\"%~dpn0.log\" > >> 2>&1\ > >> + " in > >> + Firstboot.add_firstboot_script g inspect.i_root > >> + "pnputil install drivers" fb_script; > >> + > > > > I'm not sure I'm really qualified to comment on this, since Windows is > > crazy. I guess the worst this can do is fail to run, but that won't > > stop anything else from happening. > > > > Note that firstboot scripts already do logging, so I don't believe > > writing to a separate log file is needed here. All the output from > > all firstboot scripts should go to > > C:\Program Files\Guestfs\Firstboot\log.txt: > > > > https://github.com/libguestfs/libguestfs-common/blob/7acf991a25b3fd625eb1ff1fbd8dc9fedf245942/mlcustomize/firstboot.ml#L276 > > Right, but apart from having the log common for all firstboot scripts, > some of them also utilise separate log files in scripts-done directory, > e.g.: > > https://github.com/libguestfs/virt-v2v/blob/cb792fef27f/convert/convert_windows.ml#L381 > https://github.com/libguestfs/virt-v2v/blob/cb792fef27f/convert/convert_windows.ml#L168 > > So I did the same considering that pnputil's output is relatively long.
I think I'd probably get rid of those other scripts too. It's helpful to have everything go to one place. I'm not actually sure where those extra files end up. > All in all, if there're no other concerns, can we give this script a go? I think the patch is generally fine, so I'm just quibbling about the logging. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com nbdkit - Flexible, fast NBD server with plugins https://gitlab.com/nbdkit/nbdkit _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs