Skip to content

dom0-update: In download mode, only send specifically requested packages to dom0#638

Open
crass wants to merge 2 commits intoQubesOS:mainfrom
crass:fix-dom0-update-packages
Open

dom0-update: In download mode, only send specifically requested packages to dom0#638
crass wants to merge 2 commits intoQubesOS:mainfrom
crass:fix-dom0-update-packages

Conversation

@crass
Copy link
Copy Markdown

@crass crass commented Feb 28, 2026

Currently qubes-download-dom0-updates.sh will send to dom0 all files with a .rpm file extension to dom0 to be installed by the package manager. Because interrupting the qubes-dom0-update does not stop the UpdateVM from downloading requested packages (QubesOS/qubes-issues#10722), the files sent back to dom0 to be installed by the package manager may be more than was actually requested. This could cause unintended installs or installation failures.

This PR changes qubes-download-dom0-updates.sh to only send packages that were requested. This is done by parsing the output of the package manager to extract package filenames. This was tested on Qubes 4.3, with the UpdateVM being sys-whonix.

sys-whonix uses dnf, but it appears that the script needs to support yum and dnf5. Those have not been explicitly tested. dnf5 from fedora 41 appears to have sufficiently similar output and I'd expect the output to be pretty stable.

Fixes QubesOS/qubes-issues#10716

@crass crass force-pushed the fix-dom0-update-packages branch from 603b811 to 880e804 Compare March 3, 2026 06:21
@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 3, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 71.71%. Comparing base (2e5866f) to head (62bfccd).
⚠️ Report is 11 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #638      +/-   ##
==========================================
+ Coverage   69.89%   71.71%   +1.81%     
==========================================
  Files           3        3              
  Lines         495      502       +7     
==========================================
+ Hits          346      360      +14     
+ Misses        149      142       -7     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Copy Markdown
Member

@marmarek marmarek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks quite fragile IMO, the output format isn't guaranteed to stay the same...
Can you avoid this magic file selection if --clean was used (in which case old packages are removed first anyway)? Just in case it breaks at some point, there would be an option to bypass it. And for that effect, maybe add hint about it to the "package requested but not downloaded" error message?

Comment thread package-managers/qubes-download-dom0-updates.sh Outdated

if ls "$DOM0_UPDATES_DIR"/packages/*.rpm > /dev/null 2>&1; then
case "$UPDATE_ACTION" in
download|upgrade|install)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This breaks all the other actions - like distro-sync or downgrade, or some future action not known by dnf yet. Please add fallback to the old approach for other actions.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I agree this is a good idea. I'd also like to note that actions under the fallback will have the same issue that this is trying to fix. I suppose it can not be helped.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added distro-sync and downgrade and tested them. There are command aliases that could be added, but I'm not sure how much we care. These are the common commands. A fallback has been added for when there is an error in the new package gathering or if it comes back with no packages. If the RPMS var is set to the empty string for upgrade, this could be a parsing problem that doesn't cause an error or just that there are no packages to update. In this case it doesn't hurt to send all cached packages, though it can be the unnecessary sending of hundreds of MBs of package data to dom0. At some point we could optimize that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TBH, I'd prefer the less common commands to fallback to the old method, which is more reliable (doesn't depend on specific dnf output formatting). This is especially relevant for distro-sync which is used for distribution upgrade and may include less common lines like changing arch of a package, forced downgrades, obsoletes etc. If output processing finds some packages, but not all, the upgrade as a whole will fail...

But also, please go directly to the old method in case --clean was used. There are no other packages downloaded in this case, and it would give a way to upgrade even if output processing misses something.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I was confused by the use of fallback, which, to my mind, means a path taken on some kind of failure in the regular code path. But I'm now understanding you to mean that distro-sync should unconditionally use the old/current code path. Correct? Perhaps also, I could add an argument, say --use-all-cached-packages, that forces the old code path.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But I'm now understanding you to mean that distro-sync should unconditionally use the old/current code path. Correct?

Yes

Perhaps also, I could add an argument, say --use-all-cached-packages, that forces the old code path.

I'd say doing it when --clean is specified is enough. --clean also avoids the original issue this PR is fixing (at the expense of potentially downloading some packages again).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps also, I could add an argument, say --use-all-cached-packages, that forces the old code path.

I'd say doing it when --clean is specified is enough. --clean also avoids the original issue this PR is fixing (at the expense of potentially downloading some packages again).

This is still pending.

Copy link
Copy Markdown
Author

@crass crass Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reminder. I've not had the time to work on this. Just pushed changes. I wonder if distro-sync should use the new code path and the old path can be chosen by passing --clean.

@crass crass force-pushed the fix-dom0-update-packages branch 2 times, most recently from 952ab07 to 4455d33 Compare March 11, 2026 05:42
…ges to dom0

Save output of the package manager command. Then, if called with an action
that downloads packages, parse out the requested packages and only send
those to dom0. Fallback to the old method if --clean was specified.

This fixes an issue where packages could be installed that were not
intended or where packages could not be installed due to missing
dependencies from packages not explicitly requested by the user.

Fixes QubesOS/qubes-issues#10716
@crass crass force-pushed the fix-dom0-update-packages branch from 4455d33 to 5822cd0 Compare April 3, 2026 01:38
@marmarek
Copy link
Copy Markdown
Member

marmarek commented Apr 5, 2026

Now with no updates pending (--clean or not), I get an error:

qfile-agent: Fatal error: stat *.rpm (error type: No such file or directory)
'/usr/lib/qubes/qrexec-client-vm dom0 qubes.ReceiveUpdates /usr/lib/qubes/qfile-agent /var/lib/qubes/dom0-updates/packages/*.rpm' failed with exit code 1!

The old code had if ls "$DOM0_UPDATES_DIR"/packages/*.rpm > /dev/null 2>&1; then to handle this case, but it isn't nice. Maybe add shopt -s nullglob and then check if expanded rpmfiles is not empty?

@crass
Copy link
Copy Markdown
Author

crass commented Apr 8, 2026

Now with no updates pending (--clean or not), I get an error:

qfile-agent: Fatal error: stat *.rpm (error type: No such file or directory)
'/usr/lib/qubes/qrexec-client-vm dom0 qubes.ReceiveUpdates /usr/lib/qubes/qfile-agent /var/lib/qubes/dom0-updates/packages/*.rpm' failed with exit code 1!

The old code had if ls "$DOM0_UPDATES_DIR"/packages/*.rpm > /dev/null 2>&1; then to handle this case, but it isn't nice. Maybe add shopt -s nullglob and then check if expanded rpmfiles is not empty?

Hmm, I don't see why qfile-agent is being run. There is a [ -n "$RPMS" ] check to ensure there are rpms if qfile-agent is going to be run. Can you get the shell trace?

@marmarek
Copy link
Copy Markdown
Member

marmarek commented Apr 8, 2026

That's probably related to the fallback:

RPMS=$(for P in "$DOM0_UPDATES_DIR"/packages/*.rpm; do echo "${P##*/}"; done)

