From 54f33945654bba87867cea332ff4f8e570105bec Mon Sep 17 00:00:00 2001 From: eabdullin Date: Tue, 3 Sep 2024 11:56:13 +0300 Subject: [PATCH] - convert: windows: Online all virtio disks at first boot - Add warning about virt-v2v-in-place not being supported --- ...-about-virt-v2v-in-place-not-being-s.patch | 24 +++++ ...Online-all-virtio-disks-at-first-boo.patch | 93 +++++++++++++++++++ SPECS/virt-v2v.spec | 11 ++- 3 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 SOURCES/0038-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch create mode 100644 SOURCES/0039-convert-windows-Online-all-virtio-disks-at-first-boo.patch diff --git a/SOURCES/0038-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch b/SOURCES/0038-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch new file mode 100644 index 0000000..c776ec2 --- /dev/null +++ b/SOURCES/0038-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch @@ -0,0 +1,24 @@ +From 1dec94e52974e45fd3962dcbd51882fde7e9c306 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 9 Jul 2024 11:30:09 +0100 +Subject: [PATCH] RHEL: Add warning about virt-v2v-in-place not being supported + +Fixes: https://issues.redhat.com/browse/RHEL-40903 +--- + in-place/in_place.ml | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/in-place/in_place.ml b/in-place/in_place.ml +index 1c690a54..a70e812b 100644 +--- a/in-place/in_place.ml ++++ b/in-place/in_place.ml +@@ -197,6 +197,9 @@ read the man page virt-v2v-in-place(1). + let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in + Getopt.parse opthandle.getopt; + ++ warning "virt-v2v-in-place is NOT SUPPORTED for command line use. \ ++ It is almost always better to use virt-v2v instead of this tool."; ++ + (* Print the version, easier than asking users to tell us. *) + debug "%s: %s %s (%s)" + prog Config.package_name Config.package_version_full diff --git a/SOURCES/0039-convert-windows-Online-all-virtio-disks-at-first-boo.patch b/SOURCES/0039-convert-windows-Online-all-virtio-disks-at-first-boo.patch new file mode 100644 index 0000000..f12b96b --- /dev/null +++ b/SOURCES/0039-convert-windows-Online-all-virtio-disks-at-first-boo.patch @@ -0,0 +1,93 @@ +From d26ed76801f9d3ce5d3863ca09dfa653b4bcd1b2 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 27 Aug 2024 12:36:41 +0100 +Subject: [PATCH] convert: windows: Online all virtio disks at first boot + +Windows 2022 (and possibly earlier versions back to around 2019) will +force offline any non-boot disks which change bus, apparently as a +security mitigation. The effect of this is that although the system +drive (C:) is present after conversion, other drives may seem to +disappear. + +Running a Powershell script to bring all disks online seems risky. +The compromise is to bring online only virtio disks at first boot. + +To further reduce risk, we only do this if there are non-system disks +(ie. > 1 disks in total), and only if we installed virtio drivers. + +Fixes: https://issues.redhat.com/browse/RHEL-55763 +Fixes: https://issues.redhat.com/browse/RHEL-55837 +Related: https://issues.redhat.com/browse/MTV-1299 +Related: https://bugzilla.redhat.com/show_bug.cgi?id=1662286 +Signed-off-by: Richard W.M. Jones +Thanks: Martin Necas +Acked-by: Martin Necas +(cherry picked from commit cb56f6f94dc153051515fc7aa0d9ca646f5e2340) +--- + convert/convert_windows.ml | 39 +++++++++++++++++++++++++++++++++++++- + 1 file changed, 38 insertions(+), 1 deletion(-) + +diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml +index 52ca5bbe..352e1218 100644 +--- a/convert/convert_windows.ml ++++ b/convert/convert_windows.ml +@@ -38,7 +38,8 @@ module G = Guestfs + * time the Windows VM is booted on KVM. + *) + +-let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips = ++let convert (g : G.guestfs) source inspect i_firmware ++ block_driver _ static_ips = + (*----------------------------------------------------------------------*) + (* Inspect the Windows guest. *) + +@@ -272,6 +273,8 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips = + Registry.with_hive_write g inspect.i_windows_software_hive + update_software_hive; + ++ configure_online_disks block_driver; ++ + configure_network_interfaces net_driver; + + fix_ntfs_heads (); +@@ -662,6 +665,40 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips = + warning (f_"could not find registry key \ + HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion") + ++ and configure_online_disks block_driver = ++ (* If there are > 1 disks, run a script which will force Windows ++ * to bring them all online. Windows 2022 will offline non-boot disks ++ * where the bus changes as some sort of "security" mitigation. ++ * https://issues.redhat.com/browse/RHEL-55837 ++ * https://issues.redhat.com/browse/MTV-1299 ++ * https://bugzilla.redhat.com/show_bug.cgi?id=1662286 ++ *) ++ let virtio_installed = ++ match block_driver with ++ | Inject_virtio_win.Virtio_blk | Virtio_SCSI -> true ++ | IDE -> false in ++ let more_than_one_disk = List.length source.s_disks > 1 in ++ ++ if virtio_installed && more_than_one_disk then ( ++ let psh_filename = "online-disks" in ++ let psh = ref [] in ++ let add = List.push_back psh in ++ ++ add "# Uncomment this line for lots of debug output."; ++ add "# Set-PSDebug -Trace 1"; ++ add ""; ++ add "Write-Host \"Online all virtio disks\""; ++ add ""; ++ add "Get-Disk | Where { $_.FriendlyName -like '*VirtIO*' } | % {"; ++ add " Write-Host (' - ' + $_.Number + ': ' + $_.FriendlyName + '(' + [math]::Round($_.Size/1GB,2) + 'GB)')"; ++ add " $_ | Set-Disk -IsOffline $false"; ++ add " $_ | Set-Disk -IsReadOnly $false"; ++ add "}"; ++ ++ (* Install the Powershell script to run late at firstboot. *) ++ Firstboot.add_firstboot_powershell g inspect.i_root psh_filename !psh ++ ) ++ + and configure_network_interfaces net_driver = + (* If we were asked to force network interfaces to have particular + * static IP addresses then it is done here by installing a diff --git a/SPECS/virt-v2v.spec b/SPECS/virt-v2v.spec index 366d7a4..6c54628 100644 --- a/SPECS/virt-v2v.spec +++ b/SPECS/virt-v2v.spec @@ -16,7 +16,7 @@ Name: virt-v2v Epoch: 1 Version: 2.4.0 -Release: 3%{?dist} +Release: 4%{?dist}.alma.1 Summary: Convert a virtual machine to run on KVM License: GPL-2.0-or-later AND LGPL-2.0-or-later @@ -73,6 +73,11 @@ Patch0034: 0034-docs-Add-a-note-about-removal-of-VMware-Tools-on-Win.patch Patch0035: 0035-Update-common-submodule.patch Patch0036: 0036-Pull-in-a-fix-to-make-Windows-firstboot-more-reliabl.patch Patch0037: 0037-docs-Restate-position-on-removal-of-VMware-Tools.patch +# Patches were taken from: +# https://gitlab.com/redhat/centos-stream/rpms/virt-v2v/-/commit/620a64c9a372c5508695c424377bff5379c8e08b +Patch0038: 0038-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch +# https://gitlab.com/redhat/centos-stream/rpms/virt-v2v/-/commit/3959367bee3f6ac93e00b23b77fade0ddd0fc062 +Patch0039: 0039-convert-windows-Online-all-virtio-disks-at-first-boo.patch %if !0%{?rhel} # libguestfs hasn't been built on i686 for a while since there is no @@ -377,6 +382,10 @@ make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check %changelog +* Tue Sep 03 2024 Eduard Abdullin - 1:2.4.0-4.alma.1 +- convert: windows: Online all virtio disks at first boot +- Add warning about virt-v2v-in-place not being supported + * Tue Aug 13 2024 Richard W.M. Jones - 1:2.4.0-3 - Fixes to improve installation of QEMU Guest Agent and removal of VMware Tools