* [PATCH qemu-server 1/2] tests: improve multiarch build support
@ 2026-02-03 14:16 Dominik Csapak
2026-02-03 14:16 ` [PATCH qemu-server 2/2] tests: cfg2cmd: add some architecture tests Dominik Csapak
2026-02-03 15:01 ` [PATCH qemu-server 1/2] tests: improve multiarch build support Thomas Lamprecht
0 siblings, 2 replies; 5+ messages in thread
From: Dominik Csapak @ 2026-02-03 14:16 UTC (permalink / raw)
To: pve-devel
The CPUConfig module sets the local 'host_arch' on loading, so instead
to try to mock all subs that access this variable, provide a setter only
intended for tests (and warn when using this).
Also, we have to override the 'get_host_arch' in the Helpers module too.
Without these changes, the config to command tests fail when building on
non-x86 hosts.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
not sure about the 'setter hack', which can be partially deleted when
we'll switch to using PVE::Tools::get_host_arch again, but we have to
keep the code changing the cpu_models_by_arch hash.
This patch requires these patches from fiona:
https://lore.proxmox.com/pve-devel/20260129131021.118199-1-f.ebner@proxmox.com/
src/PVE/QemuServer/CPUConfig.pm | 12 ++++++++++++
src/test/run_config2command_tests.pl | 13 +++++++++++++
2 files changed, 25 insertions(+)
diff --git a/src/PVE/QemuServer/CPUConfig.pm b/src/PVE/QemuServer/CPUConfig.pm
index 32ec4954..686bbdc0 100644
--- a/src/PVE/QemuServer/CPUConfig.pm
+++ b/src/PVE/QemuServer/CPUConfig.pm
@@ -1230,6 +1230,18 @@ sub get_intel_tdx_object {
return $tdx_object;
}
+# CAUTION: for tests only, DO NOT USE outside of tests!
+# sets the package gloabl $host_arch value, and modifies the $cpu_models_by_arch
+# so that the 'host' model is available only in the newly set $arch
+sub set_host_arch($) {
+ my ($arch) = @_;
+ warn "CAUTION: use of 'set_host_arch' only intended in tests!\n";
+
+ delete $cpu_models_by_arch->{$host_arch}->{host};
+ $host_arch = $arch;
+ $cpu_models_by_arch->{$host_arch}->{host} = 'default';
+}
+
__PACKAGE__->register();
__PACKAGE__->init();
diff --git a/src/test/run_config2command_tests.pl b/src/test/run_config2command_tests.pl
index 4c872d1c..b8a2cf7e 100755
--- a/src/test/run_config2command_tests.pl
+++ b/src/test/run_config2command_tests.pl
@@ -235,6 +235,8 @@ sub parse_test($config_fn) {
$testname = "'$testname' - $desc";
}
$current_test->{testname} = $testname;
+
+ PVE::QemuServer::CPUConfig::set_host_arch($current_test->{arch} // 'x86_64');
}
sub get_test_qemu_version {
@@ -264,6 +266,14 @@ $qemu_server_module->mock(
},
);
+my $qemu_server_helpers_module;
+$qemu_server_helpers_module = Test::MockModule->new('PVE::QemuServer::Helpers');
+$qemu_server_helpers_module->mock(
+ get_host_arch => sub() {
+ return $current_test->{host_arch} // 'x86_64';
+ },
+);
+
my $storage_module = Test::MockModule->new("PVE::Storage");
$storage_module->mock(
activate_volumes => sub {
@@ -582,6 +592,9 @@ sub diff($a, $b) {
$SIG{__WARN__} = sub {
my $warning = shift;
chomp $warning;
+ if ($warning =~ m/^CAUTION: use of 'set_host/) {
+ return;
+ }
if (my $warn_expect = $current_test->{expect_warning}) {
if ($warn_expect ne $warning) {
fail($current_test->{testname});
--
2.47.3
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH qemu-server 2/2] tests: cfg2cmd: add some architecture tests
2026-02-03 14:16 [PATCH qemu-server 1/2] tests: improve multiarch build support Dominik Csapak
@ 2026-02-03 14:16 ` Dominik Csapak
2026-02-03 15:01 ` [PATCH qemu-server 1/2] tests: improve multiarch build support Thomas Lamprecht
1 sibling, 0 replies; 5+ messages in thread
From: Dominik Csapak @ 2026-02-03 14:16 UTC (permalink / raw)
To: pve-devel
one for manually setting
arch: aarch64
in the config for an 'x86_64' host architecture, and one where
we don't have 'arch' set in the config on an aarch64 host.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
also needs fionas series:
https://lore.proxmox.com/pve-devel/20260129131021.118199-1-f.ebner@proxmox.com/
and my fixup for the s3/s4:
https://lore.proxmox.com/pve-devel/20260203141202.3567520-1-d.csapak@proxmox.com/T/#u
(otherwise the test result looks different)
src/test/Makefile | 5 ++-
src/test/cfg2cmd/aarch64/simple-arm-host.conf | 17 ++++++++
.../cfg2cmd/aarch64/simple-arm-host.conf.cmd | 41 +++++++++++++++++++
src/test/cfg2cmd/aarch64/simple-arm.conf | 17 ++++++++
src/test/cfg2cmd/aarch64/simple-arm.conf.cmd | 41 +++++++++++++++++++
5 files changed, 120 insertions(+), 1 deletion(-)
create mode 100644 src/test/cfg2cmd/aarch64/simple-arm-host.conf
create mode 100644 src/test/cfg2cmd/aarch64/simple-arm-host.conf.cmd
create mode 100644 src/test/cfg2cmd/aarch64/simple-arm.conf
create mode 100644 src/test/cfg2cmd/aarch64/simple-arm.conf.cmd
diff --git a/src/test/Makefile b/src/test/Makefile
index 2ef9073a..cf589f41 100644
--- a/src/test/Makefile
+++ b/src/test/Makefile
@@ -1,6 +1,6 @@
all: test
-test: test_snapshot test_cfg_to_cmd test_pci_addr_conflicts test_pci_reservation test_qemu_img_convert test_migration test_restore_config test_parse_config
+test: test_snapshot test_cfg_to_cmd test_cfg_to_cmd_aarch64 test_pci_addr_conflicts test_pci_reservation test_qemu_img_convert test_migration test_restore_config test_parse_config
test_snapshot: run_snapshot_tests.pl
./run_snapshot_tests.pl
@@ -9,6 +9,9 @@ test_snapshot: run_snapshot_tests.pl
test_cfg_to_cmd: run_config2command_tests.pl cfg2cmd/*.conf
perl -I../ ./run_config2command_tests.pl
+test_cfg_to_cmd_aarch64: run_config2command_tests.pl cfg2cmd/aarch64/*.conf
+ perl -I../ ./run_config2command_tests.pl cfg2cmd/aarch64
+
test_qemu_img_convert: run_qemu_img_convert_tests.pl
perl -I../ ./run_qemu_img_convert_tests.pl
diff --git a/src/test/cfg2cmd/aarch64/simple-arm-host.conf b/src/test/cfg2cmd/aarch64/simple-arm-host.conf
new file mode 100644
index 00000000..1488dbf5
--- /dev/null
+++ b/src/test/cfg2cmd/aarch64/simple-arm-host.conf
@@ -0,0 +1,17 @@
+# TEST: Simple test for a basic configuration with aarch64 set as the host architecture
+# HOST_ARCH: aarch64
+bootdisk: scsi0
+bios: ovmf
+cores: 3
+ide2: none,media=cdrom
+memory: 768
+name: simple
+net0: virtio=A2:C0:43:77:08:A0,bridge=vmbr0
+numa: 0
+ostype: l26
+scsi0: local:8006/vm-8006-disk-0.qcow2,discard=on,size=104858K
+scsihw: virtio-scsi-pci
+smbios1: uuid=7b10d7af-b932-4c66-b2c3-3996152ec465
+sockets: 1
+vmgenid: c773c261-d800-4348-9f5d-167fadd53cf8
+efidisk0: local:8006/vm-8006-disk-1.qcow2,efitype=4m
diff --git a/src/test/cfg2cmd/aarch64/simple-arm-host.conf.cmd b/src/test/cfg2cmd/aarch64/simple-arm-host.conf.cmd
new file mode 100644
index 00000000..ec989a55
--- /dev/null
+++ b/src/test/cfg2cmd/aarch64/simple-arm-host.conf.cmd
@@ -0,0 +1,41 @@
+/usr/bin/kvm \
+ -id 8006 \
+ -name 'simple,debug-threads=on' \
+ -no-shutdown \
+ -chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \
+ -mon 'chardev=qmp,mode=control' \
+ -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect-ms=5000' \
+ -mon 'chardev=qmp-event,mode=control' \
+ -pidfile /var/run/qemu-server/8006.pid \
+ -daemonize \
+ -smbios 'type=1,uuid=7b10d7af-b932-4c66-b2c3-3996152ec465' \
+ -object '{"id":"throttle-drive-efidisk0","limits":{},"qom-type":"throttle-group"}' \
+ -blockdev '{"driver":"raw","file":{"driver":"file","filename":"/usr/share/pve-edk2-firmware//AAVMF_CODE.fd"},"node-name":"pflash0","read-only":true}' \
+ -blockdev '{"detect-zeroes":"on","discard":"ignore","driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"detect-zeroes":"on","discard":"ignore","driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"detect-zeroes":"on","discard":"ignore","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-1.qcow2","node-name":"e4abf08bba72d3a54b87a58d2f50906","read-only":false},"node-name":"f4abf08bba72d3a54b87a58d2f50906","read-only":false},"node-name":"drive-efidisk0","read-only":false,"throttle-group":"throttle-drive-efidisk0"}' \
+ -smp '3,sockets=1,cores=3,maxcpus=3' \
+ -nodefaults \
+ -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
+ -vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \
+ -cpu cortex-a57 \
+ -m 768 \
+ -object '{"id":"throttle-drive-scsi0","limits":{},"qom-type":"throttle-group"}' \
+ -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pcie.0,addr=0x1e' \
+ -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pcie.0,addr=0x1f' \
+ -device 'vmgenid,guid=c773c261-d800-4348-9f5d-167fadd53cf8' \
+ -device 'usb-ehci,id=ehci,bus=pcie.0,addr=0x1' \
+ -device 'usb-tablet,id=tablet,bus=ehci.0,port=1' \
+ -device 'usb-kbd,id=keyboard,bus=ehci.0,port=2' \
+ -device 'virtio-gpu,id=vga,bus=pcie.0,addr=0x2' \
+ -device 'virtio-serial,id=spice,bus=pcie.0,addr=0x9' \
+ -chardev 'spicevmc,id=vdagent,name=vdagent' \
+ -device 'virtserialport,chardev=vdagent,name=com.redhat.spice.0' \
+ -spice 'tls-port=61000,addr=127.0.0.1,tls-ciphers=HIGH,seamless-migration=on' \
+ -device 'virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x3,free-page-reporting=on' \
+ -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
+ -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
+ -device 'virtio-scsi-pci,id=scsihw0,bus=pcie.0,addr=0x5' \
+ -blockdev '{"detect-zeroes":"unmap","discard":"unmap","driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"ecd04be4259153b8293415fefa2a84c","read-only":false},"node-name":"fcd04be4259153b8293415fefa2a84c","read-only":false},"node-name":"drive-scsi0","read-only":false,"throttle-group":"throttle-drive-scsi0"}' \
+ -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,device_id=drive-scsi0,bootindex=100,write-cache=on' \
+ -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown' \
+ -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pcie.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300,host_mtu=1500' \
+ -machine 'pflash0=pflash0,pflash1=drive-efidisk0,accel=tcg,type=virt+pve0'
diff --git a/src/test/cfg2cmd/aarch64/simple-arm.conf b/src/test/cfg2cmd/aarch64/simple-arm.conf
new file mode 100644
index 00000000..6b5f3dd0
--- /dev/null
+++ b/src/test/cfg2cmd/aarch64/simple-arm.conf
@@ -0,0 +1,17 @@
+# TEST: Simple test for a basic configuration with aarch64 set as architecture
+arch: aarch64
+bootdisk: scsi0
+bios: ovmf
+cores: 3
+ide2: none,media=cdrom
+memory: 768
+name: simple
+net0: virtio=A2:C0:43:77:08:A0,bridge=vmbr0
+numa: 0
+ostype: l26
+scsi0: local:8006/vm-8006-disk-0.qcow2,discard=on,size=104858K
+scsihw: virtio-scsi-pci
+smbios1: uuid=7b10d7af-b932-4c66-b2c3-3996152ec465
+sockets: 1
+vmgenid: c773c261-d800-4348-9f5d-167fadd53cf8
+efidisk0: local:8006/vm-8006-disk-0.qcow2,efitype=4m
diff --git a/src/test/cfg2cmd/aarch64/simple-arm.conf.cmd b/src/test/cfg2cmd/aarch64/simple-arm.conf.cmd
new file mode 100644
index 00000000..5b32e91c
--- /dev/null
+++ b/src/test/cfg2cmd/aarch64/simple-arm.conf.cmd
@@ -0,0 +1,41 @@
+/usr/bin/qemu-system-aarch64 \
+ -id 8006 \
+ -name 'simple,debug-threads=on' \
+ -no-shutdown \
+ -chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \
+ -mon 'chardev=qmp,mode=control' \
+ -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect-ms=5000' \
+ -mon 'chardev=qmp-event,mode=control' \
+ -pidfile /var/run/qemu-server/8006.pid \
+ -daemonize \
+ -smbios 'type=1,uuid=7b10d7af-b932-4c66-b2c3-3996152ec465' \
+ -object '{"id":"throttle-drive-efidisk0","limits":{},"qom-type":"throttle-group"}' \
+ -blockdev '{"driver":"raw","file":{"driver":"file","filename":"/usr/share/pve-edk2-firmware//AAVMF_CODE.fd"},"node-name":"pflash0","read-only":true}' \
+ -blockdev '{"detect-zeroes":"on","discard":"ignore","driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"detect-zeroes":"on","discard":"ignore","driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"detect-zeroes":"on","discard":"ignore","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"ea05d68a0ec0fe4a8d93dde338f7405","read-only":false},"node-name":"fa05d68a0ec0fe4a8d93dde338f7405","read-only":false},"node-name":"drive-efidisk0","read-only":false,"throttle-group":"throttle-drive-efidisk0"}' \
+ -smp '3,sockets=1,cores=3,maxcpus=3' \
+ -nodefaults \
+ -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
+ -vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \
+ -cpu cortex-a57 \
+ -m 768 \
+ -object '{"id":"throttle-drive-scsi0","limits":{},"qom-type":"throttle-group"}' \
+ -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pcie.0,addr=0x1e' \
+ -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pcie.0,addr=0x1f' \
+ -device 'vmgenid,guid=c773c261-d800-4348-9f5d-167fadd53cf8' \
+ -device 'usb-ehci,id=ehci,bus=pcie.0,addr=0x1' \
+ -device 'usb-tablet,id=tablet,bus=ehci.0,port=1' \
+ -device 'usb-kbd,id=keyboard,bus=ehci.0,port=2' \
+ -device 'virtio-gpu,id=vga,bus=pcie.0,addr=0x2' \
+ -device 'virtio-serial,id=spice,bus=pcie.0,addr=0x9' \
+ -chardev 'spicevmc,id=vdagent,name=vdagent' \
+ -device 'virtserialport,chardev=vdagent,name=com.redhat.spice.0' \
+ -spice 'tls-port=61000,addr=127.0.0.1,tls-ciphers=HIGH,seamless-migration=on' \
+ -device 'virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x3,free-page-reporting=on' \
+ -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
+ -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
+ -device 'virtio-scsi-pci,id=scsihw0,bus=pcie.0,addr=0x5' \
+ -blockdev '{"detect-zeroes":"unmap","discard":"unmap","driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"ecd04be4259153b8293415fefa2a84c","read-only":false},"node-name":"fcd04be4259153b8293415fefa2a84c","read-only":false},"node-name":"drive-scsi0","read-only":false,"throttle-group":"throttle-drive-scsi0"}' \
+ -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,device_id=drive-scsi0,bootindex=100,write-cache=on' \
+ -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown' \
+ -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pcie.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300,host_mtu=1500' \
+ -machine 'pflash0=pflash0,pflash1=drive-efidisk0,accel=tcg,type=virt+pve0'
--
2.47.3
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH qemu-server 1/2] tests: improve multiarch build support
2026-02-03 14:16 [PATCH qemu-server 1/2] tests: improve multiarch build support Dominik Csapak
2026-02-03 14:16 ` [PATCH qemu-server 2/2] tests: cfg2cmd: add some architecture tests Dominik Csapak
@ 2026-02-03 15:01 ` Thomas Lamprecht
2026-02-03 15:04 ` Dominik Csapak
1 sibling, 1 reply; 5+ messages in thread
From: Thomas Lamprecht @ 2026-02-03 15:01 UTC (permalink / raw)
To: Dominik Csapak, pve-devel
Am 03.02.26 um 15:21 schrieb Dominik Csapak:
> The CPUConfig module sets the local 'host_arch' on loading, so instead
> to try to mock all subs that access this variable, provide a setter only
> intended for tests (and warn when using this).
Would be nicer to get a local get_host_arch that just return's the PVE::Tools'
method result, as we then could override the getter without having to worry
about this method being misused in the future by accident.
Moving the CPU model initialization into a sub, like suggested in my reply
to Fiona's patches, and redoing that on a simulated switch of the host
architecture would be also the slightly nicer interface IMO.
>
> Also, we have to override the 'get_host_arch' in the Helpers module too.
The helper module has no such method? There is only get_vm_arch there and
some usage of PVE::Tools' get_host_arch? Or is it because we import the one
from PVE::Tools there?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH qemu-server 1/2] tests: improve multiarch build support
2026-02-03 15:01 ` [PATCH qemu-server 1/2] tests: improve multiarch build support Thomas Lamprecht
@ 2026-02-03 15:04 ` Dominik Csapak
2026-02-03 15:09 ` Thomas Lamprecht
0 siblings, 1 reply; 5+ messages in thread
From: Dominik Csapak @ 2026-02-03 15:04 UTC (permalink / raw)
To: Thomas Lamprecht, pve-devel
On 2/3/26 3:59 PM, Thomas Lamprecht wrote:
> Am 03.02.26 um 15:21 schrieb Dominik Csapak:
>> The CPUConfig module sets the local 'host_arch' on loading, so instead
>> to try to mock all subs that access this variable, provide a setter only
>> intended for tests (and warn when using this).
>
> Would be nicer to get a local get_host_arch that just return's the PVE::Tools'
> method result, as we then could override the getter without having to worry
> about this method being misused in the future by accident.
>
> Moving the CPU model initialization into a sub, like suggested in my reply
> to Fiona's patches, and redoing that on a simulated switch of the host
> architecture would be also the slightly nicer interface IMO.
>
ok, makes sense, i'd do that in a v2
>>
>> Also, we have to override the 'get_host_arch' in the Helpers module too.
>
> The helper module has no such method? There is only get_vm_arch there and
> some usage of PVE::Tools' get_host_arch? Or is it because we import the one
> from PVE::Tools there?
>
yes, exactly. The importing and using of a sub means that when mocking
we have to mock it in the module we're using it.
alternatively, we could write out 'PVE::Tools::get_host_arch' everywhere
without importing, then we'd only have to mock once
(but makes the code slightly less readable)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH qemu-server 1/2] tests: improve multiarch build support
2026-02-03 15:04 ` Dominik Csapak
@ 2026-02-03 15:09 ` Thomas Lamprecht
0 siblings, 0 replies; 5+ messages in thread
From: Thomas Lamprecht @ 2026-02-03 15:09 UTC (permalink / raw)
To: Dominik Csapak, pve-devel
Am 03.02.26 um 16:03 schrieb Dominik Csapak:
>
> alternatively, we could write out 'PVE::Tools::get_host_arch' everywhere
> without importing, then we'd only have to mock once
> (but makes the code slightly less readable)
could combine that with adding a local helper with the same name though.
While I prefer having no extra code for testing, it's not always possible
and a simple getter would be at least save to have.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-02-03 15:09 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-02-03 14:16 [PATCH qemu-server 1/2] tests: improve multiarch build support Dominik Csapak
2026-02-03 14:16 ` [PATCH qemu-server 2/2] tests: cfg2cmd: add some architecture tests Dominik Csapak
2026-02-03 15:01 ` [PATCH qemu-server 1/2] tests: improve multiarch build support Thomas Lamprecht
2026-02-03 15:04 ` Dominik Csapak
2026-02-03 15:09 ` Thomas Lamprecht
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox