Skip to content

vmupdate: apply whonix settings when downloading dom0 updates - #221

Merged
marmarek merged 1 commit into
QubesOS:mainfrom
marmarek:vmupdate-dom0-whonix
Aug 25, 2026
Merged

marmarek merged 1 commit into
QubesOS:mainfrom
marmarek:vmupdate-dom0-whonix

Conversation

@marmarek

@marmarek marmarek commented Aug 5, 2026

Copy link
Copy Markdown
Member

Whonix Gateway adds a wrapper for /usr/bin/dnf, which adds proxy-related
options. This works fine as long as it's called as a standalone process,
but when qubes-vm-update calls DNF via Python API, the wrapper is
not used, and the options are not set. This way even generic uwtwrapper
is not used, which makes DNF attept connections directly (without any
proxy), which is (intentionally) blocked.

Fix this by adding the dnf's uwt wrapper logic into vmupdate code,
when it's using API. This basically covers two parts:

  • waiting for Tor daemon to be running
  • configuring dnf to use Tor as a proxy

Fixes QubesOS/qubes-issues#11034

@marmarek
marmarek force-pushed the vmupdate-dom0-whonix branch from 2e5fafa to db50c7d Compare August 5, 2026 02:45
@codecov-commenter

codecov-commenter commented Aug 5, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 71.42%. Comparing base (4973653) to head (90059d9).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #221   +/-   ##
=======================================
  Coverage   71.42%   71.42%           
=======================================
  Files          12       12           
  Lines        1344     1344           
=======================================
  Hits          960      960           
  Misses        384      384           

☔ View full report in Codecov by Harness.
📢 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@marmarek

marmarek commented Aug 5, 2026

Copy link
Copy Markdown
Member Author

@adrelanos @ArrayBolt3 take a look at this (and the linked issue). This PR basically duplicates https://github.com/Whonix/uwt/blob/master/usr/bin/dnf-3.anondist wrapper. I'm not a big fan of it (layering violation), but also I don't have much better idea. For the proxy config part, I guess Whonix could drop some config snippet in addition to / instead of --setopt in the wrapper; but that doesn't help with the "wait for tor start" part...
Do you have some better idea?

@ArrayBolt3

Copy link
Copy Markdown

Unless there's some way to hook into DNF's API with something that runs arbitrary code before any action that does network access, I don't think there probably is a better way. If I remember correctly, I think there was some specific reason we used --setopt parameters rather than configuration files (perhaps because configuration files are too easy to unintentionally override?), but my memory on this is hazy. @adrelanos do you remember why we use options instead of config settings here?

I don't see anything wrong with the implementation. The only thing that initially seemed worrying is that a non-CSPRNG is being used to create the password, but I really doubt that's needed here, all that matters is that the password is unique compared to previous runs and even a simple counter could pull that off. So IMO this looks good.

Whonix Gateway adds a wrapper for /usr/bin/dnf, which adds proxy-related
options. This works fine as long as it's called as a standalone process,
but when qubes-vm-update calls DNF via Python API, the wrapper is
not used, and the options are not set. This way even generic uwtwrapper
is not used, which makes DNF attept connections directly (without any
proxy), which is (intentionally) blocked.

Fix this by adding the dnf's uwt wrapper logic into vmupdate code,
when it's using API. This basically covers two parts:
 - waiting for Tor daemon to be running
 - configuring dnf to use Tor as a proxy

Fixes QubesOS/qubes-issues#11034
@qubesos-bot

qubesos-bot commented Aug 6, 2026

Copy link
Copy Markdown

OpenQA test summary

Complete test suite and dependencies: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026082421-devel&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=2026050504-devel&flavor=update

  • system_tests_network_updates

    • integ: vm_template_upgrade (error)
      ModuleNotFoundError: No module named 'qubes.tests.integ.vm_template...
  • system_tests_audio@hw1

  • system_tests_gpu_passthrough@hw13

    • gpu_passthrough: Failed (test died)
      # Test died: command 'ansible-playbook -i inventory -e pci_devices=...

Failed tests