if there are no packages there, it will set RPMS=*.rpm (literally *.rpm value)

If there are no downloaded packages, do not assign literal "*.rpm" to
the RPMS variable - the later part of the scripts would actually try to
send a file with this name, and fail.
@qubesos-bot
Copy link
Copy Markdown

qubesos-bot commented Apr 23, 2026

OpenQA test summary

Complete test suite and dependencies: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026042316-4.3&flavor=pull-requests

Test run included the following:

New failures, excluding unstable

Compared to: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026032404-devel&flavor=update

  • system_tests_whonix

    • whonixcheck: wait_serial (wait serial expected)
      # wait_serial expected: qr/ki5k_-\d+-/...
  • system_tests_basic_vm_qrexec_gui

    • TC_20_NonAudio_debian-13-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_pvgrub_salt_storage

    • TC_41_HVMGrub_debian-13-xfce: test_001_standalone_vm_dracut (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-43-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-43-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_usbproxy

    • TC_20_USBProxy_core3_debian-13-xfce: test_090_attach_stubdom (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_basic_vm_qrexec_gui_zfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_audio@hw1

  • system_tests_qwt_win10@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'personal-text-editor'...
  • system_tests_qwt_win11@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'windows-Explorer-empt...
  • system_tests_guivm_gpu_gui_interactive@hw13

    • shutdown: unnamed test (unknown)
    • shutdown: Failed (test died)
      # Test died: no candidate needle with tag(s) 'text-logged-in-root' ...
  • system_tests_whonix@hw1

    • whonixcheck: fail (unknown)
      Whonixcheck for sys-whonix failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

  • system_tests_basic_vm_qrexec_gui_btrfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui_ext4

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui_xfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui@hw7

    • TC_20_NonAudio_debian-13-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

Failed tests

43 failures
  • system_tests_whonix

    • whonixcheck: fail (unknown)
      Whonixcheck for sys-whonix failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

    • whonixcheck: wait_serial (wait serial expected)
      # wait_serial expected: qr/ki5k_-\d+-/...

  • system_tests_basic_vm_qrexec_gui

    • TC_20_NonAudio_debian-13-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_pvgrub_salt_storage

    • TC_41_HVMGrub_debian-13-xfce: test_001_standalone_vm_dracut (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_debian-13-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_debian-13-xfce: test_011_template_based_vm_dracut (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-43-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-43-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_usbproxy

    • TC_20_USBProxy_core3_debian-13-xfce: test_090_attach_stubdom (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_basic_vm_qrexec_gui_zfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_audio@hw1

  • system_tests_qwt_win10@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'personal-text-editor'...
  • system_tests_qwt_win10_seamless@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...
  • system_tests_qwt_win11@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'windows-Explorer-empt...
  • system_tests_guivm_gpu_gui_interactive@hw13

    • shutdown: unnamed test (unknown)
    • shutdown: Failed (test died)
      # Test died: no candidate needle with tag(s) 'text-logged-in-root' ...
  • system_tests_whonix@hw1

    • whonixcheck: fail (unknown)
      Whonixcheck for sys-whonix failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

  • system_tests_basic_vm_qrexec_gui_btrfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui_ext4

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui_xfs

    • TC_20_NonAudio_debian-13-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18-pool: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

  • system_tests_basic_vm_qrexec_gui@hw7

    • TC_20_NonAudio_debian-13-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_fedora-43-xfce: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-gateway-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

    • TC_20_NonAudio_whonix-workstation-18: test_500_gui_agent_env_sync (failure)
      AssertionError: unexpected QUBES_ENV_TEST value from session, got '...

Fixed failures

Compared to: https://openqa.qubes-os.org/tests/170766#dependencies

32 fixed
  • system_tests_network

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.network failed (exit code 1), details repor...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • VmNetworking_debian-13-xfce: test_203_fake_ip_inter_vm_allow (failure)
      ^... AssertionError: 1 != 0

  • system_tests_pvgrub_salt_storage

    • TC_41_HVMGrub_fedora-42-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-42-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_extra

    • system_tests: Fail (unknown)
      Tests qubes.tests.extra failed (exit code 1), details reported sepa...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • TC_01_InputProxyExclude_debian-13-xfce: test_000_qemu_tablet (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_gui_interactive

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/Dhelp-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_network_ipv6

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.network_ipv6 failed (exit code 1), details ...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • VmIPv6Networking_fedora-42-xfce: test_113_reattach_after_provider_kill (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 1 != 0

  • system_tests_network_updates

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.dom0_update failed (exit code 1), details r...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • TC_00_Dom0Upgrade_whonix-gateway-18: test_020_install_wrong_sign (error)
      subprocess.CalledProcessError: Command 'timeout=120; while ! tor-ci...

    • TC_11_QvmTemplateMgmtVM_debian-13-xfce: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_debian-13-xfce: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

    • TC_11_QvmTemplateMgmtVM_fedora-42-xfce: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_fedora-42-xfce: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

    • TC_11_QvmTemplateMgmtVM_whonix-gateway-18: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_whonix-gateway-18: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

  • system_tests_kde_gui_interactive

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/bMse8-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_guivm_vnc_gui_interactive

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/C_fDy-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_audio

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.audio failed (exit code 1), details reporte...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • TC_20_AudioVM_Pulse_whonix-workstation-18: test_225_audio_rec_unmuted_hvm (failure)
      AssertionError: too short audio, expected 10s, got 7.59433106575963...

    • TC_20_AudioVM_PipeWire_debian-13-xfce: test_251_audio_playback_audiovm_pipewire_late_start (failure)
      AssertionError: pacat for test-inst-vm1 (xid 48) running(False) in ...

  • system_tests_qwt_win10@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...
  • system_tests_qwt_win11@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...

Unstable tests

Details
  • system_tests_guivm_vnc_gui_interactive

    collect_logs/Failed (1/5 times with errors)
    • job 172242 # Test died: command 'curl --form upload=@journalctl.log --form upn...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172242 # wait_serial expected: qr/73DgV-\d+-/...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172242 # wait_serial expected: qr/uOleL-\d+-/...
  • system_tests_guivm_gui_interactive

    collect_logs/Failed (1/5 times with errors)
    • job 172256 # Test died: command 'curl --form upload=@journalctl.log --form upn...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172256 # wait_serial expected: qr/v3Six-\d+-/...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172256 # wait_serial expected: qr/6OJPL-\d+-/...

Performance Tests

Performance degradation:

11 performance degradations
  • debian-13-xfce_exec: 8.47 🔻 ( previous job: 7.30, degradation: 116.01%)
  • debian-13-xfce_socket: 8.86 🔻 ( previous job: 8.02, degradation: 110.39%)
  • whonix-workstation-18_exec-data-duplex: 66.09 🔻 ( previous job: 59.45, degradation: 111.16%)
  • whonix-workstation-18_socket-data-duplex: 98.97 🔻 ( previous job: 80.77, degradation: 122.53%)
  • dom0_root_seq1m_q8t1_read 3:read_bandwidth_kb: 199809.00 🔻 ( previous job: 485002.00, degradation: 41.20%)
  • dom0_root_seq1m_q8t1_write 3:write_bandwidth_kb: 142294.00 🔻 ( previous job: 217546.00, degradation: 65.41%)
  • dom0_root_seq1m_q1t1_read 3:read_bandwidth_kb: 60295.00 🔻 ( previous job: 70705.00, degradation: 85.28%)
  • dom0_root_seq1m_q1t1_write 3:write_bandwidth_kb: 21157.00 🔻 ( previous job: 42537.00, degradation: 49.74%)
  • dom0_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 804.00 🔻 ( previous job: 3011.00, degradation: 26.70%)
  • dom0_varlibqubes_seq1m_q8t1_read 3:read_bandwidth_kb: 47892.00 🔻 ( previous job: 233483.00, degradation: 20.51%)
  • dom0_varlibqubes_rnd4k_q32t1_write 3:write_bandwidth_kb: 7065.00 🔻 ( previous job: 8434.00, degradation: 83.77%)

Remaining performance tests:

100 tests
  • debian-13-xfce_exec-root: 26.82 🔻 ( previous job: 26.58, degradation: 100.92%)
  • debian-13-xfce_socket-root: 8.38 🟢 ( previous job: 8.38, improvement: 99.99%)
  • debian-13-xfce_exec-data-simplex: 64.97 🟢 ( previous job: 66.06, improvement: 98.35%)
  • debian-13-xfce_exec-data-duplex: 58.47 🟢 ( previous job: 61.22, improvement: 95.51%)
  • debian-13-xfce_exec-data-duplex-root: 73.46 🔻 ( previous job: 72.95, degradation: 100.69%)
  • debian-13-xfce_socket-data-duplex: 94.35 🔻 ( previous job: 86.03, degradation: 109.67%)
  • fedora-43-xfce_exec: 9.21
  • fedora-43-xfce_exec-root: 71.47
  • fedora-43-xfce_socket: 7.60
  • fedora-43-xfce_socket-root: 7.36
  • fedora-43-xfce_exec-data-simplex: 58.04
  • fedora-43-xfce_exec-data-duplex: 55.71
  • fedora-43-xfce_exec-data-duplex-root: 97.24
  • fedora-43-xfce_socket-data-duplex: 76.22
  • whonix-gateway-18_exec: 7.19 🟢 ( previous job: 7.69, improvement: 93.48%)
  • whonix-gateway-18_exec-root: 126.65 🟢 ( previous job: 132.16, improvement: 95.83%)
  • whonix-gateway-18_socket: 7.52 🟢 ( previous job: 8.05, improvement: 93.41%)
  • whonix-gateway-18_socket-root: 7.73 🔻 ( previous job: 7.16, degradation: 108.01%)
  • whonix-gateway-18_exec-data-simplex: 65.27 🔻 ( previous job: 64.40, degradation: 101.35%)
  • whonix-gateway-18_exec-data-duplex: 66.48 🔻 ( previous job: 63.65, degradation: 104.45%)
  • whonix-gateway-18_exec-data-duplex-root: 121.23 🟢 ( previous job: 123.30, improvement: 98.32%)
  • whonix-gateway-18_socket-data-duplex: 96.67 🟢 ( previous job: 113.72, improvement: 85.01%)
  • whonix-workstation-18_exec: 8.50 🔻 ( previous job: 8.20, degradation: 103.62%)
  • whonix-workstation-18_exec-root: 144.76 🔻 ( previous job: 138.84, degradation: 104.26%)
  • whonix-workstation-18_socket: 8.71 🔻 ( previous job: 8.19, degradation: 106.28%)
  • whonix-workstation-18_socket-root: 8.45 🟢 ( previous job: 8.92, improvement: 94.68%)
  • whonix-workstation-18_exec-data-simplex: 69.29 🔻 ( previous job: 63.54, degradation: 109.05%)
  • whonix-workstation-18_exec-data-duplex-root: 129.93 🟢 ( previous job: 139.63, improvement: 93.06%)
  • dom0_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 13813.00 🟢 ( previous job: 12342.00, improvement: 111.92%)
  • dom0_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 11996.00 🟢 ( previous job: 1182.00, improvement: 1014.89%)
  • dom0_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 1168.00 🟢 ( previous job: 793.00, improvement: 147.29%)
  • dom0_varlibqubes_seq1m_q8t1_write 3:write_bandwidth_kb: 68674.00 🟢 ( previous job: 34913.00, improvement: 196.70%)
  • dom0_varlibqubes_seq1m_q1t1_read 3:read_bandwidth_kb: 432224.00 🟢 ( previous job: 370521.00, improvement: 116.65%)
  • dom0_varlibqubes_seq1m_q1t1_write 3:write_bandwidth_kb: 177446.00 🟢 ( previous job: 154458.00, improvement: 114.88%)
  • dom0_varlibqubes_rnd4k_q32t1_read 3:read_bandwidth_kb: 101747.00 🟢 ( previous job: 27602.00, improvement: 368.62%)
  • dom0_varlibqubes_rnd4k_q1t1_read 3:read_bandwidth_kb: 7921.00 🟢 ( previous job: 7112.00, improvement: 111.38%)
  • dom0_varlibqubes_rnd4k_q1t1_write 3:write_bandwidth_kb: 4294.00 🔻 ( previous job: 4565.00, degradation: 94.06%)
  • fedora-43-xfce_root_seq1m_q8t1_read 3:read_bandwidth_kb: 303583.00
  • fedora-43-xfce_root_seq1m_q8t1_write 3:write_bandwidth_kb: 204312.00
  • fedora-43-xfce_root_seq1m_q1t1_read 3:read_bandwidth_kb: 327270.00
  • fedora-43-xfce_root_seq1m_q1t1_write 3:write_bandwidth_kb: 63260.00
  • fedora-43-xfce_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 88132.00
  • fedora-43-xfce_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 2164.00
  • fedora-43-xfce_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8169.00
  • fedora-43-xfce_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 669.00
  • fedora-43-xfce_private_seq1m_q8t1_read 3:read_bandwidth_kb: 413639.00
  • fedora-43-xfce_private_seq1m_q8t1_write 3:write_bandwidth_kb: 143003.00
  • fedora-43-xfce_private_seq1m_q1t1_read 3:read_bandwidth_kb: 281496.00
  • fedora-43-xfce_private_seq1m_q1t1_write 3:write_bandwidth_kb: 111597.00
  • fedora-43-xfce_private_rnd4k_q32t1_read 3:read_bandwidth_kb: 71132.00
  • fedora-43-xfce_private_rnd4k_q32t1_write 3:write_bandwidth_kb: 1578.00
  • fedora-43-xfce_private_rnd4k_q1t1_read 3:read_bandwidth_kb: 8409.00
  • fedora-43-xfce_private_rnd4k_q1t1_write 3:write_bandwidth_kb: 518.00
  • fedora-43-xfce_volatile_seq1m_q8t1_read 3:read_bandwidth_kb: 381161.00
  • fedora-43-xfce_volatile_seq1m_q8t1_write 3:write_bandwidth_kb: 74443.00
  • fedora-43-xfce_volatile_seq1m_q1t1_read 3:read_bandwidth_kb: 349176.00
  • fedora-43-xfce_volatile_seq1m_q1t1_write 3:write_bandwidth_kb: 86304.00
  • fedora-43-xfce_volatile_rnd4k_q32t1_read 3:read_bandwidth_kb: 72969.00
  • fedora-43-xfce_volatile_rnd4k_q32t1_write 3:write_bandwidth_kb: 1584.00
  • fedora-43-xfce_volatile_rnd4k_q1t1_read 3:read_bandwidth_kb: 8272.00
  • fedora-43-xfce_volatile_rnd4k_q1t1_write 3:write_bandwidth_kb: 788.00
  • debian-13-xfce_dom0-dispvm-api (mean:6.39): 76.68 🟢 ( previous job: 81.47, improvement: 94.12%)
  • debian-13-xfce_dom0-dispvm-gui-api (mean:7.732): 92.79 🔻 ( previous job: 92.38, degradation: 100.44%)
  • debian-13-xfce_dom0-dispvm-preload-2-api (mean:3.222): 38.67 🟢 ( previous job: 48.28, improvement: 80.09%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-0-api (mean:2.809): 33.71 🟢 ( previous job: 44.34, improvement: 76.03%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.204): 38.45 🟢 ( previous job: 54.23, improvement: 70.90%)
  • debian-13-xfce_dom0-dispvm-preload-4-api (mean:2.291): 27.49 🟢 ( previous job: 40.37, improvement: 68.09%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.583): 30.99 🟢 ( previous job: 44.04, improvement: 70.38%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.424): 29.09 🟢 ( previous job: 45.36, improvement: 64.14%)
  • debian-13-xfce_dom0-dispvm-preload-2-gui-api (mean:4.496): 53.95 🟢 ( previous job: 58.18, improvement: 92.73%)
  • debian-13-xfce_dom0-dispvm-preload-4-gui-api (mean:3.838): 46.06 🔻 ( previous job: 43.54, degradation: 105.79%)
  • debian-13-xfce_dom0-dispvm-preload-6-gui-api (mean:3.421): 41.05 🟢 ( previous job: 47.37, improvement: 86.66%)
  • debian-13-xfce_dom0-vm-api (mean:0.039): 0.47 🔻 ( previous job: 0.46, degradation: 102.40%)
  • debian-13-xfce_dom0-vm-gui-api (mean:0.042): 0.50 🟢 ( previous job: 0.51, improvement: 99.80%)
  • fedora-43-xfce_dom0-dispvm-api (mean:7.394): 88.73
  • fedora-43-xfce_dom0-dispvm-gui-api (mean:9.714): 116.57
  • fedora-43-xfce_dom0-dispvm-preload-2-api (mean:3.79): 45.49
  • fedora-43-xfce_dom0-dispvm-preload-2-delay-0-api (mean:3.587): 43.05
  • fedora-43-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.915): 46.98
  • fedora-43-xfce_dom0-dispvm-preload-4-api (mean:3.0): 36.00
  • fedora-43-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.741): 32.89
  • fedora-43-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:3.042): 36.51
  • fedora-43-xfce_dom0-dispvm-preload-2-gui-api (mean:5.331): 63.97
  • fedora-43-xfce_dom0-dispvm-preload-4-gui-api (mean:4.25): 51.01
  • fedora-43-xfce_dom0-dispvm-preload-6-gui-api (mean:3.688): 44.26
  • fedora-43-xfce_dom0-vm-api (mean:0.039): 0.47
  • fedora-43-xfce_dom0-vm-gui-api (mean:0.043): 0.52
  • whonix-workstation-18_dom0-dispvm-api (mean:8.259): 99.11 🟢 ( previous job: 114.77, improvement: 86.35%)
  • whonix-workstation-18_dom0-dispvm-gui-api (mean:10.245): 122.94 🟢 ( previous job: 127.27, improvement: 96.59%)
  • whonix-workstation-18_dom0-dispvm-preload-2-api (mean:4.193): 50.32 🟢 ( previous job: 70.96, improvement: 70.91%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-0-api (mean:4.102): 49.23 🟢 ( previous job: 65.29, improvement: 75.40%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:5.013): 60.16 🟢 ( previous job: 74.32, improvement: 80.95%)
  • whonix-workstation-18_dom0-dispvm-preload-4-api (mean:3.171): 38.06 🟢 ( previous job: 57.74, improvement: 65.91%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-0-api (mean:3.494): 41.93 🟢 ( previous job: 65.76, improvement: 63.76%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:3.573): 42.87 🟢 ( previous job: 59.80, improvement: 71.69%)
  • whonix-workstation-18_dom0-dispvm-preload-2-gui-api (mean:5.992): 71.91 🟢 ( previous job: 78.19, improvement: 91.97%)
  • whonix-workstation-18_dom0-dispvm-preload-4-gui-api (mean:4.869): 58.43 🟢 ( previous job: 65.73, improvement: 88.90%)
  • whonix-workstation-18_dom0-dispvm-preload-6-gui-api (mean:3.848): 46.17 🟢 ( previous job: 61.35, improvement: 75.26%)
  • whonix-workstation-18_dom0-vm-api (mean:0.031): 0.37 🟢 ( previous job: 0.58, improvement: 63.89%)
  • whonix-workstation-18_dom0-vm-gui-api (mean:0.046): 0.55 🟢 ( previous job: 0.62, improvement: 87.80%)

@marmarek
Copy link
Copy Markdown
Member

I tried to fix your version, but quite quickly found several more issues, mostly due to not handling various output lines. For example:

Updating and loading repositories:
 Qubes Host Repository (updates-testing 100% |   1.9 KiB/s |   2.8 KiB |  00m01s
 Qubes Host Repository (updates)        100% |   2.0 KiB/s |   2.7 KiB |  00m01s
 Qubes Host Repository (security-testin 100% |   2.4 KiB/s |   2.8 KiB |  00m01s
 Qubes updates testing                  100% |  21.5 KiB/s |   2.0 KiB |  00m00s
 Fedora 41 - x86_64                     100% |   4.1 KiB/s |   4.2 KiB |  00m01s
 Qubes Host Repository (devel testing)  100% |   3.1 KiB/s |   2.8 KiB |  00m01s
 QB test (host)                         100% |  16.2 KiB/s |   1.5 KiB |  00m00s
 Fedora 41 - x86_64 - Updates           100% |   4.8 KiB/s |   3.6 KiB |  00m01s
Repositories loaded.
Total size of inbound packages is 2 MiB. Need to download 0 B.Package Arch   Version         Repository      Size
Installing:
 mc     x86_64 1:4.8.32-1.fc41 updates      7.2 MiB

Transaction Summary:
 Installing:         1 package


After this operation, 7 MiB extra will be used (install 7 MiB, remove 0 B).
The operation will only download packages for the transaction.
[1/1] mc-1:4.8.32-1.fc41.x86_64         100% |   0.0   B/s |   0.0   B |  00m00s
>>> Already downloaded                                                          
--------------------------------------------------------------------------------
[1/1] Total                             100% |   0.0   B/s |   0.0   B |  00m00s
Complete!
Package Installing:-package.1.rpm requested but not downloaded
No packages found in output for action . This is likely
due to a change in the output format. Falling back to old method that
sends all verified packages in the package cache.
Output:
Package Arch   Version         Repository      Size
Installing:
 mc     x86_64 1:4.8.32-1.fc41 updates      7.2 MiB

Transaction Summary:
 Installing:         1 package

or extra lines between list of packages:

Updating and loading repositories:
 Qubes Host Repository (security-testin 100% |   2.9 KiB/s |   2.8 KiB |  00m01s
 Qubes updates testing                  100% |  21.5 KiB/s |   2.0 KiB |  00m00s
 Qubes Host Repository (devel testing)  100% |   3.4 KiB/s |   2.8 KiB |  00m01s
 Qubes Host Repository (updates-testing 100% |   4.2 KiB/s |   2.8 KiB |  00m01s
 Fedora 41 - x86_64                     100% |   8.2 KiB/s |   4.2 KiB |  00m01s
 Qubes Host Repository (updates)        100% |   6.8 KiB/s |   2.7 KiB |  00m00s
 Fedora 41 - x86_64 - Updates           100% |  14.8 KiB/s |   3.6 KiB |  00m00s
 QB test (host)                         100% |  15.7 KiB/s |   1.5 KiB |  00m00s
Repositories loaded.
Total size of inbound packages is 11 MiB. Need to download 11 MiB.Package                   Arch   Version           Repository      Size
Upgrading:
 vim-common               x86_64 2:9.1.1914-1.fc41 updates     37.0 MiB
   replacing vim-common   x86_64 2:9.1.737-1.fc41  <unknown>   36.7 MiB
 vim-data                 noarch 2:9.1.1914-1.fc41 updates     10.2 KiB
   replacing vim-data     noarch 2:9.1.737-1.fc41  <unknown>   17.8 KiB
 vim-enhanced             x86_64 2:9.1.1914-1.fc41 updates      4.2 MiB
   replacing vim-enhanced x86_64 2:9.1.737-1.fc41  <unknown>    4.0 MiB
 vim-minimal              x86_64 2:9.1.1914-1.fc41 updates      1.7 MiB
   replacing vim-minimal  x86_64 2:9.1.737-1.fc41  <unknown>    1.7 MiB

Transaction Summary:
 Upgrading:          4 packages
 Replacing:          4 packages


After this operation, 481 KiB extra will be used (install 43 MiB, remove 42 MiB).
The operation will only download packages for the transaction.
[1/4] vim-data-2:9.1.1914-1.fc41.noarch 100% |  74.8 KiB/s |  17.4 KiB |  00m00s
[2/4] vim-enhanced-2:9.1.1914-1.fc41.x8 100% |   3.5 MiB/s |   2.0 MiB |  00m01s
[3/4] vim-common-2:9.1.1914-1.fc41.x86_ 100% |   8.5 MiB/s |   8.1 MiB |  00m01s
[4/4] vim-minimal-2:9.1.1914-1.fc41.x86 100% | 739.2 KiB/s | 846.4 KiB |  00m01s
--------------------------------------------------------------------------------
[4/4] Total                             100% |   7.9 MiB/s |  11.0 MiB |  00m01s
Complete!
Package replacing-x86_64.vim-common.rpm requested but not downloaded
No packages found in output for action . This is likely
due to a change in the output format. Falling back to old method that
sends all verified packages in the package cache.
Output:
Package                   Arch   Version           Repository      Size
Upgrading:
 vim-common               x86_64 2:9.1.1914-1.fc41 updates     37.0 MiB
   replacing vim-common   x86_64 2:9.1.737-1.fc41  <unknown>   36.7 MiB
 vim-data                 noarch 2:9.1.1914-1.fc41 updates     10.2 KiB
   replacing vim-data     noarch 2:9.1.737-1.fc41  <unknown>   17.8 KiB
 vim-enhanced             x86_64 2:9.1.1914-1.fc41 updates      4.2 MiB
   replacing vim-enhanced x86_64 2:9.1.737-1.fc41  <unknown>    4.0 MiB
 vim-minimal              x86_64 2:9.1.1914-1.fc41 updates      1.7 MiB
   replacing vim-minimal  x86_64 2:9.1.737-1.fc41  <unknown>    1.7 MiB

Transaction Summary:
 Upgrading:          4 packages
 Replacing:          4 packages

The fallback saved the day, but still, if it's not going to handle even standard update, I don't think it's worth complicating things.
As said initially, this approach is quite fragile, and I don't think is going to remain working even if you handle the current output format. And this all is just because somebody intentionally interrupted the process in an unfortunate time. As said in the issue, there is --clean option for situation like this already. At this point I think a better approach is to simply adjust the message when receiving packages failed, to suggest adding --clean option.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Interrupting dom0 update results in uninstallable RPMs in RPM cache

3 participants