Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package virt-v2v for openSUSE:Factory checked in at 2026-06-17 16:22:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/virt-v2v (Old) and /work/SRC/openSUSE:Factory/.virt-v2v.new.1981 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "virt-v2v" Wed Jun 17 16:22:09 2026 rev:34 rq:1359861 version:2.11.8 Changes: -------- --- /work/SRC/openSUSE:Factory/virt-v2v/virt-v2v.changes 2026-06-12 19:28:25.716460704 +0200 +++ /work/SRC/openSUSE:Factory/.virt-v2v.new.1981/virt-v2v.changes 2026-06-17 16:22:53.358533533 +0200 @@ -1,0 +2,12 @@ +Tue Jun 16 16:00:16 MDT 2026 - [email protected] + +- bsc#1268361 - virt-v2v prevents vmdp from running on first boot + for Windows VMs + dont-chmod-windows-paths.patch + revert01-convert-Use-quoted-string-literals-in-many-places.patch + revert02-remove-timeout-before-installing-virtio-win-drivers.patch + revert03-Ignore-ERROR_NO_MORE_ITEMS-status-from-PnPUtil.patch + revert04-Modify-configure_pnputil_install-script.patch + revert05-firstboot.bat-must-not-reboot-VM-on-error-code-250.patch + +------------------------------------------------------------------- New: ---- dont-chmod-windows-paths.patch revert01-convert-Use-quoted-string-literals-in-many-places.patch revert02-remove-timeout-before-installing-virtio-win-drivers.patch revert03-Ignore-ERROR_NO_MORE_ITEMS-status-from-PnPUtil.patch revert04-Modify-configure_pnputil_install-script.patch revert05-firstboot.bat-must-not-reboot-VM-on-error-code-250.patch ----------(New B)---------- New: for Windows VMs dont-chmod-windows-paths.patch revert01-convert-Use-quoted-string-literals-in-many-places.patch New: dont-chmod-windows-paths.patch revert01-convert-Use-quoted-string-literals-in-many-places.patch revert02-remove-timeout-before-installing-virtio-win-drivers.patch New: revert01-convert-Use-quoted-string-literals-in-many-places.patch revert02-remove-timeout-before-installing-virtio-win-drivers.patch revert03-Ignore-ERROR_NO_MORE_ITEMS-status-from-PnPUtil.patch New: revert02-remove-timeout-before-installing-virtio-win-drivers.patch revert03-Ignore-ERROR_NO_MORE_ITEMS-status-from-PnPUtil.patch revert04-Modify-configure_pnputil_install-script.patch New: revert03-Ignore-ERROR_NO_MORE_ITEMS-status-from-PnPUtil.patch revert04-Modify-configure_pnputil_install-script.patch revert05-firstboot.bat-must-not-reboot-VM-on-error-code-250.patch New: revert04-Modify-configure_pnputil_install-script.patch revert05-firstboot.bat-must-not-reboot-VM-on-error-code-250.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ virt-v2v.spec ++++++ --- /var/tmp/diff_new_pack.VPcIhs/_old 2026-06-17 16:22:54.358575364 +0200 +++ /var/tmp/diff_new_pack.VPcIhs/_new 2026-06-17 16:22:54.362575532 +0200 @@ -33,6 +33,13 @@ Source1: https://download.libguestfs.org/virt-v2v/%{source_directory}/%{name}-%{version}.tar.gz.sig Patch1: revert-Use-caml_unix_error-instead-of-unix_error.patch +Patch2: dont-chmod-windows-paths.patch +# These patches temporarily address upstream issue https://github.com/libguestfs/virt-v2v/issues/159 +Patch3: revert01-convert-Use-quoted-string-literals-in-many-places.patch +Patch4: revert02-remove-timeout-before-installing-virtio-win-drivers.patch +Patch5: revert03-Ignore-ERROR_NO_MORE_ITEMS-status-from-PnPUtil.patch +Patch6: revert04-Modify-configure_pnputil_install-script.patch +Patch7: revert05-firstboot.bat-must-not-reboot-VM-on-error-code-250.patch BuildRequires: augeas-devel BuildRequires: file-devel ++++++ dont-chmod-windows-paths.patch ++++++ Even though we are passing 0o755 to ntfs_chmod, it appears to be setting up the directories for the Administrator as Read only instead of Read/Execute. This causes a failure to execute the extracted setup.exe. --- ./convert/convert_windows.ml.orig 2026-06-16 15:29:28.948498219 -0600 +++ ./convert/convert_windows.ml 2026-06-16 15:29:47.856499039 -0600 @@ -958,9 +958,9 @@ let post_convert (g : G.guestfs) inspect *) let path = "/Program Files/Guestfs" in debug "info: fixing NTFS permissions on %s" path; - try g#ntfs_chmod inspect.i_root 0o755 path ~recursive:true + (* try g#ntfs_chmod inspect.i_root 0o755 path ~recursive:true with G.Error msg -> - warning (f_"ntfs_chmod on %s failed: %s") path msg + warning (f_"ntfs_chmod on %s failed: %s") path msg *) module Convert_windows = struct let name = "windows" ++++++ revert01-convert-Use-quoted-string-literals-in-many-places.patch ++++++ From: Richard W.M. Jones [email protected] Mon Sep 1 18:28:29 2025 +0100 Subject: convert: Use quoted string literals in many places Date: Mon Sep 1 18:28:29 2025 +0100: Git: dce61d1c61fd8362a00a006a07f1f8d6a1772d7b Use quoted string literals to make inline scripts easier to read and write. This change was done automatically by the script found in https://github.com/libguestfs/libguestfs/commit/02b64d5cec1ac0a6f7627d5489996de4474a67f6 --- a/convert/convert_linux.ml +++ b/convert/convert_linux.ml @@ -572,45 +572,42 @@ let convert (g : G.guestfs) source inspe (* Wait for the network to come online in the guest (best effort). *) fbs "wait online" - (sprintf {|#!/bin/sh -if conn=$(nmcli networking connectivity); then - tries=0 - while - test $tries -lt %d && - test full != "$conn" - do - sleep 1 - tries=$((tries + 1)) - conn=$(nmcli networking connectivity) - done -elif systemctl -q is-active systemd-networkd; then - /usr/lib/systemd/systemd-networkd-wait-online \ - -q --timeout=%d -fi -|} timeout timeout); + (sprintf "#!/bin/sh\n\ + if conn=$(nmcli networking connectivity); then\n\ + \ \ tries=0\n\ + \ \ while\n\ + \ \ \ \ test $tries -lt %d &&\n\ + \ \ \ \ test full != \"$conn\"\n\ + \ \ do\n\ + \ \ \ \ sleep 1\n\ + \ \ \ \ tries=$((tries + 1))\n\ + \ \ \ \ conn=$(nmcli networking connectivity)\n\ + \ \ done\n\ + elif systemctl -q is-active systemd-networkd; then\n\ + \ \ /usr/lib/systemd/systemd-networkd-wait-online \\\n\ + \ \ \ \ -q --timeout=%d\n\ + fi\n" timeout timeout); (* Disable SELinux temporarily around package installation. Refer to * <https://bugzilla.redhat.com/show_bug.cgi?id=2028764#c7> and * <https://bugzilla.redhat.com/show_bug.cgi?id=2028764#c8>. *) fbs "setenforce 0" - (sprintf {|#!/bin/sh -rm -f %s -if command -v getenforce >/dev/null && - test Enforcing = "$(getenforce)" -then - touch %s - setenforce 0 -fi -|} selinux_enforcing selinux_enforcing); + (sprintf "#!/bin/sh\n\ + rm -f %s\n\ + if command -v getenforce >/dev/null &&\n\ + \ \ test Enforcing = \"$(getenforce)\"\n\ + then\n\ + \ \ touch %s\n\ + \ \ setenforce 0\n\ + fi\n" selinux_enforcing selinux_enforcing); fbs "install qga" inst_cmd; fbs "setenforce restore" - (sprintf {|#!/bin/sh -if test -f %s; then - setenforce 1 - rm -f %s -fi -|} selinux_enforcing selinux_enforcing); + (sprintf "#!/bin/sh\n\ + if test -f %s; then\n\ + \ \ setenforce 1\n\ + \ \ rm -f %s\n\ + fi\n" selinux_enforcing selinux_enforcing); (* On all the distro families covered by "qga_pkg_of_family" and * "qga_svc_start_cmd", the QEMU guest agent service is always --- a/convert/convert_windows.ml +++ b/convert/convert_windows.ml @@ -352,51 +352,51 @@ let convert (g : G.guestfs) source inspe | None -> sprintf "reg delete \"%s\" /v %s /f" strkey name and configure_pnputil_install () = - let fb_script = {|@echo off - -setlocal EnableDelayedExpansion -set inf_dir=%systemroot%\Drivers\Virtio\ -echo Installing drivers from %inf_dir% -set REBOOT_PENDING=0 - -reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" -if %errorlevel%==0 ( -echo Windows Update: Reboot required. -set REBOOT_PENDING=1 -) - -reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" -if %errorlevel%==0 ( -echo CBS: Reboot required. -set REBOOT_PENDING=1 -) - -reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager" /v PendingFileRenameOperations -if %errorlevel%==0 ( -echo Session Manager: Reboot required. -set REBOOT_PENDING=1 -) - -if "%REBOOT_PENDING%"=="1" ( -echo A reboot is pending. -exit /b 249 -) else ( -echo No pending reboot detected. -) - -for %%f in ("%inf_dir%*.inf") do ( -echo Installing: %%~nxf. -%systemroot%\Sysnative\PnPutil -i -a "%%f" -if !errorlevel! neq 0 if !errorlevel! neq 259 ( -echo Failed to install %%~nxf. -exit /b 249 -) else ( -echo Successfully installed %%~nxf. -) -) -echo All drivers installed successfully. -exit /b 0 -)|} in + let fb_script = "@echo off\n\ + \n\ + setlocal EnableDelayedExpansion\n\ + set inf_dir=%systemroot%\\Drivers\\Virtio\\\n\ + echo Installing drivers from %inf_dir%\n\ + set REBOOT_PENDING=0\n\ + \n\ + reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\RebootRequired\"\n\ + if %errorlevel%==0 (\n\ + echo Windows Update: Reboot required.\n\ + set REBOOT_PENDING=1\n\ + )\n\ + \n\ + reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Component Based Servicing\\RebootPending\"\n\ + if %errorlevel%==0 (\n\ + echo CBS: Reboot required.\n\ + set REBOOT_PENDING=1\n\ + )\n\ + \n\ + reg query \"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\" /v PendingFileRenameOperations\n\ + if %errorlevel%==0 (\n\ + echo Session Manager: Reboot required.\n\ + set REBOOT_PENDING=1\n\ + )\n\ + \n\ + if \"%REBOOT_PENDING%\"==\"1\" (\n\ + echo A reboot is pending.\n\ + exit /b 249\n\ + ) else (\n\ + echo No pending reboot detected.\n\ + )\n\ + \n\ + for %%f in (\"%inf_dir%*.inf\") do (\n\ + echo Installing: %%~nxf.\n\ + %systemroot%\\Sysnative\\PnPutil -i -a \"%%f\"\n\ + if !errorlevel! neq 0 if !errorlevel! neq 259 (\n\ + echo Failed to install %%~nxf.\n\ + exit /b 249\n\ + ) else (\n\ + echo Successfully installed %%~nxf.\n\ + )\n\ + )\n\ + echo All drivers installed successfully.\n\ + exit /b 0\n\ + )" in (* Set priority higher than that of "network-configure" firstboot script. *) Firstboot.add_firstboot_script g inspect.i_root ~prio:2000 @@ -441,11 +441,11 @@ exit /b 0 let pnp_wait_path = "/Program Files/Guestfs/Firstboot/pnp_wait.exe" in let fb_script = sprintf - {|@echo off - -echo Wait for PnP to complete -"%s" -%s|} + "@echo off\n\ + \n\ + echo Wait for PnP to complete\n\ + \"%s\"\n\ + %s" (String.replace_char pnp_wait_path '/' '\\') reg_restore_str in @@ -457,23 +457,21 @@ echo Wait for PnP to complete (* Configure VMDP if possible *) g#upload tool_path "/vmdp.exe"; - let fb_script = {|echo V2V first boot script started -echo Decompressing VMDP installer -"\vmdp.exe" -pushd "VMDP-*" -echo Installing VMDP -setup.exe /eula_accepted /no_reboot -popd -|} in - - let fb_recover_script = {|echo Finishing VMDP installation -if not exist VMDP-* ( -"\vmdp.exe" -) -pushd "VMDP-*" -setup.exe /eula_accepted /no_reboot -popd -|} in + let fb_script = "echo V2V first boot script started\n\ + echo Decompressing VMDP installer\n\ + \"\\vmdp.exe\"\n\ + pushd \"VMDP-*\"\n\ + echo Installing VMDP\n\ + setup.exe /eula_accepted /no_reboot\n\ + popd\n" in + + let fb_recover_script = "echo Finishing VMDP installation\n\ + if not exist VMDP-* (\n\ + \"\\vmdp.exe\"\n\ + )\n\ + pushd \"VMDP-*\"\n\ + setup.exe /eula_accepted /no_reboot\n\ + popd\n" in Firstboot.add_firstboot_script g inspect.i_root "configure vmdp" fb_script; @@ -486,11 +484,10 @@ popd | None -> () (* nothing to be uninstalled *) | Some uninst -> let fb_script = sprintf - {|@echo off - -echo uninstalling Xen PV driver -"%s" -|} + "@echo off\n\ + \n\ + echo uninstalling Xen PV driver\n\ + \"%s\"\n" uninst in Firstboot.add_firstboot_script g inspect.i_root "uninstall Xen PV" fb_script @@ -501,15 +498,14 @@ echo uninstalling Xen PV driver List.iter ( fun uninst -> let fb_script = sprintf - {|@echo off - -REG DELETE %s /v RefCount /f - -echo uninstalling Parallels guest tools -rem ERROR_SUCCESS_REBOOT_REQUIRED (3010) is OK too -%s -if errorlevel 3010 exit /b 0 -|} + "@echo off\n\ + \n\ + REG DELETE %s /v RefCount /f\n\ + \n\ + echo uninstalling Parallels guest tools\n\ + rem ERROR_SUCCESS_REBOOT_REQUIRED (3010) is OK too\n\ + %s\n\ + if errorlevel 3010 exit /b 0\n" regkey uninst in Firstboot.add_firstboot_script g inspect.i_root @@ -520,13 +516,12 @@ if errorlevel 3010 exit /b 0 List.iter ( fun uninst -> let fb_script = sprintf - {|@echo off - -echo uninstalling VMware Tools -rem ERROR_SUCCESS_REBOOT_REQUIRED (3010) is OK too -%s -if errorlevel 3010 exit /b 0 -|} + "@echo off\n\ + \n\ + echo uninstalling VMware Tools\n\ + rem ERROR_SUCCESS_REBOOT_REQUIRED (3010) is OK too\n\ + %s\n\ + if errorlevel 3010 exit /b 0\n" uninst in Firstboot.add_firstboot_script g inspect.i_root ++++++ revert02-remove-timeout-before-installing-virtio-win-drivers.patch ++++++ From: Vadim Rozenfeld [email protected] Fri Jul 18 19:31:34 2025 +1000 Subject: remove timeout before installing virtio-win drivers Date: Fri Jul 18 10:50:35 2025 +0100: Git: 07192e2bf5e73dd4d3d7d3c1faa940c7a67e2d72 Signed-off-by: Vadim Rozenfeld <[email protected]> --- a/convert/convert_windows.ml +++ b/convert/convert_windows.ml @@ -359,6 +359,8 @@ let convert (g : G.guestfs) source inspe echo Installing drivers from %inf_dir%\n\ set REBOOT_PENDING=0\n\ \n\ + timeout /t 10 /nobreak\n\ + \n\ reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\RebootRequired\"\n\ if %errorlevel%==0 (\n\ echo Windows Update: Reboot required.\n\ ++++++ revert03-Ignore-ERROR_NO_MORE_ITEMS-status-from-PnPUtil.patch ++++++ From: Vadim Rozenfeld [email protected] Tue Jul 15 18:35:16 2025 +1000 Subject: Ignore ERROR_NO_MORE_ITEMS status from PnPUtil. Date: Tue Jul 15 10:31:28 2025 +0100: Git: 523aff28975532a4fe715193c28c2ede21741392 This status indicates the target device already has a better or newer driver installed. Signed-off-by: Vadim Rozenfeld <[email protected]> --- a/convert/convert_windows.ml +++ b/convert/convert_windows.ml @@ -389,7 +389,7 @@ let convert (g : G.guestfs) source inspe for %%f in (\"%inf_dir%*.inf\") do (\n\ echo Installing: %%~nxf.\n\ %systemroot%\\Sysnative\\PnPutil -i -a \"%%f\"\n\ - if !errorlevel! neq 0 if !errorlevel! neq 259 (\n\ + if !errorlevel! NEQ 0 (\n\ echo Failed to install %%~nxf.\n\ exit /b 249\n\ ) else (\n\ ++++++ revert04-Modify-configure_pnputil_install-script.patch ++++++ From: Vadim Rozenfeld [email protected] Thu Jul 10 10:12:56 2025 +1000 Subject: Modify configure_pnputil_install script to check pending reboot status and report PnPUtil execution status Date: Sun Jul 13 12:28:08 2025 +0100: Git: 594b05d6940c8719167d10c0cdfaa253349060ab This change adds checks for system reboot status and reports the result of PnPUtil driver installation attempt. Related: https://issues.redhat.com/browse/RHEL-100682 Signed-off-by: Vadim Rozenfeld <[email protected]> --- a/convert/convert_windows.ml +++ b/convert/convert_windows.ml @@ -354,51 +354,9 @@ let convert (g : G.guestfs) source inspe and configure_pnputil_install () = let fb_script = "@echo off\n\ \n\ - setlocal EnableDelayedExpansion\n\ - set inf_dir=%systemroot%\\Drivers\\Virtio\\\n\ - echo Installing drivers from %inf_dir%\n\ - set REBOOT_PENDING=0\n\ - \n\ - timeout /t 10 /nobreak\n\ - \n\ - reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\RebootRequired\"\n\ - if %errorlevel%==0 (\n\ - echo Windows Update: Reboot required.\n\ - set REBOOT_PENDING=1\n\ - )\n\ - \n\ - reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Component Based Servicing\\RebootPending\"\n\ - if %errorlevel%==0 (\n\ - echo CBS: Reboot required.\n\ - set REBOOT_PENDING=1\n\ - )\n\ - \n\ - reg query \"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\" /v PendingFileRenameOperations\n\ - if %errorlevel%==0 (\n\ - echo Session Manager: Reboot required.\n\ - set REBOOT_PENDING=1\n\ - )\n\ - \n\ - if \"%REBOOT_PENDING%\"==\"1\" (\n\ - echo A reboot is pending.\n\ - exit /b 249\n\ - ) else (\n\ - echo No pending reboot detected.\n\ - )\n\ - \n\ - for %%f in (\"%inf_dir%*.inf\") do (\n\ - echo Installing: %%~nxf.\n\ - %systemroot%\\Sysnative\\PnPutil -i -a \"%%f\"\n\ - if !errorlevel! NEQ 0 (\n\ - echo Failed to install %%~nxf.\n\ - exit /b 249\n\ - ) else (\n\ - echo Successfully installed %%~nxf.\n\ - )\n\ - )\n\ - echo All drivers installed successfully.\n\ - exit /b 0\n\ - )" in + echo Wait for VirtIO drivers to be installed\n\ + %systemroot%\\Sysnative\\PnPutil -i -a \ + %systemroot%\\Drivers\\Virtio\\*.inf" in (* Set priority higher than that of "network-configure" firstboot script. *) Firstboot.add_firstboot_script g inspect.i_root ~prio:2000 ++++++ revert05-firstboot.bat-must-not-reboot-VM-on-error-code-250.patch ++++++ From: Srihari Parimi [email protected] Wed Apr 29 09:06:54 2026 +0530 Subject: mlcustomize: firstboot.bat must not reboot VM on error code 250 Date: Fri May 1 16:35:04 2026 +0100: Git: 228449739684b8ed699cac03cf1f5bbe9ada4f26 The firstboot.bat script should not reboot the VM if any of the batch scripts return error code 250. This avoids unnecessary reboots, effectively reducing the overall boot time during conversion. Testing done + Created 2 batch scripts 1. test-script-noreboot.bat exits with error code 250 2. test-script-reboot.bat exits with error code 0 + Converted Windows 11 VM by running virt-v2v command below virt-v2v -i vmx ~/VirtualMachines/testvm0_win11_x64/testvm0_win11_x64.vmx -o local -os ~/var/tmp/ --firstboot ~/VirtualMachines/imgdata/test-script-noreboot.bat --firstboot ~/VirtualMachines/imgdata/test-script-reboot.bat The order of passing script to virt-v2v - test-script-noreboot.bat followed by test-script-reboot.bat via --firstboot argument. This ensures that the reboot happens only after the call to 2nd script + Booted Windows 11 VM using virt-manager + Logs created by the two batch files show that there was no reboot after test-script-noreboot.bat (based on timestamp). Logs below C:\>more virt-v2v-test.log Firstboot script-noreboot started at 17:59:26.33 Testing magic exit code Firstboot script-reboot started at 17:59:26.34 Test default behaviour Fixes: https://redhat.atlassian.net/browse/RHEL-170706 diff --git a/common/mlcustomize/firstboot.ml b/common/mlcustomize/firstboot.ml index 543e98f..366beca 100644 --- a/common/mlcustomize/firstboot.ml +++ b/common/mlcustomize/firstboot.ml @@ -320,18 +320,13 @@ for %%%%f in ("%%scripts%%"\*.bat) do ( echo Script failed, will retry on next boot ) + :: Reboot the computer. This is necessary to free any locked + :: files which may prevent later scripts from running. + shutdown /r /t 0 /y - :: Reboot the computer only if exit code indicates. - :: Exit code 250 means do not reboot, otherwise reboot - :: Reboot is necessary to free any locked files which - :: may prevent later scripts from running. - if !elvl! NEQ 250 ( - shutdown /r /t 0 /y + :: Exit the script (in case shutdown returns before rebooting). + :: On next boot, the whole firstboot service will be called again. + exit /b - :: Exit the script (in case shutdown returns before rebooting). - :: On next boot, the whole firstboot service will be called again. - - exit /b - ) ) :: Fallthrough here if there are no scripts.