7 failures
  • system_tests_extra

  • system_tests_network_updates

    • [unstable] TC_00_Dom0Upgrade_whonix-gateway-18: test_010_instal (failure + timed out)
      Error: Failed to download metadata for repo 'test': Cannot download...

    • integ: vm_template_upgrade (error)
      ModuleNotFoundError: No module named 'qubes.tests.integ.vm_template...

  • system_tests_audio@hw1

  • system_tests_gpu_passthrough@hw13

    • gpu_passthrough: Failed (test died)
      # Test died: command 'ansible-playbook -i inventory -e pci_devices=...
  • system_tests_whonix@hw1

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

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

Fixed failures

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

31 fixed
  • system_tests_whonix

    • whonixcheck: Failed (test died)
      # Test died: command 'qvm-shutdown --wait anon-whonix ' failed at /...
  • system_tests_pvgrub_salt_storage

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

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

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

    • 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_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_extra

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

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

    • TC_00_QVCTest_fedora-43-xfce: test_010_screenshare (failure + cleanup)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 1179648 != 0

    • TC_00_QVCTest_whonix-gateway-18: test_010_screenshare (failure + cleanup)
      AssertionError: 2.3156185715769593 not less than 2.0

    • TC_00_PDFConverter_fedora-43-xfce: test_004_cancel_stops_conversion (failure)
      AssertionError: DispVM not cleaned up 10s after cancel: {<DispVM at...

  • system_tests_usbproxy

    • 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...

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

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

  • 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-43-xfce: test_001_simple_networking_paused_from_none_to_existent (error)
      raise TimeoutError from exc_val... TimeoutError

  • system_tests_audio

  • system_tests_audio@hw1

  • 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' ...

Unstable tests

Details
  • system_tests_whonix

    whonixcheck/Failed (1/5 times with errors)
    • job 191530 # Test died: command 'curl --form upload=@whonixcheck-anon-whonix ....
  • system_tests_network

    system_tests/Failed (1/5 times with errors)
    • job 191559 # Test died: command 'curl --form upload=@nose2-junit.xml --form up...
  • system_tests_backup

    system_tests/Failed (1/5 times with errors)
    • job 192144 # Test died: command 'curl --form upload=@tests-qubes.tests.integ.b...
  • system_tests_backupcompatibility

    system_tests/Failed (1/5 times with errors)
    • job 192046 # Test died: command 'curl --form upload=@tests-qubes.tests.integ.b...
  • system_tests_pvgrub_salt_storage

    system_tests/Fail (1/5 times with errors)
    • job 191206 Tests qubes.tests.integ.grub failed (exit code 1), details reported...
    system_tests/Failed (1/5 times with errors)
    • job 191206 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_41_HVMGrub_debian-13-xfce/test_010_template_based_vm (1/5 times with errors)
    • job 191206 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_41_HVMGrub_fedora-44-xfce/test_010_template_based_vm (1/5 times with errors)
    • job 191206 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_extra

    system_tests/Fail (1/5 times with errors)
    • job 191555 Tests qubes.tests.extra failed (exit code 1), details reported sepa...
    system_tests/Failed (1/5 times with errors)
    • job 192562 # Test died: command 'testfunc qubes.tests.extra' timed out at qube...
    system_tests/Failed (1/5 times with errors)
    • job 191555 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_00_PDFConverter_debian-13-xfce/test_004_cancel_stops_conversion (1/5 times with errors)
    • job 191555 AssertionError: DispVM not cleaned up 10s after cancel: {<DispVM at...
    TC_00_PDFConverter_fedora-44-xfce/test_004_cancel_stops_conversion (1/5 times with errors)
    • job 191555 AssertionError: DispVM not cleaned up 10s after cancel: {<DispVM at...
    system_tests/wait_serial (1/5 times with errors)
    • job 192562 # Command: testfunc qubes.tests.extra...
  • system_tests_gui_interactive

    clipboard_and_web/ (1/5 times with errors)
    clipboard_and_web/Failed (1/5 times with errors)
    • job 191556 # Test died: no candidate needle with tag(s) 'personal-firefox' mat...
  • system_tests_network_ipv6

    system_tests/Fail (1/5 times with errors)
    • job 191204 Tests qubes.tests.integ.network_ipv6 failed (exit code 1), details ...
    system_tests/Failed (1/5 times with errors)
    • job 191560 # Test died: command 'curl --form upload=@tests-qubes.tests.integ.n...
    system_tests/Failed (1/5 times with errors)
    • job 191204 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    VmIPv6Networking_fedora-44-xfce/test_501_simple_networking_paused_from_none_to_existent (1/5 times with errors)
    • job 191204 raise TimeoutError from exc_val... TimeoutError
  • system_tests_network_updates

    system_tests/Fail (2/5 times with errors)
    • job 192061 Tests qubes.tests.integ.dom0_update failed (exit code 1), details r...
    • job 192160 Tests qubes.tests.integ.dom0_update failed (exit code 1), details r...
    system_tests/Fail (1/5 times with errors)
    • job 192568 Tests qubes.tests.integ.dom0_update failed (exit code 1), details r...
    system_tests/Fail (1/5 times with errors)
    • job 191227 Tests qubes.tests.integ.vm_update failed (exit code 1), details rep...
    system_tests/Failed (3/5 times with errors)
    • job 191227 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    • job 192061 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    • job 192160 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    system_tests/Failed (1/5 times with errors)
    • job 192568 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_00_Dom0Upgrade_whonix-gateway-18/test_000_update_salt (1/5 times with errors)
    • job 192568 ?[0;31mDuration: 204145.11 ms?[0;0m... ?[0;31m Changes: ?[0;0m
    TC_00_Dom0Upgrade_whonix-gateway-18/test_005_update_flag_clear (1/5 times with errors)
    • job 192160 Error: Failed to download metadata for repo 'test': Cannot download...
    TC_00_Dom0Upgrade_whonix-gateway-18/test_006_update_flag_clear (1/5 times with errors)
    • job 192160 Error: Failed to download metadata for repo 'test': Cannot download...
    TC_00_Dom0Upgrade_whonix-gateway-18/test_010_instal (1/5 times with errors)
    • job 192061 Error: Failed to download metadata for repo 'test': Cannot download...
    VmUpdates_fedora-44-xfce/test_011_pkcon_via_proxy (1/5 times with errors)
    • job 191227 AssertionError: 7 not found in [0, 100] : pkcon install -y test-pkg...
    VmUpdates_debian-13-xfce/test_110_update_via_proxy_qubes_vm_update (1/5 times with errors)
    • job 191227 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_dispvm

    system_tests/Fail (1/5 times with errors)
    • job 191554 Tests qubes.tests.integ.dispvm failed (exit code 1), details report...
    system_tests/Failed (1/5 times with errors)
    • job 191554 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_21_DispVM_Preload/test_015_preload_race_more (1/5 times with errors)
    • job 191554 raise TimeoutError from exc_val... TimeoutError
  • system_tests_guivm_vnc_gui_interactive

    guivm_manager/ (1/5 times with errors)
    guivm_manager/Failed (1/5 times with errors)
    • job 192545 # Test died: no candidate needle with tag(s) 'qubes-qube-manager' m...
  • system_tests_audio

    system_tests/Fail (2/5 times with errors)
    • job 191177 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    • job 191533 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    system_tests/Failed (1/5 times with errors)
    • job 191177 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    system_tests/Failed (1/5 times with errors)
    • job 191533 # 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 (1/5 times with errors)
    • job 191533 AssertionError: too short audio, expected 10s, got 6.94730158730158...
    TC_20_AudioVM_PipeWire_debian-13-xfce/test_260_audio_mic_enabled_switch_audiovm (2/5 times with errors)
    • job 191177 AssertionError: pacat for test-inst-vm1 (xid 50) running(False) in ...
    • job 191533 AssertionError: pacat for test-inst-vm1 (xid 50) running(False) in ...
    TC_20_AudioVM_PipeWire_fedora-44-xfce/test_260_audio_mic_enabled_switch_audiovm (1/5 times with errors)
    • job 191177 AssertionError: pacat for test-inst-vm1 (xid 59) running(False) in ...
  • system_tests_audio@hw1

    system_tests/Fail (2/5 times with errors)
    • job 191177 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    • job 191533 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    system_tests/Failed (1/5 times with errors)
    • job 191177 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    system_tests/Failed (1/5 times with errors)
    • job 191533 # 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 (1/5 times with errors)
    • job 191533 AssertionError: too short audio, expected 10s, got 6.94730158730158...
    TC_20_AudioVM_PipeWire_debian-13-xfce/test_260_audio_mic_enabled_switch_audiovm (2/5 times with errors)
    • job 191177 AssertionError: pacat for test-inst-vm1 (xid 50) running(False) in ...
    • job 191533 AssertionError: pacat for test-inst-vm1 (xid 50) running(False) in ...
    TC_20_AudioVM_PipeWire_fedora-44-xfce/test_260_audio_mic_enabled_switch_audiovm (1/5 times with errors)
    • job 191177 AssertionError: pacat for test-inst-vm1 (xid 59) running(False) in ...
  • system_tests_whonix@hw1

    whonixcheck/Failed (1/5 times with errors)
    • job 191530 # Test died: command 'curl --form upload=@whonixcheck-anon-whonix ....
  • system_tests_basic_vm_qrexec_gui_btrfs

    system_tests/Fail (1/5 times with errors)
    • job 192049 Tests qubes.tests.integ.basic failed (exit code 1), details reporte...
    system_tests/Failed (1/5 times with errors)
    • job 192049 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_30_Gui_daemon/test_002_clipboard_300k (1/5 times with errors)
    • job 192049 : Clipboard copy operation failed - content...
  • system_tests_gui_interactive@hw7

    clipboard_and_web/ (1/5 times with errors)
    clipboard_and_web/Failed (1/5 times with errors)
    • job 191556 # Test died: no candidate needle with tag(s) 'personal-firefox' mat...

Performance Tests

Performance degradation:

16 performance degradations
  • whonix-gateway-18_exec-root: 147.23 🔻 ( previous job: 126.14, degradation: 116.72%)
  • whonix-gateway-18_socket-root: 9.23 🔻 ( previous job: 8.37, degradation: 110.24%)
  • whonix-workstation-18_exec-root: 170.24 🔻 ( previous job: 144.02, degradation: 118.20%)
  • whonix-workstation-18_socket: 9.92 🔻 ( previous job: 7.66, degradation: 129.42%)
  • whonix-workstation-18_exec-data-duplex-root: 154.07 🔻 ( previous job: 130.67, degradation: 117.91%)
  • dom0_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 4088.00 🔻 ( previous job: 5055.00, degradation: 80.87%)
  • dom0_varlibqubes_seq1m_q8t1_write 3:write_bandwidth_kb: 141332.00 🔻 ( previous job: 257066.00, degradation: 54.98%)
  • dom0_varlibqubes_rnd4k_q32t1_write 3:write_bandwidth_kb: 5632.00 🔻 ( previous job: 10623.00, degradation: 53.02%)
  • debian-13-xfce_dom0-dispvm-gui-api (mean:8.628): 103.54 🔻 ( previous job: 93.50, degradation: 110.74%)
  • debian-13-xfce_dom0-dispvm-preload-2-gui-api (mean:4.936): 59.24 🔻 ( previous job: 53.65, degradation: 110.41%)
  • whonix-workstation-18_dom0-dispvm-api (mean:9.978): 119.73 🔻 ( previous job: 97.14, degradation: 123.26%)
  • whonix-workstation-18_dom0-dispvm-gui-api (mean:11.737): 140.85 🔻 ( previous job: 121.86, degradation: 115.58%)
  • whonix-workstation-18_dom0-dispvm-preload-2-api (mean:4.879): 58.55 🔻 ( previous job: 48.39, degradation: 120.99%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-0-api (mean:4.634): 55.60 🔻 ( previous job: 48.26, degradation: 115.21%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:4.03): 48.37 🔻 ( previous job: 42.67, degradation: 113.36%)
  • whonix-workstation-18_dom0-vm-gui-api (mean:0.062): 0.74 🔻 ( previous job: 0.56, degradation: 133.63%)

Remaining performance tests:

95 tests
  • debian-13-xfce_exec: 8.49 🔻 ( previous job: 7.85, degradation: 108.05%)
  • debian-13-xfce_exec-root: 27.26 🔻 ( previous job: 26.74, degradation: 101.93%)
  • debian-13-xfce_socket: 8.21 🟢 ( previous job: 8.37, improvement: 98.04%)
  • debian-13-xfce_socket-root: 9.25 🔻 ( previous job: 9.13, degradation: 101.31%)
  • debian-13-xfce_exec-data-simplex: 67.60 🔻 ( previous job: 63.05, degradation: 107.22%)
  • debian-13-xfce_exec-data-duplex: 68.08 🔻 ( previous job: 62.45, degradation: 109.01%)
  • debian-13-xfce_exec-data-duplex-root: 80.44 🔻 ( previous job: 78.04, degradation: 103.07%)
  • debian-13-xfce_socket-data-duplex: 89.49 🔻 ( previous job: 85.67, degradation: 104.47%)
  • fedora-44-xfce_exec: 9.15
  • fedora-44-xfce_exec-root: 72.67
  • fedora-44-xfce_socket: 8.44
  • fedora-44-xfce_socket-root: 9.20
  • fedora-44-xfce_exec-data-simplex: 66.37
  • fedora-44-xfce_exec-data-duplex: 71.02
  • fedora-44-xfce_exec-data-duplex-root: 109.35
  • fedora-44-xfce_socket-data-duplex: 77.45
  • whonix-gateway-18_exec: 7.38 🟢 ( previous job: 8.01, improvement: 92.13%)
  • whonix-gateway-18_socket: 9.34 🔻 ( previous job: 8.63, degradation: 108.22%)
  • whonix-gateway-18_exec-data-simplex: 64.17 🔻 ( previous job: 62.50, degradation: 102.67%)
  • whonix-gateway-18_exec-data-duplex: 64.43 🟢 ( previous job: 68.01, improvement: 94.73%)
  • whonix-gateway-18_exec-data-duplex-root: 145.42 🔻 ( previous job: 137.28, degradation: 105.92%)
  • whonix-gateway-18_socket-data-duplex: 96.77 🔻 ( previous job: 90.03, degradation: 107.49%)
  • whonix-workstation-18_exec: 8.63 🔻 ( previous job: 8.14, degradation: 106.12%)
  • whonix-workstation-18_socket-root: 9.24 🔻 ( previous job: 8.87, degradation: 104.17%)
  • whonix-workstation-18_exec-data-simplex: 65.88 🟢 ( previous job: 66.36, improvement: 99.29%)
  • whonix-workstation-18_exec-data-duplex: 66.89 🔻 ( previous job: 65.56, degradation: 102.03%)
  • whonix-workstation-18_socket-data-duplex: 89.78 🟢 ( previous job: 92.97, improvement: 96.57%)
  • dom0_root_seq1m_q8t1_read 3:read_bandwidth_kb: 454519.00 🟢 ( previous job: 388793.00, improvement: 116.91%)
  • dom0_root_seq1m_q8t1_write 3:write_bandwidth_kb: 262209.00 🟢 ( previous job: 119690.00, improvement: 219.07%)
  • dom0_root_seq1m_q1t1_read 3:read_bandwidth_kb: 367663.00 🟢 ( previous job: 245223.00, improvement: 149.93%)
  • dom0_root_seq1m_q1t1_write 3:write_bandwidth_kb: 184565.00 🔻 ( previous job: 199974.00, degradation: 92.29%)
  • dom0_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 108091.00 🟢 ( previous job: 13948.00, improvement: 774.96%)
  • dom0_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 8611.00 🟢 ( previous job: 6899.00, improvement: 124.82%)
  • dom0_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8352.00 🔻 ( previous job: 8963.00, degradation: 93.18%)
  • dom0_varlibqubes_seq1m_q8t1_read 3:read_bandwidth_kb: 495312.00 🟢 ( previous job: 429040.00, improvement: 115.45%)
  • dom0_varlibqubes_seq1m_q1t1_read 3:read_bandwidth_kb: 445066.00 🔻 ( previous job: 446202.00, degradation: 99.75%)
  • dom0_varlibqubes_seq1m_q1t1_write 3:write_bandwidth_kb: 196498.00 🔻 ( previous job: 201978.00, degradation: 97.29%)
  • dom0_varlibqubes_rnd4k_q32t1_read 3:read_bandwidth_kb: 105866.00 🟢 ( previous job: 102155.00, improvement: 103.63%)
  • dom0_varlibqubes_rnd4k_q1t1_read 3:read_bandwidth_kb: 8268.00 🟢 ( previous job: 8179.00, improvement: 101.09%)
  • dom0_varlibqubes_rnd4k_q1t1_write 3:write_bandwidth_kb: 4650.00 🟢 ( previous job: 4404.00, improvement: 105.59%)
  • fedora-44-xfce_root_seq1m_q8t1_read 3:read_bandwidth_kb: 379918.00
  • fedora-44-xfce_root_seq1m_q8t1_write 3:write_bandwidth_kb: 139829.00
  • fedora-44-xfce_root_seq1m_q1t1_read 3:read_bandwidth_kb: 259291.00
  • fedora-44-xfce_root_seq1m_q1t1_write 3:write_bandwidth_kb: 75844.00
  • fedora-44-xfce_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 13955.00
  • fedora-44-xfce_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 2133.00
  • fedora-44-xfce_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8764.00
  • fedora-44-xfce_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 1236.00
  • fedora-44-xfce_private_seq1m_q8t1_read 3:read_bandwidth_kb: 339344.00
  • fedora-44-xfce_private_seq1m_q8t1_write 3:write_bandwidth_kb: 169278.00
  • fedora-44-xfce_private_seq1m_q1t1_read 3:read_bandwidth_kb: 352937.00
  • fedora-44-xfce_private_seq1m_q1t1_write 3:write_bandwidth_kb: 85062.00
  • fedora-44-xfce_private_rnd4k_q32t1_read 3:read_bandwidth_kb: 86127.00
  • fedora-44-xfce_private_rnd4k_q32t1_write 3:write_bandwidth_kb: 2383.00
  • fedora-44-xfce_private_rnd4k_q1t1_read 3:read_bandwidth_kb: 8506.00
  • fedora-44-xfce_private_rnd4k_q1t1_write 3:write_bandwidth_kb: 783.00
  • fedora-44-xfce_volatile_seq1m_q8t1_read 3:read_bandwidth_kb: 352818.00
  • fedora-44-xfce_volatile_seq1m_q8t1_write 3:write_bandwidth_kb: 154517.00
  • fedora-44-xfce_volatile_seq1m_q1t1_read 3:read_bandwidth_kb: 339015.00
  • fedora-44-xfce_volatile_seq1m_q1t1_write 3:write_bandwidth_kb: 57919.00
  • fedora-44-xfce_volatile_rnd4k_q32t1_read 3:read_bandwidth_kb: 24849.00
  • fedora-44-xfce_volatile_rnd4k_q32t1_write 3:write_bandwidth_kb: 4042.00
  • fedora-44-xfce_volatile_rnd4k_q1t1_read 3:read_bandwidth_kb: 8325.00
  • fedora-44-xfce_volatile_rnd4k_q1t1_write 3:write_bandwidth_kb: 394.00
  • debian-13-xfce_dom0-dispvm-api (mean:6.556): 78.68 🔻 ( previous job: 74.50, degradation: 105.62%)
  • debian-13-xfce_dom0-dispvm-preload-2-api (mean:3.343): 40.12 🔻 ( previous job: 37.79, degradation: 106.16%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-0-api (mean:2.95): 35.40 🔻 ( previous job: 34.29, degradation: 103.25%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.376): 40.51 🔻 ( previous job: 38.52, degradation: 105.17%)
  • debian-13-xfce_dom0-dispvm-preload-4-api (mean:2.376): 28.51 🟢 ( previous job: 30.73, improvement: 92.76%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.557): 30.69 🔻 ( previous job: 29.50, degradation: 104.02%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.339): 28.06 🟢 ( previous job: 28.74, improvement: 97.64%)
  • debian-13-xfce_dom0-dispvm-preload-4-gui-api (mean:3.705): 44.46 🔻 ( previous job: 44.40, degradation: 100.13%)
  • debian-13-xfce_dom0-dispvm-preload-6-gui-api (mean:3.148): 37.77 🟢 ( previous job: 41.47, improvement: 91.09%)
  • debian-13-xfce_dom0-vm-api (mean:0.035): 0.42 🟢 ( previous job: 0.62, improvement: 67.90%)
  • debian-13-xfce_dom0-vm-gui-api (mean:0.03): 0.35 🟢 ( previous job: 0.47, improvement: 76.34%)
  • fedora-44-xfce_dom0-dispvm-api (mean:8.411): 100.93
  • fedora-44-xfce_dom0-dispvm-gui-api (mean:10.225): 122.70
  • fedora-44-xfce_dom0-dispvm-preload-2-api (mean:7.455): 89.47
  • fedora-44-xfce_dom0-dispvm-preload-2-delay-0-api (mean:6.634): 79.60
  • fedora-44-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:7.344): 88.12
  • fedora-44-xfce_dom0-dispvm-preload-4-api (mean:4.462): 53.55
  • fedora-44-xfce_dom0-dispvm-preload-4-delay-0-api (mean:3.981): 47.77
  • fedora-44-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:4.448): 53.37
  • fedora-44-xfce_dom0-dispvm-preload-2-gui-api (mean:5.526): 66.31
  • fedora-44-xfce_dom0-dispvm-preload-4-gui-api (mean:4.067): 48.80
  • fedora-44-xfce_dom0-dispvm-preload-6-gui-api (mean:3.517): 42.20
  • fedora-44-xfce_dom0-vm-api (mean:0.025): 0.29
  • fedora-44-xfce_dom0-vm-gui-api (mean:0.031): 0.38
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:5.199): 62.38 🔻 ( previous job: 59.22, degradation: 105.35%)
  • whonix-workstation-18_dom0-dispvm-preload-4-api (mean:3.432): 41.18 🔻 ( previous job: 38.29, degradation: 107.56%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-0-api (mean:3.455): 41.46 🟢 ( previous job: 43.23, improvement: 95.89%)
  • whonix-workstation-18_dom0-dispvm-preload-2-gui-api (mean:6.096): 73.15 🔻 ( previous job: 72.05, degradation: 101.53%)
  • whonix-workstation-18_dom0-dispvm-preload-4-gui-api (mean:4.73): 56.76 🔻 ( previous job: 52.81, degradation: 107.47%)
  • whonix-workstation-18_dom0-dispvm-preload-6-gui-api (mean:3.776): 45.31 🟢 ( previous job: 50.72, improvement: 89.34%)
  • whonix-workstation-18_dom0-vm-api (mean:0.026): 0.32 🟢 ( previous job: 0.43, improvement: 72.75%)

@marmarek

marmarek commented Aug 7, 2026

Copy link
Copy Markdown
Member Author

I think there was some specific reason we used --setopt parameters rather than configuration files (perhaps because configuration files are too easy to unintentionally override?), but my memory on this is hazy.

Hm, I don't remember either. But it might be something about the dom0 update script forcing alternative config (copied from dom0) instead of using the default one.

Unless there's some way to hook into DNF's API with something that runs arbitrary code before any action that does network access,

Actually, there might be. We use DNF plugins for notifying dom0 about template update status on Fedora, something like this could be used here maybe?
The pluigin code is here: https://github.com/QubesOS/qubes-core-agent-linux/blob/main/package-managers/dnf-qubes-hooks.py and the API documentation is at https://dnf.readthedocs.io/en/latest/api_plugins.html
That's for DNF5. There is also DNF5 (not in trixie, but seems to be in forky already), which has completely different plugins API (since it's written in C++, not Python). For that, there is already a plugin that should (hopefully) be flexible enough: https://dnf.readthedocs.io/en/latest/api_plugins.html, it would be just about configuring it.

And with all that, given the config path case above, it would still need pointing at some specific plugins directory (or simply ensuring it would load plugins from default directory, instead of the alternative one).

Honestly, after looking at this, maybe the extra complexity isn't worth it and the current PR isn't that bad...

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

updating dom0 via whonix fails with qubes-vm-update

4 participants