From f206bf86db8a349115f23168a559edef389a7b3c Mon Sep 17 00:00:00 2001 From: JumpyVi Date: Mon, 19 Oct 2026 18:46:12 -0400 Subject: [PATCH 01/20] Update the virt feature --- mkosi.images/ext-virt/mkosi.conf | 8 +++++++- .../ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf | 6 ++++++ .../ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf | 7 +++++++ mkosi.images/ext-virt/mkosi.postinst.chroot | 4 ---- 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf create mode 100644 mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf delete mode 100755 mkosi.images/ext-virt/mkosi.postinst.chroot diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index 1d1cd75fa..a709bfedc 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -11,11 +11,17 @@ CompressOutput=zstd [Content] Bootable=no BaseTrees=%O/base_%v +WithRecommends=no +RemovePackages= + virt-manager Packages= qemu-system-x86 qemu-system-arm + qemu-system-riscv + qemu-system-modules-opengl + qemu-system-modules-spice + qemu-system-misc libvirt-daemon-system libvirt-clients - virt-manager bridge-utils virtinst diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf new file mode 100644 index 000000000..a72c904a4 --- /dev/null +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf @@ -0,0 +1,6 @@ +# Type Name ID GECOS Home directory Shell +g kvm - - - - +g libvirt - - - - +u libvirt-qemu - "Libvirt QEMU driver owner" /var/lib/libvirt /usr/sbin/nologin +m libvirt-qemu kvm +m libvirt-qemu libvirt diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf new file mode 100644 index 000000000..5f3c10c9b --- /dev/null +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf @@ -0,0 +1,7 @@ +# Type Path Mode User Group Age Argument +d /var/lib/libvirt/images 0711 root root - - +d /var/lib/libvirt/qemu 0750 libvirt-qemu libvirt-qemu - - +d /var/cache/libvirt/qemu 0750 libvirt-qemu libvirt-qemu - - +d /var/log/libvirt/qemu 0750 root libvirt-qemu - - +# Auto-enable libvirt +L /etc/systemd/system/multi-user.target.wants/libvirtd.service - - - - /usr/lib/systemd/system/libvirtd.service diff --git a/mkosi.images/ext-virt/mkosi.postinst.chroot b/mkosi.images/ext-virt/mkosi.postinst.chroot deleted file mode 100755 index b80be8d33..000000000 --- a/mkosi.images/ext-virt/mkosi.postinst.chroot +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -xeuo pipefail - -glib-compile-schemas /usr/share/glib-2.0/schemas/ From 949ab5a7494da99d6fcae97de8063e12777ae0d2 Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Thu, 22 Oct 2026 18:30:17 -0400 Subject: [PATCH 02/20] Update mkosi.conf --- mkosi.images/ext-virt/mkosi.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index a709bfedc..4955f2bfc 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -11,7 +11,7 @@ CompressOutput=zstd [Content] Bootable=no BaseTrees=%O/base_%v -WithRecommends=no +WithRecommends=yes RemovePackages= virt-manager Packages= From 3ea10e1460c0888796ee3993335cdbf7f3d7f226 Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:03:46 -0400 Subject: [PATCH 03/20] Create /etc/mdevctl.d --- .../ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf index 5f3c10c9b..a4bbe5594 100644 --- a/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf @@ -3,5 +3,6 @@ d /var/lib/libvirt/images 0711 root root - - d /var/lib/libvirt/qemu 0750 libvirt-qemu libvirt-qemu - - d /var/cache/libvirt/qemu 0750 libvirt-qemu libvirt-qemu - - d /var/log/libvirt/qemu 0750 root libvirt-qemu - - +d /etc/mdevctl.d/ 0750 root root - - # Auto-enable libvirt L /etc/systemd/system/multi-user.target.wants/libvirtd.service - - - - /usr/lib/systemd/system/libvirtd.service From 3f4257f6b50e2d5962a854a114e47a32d7da043d Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:07:18 -0400 Subject: [PATCH 04/20] Add libvirt-dnsmasq --- .../ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf index a72c904a4..0346db220 100644 --- a/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf @@ -1,6 +1,7 @@ # Type Name ID GECOS Home directory Shell g kvm - - - - g libvirt - - - - +u libvirt-dnsmasq - "Libvirt dnsmasq" /var/lib/libvirt u libvirt-qemu - "Libvirt QEMU driver owner" /var/lib/libvirt /usr/sbin/nologin m libvirt-qemu kvm m libvirt-qemu libvirt From 0b4f41c565c50f3891c578c4999ddc71b8050ed5 Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:09:09 -0400 Subject: [PATCH 05/20] Add ovmf --- mkosi.images/ext-virt/mkosi.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index 4955f2bfc..198836cfc 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -24,4 +24,6 @@ Packages= libvirt-daemon-system libvirt-clients bridge-utils + ovmf + qemu-efi-aarch64 virtinst From baadaca4874ec1a8f89ce9f6c2db971c98557ef4 Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:10:21 -0400 Subject: [PATCH 06/20] Add qemu-utils --- mkosi.images/ext-virt/mkosi.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index 198836cfc..6a16387aa 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -21,6 +21,7 @@ Packages= qemu-system-modules-opengl qemu-system-modules-spice qemu-system-misc + qemu-utils libvirt-daemon-system libvirt-clients bridge-utils From 59d51404cd1272b021772a518d7c7185996b68d6 Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:11:45 -0400 Subject: [PATCH 07/20] Add 3d accel --- mkosi.images/ext-virt/mkosi.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index 6a16387aa..5921b9619 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -28,3 +28,4 @@ Packages= ovmf qemu-efi-aarch64 virtinst + virglrenderer From f13f59357e6c97e34e3f0fbb297458098171887d Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:16:16 -0400 Subject: [PATCH 08/20] Add spice --- mkosi.images/ext-virt/mkosi.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index 5921b9619..2e616b8af 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -24,6 +24,8 @@ Packages= qemu-utils libvirt-daemon-system libvirt-clients + libspice-server1 + spice-html5 bridge-utils ovmf qemu-efi-aarch64 From 487dbf6a94d3352e347a097f41485f73f85cf9b4 Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:30:30 -0400 Subject: [PATCH 09/20] Use binary packages, not source --- mkosi.images/ext-virt/mkosi.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index 2e616b8af..ae72ecc68 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -25,9 +25,10 @@ Packages= libvirt-daemon-system libvirt-clients libspice-server1 + libvirglrenderer1 + virgl-server spice-html5 bridge-utils ovmf qemu-efi-aarch64 virtinst - virglrenderer From 95efc6161f868c718b0f0bc75aa13c6009408554 Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:32:38 -0400 Subject: [PATCH 10/20] Update mkosi.conf --- mkosi.images/ext-virt/mkosi.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index ae72ecc68..582bb5fe5 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -15,6 +15,7 @@ WithRecommends=yes RemovePackages= virt-manager Packages= + qemu-system-gui qemu-system-x86 qemu-system-arm qemu-system-riscv From 5e4e50e5394ce6a3f2380673f3fe2b6a7ffbd5ae Mon Sep 17 00:00:00 2001 From: Lewis Goddard Date: Fri, 23 Oct 2026 17:22:31 +0100 Subject: [PATCH 11/20] Reload systemd-sysusers after mounting extensions to enable new users Add ExecStartPost and ExecReload to systemd-sysext.service --- .../system/systemd-sysext.service.d/10_run_sysusers.conf | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 mkosi.images/base/mkosi.extra/usr/lib/systemd/system/systemd-sysext.service.d/10_run_sysusers.conf diff --git a/mkosi.images/base/mkosi.extra/usr/lib/systemd/system/systemd-sysext.service.d/10_run_sysusers.conf b/mkosi.images/base/mkosi.extra/usr/lib/systemd/system/systemd-sysext.service.d/10_run_sysusers.conf new file mode 100644 index 000000000..4530a5c12 --- /dev/null +++ b/mkosi.images/base/mkosi.extra/usr/lib/systemd/system/systemd-sysext.service.d/10_run_sysusers.conf @@ -0,0 +1,5 @@ +# systemd-sysusers.service runs before local file systems are mounted, so it never +# gets sysusers.d files shipped in extensions. Run it again once they are merged. +[Service] +ExecStartPost=systemd-sysusers +ExecReload=systemd-sysusers From 53ef75e16bc9e6c193d38d48fb41a0dddfa29f14 Mon Sep 17 00:00:00 2001 From: Lewis Goddard Date: Fri, 23 Oct 2026 18:01:58 +0100 Subject: [PATCH 12/20] Update and rename libvirt.conf to libvirt-dnsmasq.conf Avoid overwriting the existing package for users, just add the one that uses a postinst script we won't run. --- .../mkosi.extra/usr/lib/sysusers.d/libvirt-dnsmasq.conf | 4 ++++ .../ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf | 7 ------- 2 files changed, 4 insertions(+), 7 deletions(-) create mode 100644 mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt-dnsmasq.conf delete mode 100644 mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt-dnsmasq.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt-dnsmasq.conf new file mode 100644 index 000000000..4f40a4b18 --- /dev/null +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt-dnsmasq.conf @@ -0,0 +1,4 @@ +# Ubuntu creates this user in libvirt-daemon-config-network's postinst rather than +# sysusers.d, and maintainer scripts don't run for extensions. +# Type Name ID GECOS Home directory +u libvirt-dnsmasq - "Libvirt Dnsmasq" /var/lib/libvirt/dnsmasq diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf deleted file mode 100644 index 0346db220..000000000 --- a/mkosi.images/ext-virt/mkosi.extra/usr/lib/sysusers.d/libvirt.conf +++ /dev/null @@ -1,7 +0,0 @@ -# Type Name ID GECOS Home directory Shell -g kvm - - - - -g libvirt - - - - -u libvirt-dnsmasq - "Libvirt dnsmasq" /var/lib/libvirt -u libvirt-qemu - "Libvirt QEMU driver owner" /var/lib/libvirt /usr/sbin/nologin -m libvirt-qemu kvm -m libvirt-qemu libvirt From c1cf1fd66a658bf188f6a35b1a1b762dc4a368d9 Mon Sep 17 00:00:00 2001 From: Lewis Goddard Date: Fri, 23 Oct 2026 18:12:11 +0100 Subject: [PATCH 13/20] Enable default NAT network for Qemu --- .../ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf index a4bbe5594..cea1363d2 100644 --- a/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf @@ -5,4 +5,7 @@ d /var/cache/libvirt/qemu 0750 libvirt-qemu libvirt-qemu - - d /var/log/libvirt/qemu 0750 root libvirt-qemu - - d /etc/mdevctl.d/ 0750 root root - - # Auto-enable libvirt -L /etc/systemd/system/multi-user.target.wants/libvirtd.service - - - - /usr/lib/systemd/system/libvirtd.service +L /etc/systemd/system/multi-user.target.wants/libvirtd.service - - - - /usr/lib/systemd/system/libvirtd.service +# Enable default NAT network +C /etc/libvirt/qemu/networks/default.xml - - - - /usr/share/libvirt/networks/default.xml +L /etc/libvirt/qemu/networks/autostart/default.xml - - - - /etc/libvirt/qemu/networks/default.xml From 164bef8c173521be0ccc9aaa1478ddea85618cb2 Mon Sep 17 00:00:00 2001 From: Lewis Goddard Date: Fri, 23 Oct 2026 18:33:27 +0100 Subject: [PATCH 14/20] Start libvirtd automatically on boot --- .../system/libvirt-guests.service.d/10_libvirtd.conf | 6 ++++++ .../system/multi-user.target.d/10_libvirtd.conf | 4 ++++ .../mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf | 2 -- mkosi.images/ext-virt/mkosi.finalize | 11 +++++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 mkosi.images/ext-virt/mkosi.extra/usr/lib/systemd/system/libvirt-guests.service.d/10_libvirtd.conf create mode 100644 mkosi.images/ext-virt/mkosi.extra/usr/lib/systemd/system/multi-user.target.d/10_libvirtd.conf create mode 100755 mkosi.images/ext-virt/mkosi.finalize diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/systemd/system/libvirt-guests.service.d/10_libvirtd.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/systemd/system/libvirt-guests.service.d/10_libvirtd.conf new file mode 100644 index 000000000..2419c4694 --- /dev/null +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/systemd/system/libvirt-guests.service.d/10_libvirtd.conf @@ -0,0 +1,6 @@ +# Start libvirtd once at boot so autostart networks and guests come up. Upholding +# libvirtd.service directly would restart it whenever it exits idle. After= also +# shuts guests down before libvirtd stops. +[Unit] +Wants=libvirtd.service +After=libvirtd.service diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/systemd/system/multi-user.target.d/10_libvirtd.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/systemd/system/multi-user.target.d/10_libvirtd.conf new file mode 100644 index 000000000..1e2fd4595 --- /dev/null +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/systemd/system/multi-user.target.d/10_libvirtd.conf @@ -0,0 +1,4 @@ +# Extensions are merged after the boot transaction is built, so a .wants symlink +# never starts these. Upholds= is re-checked after the service manager reloads. +[Unit] +Upholds=libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirt-guests.service diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf index cea1363d2..862fa32f1 100644 --- a/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf @@ -4,8 +4,6 @@ d /var/lib/libvirt/qemu 0750 libvirt-qemu libvirt-qemu - - d /var/cache/libvirt/qemu 0750 libvirt-qemu libvirt-qemu - - d /var/log/libvirt/qemu 0750 root libvirt-qemu - - d /etc/mdevctl.d/ 0750 root root - - -# Auto-enable libvirt -L /etc/systemd/system/multi-user.target.wants/libvirtd.service - - - - /usr/lib/systemd/system/libvirtd.service # Enable default NAT network C /etc/libvirt/qemu/networks/default.xml - - - - /usr/share/libvirt/networks/default.xml L /etc/libvirt/qemu/networks/autostart/default.xml - - - - /etc/libvirt/qemu/networks/default.xml diff --git a/mkosi.images/ext-virt/mkosi.finalize b/mkosi.images/ext-virt/mkosi.finalize new file mode 100755 index 000000000..347d99bc4 --- /dev/null +++ b/mkosi.images/ext-virt/mkosi.finalize @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Reload the service manager once this extension is merged so the units it ships +# get loaded. mkosi names the file after the image version, hence the glob. +release=("$BUILDROOT"/usr/lib/extension-release.d/extension-release.*) +if [[ ${#release[@]} -ne 1 || ! -f ${release[0]} ]]; then + echo "Expected one extension-release file, found: ${release[*]}" >&2 + exit 1 +fi +echo "EXTENSION_RELOAD_MANAGER=1" >> "${release[0]}" From 8e3eecfb1302fa4dbe7aaeb5a2fbead184aca126 Mon Sep 17 00:00:00 2001 From: JumpyVi <62212220+jumpyvi@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:03:15 -0400 Subject: [PATCH 15/20] Try out virt-manager --- mkosi.images/ext-virt/mkosi.conf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index 582bb5fe5..0b32faf3e 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -12,9 +12,8 @@ CompressOutput=zstd Bootable=no BaseTrees=%O/base_%v WithRecommends=yes -RemovePackages= - virt-manager Packages= + virt-manager qemu-system-gui qemu-system-x86 qemu-system-arm From f40b2d24287e2a841f8ad23be3ce08ed88386b04 Mon Sep 17 00:00:00 2001 From: Lewis Goddard Date: Fri, 23 Oct 2026 21:19:49 +0100 Subject: [PATCH 16/20] Update libvirt groups to avoid flapping --- .../ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf index 862fa32f1..c54b61888 100644 --- a/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf +++ b/mkosi.images/ext-virt/mkosi.extra/usr/lib/tmpfiles.d/libvirt.conf @@ -1,7 +1,7 @@ # Type Path Mode User Group Age Argument d /var/lib/libvirt/images 0711 root root - - -d /var/lib/libvirt/qemu 0750 libvirt-qemu libvirt-qemu - - -d /var/cache/libvirt/qemu 0750 libvirt-qemu libvirt-qemu - - +d /var/lib/libvirt/qemu 0750 libvirt-qemu kvm - - +d /var/cache/libvirt/qemu 0750 libvirt-qemu kvm - - d /var/log/libvirt/qemu 0750 root libvirt-qemu - - d /etc/mdevctl.d/ 0750 root root - - # Enable default NAT network From b67d2d7821c8bde058a46c56dcfcdc77ca396529 Mon Sep 17 00:00:00 2001 From: Lewis Goddard Date: Fri, 23 Oct 2026 23:57:02 +0100 Subject: [PATCH 17/20] Fix mdevctl missing folders --- mkosi.images/ext-virt/mkosi.finalize | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mkosi.images/ext-virt/mkosi.finalize b/mkosi.images/ext-virt/mkosi.finalize index 347d99bc4..5e6e13789 100755 --- a/mkosi.images/ext-virt/mkosi.finalize +++ b/mkosi.images/ext-virt/mkosi.finalize @@ -9,3 +9,7 @@ if [[ ${#release[@]} -ne 1 || ! -f ${release[0]} ]]; then exit 1 fi echo "EXTENSION_RELOAD_MANAGER=1" >> "${release[0]}" + +# mkosi removes empty directories from extensions, but mdevctl won't run without +# its callout and notifier directories. +mkdir -p "$BUILDROOT"/usr/lib/mdevctl/scripts.d/{callouts,notifiers} From 8a576fbc09682e15a3df08e7de3d866eac8bd212 Mon Sep 17 00:00:00 2001 From: Lewis Goddard Date: Sat, 24 Oct 2026 00:05:35 +0100 Subject: [PATCH 18/20] Fix gschema for virt-manager --- mkosi.images/ext-virt/mkosi.postinst.chroot | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100755 mkosi.images/ext-virt/mkosi.postinst.chroot diff --git a/mkosi.images/ext-virt/mkosi.postinst.chroot b/mkosi.images/ext-virt/mkosi.postinst.chroot new file mode 100755 index 000000000..63d27980f --- /dev/null +++ b/mkosi.images/ext-virt/mkosi.postinst.chroot @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -euo pipefail + +# virt-manager aborts at launch unless its GSettings schema is compiled. mkosi drops the +# regenerated /usr/share/glib-2.0/schemas/gschemas.compiled since the base image already +# has one, so compile the schema into our own directory and point virt-manager at it. +schemas=/usr/share/ext-virt/glib-2.0/schemas +mkdir -p "$schemas" /usr/libexec/ext-virt +mv /usr/share/glib-2.0/schemas/*virt-manager* "$schemas/" +glib-compile-schemas --strict "$schemas" + +mv /usr/bin/virt-manager /usr/libexec/ext-virt/virt-manager +cat > /usr/bin/virt-manager < Date: Sat, 24 Oct 2026 00:56:55 +0100 Subject: [PATCH 19/20] append our schema dir to XDG_DATA_DIRS instead --- mkosi.images/ext-virt/mkosi.postinst.chroot | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mkosi.images/ext-virt/mkosi.postinst.chroot b/mkosi.images/ext-virt/mkosi.postinst.chroot index 63d27980f..0b3c59605 100755 --- a/mkosi.images/ext-virt/mkosi.postinst.chroot +++ b/mkosi.images/ext-virt/mkosi.postinst.chroot @@ -4,7 +4,9 @@ set -euo pipefail # virt-manager aborts at launch unless its GSettings schema is compiled. mkosi drops the # regenerated /usr/share/glib-2.0/schemas/gschemas.compiled since the base image already # has one, so compile the schema into our own directory and point virt-manager at it. -schemas=/usr/share/ext-virt/glib-2.0/schemas +# virt-manager overwrites GSETTINGS_SCHEMA_DIR, so add it through XDG_DATA_DIRS instead. +datadir=/usr/share/ext-virt +schemas=$datadir/glib-2.0/schemas mkdir -p "$schemas" /usr/libexec/ext-virt mv /usr/share/glib-2.0/schemas/*virt-manager* "$schemas/" glib-compile-schemas --strict "$schemas" @@ -12,7 +14,7 @@ glib-compile-schemas --strict "$schemas" mv /usr/bin/virt-manager /usr/libexec/ext-virt/virt-manager cat > /usr/bin/virt-manager < Date: Sat, 24 Oct 2026 01:05:15 +0100 Subject: [PATCH 20/20] Drop virt-manager package --- mkosi.images/ext-virt/mkosi.conf | 3 ++- mkosi.images/ext-virt/mkosi.postinst.chroot | 20 -------------------- 2 files changed, 2 insertions(+), 21 deletions(-) delete mode 100755 mkosi.images/ext-virt/mkosi.postinst.chroot diff --git a/mkosi.images/ext-virt/mkosi.conf b/mkosi.images/ext-virt/mkosi.conf index 0b32faf3e..582bb5fe5 100644 --- a/mkosi.images/ext-virt/mkosi.conf +++ b/mkosi.images/ext-virt/mkosi.conf @@ -12,8 +12,9 @@ CompressOutput=zstd Bootable=no BaseTrees=%O/base_%v WithRecommends=yes -Packages= +RemovePackages= virt-manager +Packages= qemu-system-gui qemu-system-x86 qemu-system-arm diff --git a/mkosi.images/ext-virt/mkosi.postinst.chroot b/mkosi.images/ext-virt/mkosi.postinst.chroot deleted file mode 100755 index 0b3c59605..000000000 --- a/mkosi.images/ext-virt/mkosi.postinst.chroot +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# virt-manager aborts at launch unless its GSettings schema is compiled. mkosi drops the -# regenerated /usr/share/glib-2.0/schemas/gschemas.compiled since the base image already -# has one, so compile the schema into our own directory and point virt-manager at it. -# virt-manager overwrites GSETTINGS_SCHEMA_DIR, so add it through XDG_DATA_DIRS instead. -datadir=/usr/share/ext-virt -schemas=$datadir/glib-2.0/schemas -mkdir -p "$schemas" /usr/libexec/ext-virt -mv /usr/share/glib-2.0/schemas/*virt-manager* "$schemas/" -glib-compile-schemas --strict "$schemas" - -mv /usr/bin/virt-manager /usr/libexec/ext-virt/virt-manager -cat > /usr/bin/virt-manager <