On 12/01/22 13:49, Richard W.M. Jones wrote: > If the virtio-win ISO contains drivers for Windows 11, Windows 2019 or > Windows 2022, and the guest matches these, then copy in the right > drivers. For this to work you will need libguestfs >= 1.49.8 which > allows osinfo to be used to detect Windows versions >= 10. > > Side note: virtio-win uses a mix of different path element styles. > > In the exploded tree of drivers installed by the RPM: > > /usr/share/virtio-win/drivers/amd64$ ls -l > total 0 > drwxr-xr-x. 2 root root 174 Nov 30 13:28 Win10 > drwxr-xr-x. 2 root root 174 Nov 30 13:28 Win11 > drwxr-xr-x. 2 root root 236 Nov 30 13:28 Win2008R2 > drwxr-xr-x. 2 root root 174 Nov 30 13:28 Win2012 > drwxr-xr-x. 2 root root 174 Nov 30 13:28 Win2012R2 > drwxr-xr-x. 2 root root 174 Nov 30 13:28 Win2016 > drwxr-xr-x. 2 root root 174 Nov 30 13:28 Win2019 > drwxr-xr-x. 2 root root 174 Nov 30 13:28 Win2022 > drwxr-xr-x. 2 root root 236 Nov 30 13:28 Win7 > drwxr-xr-x. 2 root root 174 Nov 30 13:28 Win8 > drwxr-xr-x. 2 root root 174 Nov 30 13:28 Win8.1 > > Inside the ISO: > > ><fs> ll /viostor/ > total 28 > dr-xr-xr-x 1 root root 2048 Jun 14 2020 2k12 > dr-xr-xr-x 1 root root 2048 Jun 14 2020 2k12R2 > dr-xr-xr-x 1 root root 2048 Jun 14 2020 2k16 > dr-xr-xr-x 1 root root 2048 Jun 14 2020 2k19 > dr-xr-xr-x 1 root root 2048 Dec 11 2021 2k22 > dr-xr-xr-x 1 root root 2048 Jun 14 2020 2k8R2 > dr-xr-xr-x 1 root root 2048 Jun 14 2020 w10 > dr-xr-xr-x 1 root root 2048 Dec 11 2021 w11 > dr-xr-xr-x 1 root root 2048 Jun 14 2020 w7 > dr-xr-xr-x 1 root root 2048 Jun 14 2020 w8 > dr-xr-xr-x 1 root root 2048 Jun 14 2020 w8.1 > > So I have matched both path elements. > > Reported-by: Tingting Zheng > Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2149811 > --- > convert/windows_virtio.ml | 45 +++++++++++++++++++++++---------------- > 1 file changed, 27 insertions(+), 18 deletions(-) > > diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml > index a27cd6a543..3156694d11 100644 > --- a/convert/windows_virtio.ml > +++ b/convert/windows_virtio.ml > @@ -50,9 +50,9 @@ let rec install_drivers ((g, _) as reg) inspect = > g#mkdir_p driverdir; > > if not (copy_drivers g inspect driverdir) then ( > - 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.") > + warning (f_"there are no virtio drivers available for this version of > Windows (%d.%d %s %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; > + inspect.i_product_variant inspect.i_osinfo virtio_win; > (IDE, RTL8139, false, false, false, false) > ) > else ( > @@ -279,7 +279,8 @@ and copy_from_virtio_win g inspect srcdir destdir filter > missing = > *) > and virtio_iso_path_matches_guest_os path inspect = > let { i_major_version = os_major; i_minor_version = os_minor; > - i_arch = arch; i_product_variant = os_variant } = inspect in > + i_arch = arch; i_product_variant = os_variant; > + i_osinfo = osinfo } = inspect in > try > (* Lowercased path, since the ISO may contain upper or lowercase path > * elements. > @@ -300,37 +301,45 @@ and virtio_iso_path_matches_guest_os path inspect = > > let is_client os_variant = os_variant = "Client" > and not_client os_variant = os_variant <> "Client" > - and any_variant os_variant = true in > - let p_os_major, p_os_minor, match_os_variant = > + and any_variant os_variant = true > + and any_osinfo osinfo = true in > + let p_os_major, p_os_minor, match_os_variant, match_osinfo = > if pathelem "xp" || pathelem "winxp" then > - (5, 1, any_variant) > + (5, 1, any_variant, any_osinfo) > else if pathelem "2k3" || pathelem "win2003" then > - (5, 2, any_variant) > + (5, 2, any_variant, any_osinfo) > else if pathelem "vista" then > - (6, 0, is_client) > + (6, 0, is_client, any_osinfo) > else if pathelem "2k8" || pathelem "win2008" then > - (6, 0, not_client) > + (6, 0, not_client, any_osinfo) > else if pathelem "w7" || pathelem "win7" then > - (6, 1, is_client) > + (6, 1, is_client, any_osinfo) > else if pathelem "2k8r2" || pathelem "win2008r2" then > - (6, 1, not_client) > + (6, 1, not_client, any_osinfo) > else if pathelem "w8" || pathelem "win8" then > - (6, 2, is_client) > + (6, 2, is_client, any_osinfo) > else if pathelem "2k12" || pathelem "win2012" then > - (6, 2, not_client) > + (6, 2, not_client, any_osinfo) > else if pathelem "w8.1" || pathelem "win8.1" then > - (6, 3, is_client) > + (6, 3, is_client, any_osinfo) > else if pathelem "2k12r2" || pathelem "win2012r2" then > - (6, 3, not_client) > + (6, 3, not_client, any_osinfo) > else if pathelem "w10" || pathelem "win10" then > - (10, 0, is_client) > + (10, 0, is_client, ((=) "win10")) > + else if pathelem "w11" || pathelem "win11" then > + (10, 0, is_client, ((=) "win11")) > else if pathelem "2k16" || pathelem "win2016" then > - (10, 0, not_client) > + (10, 0, not_client, ((=) "win2k16")) > + else if pathelem "2k19" || pathelem "win2019" then > + (10, 0, not_client, ((=) "win2k19")) > + else if pathelem "2k22" || pathelem "win2022" then > + (10, 0, not_client, ((=) "win2k22")) > else > raise Not_found in > > arch = p_arch && os_major = p_os_major && os_minor = p_os_minor && > - match_os_variant os_variant > + match_os_variant os_variant && > + match_osinfo osinfo > > with Not_found -> false > >
I think this patch would be improved if the osinfo part were first introduced as a pure refactoring ("any_osinfo"), and then the bugfix were implemented in a separate patch. But, it's not a big deal, so: Reviewed-by: Laszlo Ersek <ler...@redhat.com> _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs