Skip to content

Add Arch Linux packaging for GUI and audio daemons - #178

Merged
marmarek merged 1 commit into
QubesOS:mainfrom
besendorf:feat/archlinux-packaging
Aug 24, 2026
Merged

marmarek merged 1 commit into
QubesOS:mainfrom
besendorf:feat/archlinux-packaging

Conversation

@besendorf

@besendorf besendorf commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add Qubes Builder v2 support for Arch Linux VM packages
  • package the GUI and audio daemons separately as qubes-gui-daemon and qubes-audio-daemon
  • configure the Qubes X wrapper through package lifecycle callbacks and a pacman transaction hook
  • carry the runtime dependencies and configuration-file metadata required by Arch templates

Motivation

This implements the Arch Linux packaging requested in QubesOS/qubes-issues#9231, allowing the GUI and audio daemons to be built and installed through the standard Qubes Builder workflow for Arch-based templates.

Closes QubesOS/qubes-issues#9231

AI assistance

AI tools assisted with implementation research, packaging metadata, and build diagnostics. The resulting changes were reviewed by the commit author, who retains responsibility for them.

@andrewdavidwong

Copy link
Copy Markdown
Member

Suggestion: If you intend for this pull request to resolve the associated issue and would like for it to be linked to the issue automatically, you can put Closes QubesOS/qubes-issues#XXXX in the PR message (where XXXX is the issue number). Closes is one of several special keywords that GitHub will recognize. If and when the PR is merged, GitHub will automatically close the associated issue.

@qubesos-bot

qubesos-bot commented Aug 7, 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=2026082409-devel-archlinux&flavor=templates

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_pvgrub_salt_storage

    • TC_41_HVMGrub_archlinux: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_archlinux: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_42_PVHGrub_archlinux: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_42_PVHGrub_archlinux: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_extra

    • TC_10_AppmenusIntegration: test_000_created (failure)
      AssertionError: Items in the first set but not the second:

    • TC_00_QVCTest_archlinux: test_010_screenshare (failure)
      ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 0 == 0

    • TC_00_QVCTest_archlinux: test_020_webcam (failure)
      ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 0 == 0

    • TC_00_PDFConverter_archlinux: test_011_video (failure)
      AssertionError: 127 != 0 : qvm-convert-file failed: b'bash: line 1:...

  • system_tests_network_updates

    • VmUpdates_archlinux: test_011_pkcon_via_proxy (failure)
      AssertionError: 4 not found in [0] : pkgcli install -y test-pkg: b''
  • system_tests_guivm_gui_interactive

    • update_guivm: Failed (test died)
      # Test died: command '(set -o pipefail; qubesctl --all --show-outpu...

Failed tests

10 failures
  • system_tests_pvgrub_salt_storage

    • TC_41_HVMGrub_archlinux: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_archlinux: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_42_PVHGrub_archlinux: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_42_PVHGrub_archlinux: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_extra

    • TC_10_AppmenusIntegration: test_000_created (failure)
      AssertionError: Items in the first set but not the second:

    • TC_00_QVCTest_archlinux: test_010_screenshare (failure)
      ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 0 == 0

    • TC_00_QVCTest_archlinux: test_020_webcam (failure)
      ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 0 == 0

    • TC_00_PDFConverter_archlinux: test_011_video (failure)
      AssertionError: 127 != 0 : qvm-convert-file failed: b'bash: line 1:...

  • system_tests_network_updates

    • VmUpdates_archlinux: test_011_pkcon_via_proxy (failure)
      AssertionError: 4 not found in [0] : pkgcli install -y test-pkg: b''
  • system_tests_guivm_gui_interactive

    • update_guivm: Failed (test died)
      # Test died: command '(set -o pipefail; qubesctl --all --show-outpu...

Fixed failures

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

26 fixed
  • system_tests_pvgrub_salt_storage

    • 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_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_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_whonix

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

Unstable tests

Details
  • 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_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_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_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_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_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_whonix

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

Performance Tests

Performance degradation:

No issues

Remaining performance tests:

No remaining performance tests

@besendorf
besendorf force-pushed the feat/archlinux-packaging branch from 424691e to f3aa14f Compare August 21, 2026 16:34
Comment thread archlinux/PKGBUILD.in Outdated
)
optdepends=(
'qubes-audio-daemon: audio virtualization support'
'qubes-core-admin-client: window icon updates'

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.

It's the other way around: qubes-core-admin-client requires gui-daemon, this line should be dropped.

Comment thread archlinux/PKGBUILD.in Outdated
)
backup=(
etc/qubes/guid.conf
etc/qubes/rpc-config/qubes.WindowIconUpdater

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.

I don't think this file needs preserving

Comment thread qubesguidaemon/mic.py

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.

Changes to mic.py got committed by mistake I think. One commit changes few lines and the next one reverts it. Please clean it up (by removing the changes in the first place)

@besendorf
besendorf force-pushed the feat/archlinux-packaging branch from f3aa14f to ac205a6 Compare August 24, 2026 19:11
@marmarek
marmarek merged commit 69557ae into QubesOS:main Aug 24, 2026
1 of 3 checks passed
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.

Package core-admin-client for Archlinux

4 participants