From 6e5ffa028c6bdfb1882e1deb3a633b2ff6900dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Tue, 3 Feb 2026 08:56:33 +0100 Subject: [PATCH 01/41] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index acb0a734..4fee2525 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -49,7 +49,7 @@ jobs: # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" INCUS_TAG: "v6.21.0" - INCUS_UI_CANONICAL_TAG: "incus-0.19.2" + INCUS_UI_CANONICAL_TAG: "incus-0.19.3" LXCFS_TAG: "v6.0.5" LXC_TAG: "v6.0.5" From 5d120fb34f1d99418cb0736e49b0d443b0b77fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Tue, 3 Feb 2026 08:56:39 +0100 Subject: [PATCH 02/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 4fee2525..2aedbcf1 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -313,6 +313,18 @@ jobs: git cherry-pick c829eba4b7eec64d3d4f8fdc3d20433b40bb5c8c # doc: Update config git cherry-pick 945a885af9d3f88c905ad5c5b7af9f1232b69433 # incusd/instance/qmp: Prevent setting link up at initialization git cherry-pick ee2fc45f2d9300e58d9fb5b378a7f2531034cceb # incusd/instance/qemu: Properly initialize connected status + git cherry-pick 9a7eaf1333fbb902b29a328c02ff54c49e4aa03f # incusd/storage/zfs: Set IncusOS storage usage property + git cherry-pick 0de3f4ed7144299457d1f37589fff90b39d42b16 # Fix typo: Supported cConditions to Supported Conditions + git cherry-pick 5e19938aae0d0790e645d5d97309360342cff6c7 # shared/util: Fix SingleQuote to actually quote + git cherry-pick 4e5af56d1205563f53481d27e3ce0f1eb45e573e # cmd/incus: Fix get-client-certificate ignoring per-remote certs + git cherry-pick 336e9c14a31bb63d49b02ba6085d67c425ea3f83 # incusd/storage/lvm: Move IncusOS check to pool creation + git cherry-pick 4fcdbbc47937a4d5ba08ca7dbf045deabfd47ce6 # incus-migrate: Allow running as non-root + git cherry-pick 7f5bef42bef75c3fe361aa2af69a37a2c52e1c14 # incus-migrate: Add URL imports + git cherry-pick 8d709107af9e4b44e6848fae4c8e2ff0955e7445 # doc: Ignore broken links on Alpine gitlab + git cherry-pick 6da39979ec860ddd42b2d89711dd78c7bec6e286 # doc: Ignore broken links on docbook website + git cherry-pick 2eae0da145a9ff676f24a792b29e862baa086778 # github: Deal with new Github images + git cherry-pick 9bbd1361a80b420ab864b9dcf2d9b8931faed393 # tests: Fix SR-IOV attached key test + git cherry-pick cbeffb008344906e9b17989d1bfde70a110c2f1b # incusd/device/nic_physical: Allow migration of managed devices go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From ce7cb1e67653e482dddf4cd3a811bd947ac776e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sat, 7 Feb 2026 15:56:43 -0500 Subject: [PATCH 03/41] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 2aedbcf1..4d85c6c0 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -57,7 +57,7 @@ jobs: COWSQL_TAG: "v1.15.9" CRIU_TAG: "v4.2" EDK2_TAG: "edk2-stable202511" - GOLANG_TAG: "go1.25.6" + GOLANG_TAG: "go1.25.7" LEGO_TAG: "v4.31.0" LIBTPMS_TAG: "v0.10.2" LIBURING_TAG: "liburing-2.13" From 6eaa63a7dbf9b88689cd171c4f599a12638cca8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sat, 7 Feb 2026 16:00:27 -0500 Subject: [PATCH 04/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 4d85c6c0..fa8223f7 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -325,6 +325,25 @@ jobs: git cherry-pick 2eae0da145a9ff676f24a792b29e862baa086778 # github: Deal with new Github images git cherry-pick 9bbd1361a80b420ab864b9dcf2d9b8931faed393 # tests: Fix SR-IOV attached key test git cherry-pick cbeffb008344906e9b17989d1bfde70a110c2f1b # incusd/device/nic_physical: Allow migration of managed devices + git cherry-pick 36ad2cbcbc70c9f7c445b4588a997f731ef0f0b2 # shared/cliconfig: Don't pass scheme to OCI creds helper + git cherry-pick 06f30e185f805b9efe59e0599191b34e72423caa # incusd/cluster: Allow restoring a cluster without its instances + git cherry-pick 5493daf9587ad45bccfcb0d26ec5e1d8c43c577e # internal/instance; Correct doc for boot.autostart.priority + git cherry-pick 80a5519509214172615c713a9b84df5381299ae4 # doc: Update config + git cherry-pick b2a41e7b9f0883dff992c4d91193648f977c266e # incusd/cluster: Restrict join token to database servers + git cherry-pick b234ba988cff3ee1b94347c224a2c37fb2dc1e74 # incusd/storage/lvm: Prevent use of lvmcluster with loop files + git cherry-pick bb6e2b09ebbeb61c84354c1515b3de8f92edc295 # incusd/operations: Prevent concurrent access to metadata + git cherry-pick 5c9b30069d1ddb91ebcb5a0f1f14940e531e6067 # incusd/storage: Add support for renaming qcow2 volumes + git cherry-pick 336ec10ad1038c8efc8fad7f755cadda502b1e02 # incusd/storage/drivers: Load NBD module for lvmcluster + git cherry-pick e2e098d6f2ae95538b2da212f193fd098b361331 # incusd/instance/drivers: Pass information about whether migration is live + git cherry-pick 1dde134919cb77115e04e2767aa0009f0558160c # incusd/storage: Add support for qcow2 volume migration + git cherry-pick b3b3d1c27cad8a16b8307b6c384ec0854b82943b # incusd/storage: Add snapshot mount paths parameter to the task function + git cherry-pick c8938372104e34f5b2c2bc438d05765793d1a251 # incusd/device/nic_riov: Retry MAC setting logic + git cherry-pick 290594583613db81f9b789e044cab2bbcc5dc98c # doc/howto/instances: Mention keeping agent drive attached + git cherry-pick da03a4bf41b5ea10921b1889b9c547d7a8926802 # incusd/instances/agent-loader: Silence semanage + git cherry-pick 659a645a743c07c479d23b74e7dd42dfd2db26df # incusd/cluster: Also transfer public key on join + git cherry-pick ebd805b9f29d8715a3b0975c6a57fa00d56fb37d # doc/cloud-init: Fix bad link + git cherry-pick 71588565dbd30a79dab6b511c381e4c5732c4ce0 # incusd: Search OVS switch external_interfaces + git cherry-pick 337985bfd83f5908894160fc321ccf8d1b7087c0 # doc/backup: Fix MarkdownLint warnings go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From f86a04cf28b86ff664495df0b52458120ff49c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Wed, 28 Jan 2026 11:42:48 -0500 Subject: [PATCH 05/41] debian: Include incus-benchmark MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #106 Signed-off-by: Stéphane Graber --- debian/incus-extra.install | 2 ++ debian/rules | 2 ++ 2 files changed, 4 insertions(+) diff --git a/debian/incus-extra.install b/debian/incus-extra.install index 53aa83c6..5a32ac6e 100644 --- a/debian/incus-extra.install +++ b/debian/incus-extra.install @@ -1,10 +1,12 @@ usr/bin/distrobuilder usr/bin/fuidshift +usr/bin/incus-benchmark usr/bin/incus-migrate usr/bin/incus-simplestreams usr/bin/lxc-to-incus opt/incus/bin/distrobuilder opt/incus/bin/fuidshift +opt/incus/bin/incus-benchmark opt/incus/bin/incus-migrate opt/incus/bin/incus-simplestreams opt/incus/bin/lxc-to-incus diff --git a/debian/rules b/debian/rules index 6ca7b0d1..f4a2d369 100755 --- a/debian/rules +++ b/debian/rules @@ -33,11 +33,13 @@ override_dh_install: # Handle incus-extra rm debian/incus-base/usr/bin/distrobuilder rm debian/incus-base/usr/bin/fuidshift + rm debian/incus-base/usr/bin/incus-benchmark rm debian/incus-base/usr/bin/incus-migrate rm debian/incus-base/usr/bin/incus-simplestreams rm debian/incus-base/usr/bin/lxc-to-incus rm debian/incus-base/opt/incus/bin/distrobuilder rm debian/incus-base/opt/incus/bin/fuidshift + rm debian/incus-base/opt/incus/bin/incus-benchmark rm debian/incus-base/opt/incus/bin/incus-migrate rm debian/incus-base/opt/incus/bin/incus-simplestreams rm debian/incus-base/opt/incus/bin/lxc-to-incus From 92ed444b08232e289873820096c962d41c834a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sat, 31 Jan 2026 12:59:35 +0100 Subject: [PATCH 06/41] debian: Fix incus-benchmark MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index fa8223f7..19cb1596 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -731,6 +731,7 @@ jobs: ln -s /opt/incus/bin/fuidshift pkg/usr/bin/fuidshift ln -s /opt/incus/bin/incus-migrate pkg/usr/bin/incus-migrate ln -s /opt/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams + ln -s /opt/incus/bin/incus-benchmark pkg/usr/bin/incus-benchmark mkdir -p pkg/var/lib/incus chmod 711 pkg/var/lib/incus From 03a7e33836e85e2aaba6274e0271b8d85f9e1d18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sat, 31 Jan 2026 13:07:22 +0100 Subject: [PATCH 07/41] incus-extra: Add lxd-to-incus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- debian/control | 1 + debian/incus-extra.install | 2 ++ debian/rules | 2 ++ 3 files changed, 5 insertions(+) diff --git a/debian/control b/debian/control index 2bd0b308..2ef03285 100644 --- a/debian/control +++ b/debian/control @@ -139,6 +139,7 @@ Description: Incus - Extra tools - incus-migrate - incus-simplestreams - lxc-to-incus + - lxd-to-incus . This build of Incus is provided for free by Zabbly. Zabbly can be contacted for commercial support and development on Incus. diff --git a/debian/incus-extra.install b/debian/incus-extra.install index 5a32ac6e..828b71b8 100644 --- a/debian/incus-extra.install +++ b/debian/incus-extra.install @@ -4,9 +4,11 @@ usr/bin/incus-benchmark usr/bin/incus-migrate usr/bin/incus-simplestreams usr/bin/lxc-to-incus +usr/bin/lxd-to-incus opt/incus/bin/distrobuilder opt/incus/bin/fuidshift opt/incus/bin/incus-benchmark opt/incus/bin/incus-migrate opt/incus/bin/incus-simplestreams opt/incus/bin/lxc-to-incus +opt/incus/bin/lxd-to-incus diff --git a/debian/rules b/debian/rules index f4a2d369..53f2ec22 100755 --- a/debian/rules +++ b/debian/rules @@ -37,12 +37,14 @@ override_dh_install: rm debian/incus-base/usr/bin/incus-migrate rm debian/incus-base/usr/bin/incus-simplestreams rm debian/incus-base/usr/bin/lxc-to-incus + rm debian/incus-base/usr/bin/lxd-to-incus rm debian/incus-base/opt/incus/bin/distrobuilder rm debian/incus-base/opt/incus/bin/fuidshift rm debian/incus-base/opt/incus/bin/incus-benchmark rm debian/incus-base/opt/incus/bin/incus-migrate rm debian/incus-base/opt/incus/bin/incus-simplestreams rm debian/incus-base/opt/incus/bin/lxc-to-incus + rm debian/incus-base/opt/incus/bin/lxd-to-incus # Handle incus-ui-canonical mkdir -p debian/incus-ui-canonical/opt/incus/ From 4f6f02c759cbefaf383a74ad74b65b06d7213404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sun, 1 Feb 2026 10:30:52 +0100 Subject: [PATCH 08/41] debian: Use wrappers for both incus-migrate and lxd-to-incus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 3 --- bin/incus-migrate | 4 ++++ bin/lxd-to-incus | 4 ++++ 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100755 bin/incus-migrate create mode 100755 bin/lxd-to-incus diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 19cb1596..82044c8d 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -726,10 +726,7 @@ jobs: ln -s /opt/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish ln -s /opt/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus - ln -s /opt/incus/bin/lxd-to-incus pkg/usr/bin/lxd-to-incus - ln -s /opt/incus/bin/fuidshift pkg/usr/bin/fuidshift - ln -s /opt/incus/bin/incus-migrate pkg/usr/bin/incus-migrate ln -s /opt/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams ln -s /opt/incus/bin/incus-benchmark pkg/usr/bin/incus-benchmark diff --git a/bin/incus-migrate b/bin/incus-migrate new file mode 100755 index 00000000..6c811023 --- /dev/null +++ b/bin/incus-migrate @@ -0,0 +1,4 @@ +#!/bin/sh +export PATH=/opt/incus/bin/:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin +export LD_LIBRARY_PATH=/opt/incus/lib/ +exec incus-migrate "$@" diff --git a/bin/lxd-to-incus b/bin/lxd-to-incus new file mode 100755 index 00000000..bf649192 --- /dev/null +++ b/bin/lxd-to-incus @@ -0,0 +1,4 @@ +#!/bin/sh +export PATH=/opt/incus/bin/:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin +export LD_LIBRARY_PATH=/opt/incus/lib/ +exec lxd-to-incus "$@" From 5671301d6c54409d87d29771a0238b2db354a056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sun, 8 Feb 2026 13:37:28 -0500 Subject: [PATCH 09/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 82044c8d..fc4b8fd1 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -344,6 +344,8 @@ jobs: git cherry-pick ebd805b9f29d8715a3b0975c6a57fa00d56fb37d # doc/cloud-init: Fix bad link git cherry-pick 71588565dbd30a79dab6b511c381e4c5732c4ce0 # incusd: Search OVS switch external_interfaces git cherry-pick 337985bfd83f5908894160fc321ccf8d1b7087c0 # doc/backup: Fix MarkdownLint warnings + git cherry-pick df76956b950424d43a5bdd95bf9a96a195a7bbda # incusd/storage_volumes_snapshot: Treat pongo templates as unique + git cherry-pick cc9b34b188af8e45cc874a2707ccd8bd4cb8bf95 # incusd/instance/drivers: Propagate error when adding qcow2 backing block device go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From ac685a682b5affb825e44b0086da5905f72f1727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Mon, 9 Feb 2026 09:01:07 -0500 Subject: [PATCH 10/41] incus: Revert some cherry-picks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index fc4b8fd1..c214aff2 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -332,11 +332,6 @@ jobs: git cherry-pick b2a41e7b9f0883dff992c4d91193648f977c266e # incusd/cluster: Restrict join token to database servers git cherry-pick b234ba988cff3ee1b94347c224a2c37fb2dc1e74 # incusd/storage/lvm: Prevent use of lvmcluster with loop files git cherry-pick bb6e2b09ebbeb61c84354c1515b3de8f92edc295 # incusd/operations: Prevent concurrent access to metadata - git cherry-pick 5c9b30069d1ddb91ebcb5a0f1f14940e531e6067 # incusd/storage: Add support for renaming qcow2 volumes - git cherry-pick 336ec10ad1038c8efc8fad7f755cadda502b1e02 # incusd/storage/drivers: Load NBD module for lvmcluster - git cherry-pick e2e098d6f2ae95538b2da212f193fd098b361331 # incusd/instance/drivers: Pass information about whether migration is live - git cherry-pick 1dde134919cb77115e04e2767aa0009f0558160c # incusd/storage: Add support for qcow2 volume migration - git cherry-pick b3b3d1c27cad8a16b8307b6c384ec0854b82943b # incusd/storage: Add snapshot mount paths parameter to the task function git cherry-pick c8938372104e34f5b2c2bc438d05765793d1a251 # incusd/device/nic_riov: Retry MAC setting logic git cherry-pick 290594583613db81f9b789e044cab2bbcc5dc98c # doc/howto/instances: Mention keeping agent drive attached git cherry-pick da03a4bf41b5ea10921b1889b9c547d7a8926802 # incusd/instances/agent-loader: Silence semanage @@ -345,7 +340,6 @@ jobs: git cherry-pick 71588565dbd30a79dab6b511c381e4c5732c4ce0 # incusd: Search OVS switch external_interfaces git cherry-pick 337985bfd83f5908894160fc321ccf8d1b7087c0 # doc/backup: Fix MarkdownLint warnings git cherry-pick df76956b950424d43a5bdd95bf9a96a195a7bbda # incusd/storage_volumes_snapshot: Treat pongo templates as unique - git cherry-pick cc9b34b188af8e45cc874a2707ccd8bd4cb8bf95 # incusd/instance/drivers: Propagate error when adding qcow2 backing block device go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From ec1d535213b0497818203ff3ad53deb02d83fca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Tue, 10 Feb 2026 18:29:03 -0500 Subject: [PATCH 11/41] debian: Include qemu-nbd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- debian/incus.install | 1 + debian/rules | 1 + 2 files changed, 2 insertions(+) diff --git a/debian/incus.install b/debian/incus.install index de244a51..d9ddd058 100644 --- a/debian/incus.install +++ b/debian/incus.install @@ -1,5 +1,6 @@ opt/incus/agent opt/incus/bin/qemu-img +opt/incus/bin/qemu-nbd opt/incus/bin/qemu-system-* opt/incus/bin/virtiofsd opt/incus/share/qemu diff --git a/debian/rules b/debian/rules index 53f2ec22..8d4ca1ae 100755 --- a/debian/rules +++ b/debian/rules @@ -17,6 +17,7 @@ override_dh_install: rm -R debian/incus-base/opt/incus/share/qemu rm -R debian/incus-base/opt/incus/agent rm debian/incus-base/opt/incus/bin/qemu-img + rm debian/incus-base/opt/incus/bin/qemu-nbd rm debian/incus-base/opt/incus/bin/qemu-system-* rm debian/incus-base/opt/incus/bin/virtiofsd From c5dd7998326621eaa22218120d6763282a47d7a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Tue, 10 Feb 2026 18:31:45 -0500 Subject: [PATCH 12/41] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index c214aff2..b8e5157d 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -57,10 +57,10 @@ jobs: COWSQL_TAG: "v1.15.9" CRIU_TAG: "v4.2" EDK2_TAG: "edk2-stable202511" - GOLANG_TAG: "go1.25.7" + GOLANG_TAG: "go1.26.0" LEGO_TAG: "v4.31.0" LIBTPMS_TAG: "v0.10.2" - LIBURING_TAG: "liburing-2.13" + LIBURING_TAG: "liburing-2.14" MINIO_MC_TAG: "RELEASE.2025-08-13T08-35-41Z" MINIO_TAG: "RELEASE.2025-10-15T17-29-55Z" NASM_TAG: "nasm-2.16.03" From 1ee55ab15bed4582a23ecce8c97333247c446d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Tue, 10 Feb 2026 18:43:55 -0500 Subject: [PATCH 13/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index b8e5157d..c2e20993 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -332,6 +332,11 @@ jobs: git cherry-pick b2a41e7b9f0883dff992c4d91193648f977c266e # incusd/cluster: Restrict join token to database servers git cherry-pick b234ba988cff3ee1b94347c224a2c37fb2dc1e74 # incusd/storage/lvm: Prevent use of lvmcluster with loop files git cherry-pick bb6e2b09ebbeb61c84354c1515b3de8f92edc295 # incusd/operations: Prevent concurrent access to metadata + git cherry-pick 5c9b30069d1ddb91ebcb5a0f1f14940e531e6067 # incusd/storage: Add support for renaming qcow2 volumes + git cherry-pick 336ec10ad1038c8efc8fad7f755cadda502b1e02 # incusd/storage/drivers: Load NBD module for lvmcluster + git cherry-pick e2e098d6f2ae95538b2da212f193fd098b361331 # incusd/instance/drivers: Pass information about whether migration is live + git cherry-pick 1dde134919cb77115e04e2767aa0009f0558160c # incusd/storage: Add support for qcow2 volume migration + git cherry-pick b3b3d1c27cad8a16b8307b6c384ec0854b82943b # incusd/storage: Add snapshot mount paths parameter to the task function git cherry-pick c8938372104e34f5b2c2bc438d05765793d1a251 # incusd/device/nic_riov: Retry MAC setting logic git cherry-pick 290594583613db81f9b789e044cab2bbcc5dc98c # doc/howto/instances: Mention keeping agent drive attached git cherry-pick da03a4bf41b5ea10921b1889b9c547d7a8926802 # incusd/instances/agent-loader: Silence semanage @@ -340,6 +345,18 @@ jobs: git cherry-pick 71588565dbd30a79dab6b511c381e4c5732c4ce0 # incusd: Search OVS switch external_interfaces git cherry-pick 337985bfd83f5908894160fc321ccf8d1b7087c0 # doc/backup: Fix MarkdownLint warnings git cherry-pick df76956b950424d43a5bdd95bf9a96a195a7bbda # incusd/storage_volumes_snapshot: Treat pongo templates as unique + git cherry-pick cc9b34b188af8e45cc874a2707ccd8bd4cb8bf95 # incusd/instance/drivers: Propagate error when adding qcow2 backing block device + git cherry-pick dd0740be1678b1f128726e4eeca1e6652c6eb203 # incusd/instance/qemu: gofumpt + git cherry-pick 4410362bfa7adbd5e5dd9e8c0191f1d32188db08 # incusd/device/disk: Add IsSpecialDisk + git cherry-pick 5980894f36a28af14507475816fe4bfa2ada007b # incusd/instance/lxc: Skip metrics on special disks + git cherry-pick a5e48412a31e3fe9eb54c91f5f0313352c49ea40 # incusd/storage: Prevent moving shared storage volumes + git cherry-pick 3496d3eb36fe0c96722535dc7de5eb31bdf2f797 # doc: Update incus-migrate documentation + git cherry-pick 83edce68d51e89428417a2536f3ae92af01350f3 # incusd: Validate that instance can be migrated + git cherry-pick 87d4380fd85ef6dd1201f8b69fef59ba5327654d # incusd/instance/drivers: Add writable argument to NBDBlockExportAdd + git cherry-pick 76fb4423ee9a217d0f680d184f18dd2fa131a197 # incusd/instance/drivers/qmp: Add NBDUnixServerStart + git cherry-pick 356889a52e3aa72bf8a8b21613b4b49d06f6c7ec # incusd/instance: Add ExportQcow2Disk + git cherry-pick d28d49e020e179ca69dd92cab5ffda774014c6fb # incusd/storage: Support live migration of qcow2 volumes + git cherry-pick 2ca7d816411f37304684543d1f2b4f64655dfd26 # doc: Add information about lvmcluster limitation go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From 12ea8b177a4426c0848d1c2f9459d692e5c07913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Tue, 10 Feb 2026 19:49:12 -0500 Subject: [PATCH 14/41] github: Don't delete qemu-nbd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index c2e20993..4e58050e 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -695,7 +695,6 @@ jobs: rm /opt/incus/bin/qemu-bridge-helper rm /opt/incus/bin/qemu-edid rm /opt/incus/bin/qemu-io - rm /opt/incus/bin/qemu-nbd rm /opt/incus/bin/qemu-pr-helper rm /opt/incus/bin/qemu-storage-daemon rm /opt/incus/bin/swtpm_* From 35790ba55d4f9bf991e6d016487b4b15bc98eece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Fri, 13 Feb 2026 10:23:03 -0500 Subject: [PATCH 15/41] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 4e58050e..6dffcd6c 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -49,7 +49,7 @@ jobs: # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" INCUS_TAG: "v6.21.0" - INCUS_UI_CANONICAL_TAG: "incus-0.19.3" + INCUS_UI_CANONICAL_TAG: "incus-0.19.4" LXCFS_TAG: "v6.0.5" LXC_TAG: "v6.0.5" @@ -65,10 +65,10 @@ jobs: MINIO_TAG: "RELEASE.2025-10-15T17-29-55Z" NASM_TAG: "nasm-2.16.03" NVIDIA_CONTAINER_TAG: "v1.18.2" - QEMU_TAG: "v10.2.0" + QEMU_TAG: "v10.2.1" RAFT_TAG: "v0.22.1" SEABIOS_TAG: "rel-1.17.0" - SKOPEO_TAG: "v1.21.0" + SKOPEO_TAG: "v1.22.0" SWTPM_TAG: "v0.10.1" TRUENAS_INCUS_CTL_TAG: "v0.7.3" VIRTIOFSD_TAG: "v1.13.3" From a8cc9121565278770a7b9cae1ca65e103de24507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sat, 14 Feb 2026 02:32:02 -0500 Subject: [PATCH 16/41] edk2: Rewrite BIOS date with build date MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 6dffcd6c..e2f59725 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -502,6 +502,8 @@ jobs: patch -p1 < "${REPO}/patches/edk2-0008-Disable-virtio-keyboard.patch" patch -p1 < "${REPO}/patches/edk2-0009-disable-UEFI-shell-under-SecureBoot.patch" + sed -i "s#02/02/2022#$(date +%m/%d/%Y)#g" OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c + EDK2_ARCH="X64" EDK2_PKG="OvmfPkg/OvmfPkgX64.dsc" EDK2_FV_CODE="OVMF_CODE" From 300229b8bd649cb7de0ad64124376adcce3a47ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sun, 15 Feb 2026 18:33:50 -0500 Subject: [PATCH 17/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index e2f59725..1a97bcc0 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -344,6 +344,7 @@ jobs: git cherry-pick ebd805b9f29d8715a3b0975c6a57fa00d56fb37d # doc/cloud-init: Fix bad link git cherry-pick 71588565dbd30a79dab6b511c381e4c5732c4ce0 # incusd: Search OVS switch external_interfaces git cherry-pick 337985bfd83f5908894160fc321ccf8d1b7087c0 # doc/backup: Fix MarkdownLint warnings + git cherry-pick df76956b950424d43a5bdd95bf9a96a195a7bbda # incusd/storage_volumes_snapshot: Treat pongo templates as unique git cherry-pick cc9b34b188af8e45cc874a2707ccd8bd4cb8bf95 # incusd/instance/drivers: Propagate error when adding qcow2 backing block device git cherry-pick dd0740be1678b1f128726e4eeca1e6652c6eb203 # incusd/instance/qemu: gofumpt @@ -356,7 +357,27 @@ jobs: git cherry-pick 76fb4423ee9a217d0f680d184f18dd2fa131a197 # incusd/instance/drivers/qmp: Add NBDUnixServerStart git cherry-pick 356889a52e3aa72bf8a8b21613b4b49d06f6c7ec # incusd/instance: Add ExportQcow2Disk git cherry-pick d28d49e020e179ca69dd92cab5ffda774014c6fb # incusd/storage: Support live migration of qcow2 volumes - git cherry-pick 2ca7d816411f37304684543d1f2b4f64655dfd26 # doc: Add information about lvmcluster limitation + git cherry-pick 2ca7d816411f37304684543d1f2b4f64655dfd26 # doc: Add information about lvmcluster limitations + git cherry-pick 01f1702e9fffdb8b1ad0cd53aa98e9342da6951a # incusd/instance: Add QCOW2 live migration support for instances with snapshots + git cherry-pick 63a91a126dc960e9e08d26895b94e3ebed08488c # incusd/storage: Add QCOW2 live migration support for instances with snapshots + git cherry-pick 0065387fb1a5291177374033a0c8c72c5863d671 # incusd: Remove ensureMigratable as checks are no longer valid + git cherry-pick 27ab629c3532dfa86b8771b801ee3138e1fac2a4 # doc: Remove outdated doc about live QCOW2 migration limitation + git cherry-pick aaa1b2bea1a1f653194605b78d1caab00e31b0b4 # incusd/instance/drivers: Propagate live migration information + git cherry-pick e43dd3ce26dd4ce101ba297fc09f7196e3c99ee9 # incusd/storage: Skip final filesystem sync for VMs during migration + git cherry-pick 2da034d1c768b53312a742cd4189923aad3655e3 # doc/requirements: Bump minimal requirements + git cherry-pick af8f62bf9964e2791b47fc3d4f08d6eb974d4703 # Validate requested storage pool during instance migration + git cherry-pick 8d63da8aae8e7f3d899328630a86142655e6005f # incusd/instance/qemu: Rename onDisconnectEvent to initialized + git cherry-pick bff2bf92a42c2230d0044571eaef3b5867941234 # incusd/instance/qemu: Add EventVMReset + git cherry-pick f2264d9f8db6799804e575ded3840e51bdd86c91 # incusd/instance/qemu: Use standard QEMU actions and catch in handler + git cherry-pick 4bf7943a92b8670e005e5f0c3013f98c9d2599a8 # internal/instance: Add volatile.vm.needs_reset + git cherry-pick fecec8cbb8fbaa58cd9ca70b310206635da75662 # incusd/instance/qemu: Implement fast reboot + git cherry-pick 478d3c63bc04f2cdac32729d38d3fe5d9c59a54d # doc: Update config + git cherry-pick 75f50c23fbef65a547c93cd58536b0f9bc87866f # incusd/instance/qmp: Fix cross-server live-migration + git cherry-pick 56e15e45c49ef74ba2703bc73a58cad370d5fc95 # incusd/instance/qemu: Report QEMU error on VM restore + git cherry-pick 156800b1135fa54a62dd23b2d5bc3d4f8a00be3d # incus-migrate: Fix URL detection + git cherry-pick 46f90806d7992e8a22e1c418eab82e8a58601f8c # incusd/instance/drivers: Remove instance volume on revert after failed live migration + git cherry-pick 69d4b28ac27199c67b303d64b61308183fbd0236 # incusd/instance/drivers: Propagate target migration failure to source using context cancellation + git cherry-pick acf27c1ed354b96cf3e89abbf5d603f82a9649ab # incusd/storage: Prevent concurrent QCOW2 snapshot deletions go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From 74048ab72608af3444a58e48e953c6d3fda0eca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Mon, 16 Feb 2026 03:50:18 -0500 Subject: [PATCH 18/41] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 1a97bcc0..397c8627 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -49,7 +49,7 @@ jobs: # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" INCUS_TAG: "v6.21.0" - INCUS_UI_CANONICAL_TAG: "incus-0.19.4" + INCUS_UI_CANONICAL_TAG: "incus-0.19.5" LXCFS_TAG: "v6.0.5" LXC_TAG: "v6.0.5" From adbf4f70ed1c71f3722e1fc36a936d4a3d26a7df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Mon, 16 Feb 2026 16:53:16 -0500 Subject: [PATCH 19/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 397c8627..0c69f6fb 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -344,7 +344,6 @@ jobs: git cherry-pick ebd805b9f29d8715a3b0975c6a57fa00d56fb37d # doc/cloud-init: Fix bad link git cherry-pick 71588565dbd30a79dab6b511c381e4c5732c4ce0 # incusd: Search OVS switch external_interfaces git cherry-pick 337985bfd83f5908894160fc321ccf8d1b7087c0 # doc/backup: Fix MarkdownLint warnings - git cherry-pick df76956b950424d43a5bdd95bf9a96a195a7bbda # incusd/storage_volumes_snapshot: Treat pongo templates as unique git cherry-pick cc9b34b188af8e45cc874a2707ccd8bd4cb8bf95 # incusd/instance/drivers: Propagate error when adding qcow2 backing block device git cherry-pick dd0740be1678b1f128726e4eeca1e6652c6eb203 # incusd/instance/qemu: gofumpt @@ -378,6 +377,8 @@ jobs: git cherry-pick 46f90806d7992e8a22e1c418eab82e8a58601f8c # incusd/instance/drivers: Remove instance volume on revert after failed live migration git cherry-pick 69d4b28ac27199c67b303d64b61308183fbd0236 # incusd/instance/drivers: Propagate target migration failure to source using context cancellation git cherry-pick acf27c1ed354b96cf3e89abbf5d603f82a9649ab # incusd/storage: Prevent concurrent QCOW2 snapshot deletions + git cherry-pick b52b3d8cb9083fe975cc363a80593800161a7619 # incusd/instance/qemu: Require full restart after eject + git cherry-pick 1f8a4309d005d07f134efe0144858ae84db14903 # incusd/storage: Prevent concurrent snapshot deletions go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From 3183e05a80f4f5e01658f046819ea8ad723efa26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Mon, 16 Feb 2026 20:36:57 -0500 Subject: [PATCH 20/41] incus: Cherry-pick upstream bugfix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 0c69f6fb..d5b402bb 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -379,6 +379,7 @@ jobs: git cherry-pick acf27c1ed354b96cf3e89abbf5d603f82a9649ab # incusd/storage: Prevent concurrent QCOW2 snapshot deletions git cherry-pick b52b3d8cb9083fe975cc363a80593800161a7619 # incusd/instance/qemu: Require full restart after eject git cherry-pick 1f8a4309d005d07f134efe0144858ae84db14903 # incusd/storage: Prevent concurrent snapshot deletions + git cherry-pick 7df3e454d83c707a10fc16019a50e9dd135ae9e2 # incusd/instance/qemu: Force a real reboot after applying templates go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From daf2631476d8392e7f9f102e0d6b3e82a6b04400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Wed, 18 Feb 2026 20:27:49 -0500 Subject: [PATCH 21/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index d5b402bb..734c9124 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -49,7 +49,7 @@ jobs: # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" INCUS_TAG: "v6.21.0" - INCUS_UI_CANONICAL_TAG: "incus-0.19.5" + INCUS_UI_CANONICAL_TAG: "incus-0.19.6" LXCFS_TAG: "v6.0.5" LXC_TAG: "v6.0.5" @@ -380,6 +380,9 @@ jobs: git cherry-pick b52b3d8cb9083fe975cc363a80593800161a7619 # incusd/instance/qemu: Require full restart after eject git cherry-pick 1f8a4309d005d07f134efe0144858ae84db14903 # incusd/storage: Prevent concurrent snapshot deletions git cherry-pick 7df3e454d83c707a10fc16019a50e9dd135ae9e2 # incusd/instance/qemu: Force a real reboot after applying templates + git cherry-pick 2414cdaa3478137f5e071d4f78013eb41e835e1e # incusd/storage/ceph: Use the standard error for unsupported disk usage + git cherry-pick a6f6e60fdd2dd29c282c6197ce76124d34ffa49d # incusd/instance/qmp: Fix gofumpt + git cherry-pick c4a608a97846f31bdc705056c4b1eae98e3dadb8 # incusd/storage/qcow2: Wait for qemu-nbd to be ready go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From 3e8138cfcd4f3fb9a42fc4f02dc864f0f72a58c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Thu, 19 Feb 2026 19:14:06 -0500 Subject: [PATCH 22/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 734c9124..f28c9163 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -383,6 +383,13 @@ jobs: git cherry-pick 2414cdaa3478137f5e071d4f78013eb41e835e1e # incusd/storage/ceph: Use the standard error for unsupported disk usage git cherry-pick a6f6e60fdd2dd29c282c6197ce76124d34ffa49d # incusd/instance/qmp: Fix gofumpt git cherry-pick c4a608a97846f31bdc705056c4b1eae98e3dadb8 # incusd/storage/qcow2: Wait for qemu-nbd to be ready + git cherry-pick 6687bbcadad745d2b0a26b6f44e7f7f9aaef6991 # incusd/instance/drivers: Fix backing block device ordering when fetching from QEMU + git cherry-pick e14f947a95e8ccde9f714564317bb711398c59d3 # internal/server/instance/drivers: Get vsock client for Windows + git cherry-pick 14e2b692d3e7689850af9c3f2e3f2265a6ec323f # cmd/incus-agent: Add serial communication for Windows + git cherry-pick 496bbf98bc717fa18f77ba963882059072d6c926 # incusd/storage/drivers: Delete mount paths when deleting snapshots + git cherry-pick 945b5a4e80f5c50017c119110057e5d3383ff187 # cmd/incus-agent: Only use TCP agent for macOS + git cherry-pick e2393796a7964c86a513ad5158c1bdc6d7ba7205 # cmd/incus-agent: Use vsock for Windows agent + git cherry-pick 9c14b11fcaecaf85ddb4434ecaa57621631c108b # Use vsock fork go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From 51639d7fc454c6d69cb0fd8ef5a849856e3d323e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Thu, 19 Feb 2026 19:14:46 -0500 Subject: [PATCH 23/41] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index f28c9163..20d3cb5a 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -58,7 +58,7 @@ jobs: CRIU_TAG: "v4.2" EDK2_TAG: "edk2-stable202511" GOLANG_TAG: "go1.26.0" - LEGO_TAG: "v4.31.0" + LEGO_TAG: "v4.32.0" LIBTPMS_TAG: "v0.10.2" LIBURING_TAG: "liburing-2.14" MINIO_MC_TAG: "RELEASE.2025-08-13T08-35-41Z" From 1c2d5d9c59186d85506879fb87d268290d88bf2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sun, 22 Feb 2026 20:45:12 -0500 Subject: [PATCH 24/41] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 20d3cb5a..9502ed38 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -49,7 +49,7 @@ jobs: # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" INCUS_TAG: "v6.21.0" - INCUS_UI_CANONICAL_TAG: "incus-0.19.6" + INCUS_UI_CANONICAL_TAG: "incus-0.19.7" LXCFS_TAG: "v6.0.5" LXC_TAG: "v6.0.5" From 2b7c07dcef4982a5aeb0d587ceb30cd96ce093d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sun, 22 Feb 2026 20:45:55 -0500 Subject: [PATCH 25/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 9502ed38..54414ca6 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -390,6 +390,12 @@ jobs: git cherry-pick 945b5a4e80f5c50017c119110057e5d3383ff187 # cmd/incus-agent: Only use TCP agent for macOS git cherry-pick e2393796a7964c86a513ad5158c1bdc6d7ba7205 # cmd/incus-agent: Use vsock for Windows agent git cherry-pick 9c14b11fcaecaf85ddb4434ecaa57621631c108b # Use vsock fork + git cherry-pick 51485b6255bab48d7779caa8082e08581f97c5e1 # incusd/fsmonitor: Read multiple fanotify events + git cherry-pick 63eee1180396d19011495379c5044bd1ea9421fa # doc/instance_units: Mention common units + git cherry-pick 0fb068030136c38d668a140af7f28e2f15c975d2 # incusd/instance/qemu: Clarify CPU hotplug error + git cherry-pick 2f71c4e555a1dafd6e0bd8ff618f6c355da40687 # incusd/instance/qmp: Add MemoryConfiguration + git cherry-pick a8e88e5f9906d9c19b20801e4113ef3c52566454 # incusd/instance/qemu: Improve error message on memory hotplug + git cherry-pick 24e0a95d2643dc4555a9377d4de08451a7778ab3 # doc/instance: Cover CPU and memory hotplug limits go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From 6a2ddd481ab9870c57b3c35a7af94744ab6158b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Tue, 24 Feb 2026 20:43:56 -0500 Subject: [PATCH 26/41] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 54414ca6..2878d61c 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -50,13 +50,13 @@ jobs: DISTROBUILDER_TAG: "distrobuilder-3.2" INCUS_TAG: "v6.21.0" INCUS_UI_CANONICAL_TAG: "incus-0.19.7" - LXCFS_TAG: "v6.0.5" + LXCFS_TAG: "v6.0.6" LXC_TAG: "v6.0.5" # External dependencies COWSQL_TAG: "v1.15.9" CRIU_TAG: "v4.2" - EDK2_TAG: "edk2-stable202511" + EDK2_TAG: "edk2-stable202602" GOLANG_TAG: "go1.26.0" LEGO_TAG: "v4.32.0" LIBTPMS_TAG: "v0.10.2" From 78555560ff5351406deeb410768fb0b478288c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Tue, 24 Feb 2026 20:46:09 -0500 Subject: [PATCH 27/41] incus: Cherry-pick upstream bugfixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 2878d61c..0993b96d 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -396,6 +396,14 @@ jobs: git cherry-pick 2f71c4e555a1dafd6e0bd8ff618f6c355da40687 # incusd/instance/qmp: Add MemoryConfiguration git cherry-pick a8e88e5f9906d9c19b20801e4113ef3c52566454 # incusd/instance/qemu: Improve error message on memory hotplug git cherry-pick 24e0a95d2643dc4555a9377d4de08451a7778ab3 # doc/instance: Cover CPU and memory hotplug limits + git cherry-pick 4ed9e204065bd99bef1e8904edff848f021108f3 # incusd/storage/drivers: Allow creation of qcow2 custom volumes + git cherry-pick 754b359010a019b1e6262f47751cf1b3d313ca48 # incusd/instance/drivers: Support detaching qcow2 custom volumes + git cherry-pick 3c47b7a2469211b2675f262b47fada55b7c4146b # incusd/storage: Add snapshot management for qcow2 custom volumes + git cherry-pick 5203fdc5de6c08be61b9ced060292c701aec1bd2 # incusd/device: Pass backing path information for disk devices + git cherry-pick 09b258db143066fcdd55d880c473de56fc0a71ae # incusd/storage: Block custom volume snapshot create/delete when attached to an instance + git cherry-pick 554d1191dc3f42c92d55868fe2b6054af9d599ed # incusd/cluster: Implement evacuating and restoring states + git cherry-pick c2e46ec9f2aaa439f5fe17785a16da2f84492d7a # incusd/device/nic_ovn: Fix nested NIC state + git cherry-pick d9e857863e0b2f243ebf7acabab0fa6880053c19 # incusd/storage/linstor: Propagate error when volume filler fails go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From 4f27ae3000801eddf3435e92e0b086e427c667b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Fri, 27 Feb 2026 00:23:10 -0500 Subject: [PATCH 28/41] Update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 0993b96d..8ea1ff05 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -49,9 +49,9 @@ jobs: # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" INCUS_TAG: "v6.21.0" - INCUS_UI_CANONICAL_TAG: "incus-0.19.7" + INCUS_UI_CANONICAL_TAG: "incus-0.19.8" LXCFS_TAG: "v6.0.6" - LXC_TAG: "v6.0.5" + LXC_TAG: "v6.0.6" # External dependencies COWSQL_TAG: "v1.15.9" From c7f9cb7613a1bfd2055eea9d08d8f63cde6a4740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Fri, 27 Feb 2026 00:23:43 -0500 Subject: [PATCH 29/41] incus: Bump to 6.22 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- .github/workflows/builds.yml | 98 +----------------------------------- 1 file changed, 1 insertion(+), 97 deletions(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 8ea1ff05..0cf2ddd9 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -48,7 +48,7 @@ jobs: # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" - INCUS_TAG: "v6.21.0" + INCUS_TAG: "v6.22.0" INCUS_UI_CANONICAL_TAG: "incus-0.19.8" LXCFS_TAG: "v6.0.6" LXC_TAG: "v6.0.6" @@ -309,102 +309,6 @@ jobs: cd /build/incus - git cherry-pick 1c0455c2ca201ec282b504c28096f50cb13a071b # incusd/device/nic: Fix connected logic for non-NIC QEMU devices - git cherry-pick c829eba4b7eec64d3d4f8fdc3d20433b40bb5c8c # doc: Update config - git cherry-pick 945a885af9d3f88c905ad5c5b7af9f1232b69433 # incusd/instance/qmp: Prevent setting link up at initialization - git cherry-pick ee2fc45f2d9300e58d9fb5b378a7f2531034cceb # incusd/instance/qemu: Properly initialize connected status - git cherry-pick 9a7eaf1333fbb902b29a328c02ff54c49e4aa03f # incusd/storage/zfs: Set IncusOS storage usage property - git cherry-pick 0de3f4ed7144299457d1f37589fff90b39d42b16 # Fix typo: Supported cConditions to Supported Conditions - git cherry-pick 5e19938aae0d0790e645d5d97309360342cff6c7 # shared/util: Fix SingleQuote to actually quote - git cherry-pick 4e5af56d1205563f53481d27e3ce0f1eb45e573e # cmd/incus: Fix get-client-certificate ignoring per-remote certs - git cherry-pick 336e9c14a31bb63d49b02ba6085d67c425ea3f83 # incusd/storage/lvm: Move IncusOS check to pool creation - git cherry-pick 4fcdbbc47937a4d5ba08ca7dbf045deabfd47ce6 # incus-migrate: Allow running as non-root - git cherry-pick 7f5bef42bef75c3fe361aa2af69a37a2c52e1c14 # incus-migrate: Add URL imports - git cherry-pick 8d709107af9e4b44e6848fae4c8e2ff0955e7445 # doc: Ignore broken links on Alpine gitlab - git cherry-pick 6da39979ec860ddd42b2d89711dd78c7bec6e286 # doc: Ignore broken links on docbook website - git cherry-pick 2eae0da145a9ff676f24a792b29e862baa086778 # github: Deal with new Github images - git cherry-pick 9bbd1361a80b420ab864b9dcf2d9b8931faed393 # tests: Fix SR-IOV attached key test - git cherry-pick cbeffb008344906e9b17989d1bfde70a110c2f1b # incusd/device/nic_physical: Allow migration of managed devices - git cherry-pick 36ad2cbcbc70c9f7c445b4588a997f731ef0f0b2 # shared/cliconfig: Don't pass scheme to OCI creds helper - git cherry-pick 06f30e185f805b9efe59e0599191b34e72423caa # incusd/cluster: Allow restoring a cluster without its instances - git cherry-pick 5493daf9587ad45bccfcb0d26ec5e1d8c43c577e # internal/instance; Correct doc for boot.autostart.priority - git cherry-pick 80a5519509214172615c713a9b84df5381299ae4 # doc: Update config - git cherry-pick b2a41e7b9f0883dff992c4d91193648f977c266e # incusd/cluster: Restrict join token to database servers - git cherry-pick b234ba988cff3ee1b94347c224a2c37fb2dc1e74 # incusd/storage/lvm: Prevent use of lvmcluster with loop files - git cherry-pick bb6e2b09ebbeb61c84354c1515b3de8f92edc295 # incusd/operations: Prevent concurrent access to metadata - git cherry-pick 5c9b30069d1ddb91ebcb5a0f1f14940e531e6067 # incusd/storage: Add support for renaming qcow2 volumes - git cherry-pick 336ec10ad1038c8efc8fad7f755cadda502b1e02 # incusd/storage/drivers: Load NBD module for lvmcluster - git cherry-pick e2e098d6f2ae95538b2da212f193fd098b361331 # incusd/instance/drivers: Pass information about whether migration is live - git cherry-pick 1dde134919cb77115e04e2767aa0009f0558160c # incusd/storage: Add support for qcow2 volume migration - git cherry-pick b3b3d1c27cad8a16b8307b6c384ec0854b82943b # incusd/storage: Add snapshot mount paths parameter to the task function - git cherry-pick c8938372104e34f5b2c2bc438d05765793d1a251 # incusd/device/nic_riov: Retry MAC setting logic - git cherry-pick 290594583613db81f9b789e044cab2bbcc5dc98c # doc/howto/instances: Mention keeping agent drive attached - git cherry-pick da03a4bf41b5ea10921b1889b9c547d7a8926802 # incusd/instances/agent-loader: Silence semanage - git cherry-pick 659a645a743c07c479d23b74e7dd42dfd2db26df # incusd/cluster: Also transfer public key on join - git cherry-pick ebd805b9f29d8715a3b0975c6a57fa00d56fb37d # doc/cloud-init: Fix bad link - git cherry-pick 71588565dbd30a79dab6b511c381e4c5732c4ce0 # incusd: Search OVS switch external_interfaces - git cherry-pick 337985bfd83f5908894160fc321ccf8d1b7087c0 # doc/backup: Fix MarkdownLint warnings - git cherry-pick df76956b950424d43a5bdd95bf9a96a195a7bbda # incusd/storage_volumes_snapshot: Treat pongo templates as unique - git cherry-pick cc9b34b188af8e45cc874a2707ccd8bd4cb8bf95 # incusd/instance/drivers: Propagate error when adding qcow2 backing block device - git cherry-pick dd0740be1678b1f128726e4eeca1e6652c6eb203 # incusd/instance/qemu: gofumpt - git cherry-pick 4410362bfa7adbd5e5dd9e8c0191f1d32188db08 # incusd/device/disk: Add IsSpecialDisk - git cherry-pick 5980894f36a28af14507475816fe4bfa2ada007b # incusd/instance/lxc: Skip metrics on special disks - git cherry-pick a5e48412a31e3fe9eb54c91f5f0313352c49ea40 # incusd/storage: Prevent moving shared storage volumes - git cherry-pick 3496d3eb36fe0c96722535dc7de5eb31bdf2f797 # doc: Update incus-migrate documentation - git cherry-pick 83edce68d51e89428417a2536f3ae92af01350f3 # incusd: Validate that instance can be migrated - git cherry-pick 87d4380fd85ef6dd1201f8b69fef59ba5327654d # incusd/instance/drivers: Add writable argument to NBDBlockExportAdd - git cherry-pick 76fb4423ee9a217d0f680d184f18dd2fa131a197 # incusd/instance/drivers/qmp: Add NBDUnixServerStart - git cherry-pick 356889a52e3aa72bf8a8b21613b4b49d06f6c7ec # incusd/instance: Add ExportQcow2Disk - git cherry-pick d28d49e020e179ca69dd92cab5ffda774014c6fb # incusd/storage: Support live migration of qcow2 volumes - git cherry-pick 2ca7d816411f37304684543d1f2b4f64655dfd26 # doc: Add information about lvmcluster limitations - git cherry-pick 01f1702e9fffdb8b1ad0cd53aa98e9342da6951a # incusd/instance: Add QCOW2 live migration support for instances with snapshots - git cherry-pick 63a91a126dc960e9e08d26895b94e3ebed08488c # incusd/storage: Add QCOW2 live migration support for instances with snapshots - git cherry-pick 0065387fb1a5291177374033a0c8c72c5863d671 # incusd: Remove ensureMigratable as checks are no longer valid - git cherry-pick 27ab629c3532dfa86b8771b801ee3138e1fac2a4 # doc: Remove outdated doc about live QCOW2 migration limitation - git cherry-pick aaa1b2bea1a1f653194605b78d1caab00e31b0b4 # incusd/instance/drivers: Propagate live migration information - git cherry-pick e43dd3ce26dd4ce101ba297fc09f7196e3c99ee9 # incusd/storage: Skip final filesystem sync for VMs during migration - git cherry-pick 2da034d1c768b53312a742cd4189923aad3655e3 # doc/requirements: Bump minimal requirements - git cherry-pick af8f62bf9964e2791b47fc3d4f08d6eb974d4703 # Validate requested storage pool during instance migration - git cherry-pick 8d63da8aae8e7f3d899328630a86142655e6005f # incusd/instance/qemu: Rename onDisconnectEvent to initialized - git cherry-pick bff2bf92a42c2230d0044571eaef3b5867941234 # incusd/instance/qemu: Add EventVMReset - git cherry-pick f2264d9f8db6799804e575ded3840e51bdd86c91 # incusd/instance/qemu: Use standard QEMU actions and catch in handler - git cherry-pick 4bf7943a92b8670e005e5f0c3013f98c9d2599a8 # internal/instance: Add volatile.vm.needs_reset - git cherry-pick fecec8cbb8fbaa58cd9ca70b310206635da75662 # incusd/instance/qemu: Implement fast reboot - git cherry-pick 478d3c63bc04f2cdac32729d38d3fe5d9c59a54d # doc: Update config - git cherry-pick 75f50c23fbef65a547c93cd58536b0f9bc87866f # incusd/instance/qmp: Fix cross-server live-migration - git cherry-pick 56e15e45c49ef74ba2703bc73a58cad370d5fc95 # incusd/instance/qemu: Report QEMU error on VM restore - git cherry-pick 156800b1135fa54a62dd23b2d5bc3d4f8a00be3d # incus-migrate: Fix URL detection - git cherry-pick 46f90806d7992e8a22e1c418eab82e8a58601f8c # incusd/instance/drivers: Remove instance volume on revert after failed live migration - git cherry-pick 69d4b28ac27199c67b303d64b61308183fbd0236 # incusd/instance/drivers: Propagate target migration failure to source using context cancellation - git cherry-pick acf27c1ed354b96cf3e89abbf5d603f82a9649ab # incusd/storage: Prevent concurrent QCOW2 snapshot deletions - git cherry-pick b52b3d8cb9083fe975cc363a80593800161a7619 # incusd/instance/qemu: Require full restart after eject - git cherry-pick 1f8a4309d005d07f134efe0144858ae84db14903 # incusd/storage: Prevent concurrent snapshot deletions - git cherry-pick 7df3e454d83c707a10fc16019a50e9dd135ae9e2 # incusd/instance/qemu: Force a real reboot after applying templates - git cherry-pick 2414cdaa3478137f5e071d4f78013eb41e835e1e # incusd/storage/ceph: Use the standard error for unsupported disk usage - git cherry-pick a6f6e60fdd2dd29c282c6197ce76124d34ffa49d # incusd/instance/qmp: Fix gofumpt - git cherry-pick c4a608a97846f31bdc705056c4b1eae98e3dadb8 # incusd/storage/qcow2: Wait for qemu-nbd to be ready - git cherry-pick 6687bbcadad745d2b0a26b6f44e7f7f9aaef6991 # incusd/instance/drivers: Fix backing block device ordering when fetching from QEMU - git cherry-pick e14f947a95e8ccde9f714564317bb711398c59d3 # internal/server/instance/drivers: Get vsock client for Windows - git cherry-pick 14e2b692d3e7689850af9c3f2e3f2265a6ec323f # cmd/incus-agent: Add serial communication for Windows - git cherry-pick 496bbf98bc717fa18f77ba963882059072d6c926 # incusd/storage/drivers: Delete mount paths when deleting snapshots - git cherry-pick 945b5a4e80f5c50017c119110057e5d3383ff187 # cmd/incus-agent: Only use TCP agent for macOS - git cherry-pick e2393796a7964c86a513ad5158c1bdc6d7ba7205 # cmd/incus-agent: Use vsock for Windows agent - git cherry-pick 9c14b11fcaecaf85ddb4434ecaa57621631c108b # Use vsock fork - git cherry-pick 51485b6255bab48d7779caa8082e08581f97c5e1 # incusd/fsmonitor: Read multiple fanotify events - git cherry-pick 63eee1180396d19011495379c5044bd1ea9421fa # doc/instance_units: Mention common units - git cherry-pick 0fb068030136c38d668a140af7f28e2f15c975d2 # incusd/instance/qemu: Clarify CPU hotplug error - git cherry-pick 2f71c4e555a1dafd6e0bd8ff618f6c355da40687 # incusd/instance/qmp: Add MemoryConfiguration - git cherry-pick a8e88e5f9906d9c19b20801e4113ef3c52566454 # incusd/instance/qemu: Improve error message on memory hotplug - git cherry-pick 24e0a95d2643dc4555a9377d4de08451a7778ab3 # doc/instance: Cover CPU and memory hotplug limits - git cherry-pick 4ed9e204065bd99bef1e8904edff848f021108f3 # incusd/storage/drivers: Allow creation of qcow2 custom volumes - git cherry-pick 754b359010a019b1e6262f47751cf1b3d313ca48 # incusd/instance/drivers: Support detaching qcow2 custom volumes - git cherry-pick 3c47b7a2469211b2675f262b47fada55b7c4146b # incusd/storage: Add snapshot management for qcow2 custom volumes - git cherry-pick 5203fdc5de6c08be61b9ced060292c701aec1bd2 # incusd/device: Pass backing path information for disk devices - git cherry-pick 09b258db143066fcdd55d880c473de56fc0a71ae # incusd/storage: Block custom volume snapshot create/delete when attached to an instance - git cherry-pick 554d1191dc3f42c92d55868fe2b6054af9d599ed # incusd/cluster: Implement evacuating and restoring states - git cherry-pick c2e46ec9f2aaa439f5fe17785a16da2f84492d7a # incusd/device/nic_ovn: Fix nested NIC state - git cherry-pick d9e857863e0b2f243ebf7acabab0fa6880053c19 # incusd/storage/linstor: Propagate error when volume filler fails - go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus go build -o "/opt/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark From 0236a8aef039b53ea141d3342e87d843591cc543 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Tue, 20 Jan 2026 19:38:07 -0500 Subject: [PATCH 30/41] feat: build in docker Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 711 ++++++++++++++++++++++++++++ build-in-container.sh | 688 +++++++++++++++++++++++++++ migrate-to-usr-incus.sh | 78 +++ 3 files changed, 1477 insertions(+) create mode 100644 .github/workflows/builds-docker.yml create mode 100755 build-in-container.sh create mode 100755 migrate-to-usr-incus.sh diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml new file mode 100644 index 00000000..c7109375 --- /dev/null +++ b/.github/workflows/builds-docker.yml @@ -0,0 +1,711 @@ +name: Build (Docker) +on: + push: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: docker-${{ github.ref }} + cancel-in-progress: true + +jobs: + build-incus: + name: Build Incus (Debian Trixie) + runs-on: ubuntu-latest + container: + image: debian:trixie + + env: + OS_ARCH: "amd64" + OS_NAME: "debian-13" + HOME: "/root/" + PKG_CONFIG_PATH: "/usr/incus/lib/pkgconfig/" + CGO_LDFLAGS: "-L/usr/incus/lib/" + CGO_CFLAGS: "-I/usr/incus/include/" + LD_LIBRARY_PATH: "/usr/incus/lib/" + CPATH: "/usr/incus/include/" + PATH: "/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" + + # Linux Containers projects + DISTROBUILDER_TAG: "distrobuilder-3.2" + INCUS_TAG: "v6.20.0" + INCUS_UI_CANONICAL_TAG: "incus-0.19.0" + LXCFS_TAG: "v6.0.5" + LXC_TAG: "v6.0.5" + + # External dependencies + COWSQL_TAG: "v1.15.9" + CRIU_TAG: "v4.2" + EDK2_TAG: "edk2-stable202511" + GOLANG_TAG: "go1.25.5" + LEGO_TAG: "v4.31.0" + LIBTPMS_TAG: "v0.10.2" + LIBURING_TAG: "liburing-2.13" + MINIO_MC_TAG: "RELEASE.2025-08-13T08-35-41Z" + MINIO_TAG: "RELEASE.2025-10-15T17-29-55Z" + NASM_TAG: "nasm-2.16.03" + NVIDIA_CONTAINER_TAG: "v1.18.1" + QEMU_TAG: "v10.2.0" + RAFT_TAG: "v0.22.1" + SEABIOS_TAG: "rel-1.17.0" + SKOPEO_TAG: "v1.21.0" + SWTPM_TAG: "v0.10.1" + TRUENAS_INCUS_CTL_TAG: "v0.7.3" + VIRTIOFSD_TAG: "v1.13.3" + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Migrate to /usr/incus + run: ./migrate-to-usr-incus.sh + + - name: Install dependencies + run: | + apt-get update + apt-get install --no-install-recommends --yes \ + acpica-tools \ + asciidoc \ + autoconf \ + automake \ + bison \ + bmake \ + build-essential \ + curl \ + debhelper \ + devscripts \ + dosfstools \ + expect \ + flex \ + gawk \ + gettext \ + git \ + iproute2 \ + libacl1-dev \ + libaio-dev \ + libapparmor-dev \ + libbtrfs-dev \ + libcap-dev \ + libcap-ng-dev \ + libdbus-1-dev \ + libdevmapper-dev \ + libelf-dev \ + libfuse3-dev \ + libglib2.0-dev \ + libgnutls28-dev \ + libgpgme-dev \ + libjson-glib-dev \ + libnet1-dev \ + libnl-3-dev \ + libnuma-dev \ + libpam0g-dev \ + libpixman-1-dev \ + libpng-dev \ + libprotobuf-c-dev \ + libprotobuf-dev \ + librbd-dev \ + libseccomp-dev \ + libselinux1-dev \ + libspice-server-dev \ + libsqlite3-dev \ + libssl-dev \ + libsystemd-dev \ + libtirpc-dev \ + libtool \ + libudev-dev \ + libusb-1.0-0-dev \ + libusbredirhost-dev \ + libuv1-dev \ + lsb-release \ + mtools \ + ninja-build \ + pkg-config \ + protobuf-c-compiler \ + protobuf-compiler \ + python3-cryptography \ + python3-jinja2 \ + python3-pexpect \ + python3-pip \ + python3-setuptools \ + python3-venv \ + rsync \ + socat \ + uuid-dev \ + xmlto \ + xorriso + + apt-get install --no-install-recommends --yes systemd-dev || true + + pip3 install meson --break-system-packages || pip3 install meson + pip3 install tomli --break-system-packages || pip3 install tomli + + - name: Configure git + run: | + git config --global --add advice.detachedHead false + git config --global user.email "noreply@zabbly.com" + git config --global user.name "Zabbly Incus build" + + - name: Install Go + run: | + curl -sL "https://go.dev/dl/${GOLANG_TAG}.linux-${OS_ARCH}.tar.gz" | tar -C /usr/local/ -zx + go version + + - name: Install Rust + run: | + curl -sL https://sh.rustup.rs -o install-rust.sh + bash install-rust.sh -y + + - name: Install Node + run: | + mkdir /usr/local/node/ + curl -sL "https://nodejs.org/dist/v22.11.0/node-v22.11.0-linux-x64.tar.xz" | tar -C /usr/local/node/ -Jx --strip-components=1 + + - name: Build environment + run: | + mkdir /build/ + mkdir -p \ + /usr/incus/bin/ \ + /usr/incus/include/ \ + /usr/incus/lib/ \ + /usr/incus/lib/systemd \ + /usr/incus/share/ + + - name: Get the code + run: | + git clone https://github.com/lxc/distrobuilder /build/distrobuilder --depth 1 -b "${DISTROBUILDER_TAG}" + git clone https://github.com/lxc/lxc /build/lxc -b "${LXC_TAG}" + git clone https://github.com/lxc/lxcfs /build/lxcfs --depth 1 -b "${LXCFS_TAG}" + git clone https://github.com/lxc/incus /build/incus -b "${INCUS_TAG}" + git clone https://github.com/zabbly/incus-ui-canonical /build/incus-ui-canonical --depth 1 -b "${INCUS_UI_CANONICAL_TAG}" + + git clone https://github.com/axboe/liburing /build/liburing --depth 1 -b "${LIBURING_TAG}" + git clone https://github.com/checkpoint-restore/criu /build/criu --depth 1 -b "${CRIU_TAG}" + git clone https://github.com/containers/skopeo /build/skopeo --depth 1 -b "${SKOPEO_TAG}" + git clone https://github.com/cowsql/cowsql /build/cowsql --depth 1 -b "${COWSQL_TAG}" + git clone https://github.com/cowsql/raft /build/raft --depth 1 -b "${RAFT_TAG}" + git clone https://github.com/go-acme/lego /build/lego --depth 1 -b "${LEGO_TAG}" + git clone https://github.com/minio/mc /build/mc --depth 1 -b "${MINIO_MC_TAG}" + git clone https://github.com/minio/minio /build/minio --depth 1 -b "${MINIO_TAG}" + git clone https://github.com/NVIDIA/libnvidia-container /build/libnvidia-container --depth 1 -b "${NVIDIA_CONTAINER_TAG}" + git clone https://github.com/stefanberger/libtpms /build/libtpms --depth 1 -b "${LIBTPMS_TAG}" + git clone https://github.com/stefanberger/swtpm /build/swtpm --depth 1 -b "${SWTPM_TAG}" + git clone https://github.com/tianocore/edk2 /build/edk2 --recurse-submodules --shallow-submodules --depth 1 -b "${EDK2_TAG}" + git clone https://github.com/truenas/truenas_incus_ctl /build/truenas_incus_ctl --depth 1 -b "${TRUENAS_INCUS_CTL_TAG}" + git clone https://gitlab.com/qemu-project/qemu /build/qemu --depth 1 -b "${QEMU_TAG}" + git clone https://gitlab.com/qemu-project/seabios /build/seabios --depth 1 -b "${SEABIOS_TAG}" + git clone https://gitlab.com/virtio-fs/virtiofsd /build/virtiofsd --depth 1 -b "${VIRTIOFSD_TAG}" + + mkdir /build/nasm/ + curl -sL "https://www.nasm.us/pub/nasm/releasebuilds/$(echo ${NASM_TAG} | cut -d- -f2)/${NASM_TAG}.tar.gz" --resolve www.nasm.us:443:198.137.202.136 | tar -C /build/nasm/ -zx --strip-components=1 + + - name: Build liburing + run: | + cd /build/liburing + ./configure --prefix=/usr/incus + make + + mkdir -p /build/target/liburing/ + DESTDIR=/build/target/liburing make install + rsync -a /build/target/liburing/usr/incus/include/* /usr/incus/include/ + rsync -a /build/target/liburing/usr/incus/lib/* /usr/incus/lib/ + + - name: Build raft + run: | + cd /build/raft + autoreconf -i + ./configure --prefix=/usr/incus + make + + mkdir -p /build/target/raft/ + DESTDIR=/build/target/raft/ make install + rsync -a /build/target/raft/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/raft/usr/incus/lib/ /usr/incus/lib/ + + - name: Build cowsql + run: | + cd /build/cowsql + autoreconf -i + ./configure --prefix=/usr/incus + make + + mkdir -p /build/target/cowsql/ + DESTDIR=/build/target/cowsql/ make install + rsync -a /build/target/cowsql/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/cowsql/usr/incus/lib/ /usr/incus/lib/ + + - name: Build LXC + run: | + REPO="${PWD}" + + cd /build/lxc + + meson setup build \ + --prefix=/usr/incus \ + --libdir=/usr/incus/lib \ + -Dexamples=false \ + -Dman=false \ + -Dtools=false \ + -Dtests=false \ + -Dmemfd-rexec=false \ + -Dapparmor=true \ + -Dseccomp=true \ + -Dselinux=true \ + -Dcapabilities=true \ + -Dio-uring-event-loop=false + meson compile -C build + + mkdir -p /build/target/lxc/ + DESTDIR=/build/target/lxc/ meson install -C build + rsync -a /build/target/lxc/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/lxc/usr/incus/lib/ /usr/incus/lib/ + mkdir -p /usr/incus/share/lxc/config/common.conf.d/ + mkdir -p /usr/incus/share/lxc/hooks/ + cp /build/target/lxc/usr/incus/share/lxc/hooks/nvidia /usr/incus/share/lxc/hooks/ + + - name: Build LXCFS + run: | + REPO="${PWD}" + + cd /build/lxcfs + meson setup build \ + --prefix=/usr/incus \ + --libdir=/usr/incus/lib \ + -Ddocs=false \ + -Dtests=false + meson compile -C build + + mkdir -p /build/target/lxcfs/ + DESTDIR=/build/target/lxcfs/ meson install -C build + rsync -a /build/target/lxcfs/usr/incus/bin/ /usr/incus/bin/ + rsync -a /build/target/lxcfs/usr/incus/share/ /usr/incus/share/ + rsync -a /build/target/lxcfs/usr/incus/lib/ /usr/incus/lib/ + + sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /usr/incus/share/lxcfs/lxc.mount.hook + patch -p1 /usr/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" + + - name: Build Incus + run: | + REPO="${PWD}" + + cd /build/incus + + git cherry-pick 0b0311794c2750b50e9a0aa598143f547ee5653e # doc/openfga: Improve required config keys + git cherry-pick eafa7db765970d7f09c20474781efed3c63f5446 # incusd/network/ovn: Drop now obsolete DNS check + git cherry-pick 539860ce96195859ffc5d477a701c4d7ce967669 # incusd/storage/truenas: fix SetVolumeQuota issue when growing FS volumes + git cherry-pick eb0b2f5d9b35ecf90d09d63854e80ea8602744a7 # cmd/incus-user: Don't reset setup if user has access + git cherry-pick f95e2af5b76c91caa20c2ecef85df9ff6074d70e # incusd/network/physical: Allow parent re-use for bridges + git cherry-pick 969f32300002fd980992e3b62bedf398bdf7dbe6 # incusd/network/physical: Allow vlan.tagged + git cherry-pick b72643a540172fdb69b97b82dd60740ac06ad890 # incusd/device: Add vlan.tagged to physical NICs + git cherry-pick add134c50d1ab69af063f8c0af4178129f09d51e # incusd/device/nic_physical: Fix internal bridge handling + git cherry-pick 110a5235313c8b415d12aa2d72ece95e70bd574f # doc/network_ovn: Add note about advanced external_interfaces syntax + git cherry-pick 58e7df140e1af36dc6d30abc8578b05889be813b # incusd/instance/drivers: Add size parameter to UpdateBlockSize method + git cherry-pick 06309e0d5fdbc265d7e9a226f773c25d624f654d # incusd/storage/drivers: Export roundAbove function + git cherry-pick 62b535b9c03f9b21c625bd56369a235fa528afbd # incusd/storage/drivers: Add Qcow2Resize and export isQcow2Block function + git cherry-pick ef90f5de6a14ca4ac4eb4e8a3d2929128d84d2e4 # incusd/storage: Add support for resizing qcow2 volumes + git cherry-pick 27870526d1cb69d50b443c8b89187d9a16a30ea7 # Added a few more environment variables. PATHEXT and COMPUTERNAME were needed for 'shutdown.exe'. Meanwhile, I've connected as SYSTEM with PsExec to show the environment variables by default and added them. + git cherry-pick bef2fc76a6f9c070cc07e068c7dd3a205884e3d1 # incusd/instance/drivers: Fix adding disk with a device name longer than 31 bytes + git cherry-pick fe9c020eea99b05ed3eee2a5c50ed124e15df14a # incusd/instance/drivers: Add tests for hashName + + go build -o "/usr/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift + go build -o "/usr/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus + go build -o "/usr/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark + go build -o "/usr/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate + go build -o "/usr/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams + go build -o "/usr/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user + go build -o "/usr/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd + go build -o "/usr/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus + go build -o "/usr/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus + + mkdir -p /usr/incus/agent + GOARCH=amd64 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + + make build-mo + mkdir -p /usr/incus/share/locale + cp po/*.mo /usr/incus/share/locale/ + + make doc + cp -R doc/html /usr/incus/doc + + mkdir -p /usr/incus/share/completions/ + /usr/incus/bin/incus completion bash > /usr/incus/share/completions/bash + /usr/incus/bin/incus completion fish > /usr/incus/share/completions/fish + /usr/incus/bin/incus completion zsh > /usr/incus/share/completions/zsh + + - name: Build UI (canonical) + run: | + REPO="${PWD}" + + cd /build/incus-ui-canonical + + # Complete re-branding. + find -type f -name "*.ts" -o -name "*.tsx" -o -name "*.scss" | xargs sed -i -f "${REPO}/patches/ui-canonical-renames.sed" + + npm install yarn --global + yarn install + yarn build + + mkdir -p /usr/incus/ui-canonical/ + rsync -a /build/incus-ui-canonical/build/ui/ /usr/incus/ui-canonical/ + + - name: Build Distrobuilder + run: | + cd /build/distrobuilder + go build -o "/usr/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder + + - name: Build CRIU + run: | + cd /build/criu + make WERROR=0 + cp criu/criu /usr/incus/bin/ + + - name: Build libnvidia-container + run: | + REPO="${PWD}" + + cd /build/libnvidia-container + patch -p1 < "${REPO}/patches/nvidia-0001-Fix-for-22.04-build.patch" + patch -p1 < "${REPO}/patches/nvidia-0002-pre-load-libdl.patch" + make prefix=/ + + mkdir /build/target/libnvidia-container + DESTDIR=/build/target/libnvidia-container make install prefix=/ + rsync -a /build/target/libnvidia-container/bin/ /usr/incus/bin/ + rsync -a /build/target/libnvidia-container/include/ /usr/incus/include/ + rsync -a /build/target/libnvidia-container/lib/ /usr/incus/lib/ + + - name: Build minio + run: | + cd /build/minio + make build + cp minio /usr/incus/bin/ + + - name: Build minio client + run: | + cd /build/mc + make build + cp mc /usr/incus/bin/ + + - name: Build seabios + run: | + REPO="${PWD}" + + cd /build/seabios + + # Build a traditional seabios. + make clean distclean + echo "CONFIG_QEMU=y" > .config + echo "CONFIG_QEMU_HARDWARE=y" >> .config + echo "CONFIG_BOOTSPLASH=n" >> .config + echo "CONFIG_ROM_SIZE=256" >> .config + echo "CONFIG_XEN=n" >> .config + echo "CONFIG_PVSCSI=n" >> .config + echo "CONFIG_ESP_SCSI=n" >> .config + echo "CONFIG_LSI_SCSI=n" >> .config + echo "CONFIG_MEGASAS=n" >> .config + echo "CONFIG_MPT_SCSI=n" >> .config + echo "CONFIG_FLOPPY=n" >> .config + echo "CONFIG_FLASH_FLOPPY=n" >> .config + make oldnoconfig V=1 + make V=1 PYTHON=python3 + + mkdir -p /usr/incus/share/qemu/ + cp out/bios.bin /usr/incus/share/qemu/seabios.bin + + - name: Build nasm + run: | + REPO="${PWD}" + + cd /build/nasm + patch -p1 < "${REPO}/patches/nasm-0000-disable-manpages.patch" + ./configure --prefix=/usr/incus + make + + mkdir -p /build/target/nasm/ + DESTDIR=/build/target/nasm make install + rsync -a /build/target/nasm/usr/incus/bin/ /usr/incus/bin/ + + - name: Build EDK2 + run: | + REPO="${PWD}" + + cd /build/edk2 + patch -p1 < "${REPO}/patches/edk2-0001-force-DUID-LLT.patch" + cp "${REPO}/patches/edk2-0002-logo.bmp" MdeModulePkg/Logo/Logo.bmp + patch -p1 < "${REPO}/patches/edk2-0003-boot-delay.patch" + patch -p1 < "${REPO}/patches/edk2-0004-gcc-errors.patch" + patch -p1 < "${REPO}/patches/edk2-0005-Revert-ArmVirtPkg-make-EFI_LOADER_DATA-non-executabl.patch" + patch -p1 < "${REPO}/patches/edk2-0006-disable-EFI-memory-attributes-protocol.patch" + patch -p1 < "${REPO}/patches/edk2-0007-OvmfPkg-X64-add-opt-org-tianocore-UninstallMemAttrProtocol-support.patch" + patch -p1 < "${REPO}/patches/edk2-0008-Disable-virtio-keyboard.patch" + patch -p1 < "${REPO}/patches/edk2-0009-disable-UEFI-shell-under-SecureBoot.patch" + + EDK2_ARCH="X64" + EDK2_PKG="OvmfPkg/OvmfPkgX64.dsc" + EDK2_FV_CODE="OVMF_CODE" + EDK2_FV_VARS="OVMF_VARS" + + build_edk2() { + TARGET_CODE="$1" + shift + TARGET_VARS="$1" + shift + + set -ex + ( + cat << EOF + . ./edksetup.sh + make -C BaseTools ARCH=${EDK2_ARCH} + build -a ${EDK2_ARCH} -t GCC5 -b RELEASE -p ${EDK2_PKG} \ + -DSMM_REQUIRE=TRUE \ + -DSECURE_BOOT_ENABLE=TRUE \ + -DNETWORK_IP4_ENABLE=TRUE \ + -DNETWORK_IP6_ENABLE=TRUE \ + -DNETWORK_TLS_ENABLE=TRUE \ + -DNETWORK_HTTP_BOOT_ENABLE=TRUE \ + -DTPM2_ENABLE=TRUE \ + -DTPM2_CONFIG_ENABLE=TRUE \ + --pcd PcdUninstallMemAttrProtocol=TRUE \ + $@ + EOF + ) | bash -e + + cp Build/*/*/FV/${EDK2_FV_CODE}.fd "${TARGET_CODE}" + cp Build/*/*/FV/${EDK2_FV_VARS}.fd "${TARGET_VARS}" + } + + mkdir -p "/usr/incus/share/qemu/" + build_edk2 \ + "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ + "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + -DFD_SIZE_4MB + + ln -s OVMF_CODE.4MB.fd /usr/incus/share/qemu/OVMF_CODE.fd + ln -s OVMF_VARS.4MB.fd /usr/incus/share/qemu/OVMF_VARS.fd + + - name: Build libtpms + run: | + cd /build/libtpms + ./autogen.sh + ./configure --prefix=/usr/incus --with-tpm2 --with-openssl + make + + mkdir -p /build/target/libtpms/ + DESTDIR=/build/target/libtpms make install + rsync -a /build/target/libtpms/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/libtpms/usr/incus/lib/ /usr/incus/lib/ + + - name: Build swtpm + run: | + cd /build/swtpm + ./autogen.sh + ./configure --prefix=/usr/incus --with-seccomp --with-openssl --without-cuse + make + + mkdir -p /build/target/swtpm/ + DESTDIR=/build/target/swtpm make install + rsync -a /build/target/swtpm/usr/incus/bin/ /usr/incus/bin/ + rsync -a /build/target/swtpm/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/swtpm/usr/incus/lib/ /usr/incus/lib/ + + - name: Build virtiofsd + run: | + cd /build/virtiofsd + cargo build --release + cp target/release/virtiofsd /usr/incus/bin/ + + - name: Build lego + run: | + cd /build/lego + go build -o "/usr/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego + + - name: Build skopeo + run: | + cd /build/skopeo + go build -o "/usr/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo + + - name: Build TrueNAS Incus CTL + run: | + cd /build/truenas_incus_ctl + go build -o "/usr/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl + + - name: Build QEMU + run: | + REPO="${PWD}" + + cd /build/qemu + + sed -i "s/^unset target_list$/target_list=\"x86_64-softmmu\"/" configure + + sed -i "/subdir('tests')/d" meson.build + ./configure \ + --prefix=/usr/incus \ + --libexecdir=bin \ + --libdir=lib \ + --disable-bochs \ + --disable-cloop \ + --disable-dmg \ + --disable-docs \ + --disable-fuse \ + --disable-guest-agent \ + --disable-parallels \ + --disable-qed \ + --disable-slirp \ + --disable-user \ + --disable-vdi \ + --disable-vnc \ + --disable-xen \ + --disable-install-blobs \ + --enable-attr \ + --enable-cap-ng \ + --enable-kvm \ + --enable-libusb \ + --enable-usb-redir \ + --enable-linux-aio \ + --enable-linux-io-uring \ + --enable-numa \ + --enable-pie \ + --enable-png \ + --enable-rbd \ + --enable-seccomp \ + --enable-spice \ + --enable-system \ + --enable-tcg \ + --enable-tools \ + --enable-vhost-crypto \ + --enable-vhost-kernel \ + --enable-vhost-net \ + --enable-vhost-user \ + --enable-virtfs + make + + mkdir /build/target/qemu/ + DESTDIR=/build/target/qemu/ make install + rsync -a /build/target/qemu/usr/incus/bin/ /usr/incus/bin/ + rsync -a /build/target/qemu/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/qemu/usr/incus/share/qemu/ /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/kvmvapic.bin /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-qxl.bin /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-virtio.bin /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-virtio.rom /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-vmxnet3.rom /usr/incus/share/qemu/ + + - name: Build Secure Boot firmware + run: | + REPO="${PWD}" + + cd /build/edk2 + + FIRMWARE="OVMF" + + cd "${REPO}/edk2-vars-generator" + ./edk2-vars-generator -f "${FIRMWARE}" \ + -e /build/edk2/Build/*/*/*/EnrollDefaultKeys.efi \ + -s /build/edk2/Build/*/*/*/Shell.efi \ + -c "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ + -V "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + -C "$(cat ${REPO}/zabbly-sb.oem.crt)" \ + -o "/usr/incus/share/qemu/OVMF_VARS.4MB.ms.fd" + + - name: Strip and cleanup binaries + run: | + rm -Rf /usr/incus/lib/debug/ + rm -Rf /usr/incus/include/ + rm -Rf /usr/incus/lib/pkgconfig/ + rm /usr/incus/lib/*.a /usr/incus/lib/*.la /usr/incus/lib/*/*.a /usr/incus/lib/*/*.la + + rm /usr/incus/bin/nasm + rm /usr/incus/bin/ndisasm + rm /usr/incus/bin/qemu-bridge-helper + rm /usr/incus/bin/qemu-edid + rm /usr/incus/bin/qemu-io + rm /usr/incus/bin/qemu-nbd + rm /usr/incus/bin/qemu-pr-helper + rm /usr/incus/bin/qemu-storage-daemon + rm /usr/incus/bin/swtpm_* + rm /usr/incus/share/qemu/trace-events-all + + strip /usr/incus/agent/*linux* + strip /usr/incus/bin/* + strip /usr/incus/lib/*so* + + - name: Make a Debian package + run: | + CODENAME=trixie + + mkdir -p \ + pkg/ \ + pkg/etc \ + pkg/lib/systemd/system/ \ + pkg/usr/bin/ \ + pkg/usr/lib/sysctl.d/ \ + pkg/usr/share/bash-completion/completions/ \ + pkg/usr/share/fish/vendor_completions.d/ \ + pkg/usr/share/zsh/vendor-completions/ + + cp -R debian pkg/debian + cp -R bin/* pkg/usr/bin/ + cp -R /usr/incus pkg/usr/ + cp -R etc/* pkg/etc/ + + cp -R systemd/system/* pkg/lib/systemd/system/ + cp -R systemd/wrappers/* pkg/usr/incus/lib/systemd/ + cp -R systemd/sysctl.d/* pkg/usr/lib/sysctl.d/ + + ln -s /usr/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus + ln -s /usr/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish + ln -s /usr/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus + + ln -s /usr/incus/bin/lxd-to-incus pkg/usr/bin/lxd-to-incus + + ln -s /usr/incus/bin/fuidshift pkg/usr/bin/fuidshift + ln -s /usr/incus/bin/incus-migrate pkg/usr/bin/incus-migrate + ln -s /usr/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams + + mkdir -p pkg/var/lib/incus + chmod 711 pkg/var/lib/incus + + mkdir -p pkg/var/log/incus + chmod 700 pkg/var/log/incus + + mkdir -p pkg/usr/share/locale + for i in /usr/incus/share/locale/*.mo; do + LANG=$(echo $i | sed -e "s#.*/locale/##g" -e "s#.mo\$##g") + mkdir -p pkg/usr/share/locale/${LANG}/LC_MESSAGES + ln -s ${i} pkg/usr/share/locale/${LANG}/LC_MESSAGES/incus.mo + done + + cd pkg + + sed -i debian/control \ + -e "s/LIBPNG16/libpng16-16t64/g" \ + -e "s/LIBUSBREDIRPARSER1/libusbredirparser1t64/g" \ + -e "s/LIBAIO1/libaio1t64/g" \ + -e "s/LIBBTRFS0/libbtrfs0t64/g" \ + -e "s/LIBGPGME11/libgpgme11t64/g" \ + -e "s/LIBUV1/libuv1t64/g" + + sed -i debian/control \ + -e "s/LIBFUSE3/libfuse3-4/g" + + dch --package incus --create -D ${CODENAME} -M -m "Automated Incus stable build" -v 1:$(echo ${INCUS_TAG} | sed -e "s/v//" -e "s/.0$//")-debian13-$(date -u +%Y%m%d%H%M) --force-distribution + dpkg-buildpackage -b + + cd .. + mkdir out + mv incus_* out/ + mv incus-base_* out/ + mv incus-client_* out/ + mv incus-extra_* out/ + mv incus-ui-canonical_* out/ + + - name: Upload resulting build + uses: actions/upload-artifact@v4 + with: + name: debian-trixie-amd64 + path: out/* diff --git a/build-in-container.sh b/build-in-container.sh new file mode 100755 index 00000000..c7fa6e14 --- /dev/null +++ b/build-in-container.sh @@ -0,0 +1,688 @@ +#!/bin/bash +# build-in-container.sh +# +# Creates an Incus container running Debian Trixie (amd64) and builds +# the Incus packages inside it. +# +# Usage: ./build-in-container.sh [container-name] +# +# The built .deb packages will be copied to ./out/ when complete. + +set -e + +CONTAINER_NAME="${1:-incus-build}" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +echo "=== Incus Build Container Setup ===" +echo "Container: ${CONTAINER_NAME}" +echo "Source: ${SCRIPT_DIR}" +echo "" + +# Check if incus is available +if ! command -v incus &> /dev/null; then + echo "ERROR: incus command not found. Please install Incus first." + exit 1 +fi + +# Delete existing container if it exists +if incus info "${CONTAINER_NAME}" &> /dev/null; then + echo "Deleting existing container ${CONTAINER_NAME}..." + incus delete -f "${CONTAINER_NAME}" +fi + +# Create the container +echo "Creating Debian Trixie container..." +incus launch images:debian/trixie "${CONTAINER_NAME}" -c security.nesting=true + +# Wait for container to be ready +echo "Waiting for container to be ready..." +sleep 5 +while ! incus exec "${CONTAINER_NAME}" -- test -e /var/lib/dpkg/lock-frontend 2>/dev/null; do + sleep 1 +done +# Wait for apt to be available +while incus exec "${CONTAINER_NAME}" -- fuser /var/lib/dpkg/lock-frontend 2>/dev/null; do + sleep 1 +done + +# Push the repository into the container +echo "Pushing source repository to container..." +incus file push -r "${SCRIPT_DIR}" "${CONTAINER_NAME}/root/" --quiet + +REPO_NAME="$(basename "${SCRIPT_DIR}")" + +# Create the build script to run inside the container +cat << 'BUILDSCRIPT' | incus exec "${CONTAINER_NAME}" -- bash -s "${REPO_NAME}" +#!/bin/bash +set -ex + +REPO_NAME="$1" +REPO="/root/${REPO_NAME}" +cd "${REPO}" + +# Environment variables +export OS_ARCH="amd64" +export OS_NAME="debian-13" +export HOME="/root/" +export PKG_CONFIG_PATH="/usr/incus/lib/pkgconfig/" +export CGO_LDFLAGS="-L/usr/incus/lib/" +export CGO_CFLAGS="-I/usr/incus/include/" +export LD_LIBRARY_PATH="/usr/incus/lib/" +export CPATH="/usr/incus/include/" +export PATH="/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" + +# Version tags +DISTROBUILDER_TAG="distrobuilder-3.2" +INCUS_TAG="v6.20.0" +INCUS_UI_CANONICAL_TAG="incus-0.19.0" +LXCFS_TAG="v6.0.5" +LXC_TAG="v6.0.5" + +COWSQL_TAG="v1.15.9" +CRIU_TAG="v4.2" +EDK2_TAG="edk2-stable202511" +GOLANG_TAG="go1.25.5" +LEGO_TAG="v4.31.0" +LIBTPMS_TAG="v0.10.2" +LIBURING_TAG="liburing-2.13" +MINIO_MC_TAG="RELEASE.2025-08-13T08-35-41Z" +MINIO_TAG="RELEASE.2025-10-15T17-29-55Z" +NASM_TAG="nasm-2.16.03" +NVIDIA_CONTAINER_TAG="v1.18.1" +QEMU_TAG="v10.2.0" +RAFT_TAG="v0.22.1" +SEABIOS_TAG="rel-1.17.0" +SKOPEO_TAG="v1.21.0" +SWTPM_TAG="v0.10.1" +TRUENAS_INCUS_CTL_TAG="v0.7.3" +VIRTIOFSD_TAG="v1.13.3" + + + +echo "=== Installing dependencies ===" +apt-get update +apt-get install --no-install-recommends --yes \ + acpica-tools \ + asciidoc \ + autoconf \ + automake \ + bison \ + bmake \ + build-essential \ + curl \ + debhelper \ + devscripts \ + dosfstools \ + expect \ + flex \ + gawk \ + gettext \ + git \ + iproute2 \ + libacl1-dev \ + libaio-dev \ + libapparmor-dev \ + libbtrfs-dev \ + libcap-dev \ + libcap-ng-dev \ + libdbus-1-dev \ + libdevmapper-dev \ + libelf-dev \ + libfuse3-dev \ + libglib2.0-dev \ + libgnutls28-dev \ + libgpgme-dev \ + libjson-glib-dev \ + libnet1-dev \ + libnl-3-dev \ + libnuma-dev \ + libpam0g-dev \ + libpixman-1-dev \ + libpng-dev \ + libprotobuf-c-dev \ + libprotobuf-dev \ + librbd-dev \ + libseccomp-dev \ + libselinux1-dev \ + libspice-server-dev \ + libsqlite3-dev \ + libssl-dev \ + libsystemd-dev \ + libtirpc-dev \ + libtool \ + libudev-dev \ + libusb-1.0-0-dev \ + libusbredirhost-dev \ + libuv1-dev \ + lsb-release \ + mtools \ + ninja-build \ + pkg-config \ + protobuf-c-compiler \ + protobuf-compiler \ + python3-cryptography \ + python3-jinja2 \ + python3-pexpect \ + python3-pip \ + python3-setuptools \ + python3-venv \ + rsync \ + socat \ + uuid-dev \ + xmlto \ + xorriso + +echo "=== Configuring git ===" +git config --global --add advice.detachedHead false +git config --global user.email "noreply@localhost" +git config --global user.name "Incus build" + +apt-get install --no-install-recommends --yes systemd-dev || true + +pip3 install meson --break-system-packages || pip3 install meson +pip3 install tomli --break-system-packages || pip3 install tomli + +echo "=== Installing Go ===" +curl -sL "https://go.dev/dl/${GOLANG_TAG}.linux-${OS_ARCH}.tar.gz" | tar -C /usr/local/ -zx +go version + +echo "=== Installing Rust ===" +curl -sL https://sh.rustup.rs -o /tmp/install-rust.sh +bash /tmp/install-rust.sh -y +source /root/.cargo/env + +echo "=== Installing Node ===" +NODE_ARCH=x64 +mkdir -p /usr/local/node/ +curl -sL "https://nodejs.org/dist/v22.11.0/node-v22.11.0-linux-${NODE_ARCH}.tar.xz" | tar -C /usr/local/node/ -Jx --strip-components=1 + +echo "=== Setting up build environment ===" +mkdir -p /build/ +mkdir -p \ + /usr/incus/bin/ \ + /usr/incus/include/ \ + /usr/incus/lib/ \ + /usr/incus/lib/systemd \ + /usr/incus/share/ + +echo "=== Cloning source repositories ===" +git clone https://github.com/lxc/distrobuilder /build/distrobuilder --depth 1 -b "${DISTROBUILDER_TAG}" +git clone https://github.com/lxc/lxc /build/lxc -b "${LXC_TAG}" +git clone https://github.com/lxc/lxcfs /build/lxcfs --depth 1 -b "${LXCFS_TAG}" +git clone https://github.com/lxc/incus /build/incus -b "${INCUS_TAG}" +git clone https://github.com/zabbly/incus-ui-canonical /build/incus-ui-canonical --depth 1 -b "${INCUS_UI_CANONICAL_TAG}" + +git clone https://github.com/axboe/liburing /build/liburing --depth 1 -b "${LIBURING_TAG}" +git clone https://github.com/checkpoint-restore/criu /build/criu --depth 1 -b "${CRIU_TAG}" +git clone https://github.com/containers/skopeo /build/skopeo --depth 1 -b "${SKOPEO_TAG}" +git clone https://github.com/cowsql/cowsql /build/cowsql --depth 1 -b "${COWSQL_TAG}" +git clone https://github.com/cowsql/raft /build/raft --depth 1 -b "${RAFT_TAG}" +git clone https://github.com/go-acme/lego /build/lego --depth 1 -b "${LEGO_TAG}" +git clone https://github.com/minio/mc /build/mc --depth 1 -b "${MINIO_MC_TAG}" +git clone https://github.com/minio/minio /build/minio --depth 1 -b "${MINIO_TAG}" +git clone https://github.com/NVIDIA/libnvidia-container /build/libnvidia-container --depth 1 -b "${NVIDIA_CONTAINER_TAG}" +git clone https://github.com/stefanberger/libtpms /build/libtpms --depth 1 -b "${LIBTPMS_TAG}" +git clone https://github.com/stefanberger/swtpm /build/swtpm --depth 1 -b "${SWTPM_TAG}" +git clone https://github.com/tianocore/edk2 /build/edk2 --recurse-submodules --shallow-submodules --depth 1 -b "${EDK2_TAG}" +git clone https://github.com/truenas/truenas_incus_ctl /build/truenas_incus_ctl --depth 1 -b "${TRUENAS_INCUS_CTL_TAG}" +git clone https://gitlab.com/qemu-project/qemu /build/qemu --depth 1 -b "${QEMU_TAG}" +git clone https://gitlab.com/qemu-project/seabios /build/seabios --depth 1 -b "${SEABIOS_TAG}" +git clone https://gitlab.com/virtio-fs/virtiofsd /build/virtiofsd --depth 1 -b "${VIRTIOFSD_TAG}" + +mkdir /build/nasm/ +curl -sL "https://www.nasm.us/pub/nasm/releasebuilds/$(echo ${NASM_TAG} | cut -d- -f2)/${NASM_TAG}.tar.gz" --resolve www.nasm.us:443:198.137.202.136 | tar -C /build/nasm/ -zx --strip-components=1 + +echo "=== Building liburing ===" +cd /build/liburing +./configure --prefix=/usr/incus +make +mkdir -p /build/target/liburing/ +DESTDIR=/build/target/liburing make install +rsync -a /build/target/liburing/usr/incus/include/* /usr/incus/include/ +rsync -a /build/target/liburing/usr/incus/lib/* /usr/incus/lib/ + +echo "=== Building raft ===" +cd /build/raft +autoreconf -i +./configure --prefix=/usr/incus +make +mkdir -p /build/target/raft/ +DESTDIR=/build/target/raft/ make install +rsync -a /build/target/raft/usr/incus/include/ /usr/incus/include/ +rsync -a /build/target/raft/usr/incus/lib/ /usr/incus/lib/ + +echo "=== Building cowsql ===" +cd /build/cowsql +autoreconf -i +./configure --prefix=/usr/incus +make +mkdir -p /build/target/cowsql/ +DESTDIR=/build/target/cowsql/ make install +rsync -a /build/target/cowsql/usr/incus/include/ /usr/incus/include/ +rsync -a /build/target/cowsql/usr/incus/lib/ /usr/incus/lib/ + +echo "=== Building LXC ===" +cd /build/lxc +meson setup build \ + --prefix=/usr/incus \ + --libdir=/usr/incus/lib \ + -Dexamples=false \ + -Dman=false \ + -Dtools=false \ + -Dtests=false \ + -Dmemfd-rexec=false \ + -Dapparmor=true \ + -Dseccomp=true \ + -Dselinux=true \ + -Dcapabilities=true \ + -Dio-uring-event-loop=false +meson compile -C build +mkdir -p /build/target/lxc/ +DESTDIR=/build/target/lxc/ meson install -C build +rsync -a /build/target/lxc/usr/incus/include/ /usr/incus/include/ +rsync -a /build/target/lxc/usr/incus/lib/ /usr/incus/lib/ +mkdir -p /usr/incus/share/lxc/config/common.conf.d/ +mkdir -p /usr/incus/share/lxc/hooks/ +cp /build/target/lxc/usr/incus/share/lxc/hooks/nvidia /usr/incus/share/lxc/hooks/ + +echo "=== Building LXCFS ===" +cd /build/lxcfs +meson setup build \ + --prefix=/usr/incus \ + --libdir=/usr/incus/lib \ + -Ddocs=false \ + -Dtests=false +meson compile -C build +mkdir -p /build/target/lxcfs/ +DESTDIR=/build/target/lxcfs/ meson install -C build +rsync -a /build/target/lxcfs/usr/incus/bin/ /usr/incus/bin/ +rsync -a /build/target/lxcfs/usr/incus/share/ /usr/incus/share/ +rsync -a /build/target/lxcfs/usr/incus/lib/ /usr/incus/lib/ +sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /usr/incus/share/lxcfs/lxc.mount.hook +patch -p1 /usr/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" + +echo "=== Building Incus ===" +cd /build/incus +git cherry-pick 0b0311794c2750b50e9a0aa598143f547ee5653e # doc/openfga: Improve required config keys +git cherry-pick eafa7db765970d7f09c20474781efed3c63f5446 # incusd/network/ovn: Drop now obsolete DNS check +git cherry-pick 539860ce96195859ffc5d477a701c4d7ce967669 # incusd/storage/truenas: fix SetVolumeQuota issue when growing FS volumes +git cherry-pick eb0b2f5d9b35ecf90d09d63854e80ea8602744a7 # cmd/incus-user: Don't reset setup if user has access +git cherry-pick f95e2af5b76c91caa20c2ecef85df9ff6074d70e # incusd/network/physical: Allow parent re-use for bridges +git cherry-pick 969f32300002fd980992e3b62bedf398bdf7dbe6 # incusd/network/physical: Allow vlan.tagged +git cherry-pick b72643a540172fdb69b97b82dd60740ac06ad890 # incusd/device: Add vlan.tagged to physical NICs +git cherry-pick add134c50d1ab69af063f8c0af4178129f09d51e # incusd/device/nic_physical: Fix internal bridge handling +git cherry-pick 110a5235313c8b415d12aa2d72ece95e70bd574f # doc/network_ovn: Add note about advanced external_interfaces syntax +git cherry-pick 58e7df140e1af36dc6d30abc8578b05889be813b # incusd/instance/drivers: Add size parameter to UpdateBlockSize method +git cherry-pick 06309e0d5fdbc265d7e9a226f773c25d624f654d # incusd/storage/drivers: Export roundAbove function +git cherry-pick 62b535b9c03f9b21c625bd56369a235fa528afbd # incusd/storage/drivers: Add Qcow2Resize and export isQcow2Block function +git cherry-pick ef90f5de6a14ca4ac4eb4e8a3d2929128d84d2e4 # incusd/storage: Add support for resizing qcow2 volumes +git cherry-pick 27870526d1cb69d50b443c8b89187d9a16a30ea7 # Added a few more environment variables. PATHEXT and COMPUTERNAME were needed for 'shutdown.exe'. Meanwhile, I've connected as SYSTEM with PsExec to show the environment variables by default and added them. +git cherry-pick bef2fc76a6f9c070cc07e068c7dd3a205884e3d1 # incusd/instance/drivers: Fix adding disk with a device name longer than 31 bytes +git cherry-pick fe9c020eea99b05ed3eee2a5c50ed124e15df14a # incusd/instance/drivers: Add tests for hashName + +go build -o "/usr/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift +go build -o "/usr/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus +go build -o "/usr/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark +go build -o "/usr/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate +go build -o "/usr/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams +go build -o "/usr/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user +go build -o "/usr/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd +go build -o "/usr/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus +go build -o "/usr/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus + +mkdir -p /usr/incus/agent +GOARCH=amd64 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent +GOARCH=386 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent +GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent +GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent +GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + +make build-mo +mkdir -p /usr/incus/share/locale +cp po/*.mo /usr/incus/share/locale/ + +# make doc +# cp -R doc/html /usr/incus/doc + +mkdir -p /usr/incus/share/completions/ +/usr/incus/bin/incus completion bash > /usr/incus/share/completions/bash +/usr/incus/bin/incus completion fish > /usr/incus/share/completions/fish +/usr/incus/bin/incus completion zsh > /usr/incus/share/completions/zsh + +echo "=== Building UI (canonical) ===" +cd /build/incus-ui-canonical +find -type f -name "*.ts" -o -name "*.tsx" -o -name "*.scss" | xargs sed -i -f "${REPO}/patches/ui-canonical-renames.sed" +npm install yarn --global +yarn install +yarn build +mkdir -p /usr/incus/ui-canonical/ +rsync -a /build/incus-ui-canonical/build/ui/ /usr/incus/ui-canonical/ + +echo "=== Building Distrobuilder ===" +cd /build/distrobuilder +go build -o "/usr/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder + +echo "=== Building CRIU ===" +cd /build/criu +make WERROR=0 +cp criu/criu /usr/incus/bin/ + +echo "=== Building libnvidia-container ===" +cd /build/libnvidia-container +patch -p1 < "${REPO}/patches/nvidia-0001-Fix-for-22.04-build.patch" +patch -p1 < "${REPO}/patches/nvidia-0002-pre-load-libdl.patch" +make prefix=/ +mkdir /build/target/libnvidia-container +DESTDIR=/build/target/libnvidia-container make install prefix=/ +rsync -a /build/target/libnvidia-container/bin/ /usr/incus/bin/ +rsync -a /build/target/libnvidia-container/include/ /usr/incus/include/ +rsync -a /build/target/libnvidia-container/lib/ /usr/incus/lib/ + +echo "=== Building minio ===" +cd /build/minio +make build +cp minio /usr/incus/bin/ + +echo "=== Building minio client ===" +cd /build/mc +make build +cp mc /usr/incus/bin/ + +echo "=== Building seabios ===" +cd /build/seabios +make clean distclean +echo "CONFIG_QEMU=y" > .config +echo "CONFIG_QEMU_HARDWARE=y" >> .config +echo "CONFIG_BOOTSPLASH=n" >> .config +echo "CONFIG_ROM_SIZE=256" >> .config +echo "CONFIG_XEN=n" >> .config +echo "CONFIG_PVSCSI=n" >> .config +echo "CONFIG_ESP_SCSI=n" >> .config +echo "CONFIG_LSI_SCSI=n" >> .config +echo "CONFIG_MEGASAS=n" >> .config +echo "CONFIG_MPT_SCSI=n" >> .config +echo "CONFIG_FLOPPY=n" >> .config +echo "CONFIG_FLASH_FLOPPY=n" >> .config +make oldnoconfig V=1 +make V=1 PYTHON=python3 +mkdir -p /usr/incus/share/qemu/ +cp out/bios.bin /usr/incus/share/qemu/seabios.bin + +echo "=== Building nasm ===" +cd /build/nasm +patch -p1 < "${REPO}/patches/nasm-0000-disable-manpages.patch" +./configure --prefix=/usr/incus +make +mkdir -p /build/target/nasm/ +DESTDIR=/build/target/nasm make install +rsync -a /build/target/nasm/usr/incus/bin/ /usr/incus/bin/ + +echo "=== Building EDK2 ===" +cd /build/edk2 +patch -p1 < "${REPO}/patches/edk2-0001-force-DUID-LLT.patch" +cp "${REPO}/patches/edk2-0002-logo.bmp" MdeModulePkg/Logo/Logo.bmp +patch -p1 < "${REPO}/patches/edk2-0003-boot-delay.patch" +patch -p1 < "${REPO}/patches/edk2-0004-gcc-errors.patch" +patch -p1 < "${REPO}/patches/edk2-0005-Revert-ArmVirtPkg-make-EFI_LOADER_DATA-non-executabl.patch" +patch -p1 < "${REPO}/patches/edk2-0006-disable-EFI-memory-attributes-protocol.patch" +patch -p1 < "${REPO}/patches/edk2-0007-OvmfPkg-X64-add-opt-org-tianocore-UninstallMemAttrProtocol-support.patch" +patch -p1 < "${REPO}/patches/edk2-0008-Disable-virtio-keyboard.patch" +patch -p1 < "${REPO}/patches/edk2-0009-disable-UEFI-shell-under-SecureBoot.patch" + +EDK2_ARCH="X64" +EDK2_PKG="OvmfPkg/OvmfPkgX64.dsc" +EDK2_FV_CODE="OVMF_CODE" +EDK2_FV_VARS="OVMF_VARS" + +build_edk2() { + TARGET_CODE="$1" + shift + TARGET_VARS="$1" + shift + + set -ex + ( + cat << EOF + . ./edksetup.sh + make -C BaseTools ARCH=${EDK2_ARCH} + build -a ${EDK2_ARCH} -t GCC5 -b RELEASE -p ${EDK2_PKG} \ + -DSMM_REQUIRE=TRUE \ + -DSECURE_BOOT_ENABLE=TRUE \ + -DNETWORK_IP4_ENABLE=TRUE \ + -DNETWORK_IP6_ENABLE=TRUE \ + -DNETWORK_TLS_ENABLE=TRUE \ + -DNETWORK_HTTP_BOOT_ENABLE=TRUE \ + -DTPM2_ENABLE=TRUE \ + -DTPM2_CONFIG_ENABLE=TRUE \ + --pcd PcdUninstallMemAttrProtocol=TRUE \ + $@ +EOF + ) | bash -e + + cp Build/*/*/FV/${EDK2_FV_CODE}.fd "${TARGET_CODE}" + cp Build/*/*/FV/${EDK2_FV_VARS}.fd "${TARGET_VARS}" +} + +mkdir -p "/usr/incus/share/qemu/" +build_edk2 \ + "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ + "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + -DFD_SIZE_4MB + +ln -s OVMF_CODE.4MB.fd /usr/incus/share/qemu/OVMF_CODE.fd +ln -s OVMF_VARS.4MB.fd /usr/incus/share/qemu/OVMF_VARS.fd + +echo "=== Building libtpms ===" +cd /build/libtpms +./autogen.sh +./configure --prefix=/usr/incus --with-tpm2 --with-openssl +make +mkdir -p /build/target/libtpms/ +DESTDIR=/build/target/libtpms make install +rsync -a /build/target/libtpms/usr/incus/include/ /usr/incus/include/ +rsync -a /build/target/libtpms/usr/incus/lib/ /usr/incus/lib/ + +echo "=== Building swtpm ===" +cd /build/swtpm +./autogen.sh +./configure --prefix=/usr/incus --with-seccomp --with-openssl --without-cuse +make +mkdir -p /build/target/swtpm/ +DESTDIR=/build/target/swtpm make install +rsync -a /build/target/swtpm/usr/incus/bin/ /usr/incus/bin/ +rsync -a /build/target/swtpm/usr/incus/include/ /usr/incus/include/ +rsync -a /build/target/swtpm/usr/incus/lib/ /usr/incus/lib/ + +echo "=== Building virtiofsd ===" +cd /build/virtiofsd +cargo build --release +cp target/release/virtiofsd /usr/incus/bin/ + +echo "=== Building lego ===" +cd /build/lego +go build -o "/usr/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego + +echo "=== Building skopeo ===" +cd /build/skopeo +go build -o "/usr/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo + +echo "=== Building TrueNAS Incus CTL ===" +cd /build/truenas_incus_ctl +go build -o "/usr/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl + +echo "=== Building QEMU ===" +cd /build/qemu +sed -i "s/^unset target_list$/target_list=\"$(uname -m)-softmmu\"/" configure +sed -i "/subdir('tests')/d" meson.build +./configure \ + --prefix=/usr/incus \ + --libexecdir=bin \ + --libdir=lib \ + --disable-bochs \ + --disable-cloop \ + --disable-dmg \ + --disable-docs \ + --disable-fuse \ + --disable-guest-agent \ + --disable-parallels \ + --disable-qed \ + --disable-slirp \ + --disable-user \ + --disable-vdi \ + --disable-vnc \ + --disable-xen \ + --disable-install-blobs \ + --enable-attr \ + --enable-cap-ng \ + --enable-kvm \ + --enable-libusb \ + --enable-usb-redir \ + --enable-linux-aio \ + --enable-linux-io-uring \ + --enable-numa \ + --enable-pie \ + --enable-png \ + --enable-rbd \ + --enable-seccomp \ + --enable-spice \ + --enable-system \ + --enable-tcg \ + --enable-tools \ + --enable-vhost-crypto \ + --enable-vhost-kernel \ + --enable-vhost-net \ + --enable-vhost-user \ + --enable-virtfs +make +mkdir /build/target/qemu/ +DESTDIR=/build/target/qemu/ make install +rsync -a /build/target/qemu/usr/incus/bin/ /usr/incus/bin/ +rsync -a /build/target/qemu/usr/incus/lib/ /usr/incus/lib/ +rsync -a /build/target/qemu/usr/incus/share/qemu/ /usr/incus/share/qemu/ +cp /build/qemu/pc-bios/kvmvapic.bin /usr/incus/share/qemu/ +cp /build/qemu/pc-bios/vgabios-qxl.bin /usr/incus/share/qemu/ +cp /build/qemu/pc-bios/vgabios-virtio.bin /usr/incus/share/qemu/ +cp /build/qemu/pc-bios/efi-virtio.rom /usr/incus/share/qemu/ +cp /build/qemu/pc-bios/efi-vmxnet3.rom /usr/incus/share/qemu/ + +echo "=== Building Secure Boot firmware ===" +cd /build/edk2 +FIRMWARE="OVMF" +cd "${REPO}/edk2-vars-generator" +./edk2-vars-generator -f "${FIRMWARE}" \ + -e /build/edk2/Build/*/*/*/EnrollDefaultKeys.efi \ + -s /build/edk2/Build/*/*/*/Shell.efi \ + -c "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ + -V "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + -C "$(cat ${REPO}/zabbly-sb.oem.crt)" \ + -o "/usr/incus/share/qemu/OVMF_VARS.4MB.ms.fd" + +echo "=== Stripping and cleaning up binaries ===" +rm -Rf /usr/incus/lib/debug/ +rm -Rf /usr/incus/include/ +rm -Rf /usr/incus/lib/pkgconfig/ +rm -f /usr/incus/lib/*.a /usr/incus/lib/*.la /usr/incus/lib/*/*.a /usr/incus/lib/*/*.la + +rm -f /usr/incus/bin/nasm +rm -f /usr/incus/bin/ndisasm +rm -f /usr/incus/bin/qemu-bridge-helper +rm -f /usr/incus/bin/qemu-edid +rm -f /usr/incus/bin/qemu-io +rm -f /usr/incus/bin/qemu-nbd +rm -f /usr/incus/bin/qemu-pr-helper +rm -f /usr/incus/bin/qemu-storage-daemon +rm -f /usr/incus/bin/swtpm_* +rm -f /usr/incus/share/qemu/trace-events-all + +strip /usr/incus/agent/*linux* || true +strip /usr/incus/bin/* || true +strip /usr/incus/lib/*so* || true + +echo "=== Making Debian package ===" +PKGOS="debian-13" +CODENAME="trixie" + +cd "${REPO}" +mkdir -p \ + pkg/ \ + pkg/etc \ + pkg/lib/systemd/system/ \ + pkg/usr/bin/ \ + pkg/usr/lib/sysctl.d/ \ + pkg/usr/share/bash-completion/completions/ \ + pkg/usr/share/fish/vendor_completions.d/ \ + pkg/usr/share/zsh/vendor-completions/ + +cp -R debian pkg/debian +cp -R bin/* pkg/usr/bin/ +cp -R /usr/incus pkg/usr/ +cp -R etc/* pkg/etc/ + +cp -R systemd/system/* pkg/lib/systemd/system/ +cp -R systemd/wrappers/* pkg/usr/incus/lib/systemd/ +cp -R systemd/sysctl.d/* pkg/usr/lib/sysctl.d/ + +ln -s /usr/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus +ln -s /usr/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish +ln -s /usr/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus + +ln -s /usr/incus/bin/lxd-to-incus pkg/usr/bin/lxd-to-incus + +ln -s /usr/incus/bin/fuidshift pkg/usr/bin/fuidshift +ln -s /usr/incus/bin/incus-migrate pkg/usr/bin/incus-migrate +ln -s /usr/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams + +mkdir -p pkg/var/lib/incus +chmod 711 pkg/var/lib/incus + +mkdir -p pkg/var/log/incus +chmod 700 pkg/var/log/incus + +mkdir -p pkg/usr/share/locale +for i in /usr/incus/share/locale/*.mo; do + LANG=$(echo $i | sed -e "s#.*/locale/##g" -e "s#.mo\$##g") + mkdir -p pkg/usr/share/locale/${LANG}/LC_MESSAGES + ln -s ${i} pkg/usr/share/locale/${LANG}/LC_MESSAGES/incus.mo +done + +cd pkg + +sed -i debian/control \ + -e "s/LIBPNG16/libpng16-16t64/g" \ + -e "s/LIBUSBREDIRPARSER1/libusbredirparser1t64/g" \ + -e "s/LIBAIO1/libaio1t64/g" \ + -e "s/LIBBTRFS0/libbtrfs0t64/g" \ + -e "s/LIBGPGME11/libgpgme11t64/g" \ + -e "s/LIBUV1/libuv1t64/g" + +sed -i debian/control \ + -e "s/LIBFUSE3/libfuse3-4/g" + +dch --package incus --create -D ${CODENAME} -M -m "Automated Incus stable build" -v 1:$(echo ${INCUS_TAG} | sed -e "s/v//" -e "s/.0$//")-$(echo ${PKGOS} | sed "s/-//g")-$(date -u +%Y%m%d%H%M) --force-distribution +dpkg-buildpackage -b + +cd .. +mkdir -p out +mv incus_* out/ +mv incus-base_* out/ +mv incus-client_* out/ +mv incus-extra_* out/ +mv incus-ui-canonical_* out/ + +echo "=== Build complete! ===" +ls -la out/ +BUILDSCRIPT + +echo "" +echo "=== Copying packages from container ===" +# mkdir -p "${SCRIPT_DIR}/out" +incus file pull -r "${CONTAINER_NAME}/root/${REPO_NAME}/out/" "${SCRIPT_DIR}/" + +echo "" +echo "=== Build complete! ===" +echo "Packages are in: ${SCRIPT_DIR}/out/" +ls -la "${SCRIPT_DIR}/out/" + +echo "" +echo "Container ${CONTAINER_NAME} is still running." +echo "To delete it: incus delete -f ${CONTAINER_NAME}" diff --git a/migrate-to-usr-incus.sh b/migrate-to-usr-incus.sh new file mode 100755 index 00000000..3ed098d5 --- /dev/null +++ b/migrate-to-usr-incus.sh @@ -0,0 +1,78 @@ +#!/bin/bash +# migrate-to-usr-incus.sh +# +# Migrates the Incus Debian package configuration from /opt/incus to /usr/incus +# for systemd-sysext compatibility. +# +# Usage: ./migrate-to-usr-incus.sh + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +echo "Migrating Incus package from /opt/incus to /usr/incus..." + +# GitHub Actions workflow +echo " - Updating .github/workflows/builds.yml..." +sed -i 's|/opt/incus|/usr/incus|g' .github/workflows/builds.yml +# Fix package directory structure (pkg/opt/ -> pkg/usr/) +sed -i 's|pkg/opt/|pkg/usr/|g' .github/workflows/builds.yml +# Remove pkg/opt/ from mkdir command (now redundant with pkg/usr/) +sed -i '/mkdir -p/,/vendor-completions\// { /pkg\/opt\/ \\$/d }' .github/workflows/builds.yml + +# Systemd service files +echo " - Updating systemd service files..." +sed -i 's|/opt/incus|/usr/incus|g' \ + systemd/system/incus.service \ + systemd/system/incus-user.service \ + systemd/system/incus-startup.service \ + systemd/system/incus-lxcfs.service + +# Systemd wrapper scripts +echo " - Updating systemd wrapper scripts..." +sed -i 's|/opt/incus|/usr/incus|g' \ + systemd/wrappers/incusd \ + systemd/wrappers/incus-startup \ + systemd/wrappers/incus-user + +# User-facing wrapper scripts +echo " - Updating bin/ wrapper scripts..." +sed -i 's|/opt/incus|/usr/incus|g' \ + bin/incus \ + bin/lxc-to-incus \ + bin/distrobuilder + +# Debian package install files +echo " - Updating debian install files..." +sed -i 's|opt/incus|usr/incus|g' \ + debian/incus.install \ + debian/incus-client.install \ + debian/incus-extra.install + +# Remove 'opt' from incus-base.install (usr is already listed) +sed -i '/^opt$/d' debian/incus-base.install + +# Debian rules +echo " - Updating debian/rules..." +sed -i 's|opt/incus|usr/incus|g' debian/rules + +# LXCFS patch +echo " - Updating patches/lxcfs-0001-hook.patch..." +sed -i 's|/opt/incus|/usr/incus|g' patches/lxcfs-0001-hook.patch + +echo "" +echo "Migration complete!" +echo "" +echo "Verify no remaining /opt/incus references:" +if grep -r "/opt/incus\|opt/incus" \ + .github/workflows/builds.yml \ + systemd/ \ + bin/ \ + debian/ \ + patches/ 2>/dev/null; then + echo "WARNING: Some /opt/incus references remain!" + exit 1 +else + echo " All references successfully migrated to /usr/incus" +fi From cd6cd79f8afce2c8cc6748ec4e5c7bade09d88b5 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Tue, 20 Jan 2026 19:58:03 -0500 Subject: [PATCH 31/41] fix: skip docs Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml index c7109375..3747c911 100644 --- a/.github/workflows/builds-docker.yml +++ b/.github/workflows/builds-docker.yml @@ -329,8 +329,8 @@ jobs: mkdir -p /usr/incus/share/locale cp po/*.mo /usr/incus/share/locale/ - make doc - cp -R doc/html /usr/incus/doc + #make doc + #cp -R doc/html /usr/incus/doc mkdir -p /usr/incus/share/completions/ /usr/incus/bin/incus completion bash > /usr/incus/share/completions/bash From df23af760afc31f9a0d350a377b1ef58dd3d8288 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Tue, 20 Jan 2026 20:31:27 -0500 Subject: [PATCH 32/41] feat: publish Signed-off-by: Brian Ketelsen --- .github/workflows/builds.yml | 292 +++++++++++++++++++---------------- 1 file changed, 163 insertions(+), 129 deletions(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 0cf2ddd9..8b41facb 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -39,12 +39,12 @@ jobs: OS_ARCH: ${{ matrix.arch }} OS_NAME: ${{ matrix.os }} HOME: "/root/" - PKG_CONFIG_PATH: "/opt/incus/lib/pkgconfig/" - CGO_LDFLAGS: "-L/opt/incus/lib/" - CGO_CFLAGS: "-I/opt/incus/include/" - LD_LIBRARY_PATH: "/opt/incus/lib/" - CPATH: "/opt/incus/include/" - PATH: "/opt/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" + PKG_CONFIG_PATH: "/usr/incus/lib/pkgconfig/" + CGO_LDFLAGS: "-L/usr/incus/lib/" + CGO_CFLAGS: "-I/usr/incus/include/" + LD_LIBRARY_PATH: "/usr/incus/lib/" + CPATH: "/usr/incus/include/" + PATH: "/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" @@ -184,11 +184,11 @@ jobs: run: | mkdir /build/ mkdir -p \ - /opt/incus/bin/ \ - /opt/incus/include/ \ - /opt/incus/lib/ \ - /opt/incus/lib/systemd \ - /opt/incus/share/ + /usr/incus/bin/ \ + /usr/incus/include/ \ + /usr/incus/lib/ \ + /usr/incus/lib/systemd \ + /usr/incus/share/ - name: Get the code run: | @@ -221,37 +221,37 @@ jobs: - name: Build liburing run: | cd /build/liburing - ./configure --prefix=/opt/incus + ./configure --prefix=/usr/incus make mkdir -p /build/target/liburing/ DESTDIR=/build/target/liburing make install - rsync -a /build/target/liburing/opt/incus/include/* /opt/incus/include/ - rsync -a /build/target/liburing/opt/incus/lib/* /opt/incus/lib/ + rsync -a /build/target/liburing/usr/incus/include/* /usr/incus/include/ + rsync -a /build/target/liburing/usr/incus/lib/* /usr/incus/lib/ - name: Build raft run: | cd /build/raft autoreconf -i - ./configure --prefix=/opt/incus + ./configure --prefix=/usr/incus make mkdir -p /build/target/raft/ DESTDIR=/build/target/raft/ make install - rsync -a /build/target/raft/opt/incus/include/ /opt/incus/include/ - rsync -a /build/target/raft/opt/incus/lib/ /opt/incus/lib/ + rsync -a /build/target/raft/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/raft/usr/incus/lib/ /usr/incus/lib/ - name: Build cowsql run: | cd /build/cowsql autoreconf -i - ./configure --prefix=/opt/incus + ./configure --prefix=/usr/incus make mkdir -p /build/target/cowsql/ DESTDIR=/build/target/cowsql/ make install - rsync -a /build/target/cowsql/opt/incus/include/ /opt/incus/include/ - rsync -a /build/target/cowsql/opt/incus/lib/ /opt/incus/lib/ + rsync -a /build/target/cowsql/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/cowsql/usr/incus/lib/ /usr/incus/lib/ - name: Build LXC run: | @@ -260,8 +260,8 @@ jobs: cd /build/lxc meson setup build \ - --prefix=/opt/incus \ - --libdir=/opt/incus/lib \ + --prefix=/usr/incus \ + --libdir=/usr/incus/lib \ -Dexamples=false \ -Dman=false \ -Dtools=false \ @@ -276,11 +276,11 @@ jobs: mkdir -p /build/target/lxc/ DESTDIR=/build/target/lxc/ meson install -C build - rsync -a /build/target/lxc/opt/incus/include/ /opt/incus/include/ - rsync -a /build/target/lxc/opt/incus/lib/ /opt/incus/lib/ - mkdir -p /opt/incus/share/lxc/config/common.conf.d/ - mkdir -p /opt/incus/share/lxc/hooks/ - cp /build/target/lxc/opt/incus/share/lxc/hooks/nvidia /opt/incus/share/lxc/hooks/ + rsync -a /build/target/lxc/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/lxc/usr/incus/lib/ /usr/incus/lib/ + mkdir -p /usr/incus/share/lxc/config/common.conf.d/ + mkdir -p /usr/incus/share/lxc/hooks/ + cp /build/target/lxc/usr/incus/share/lxc/hooks/nvidia /usr/incus/share/lxc/hooks/ - name: Build LXCFS run: | @@ -288,20 +288,20 @@ jobs: cd /build/lxcfs meson setup build \ - --prefix=/opt/incus \ - --libdir=/opt/incus/lib \ + --prefix=/usr/incus \ + --libdir=/usr/incus/lib \ -Ddocs=false \ -Dtests=false meson compile -C build mkdir -p /build/target/lxcfs/ DESTDIR=/build/target/lxcfs/ meson install -C build - rsync -a /build/target/lxcfs/opt/incus/bin/ /opt/incus/bin/ - rsync -a /build/target/lxcfs/opt/incus/share/ /opt/incus/share/ - rsync -a /build/target/lxcfs/opt/incus/lib/ /opt/incus/lib/ + rsync -a /build/target/lxcfs/usr/incus/bin/ /usr/incus/bin/ + rsync -a /build/target/lxcfs/usr/incus/share/ /usr/incus/share/ + rsync -a /build/target/lxcfs/usr/incus/lib/ /usr/incus/lib/ - sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /opt/incus/share/lxcfs/lxc.mount.hook - patch -p1 /opt/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" + sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /usr/incus/share/lxcfs/lxc.mount.hook + patch -p1 /usr/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" - name: Build Incus run: | @@ -309,40 +309,57 @@ jobs: cd /build/incus - go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift - go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus - go build -o "/opt/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark - go build -o "/opt/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate - go build -o "/opt/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams - go build -o "/opt/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user - go build -o "/opt/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd - go build -o "/opt/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus - go build -o "/opt/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus - - mkdir -p /opt/incus/agent + git cherry-pick 0b0311794c2750b50e9a0aa598143f547ee5653e # doc/openfga: Improve required config keys + git cherry-pick eafa7db765970d7f09c20474781efed3c63f5446 # incusd/network/ovn: Drop now obsolete DNS check + git cherry-pick 539860ce96195859ffc5d477a701c4d7ce967669 # incusd/storage/truenas: fix SetVolumeQuota issue when growing FS volumes + git cherry-pick eb0b2f5d9b35ecf90d09d63854e80ea8602744a7 # cmd/incus-user: Don't reset setup if user has access + git cherry-pick f95e2af5b76c91caa20c2ecef85df9ff6074d70e # incusd/network/physical: Allow parent re-use for bridges + git cherry-pick 969f32300002fd980992e3b62bedf398bdf7dbe6 # incusd/network/physical: Allow vlan.tagged + git cherry-pick b72643a540172fdb69b97b82dd60740ac06ad890 # incusd/device: Add vlan.tagged to physical NICs + git cherry-pick add134c50d1ab69af063f8c0af4178129f09d51e # incusd/device/nic_physical: Fix internal bridge handling + git cherry-pick 110a5235313c8b415d12aa2d72ece95e70bd574f # doc/network_ovn: Add note about advanced external_interfaces syntax + git cherry-pick 58e7df140e1af36dc6d30abc8578b05889be813b # incusd/instance/drivers: Add size parameter to UpdateBlockSize method + git cherry-pick 06309e0d5fdbc265d7e9a226f773c25d624f654d # incusd/storage/drivers: Export roundAbove function + git cherry-pick 62b535b9c03f9b21c625bd56369a235fa528afbd # incusd/storage/drivers: Add Qcow2Resize and export isQcow2Block function + git cherry-pick ef90f5de6a14ca4ac4eb4e8a3d2929128d84d2e4 # incusd/storage: Add support for resizing qcow2 volumes + git cherry-pick 27870526d1cb69d50b443c8b89187d9a16a30ea7 # Added a few more environment variables. PATHEXT and COMPUTERNAME were needed for 'shutdown.exe'. Meanwhile, I've connected as SYSTEM with PsExec to show the environment variables by default and added them. + git cherry-pick bef2fc76a6f9c070cc07e068c7dd3a205884e3d1 # incusd/instance/drivers: Fix adding disk with a device name longer than 31 bytes + git cherry-pick fe9c020eea99b05ed3eee2a5c50ed124e15df14a # incusd/instance/drivers: Add tests for hashName + + go build -o "/usr/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift + go build -o "/usr/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus + go build -o "/usr/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark + go build -o "/usr/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate + go build -o "/usr/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams + go build -o "/usr/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user + go build -o "/usr/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd + go build -o "/usr/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus + go build -o "/usr/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus + + mkdir -p /usr/incus/agent if [ "$(uname -m)" = "x86_64" ]; then - GOARCH=amd64 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=386 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent elif [ "$(uname -m)" = "aarch64" ]; then - GOARCH=arm64 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=arm64 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=arm64 GOOS=darwin CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.macos.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=arm64 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=arm64 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=arm64 GOOS=darwin CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.macos.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent fi make build-mo - mkdir -p /opt/incus/share/locale - cp po/*.mo /opt/incus/share/locale/ + mkdir -p /usr/incus/share/locale + cp po/*.mo /usr/incus/share/locale/ make doc - cp -R doc/html /opt/incus/doc + cp -R doc/html /usr/incus/doc - mkdir -p /opt/incus/share/completions/ - /opt/incus/bin/incus completion bash > /opt/incus/share/completions/bash - /opt/incus/bin/incus completion fish > /opt/incus/share/completions/fish - /opt/incus/bin/incus completion zsh > /opt/incus/share/completions/zsh + mkdir -p /usr/incus/share/completions/ + /usr/incus/bin/incus completion bash > /usr/incus/share/completions/bash + /usr/incus/bin/incus completion fish > /usr/incus/share/completions/fish + /usr/incus/bin/incus completion zsh > /usr/incus/share/completions/zsh - name: Build UI (canonical) run: | @@ -357,19 +374,19 @@ jobs: yarn install yarn build - mkdir -p /opt/incus/ui-canonical/ - rsync -a /build/incus-ui-canonical/build/ui/ /opt/incus/ui-canonical/ + mkdir -p /usr/incus/ui-canonical/ + rsync -a /build/incus-ui-canonical/build/ui/ /usr/incus/ui-canonical/ - name: Build Distrobuilder run: | cd /build/distrobuilder - go build -o "/opt/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder + go build -o "/usr/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder - name: Build CRIU run: | cd /build/criu make WERROR=0 - cp criu/criu /opt/incus/bin/ + cp criu/criu /usr/incus/bin/ - name: Build libnvidia-container run: | @@ -382,21 +399,21 @@ jobs: mkdir /build/target/libnvidia-container DESTDIR=/build/target/libnvidia-container make install prefix=/ - rsync -a /build/target/libnvidia-container/bin/ /opt/incus/bin/ - rsync -a /build/target/libnvidia-container/include/ /opt/incus/include/ - rsync -a /build/target/libnvidia-container/lib/ /opt/incus/lib/ + rsync -a /build/target/libnvidia-container/bin/ /usr/incus/bin/ + rsync -a /build/target/libnvidia-container/include/ /usr/incus/include/ + rsync -a /build/target/libnvidia-container/lib/ /usr/incus/lib/ - name: Build minio run: | cd /build/minio make build - cp minio /opt/incus/bin/ + cp minio /usr/incus/bin/ - name: Build minio client run: | cd /build/mc make build - cp mc /opt/incus/bin/ + cp mc /usr/incus/bin/ - name: Build seabios if: ${{ matrix.arch == 'amd64' }} @@ -422,8 +439,8 @@ jobs: make oldnoconfig V=1 make V=1 PYTHON=python3 - mkdir -p /opt/incus/share/qemu/ - cp out/bios.bin /opt/incus/share/qemu/seabios.bin + mkdir -p /usr/incus/share/qemu/ + cp out/bios.bin /usr/incus/share/qemu/seabios.bin - name: Build nasm run: | @@ -431,12 +448,12 @@ jobs: cd /build/nasm patch -p1 < "${REPO}/patches/nasm-0000-disable-manpages.patch" - ./configure --prefix=/opt/incus + ./configure --prefix=/usr/incus make mkdir -p /build/target/nasm/ DESTDIR=/build/target/nasm make install - rsync -a /build/target/nasm/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/nasm/usr/incus/bin/ /usr/incus/bin/ - name: Build EDK2 run: | @@ -500,60 +517,60 @@ jobs: fi } - mkdir -p "/opt/incus/share/qemu/" + mkdir -p "/usr/incus/share/qemu/" build_edk2 \ - "/opt/incus/share/qemu/OVMF_CODE.4MB.fd" \ - "/opt/incus/share/qemu/OVMF_VARS.4MB.fd" \ + "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ + "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ -DFD_SIZE_4MB - ln -s OVMF_CODE.4MB.fd /opt/incus/share/qemu/OVMF_CODE.fd - ln -s OVMF_VARS.4MB.fd /opt/incus/share/qemu/OVMF_VARS.fd + ln -s OVMF_CODE.4MB.fd /usr/incus/share/qemu/OVMF_CODE.fd + ln -s OVMF_VARS.4MB.fd /usr/incus/share/qemu/OVMF_VARS.fd - name: Build libtmps run: | cd /build/libtpms ./autogen.sh - ./configure --prefix=/opt/incus --with-tpm2 --with-openssl + ./configure --prefix=/usr/incus --with-tpm2 --with-openssl make mkdir -p /build/target/libtpms/ DESTDIR=/build/target/libtpms make install - rsync -a /build/target/libtpms/opt/incus/include/ /opt/incus/include/ - rsync -a /build/target/libtpms/opt/incus/lib/ /opt/incus/lib/ + rsync -a /build/target/libtpms/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/libtpms/usr/incus/lib/ /usr/incus/lib/ - name: Build swtpm run: | cd /build/swtpm ./autogen.sh - ./configure --prefix=/opt/incus --with-seccomp --with-openssl --without-cuse + ./configure --prefix=/usr/incus --with-seccomp --with-openssl --without-cuse make mkdir -p /build/target/swtpm/ DESTDIR=/build/target/swtpm make install - rsync -a /build/target/swtpm/opt/incus/bin/ /opt/incus/bin/ - rsync -a /build/target/swtpm/opt/incus/include/ /opt/incus/include/ - rsync -a /build/target/swtpm/opt/incus/lib/ /opt/incus/lib/ + rsync -a /build/target/swtpm/usr/incus/bin/ /usr/incus/bin/ + rsync -a /build/target/swtpm/usr/incus/include/ /usr/incus/include/ + rsync -a /build/target/swtpm/usr/incus/lib/ /usr/incus/lib/ - name: Build virtiofsd run: | cd /build/virtiofsd cargo build --release - cp target/release/virtiofsd /opt/incus/bin/ + cp target/release/virtiofsd /usr/incus/bin/ - name: Build lego run: | cd /build/lego - go build -o "/opt/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego + go build -o "/usr/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego - name: Build skopeo run: | cd /build/skopeo - go build -o "/opt/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo + go build -o "/usr/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo - name: Build TrueNAS Incus CTL run: | cd /build/truenas_incus_ctl - go build -o "/opt/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl + go build -o "/usr/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl - name: Build QEMU run: | @@ -565,7 +582,7 @@ jobs: sed -i "/subdir('tests')/d" meson.build ./configure \ - --prefix=/opt/incus \ + --prefix=/usr/incus \ --libexecdir=bin \ --libdir=lib \ --disable-bochs \ @@ -607,14 +624,14 @@ jobs: mkdir /build/target/qemu/ DESTDIR=/build/target/qemu/ make install - rsync -a /build/target/qemu/opt/incus/bin/ /opt/incus/bin/ - rsync -a /build/target/qemu/opt/incus/lib/ /opt/incus/lib/ - rsync -a /build/target/qemu/opt/incus/share/qemu/ /opt/incus/share/qemu/ - cp /build/qemu/pc-bios/kvmvapic.bin /opt/incus/share/qemu/ - cp /build/qemu/pc-bios/vgabios-qxl.bin /opt/incus/share/qemu/ - cp /build/qemu/pc-bios/vgabios-virtio.bin /opt/incus/share/qemu/ - cp /build/qemu/pc-bios/efi-virtio.rom /opt/incus/share/qemu/ - cp /build/qemu/pc-bios/efi-vmxnet3.rom /opt/incus/share/qemu/ + rsync -a /build/target/qemu/usr/incus/bin/ /usr/incus/bin/ + rsync -a /build/target/qemu/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/qemu/usr/incus/share/qemu/ /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/kvmvapic.bin /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-qxl.bin /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-virtio.bin /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-virtio.rom /usr/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-vmxnet3.rom /usr/incus/share/qemu/ - name: Build Secure Boot firmware run: | @@ -631,31 +648,32 @@ jobs: ./edk2-vars-generator -f "${FIRMWARE}" \ -e /build/edk2/Build/*/*/*/EnrollDefaultKeys.efi \ -s /build/edk2/Build/*/*/*/Shell.efi \ - -c "/opt/incus/share/qemu/OVMF_CODE.4MB.fd" \ - -V "/opt/incus/share/qemu/OVMF_VARS.4MB.fd" \ + -c "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ + -V "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ -C "$(cat ${REPO}/zabbly-sb.oem.crt)" \ - -o "/opt/incus/share/qemu/OVMF_VARS.4MB.ms.fd" + -o "/usr/incus/share/qemu/OVMF_VARS.4MB.ms.fd" - name: Strip and cleanup binaries run: | - rm -Rf /opt/incus/lib/debug/ - rm -Rf /opt/incus/include/ - rm -Rf /opt/incus/lib/pkgconfig/ - rm /opt/incus/lib/*.a /opt/incus/lib/*.la /opt/incus/lib/*/*.a /opt/incus/lib/*/*.la - - rm /opt/incus/bin/nasm - rm /opt/incus/bin/ndisasm - rm /opt/incus/bin/qemu-bridge-helper - rm /opt/incus/bin/qemu-edid - rm /opt/incus/bin/qemu-io - rm /opt/incus/bin/qemu-pr-helper - rm /opt/incus/bin/qemu-storage-daemon - rm /opt/incus/bin/swtpm_* - rm /opt/incus/share/qemu/trace-events-all - - strip /opt/incus/agent/*linux* - strip /opt/incus/bin/* - strip /opt/incus/lib/*so* + rm -Rf /usr/incus/lib/debug/ + rm -Rf /usr/incus/include/ + rm -Rf /usr/incus/lib/pkgconfig/ + rm /usr/incus/lib/*.a /usr/incus/lib/*.la /usr/incus/lib/*/*.a /usr/incus/lib/*/*.la + + rm /usr/incus/bin/nasm + rm /usr/incus/bin/ndisasm + rm /usr/incus/bin/qemu-bridge-helper + rm /usr/incus/bin/qemu-edid + rm /usr/incus/bin/qemu-io + rm /usr/incus/bin/qemu-nbd + rm /usr/incus/bin/qemu-pr-helper + rm /usr/incus/bin/qemu-storage-daemon + rm /usr/incus/bin/swtpm_* + rm /usr/incus/share/qemu/trace-events-all + + strip /usr/incus/agent/*linux* + strip /usr/incus/bin/* + strip /usr/incus/lib/*so* - name: Make a Debian package env: @@ -671,7 +689,6 @@ jobs: pkg/ \ pkg/etc \ pkg/lib/systemd/system/ \ - pkg/opt/ \ pkg/usr/bin/ \ pkg/usr/lib/sysctl.d/ \ pkg/usr/share/bash-completion/completions/ \ @@ -680,20 +697,22 @@ jobs: cp -R debian pkg/debian cp -R bin/* pkg/usr/bin/ - cp -R /opt/incus pkg/opt/ + cp -R /usr/incus pkg/usr/ cp -R etc/* pkg/etc/ cp -R systemd/system/* pkg/lib/systemd/system/ - cp -R systemd/wrappers/* pkg/opt/incus/lib/systemd/ + cp -R systemd/wrappers/* pkg/usr/incus/lib/systemd/ cp -R systemd/sysctl.d/* pkg/usr/lib/sysctl.d/ - ln -s /opt/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus - ln -s /opt/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish - ln -s /opt/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus + ln -s /usr/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus + ln -s /usr/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish + ln -s /usr/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus - ln -s /opt/incus/bin/fuidshift pkg/usr/bin/fuidshift - ln -s /opt/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams - ln -s /opt/incus/bin/incus-benchmark pkg/usr/bin/incus-benchmark + ln -s /usr/incus/bin/lxd-to-incus pkg/usr/bin/lxd-to-incus + + ln -s /usr/incus/bin/fuidshift pkg/usr/bin/fuidshift + ln -s /usr/incus/bin/incus-migrate pkg/usr/bin/incus-migrate + ln -s /usr/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams mkdir -p pkg/var/lib/incus chmod 711 pkg/var/lib/incus @@ -702,7 +721,7 @@ jobs: chmod 700 pkg/var/log/incus mkdir -p pkg/usr/share/locale - for i in /opt/incus/share/locale/*.mo; do + for i in /usr/incus/share/locale/*.mo; do LANG=$(echo $i | sed -e "s#.*/locale/##g" -e "s#.mo\$##g") mkdir -p pkg/usr/share/locale/${LANG}/LC_MESSAGES ln -s ${i} pkg/usr/share/locale/${LANG}/LC_MESSAGES/incus.mo @@ -753,3 +772,18 @@ jobs: with: name: ${{ matrix.os }}-${{ matrix.arch }} path: out/* + + - name: Publish to frostyard repo + uses: frostyard/repogen/.github/actions/publish-to-r2@main + with: + r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} + r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} + r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} + gpg-private-key: ${{ secrets.REPOGEN_GPG_KEY }} + r2-bucket: frostyardrepo + purge-cache: "true" + cloudflare-zone: ${{ secrets.CLOUDFLARE_ZONE }} + cloudflare-api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }} + packages-dir: ./out + package-type: deb # or sysext + base-url: https://repository.frostyard.org # required for sysext From 90b9f772ff7a3699b76eeae134a28a09c374e7f3 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Tue, 20 Jan 2026 21:03:24 -0500 Subject: [PATCH 33/41] feat: publish Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 14 ++++++++++++++ .github/workflows/builds.yml | 15 --------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml index 3747c911..44d5adf1 100644 --- a/.github/workflows/builds-docker.yml +++ b/.github/workflows/builds-docker.yml @@ -709,3 +709,17 @@ jobs: with: name: debian-trixie-amd64 path: out/* + - name: Publish to frostyard repo + uses: frostyard/repogen/.github/actions/publish-to-r2@main + with: + r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} + r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} + r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} + gpg-private-key: ${{ secrets.REPOGEN_GPG_KEY }} + r2-bucket: frostyardrepo + purge-cache: "true" + cloudflare-zone: ${{ secrets.CLOUDFLARE_ZONE }} + cloudflare-api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }} + packages-dir: ./out + package-type: deb # or sysext + base-url: https://repository.frostyard.org # required for sysext diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 8b41facb..c9180937 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -772,18 +772,3 @@ jobs: with: name: ${{ matrix.os }}-${{ matrix.arch }} path: out/* - - - name: Publish to frostyard repo - uses: frostyard/repogen/.github/actions/publish-to-r2@main - with: - r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} - r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} - r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} - gpg-private-key: ${{ secrets.REPOGEN_GPG_KEY }} - r2-bucket: frostyardrepo - purge-cache: "true" - cloudflare-zone: ${{ secrets.CLOUDFLARE_ZONE }} - cloudflare-api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }} - packages-dir: ./out - package-type: deb # or sysext - base-url: https://repository.frostyard.org # required for sysext From 3867bfefa000629f3b3a0afded5fa9bf24b73f05 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Tue, 20 Jan 2026 21:38:51 -0500 Subject: [PATCH 34/41] fix: add awscli Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml index 44d5adf1..03566e17 100644 --- a/.github/workflows/builds-docker.yml +++ b/.github/workflows/builds-docker.yml @@ -70,6 +70,7 @@ jobs: asciidoc \ autoconf \ automake \ + awscli \ bison \ bmake \ build-essential \ From f0dd97225b5b5ce1ebf3283ab20952d13bb1c124 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Tue, 20 Jan 2026 22:09:24 -0500 Subject: [PATCH 35/41] fix: add jq Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml index 03566e17..73377b2e 100644 --- a/.github/workflows/builds-docker.yml +++ b/.github/workflows/builds-docker.yml @@ -84,6 +84,7 @@ jobs: gettext \ git \ iproute2 \ + jq \ libacl1-dev \ libaio-dev \ libapparmor-dev \ From 189925e813ab16793aa4b6312979667df4862d03 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Thu, 29 Jan 2026 13:47:23 -0500 Subject: [PATCH 36/41] chore: v6.21 Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 64 ++++++++++++++++++----------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml index 73377b2e..0e6d62fb 100644 --- a/.github/workflows/builds-docker.yml +++ b/.github/workflows/builds-docker.yml @@ -27,11 +27,10 @@ jobs: LD_LIBRARY_PATH: "/usr/incus/lib/" CPATH: "/usr/incus/include/" PATH: "/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" - # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" - INCUS_TAG: "v6.20.0" - INCUS_UI_CANONICAL_TAG: "incus-0.19.0" + INCUS_TAG: "v6.21.0" + INCUS_UI_CANONICAL_TAG: "incus-0.19.2" LXCFS_TAG: "v6.0.5" LXC_TAG: "v6.0.5" @@ -39,14 +38,14 @@ jobs: COWSQL_TAG: "v1.15.9" CRIU_TAG: "v4.2" EDK2_TAG: "edk2-stable202511" - GOLANG_TAG: "go1.25.5" + GOLANG_TAG: "go1.25.6" LEGO_TAG: "v4.31.0" LIBTPMS_TAG: "v0.10.2" LIBURING_TAG: "liburing-2.13" MINIO_MC_TAG: "RELEASE.2025-08-13T08-35-41Z" MINIO_TAG: "RELEASE.2025-10-15T17-29-55Z" NASM_TAG: "nasm-2.16.03" - NVIDIA_CONTAINER_TAG: "v1.18.1" + NVIDIA_CONTAINER_TAG: "v1.18.2" QEMU_TAG: "v10.2.0" RAFT_TAG: "v0.22.1" SEABIOS_TAG: "rel-1.17.0" @@ -293,22 +292,11 @@ jobs: cd /build/incus - git cherry-pick 0b0311794c2750b50e9a0aa598143f547ee5653e # doc/openfga: Improve required config keys - git cherry-pick eafa7db765970d7f09c20474781efed3c63f5446 # incusd/network/ovn: Drop now obsolete DNS check - git cherry-pick 539860ce96195859ffc5d477a701c4d7ce967669 # incusd/storage/truenas: fix SetVolumeQuota issue when growing FS volumes - git cherry-pick eb0b2f5d9b35ecf90d09d63854e80ea8602744a7 # cmd/incus-user: Don't reset setup if user has access - git cherry-pick f95e2af5b76c91caa20c2ecef85df9ff6074d70e # incusd/network/physical: Allow parent re-use for bridges - git cherry-pick 969f32300002fd980992e3b62bedf398bdf7dbe6 # incusd/network/physical: Allow vlan.tagged - git cherry-pick b72643a540172fdb69b97b82dd60740ac06ad890 # incusd/device: Add vlan.tagged to physical NICs - git cherry-pick add134c50d1ab69af063f8c0af4178129f09d51e # incusd/device/nic_physical: Fix internal bridge handling - git cherry-pick 110a5235313c8b415d12aa2d72ece95e70bd574f # doc/network_ovn: Add note about advanced external_interfaces syntax - git cherry-pick 58e7df140e1af36dc6d30abc8578b05889be813b # incusd/instance/drivers: Add size parameter to UpdateBlockSize method - git cherry-pick 06309e0d5fdbc265d7e9a226f773c25d624f654d # incusd/storage/drivers: Export roundAbove function - git cherry-pick 62b535b9c03f9b21c625bd56369a235fa528afbd # incusd/storage/drivers: Add Qcow2Resize and export isQcow2Block function - git cherry-pick ef90f5de6a14ca4ac4eb4e8a3d2929128d84d2e4 # incusd/storage: Add support for resizing qcow2 volumes - git cherry-pick 27870526d1cb69d50b443c8b89187d9a16a30ea7 # Added a few more environment variables. PATHEXT and COMPUTERNAME were needed for 'shutdown.exe'. Meanwhile, I've connected as SYSTEM with PsExec to show the environment variables by default and added them. - git cherry-pick bef2fc76a6f9c070cc07e068c7dd3a205884e3d1 # incusd/instance/drivers: Fix adding disk with a device name longer than 31 bytes - git cherry-pick fe9c020eea99b05ed3eee2a5c50ed124e15df14a # incusd/instance/drivers: Add tests for hashName + git cherry-pick 1c0455c2ca201ec282b504c28096f50cb13a071b # incusd/device/nic: Fix connected logic for non-NIC QEMU devices + git cherry-pick c829eba4b7eec64d3d4f8fdc3d20433b40bb5c8c # doc: Update config + git cherry-pick 945a885af9d3f88c905ad5c5b7af9f1232b69433 # incusd/instance/qmp: Prevent setting link up at initialization + git cherry-pick ee2fc45f2d9300e58d9fb5b378a7f2531034cceb # incusd/instance/qemu: Properly initialize connected status + go build -o "/usr/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/usr/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus @@ -711,17 +699,47 @@ jobs: with: name: debian-trixie-amd64 path: out/* + + release: + runs-on: ubuntu-latest + needs: build-incus + permissions: + contents: write # to create and upload assets to releases + attestations: write # to upload assets attestation for build provenance + id-token: write # grant additional permission to attestation action to mint the OIDC token permission + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: debian-trixie-amd64 + path: ./dist + - name: Publish to frostyard repo uses: frostyard/repogen/.github/actions/publish-to-r2@main with: r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} - gpg-private-key: ${{ secrets.REPOGEN_GPG_KEY }} r2-bucket: frostyardrepo purge-cache: "true" cloudflare-zone: ${{ secrets.CLOUDFLARE_ZONE }} cloudflare-api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }} - packages-dir: ./out + gpg-private-key: ${{ secrets.REPOGEN_GPG_KEY }} + packages-dir: ./dist package-type: deb # or sysext base-url: https://repository.frostyard.org # required for sysext + + - name: Kickoff snosi + if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch) + continue-on-error: true + uses: peter-evans/repository-dispatch@v4 + with: + token: ${{ secrets.ORG_PAT }} + repository: frostyard/snosi + event-type: build From b4baed1ecf108e6f58566c1151f8e8200f11165c Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Thu, 5 Feb 2026 20:27:41 -0500 Subject: [PATCH 37/41] try a .1 patch Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml index 0e6d62fb..f5f977fa 100644 --- a/.github/workflows/builds-docker.yml +++ b/.github/workflows/builds-docker.yml @@ -29,7 +29,7 @@ jobs: PATH: "/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" - INCUS_TAG: "v6.21.0" + INCUS_TAG: "v6.21.1" INCUS_UI_CANONICAL_TAG: "incus-0.19.2" LXCFS_TAG: "v6.0.5" LXC_TAG: "v6.0.5" @@ -296,7 +296,18 @@ jobs: git cherry-pick c829eba4b7eec64d3d4f8fdc3d20433b40bb5c8c # doc: Update config git cherry-pick 945a885af9d3f88c905ad5c5b7af9f1232b69433 # incusd/instance/qmp: Prevent setting link up at initialization git cherry-pick ee2fc45f2d9300e58d9fb5b378a7f2531034cceb # incusd/instance/qemu: Properly initialize connected status - + git cherry-pick 9a7eaf1333fbb902b29a328c02ff54c49e4aa03f # incusd/storage/zfs: Set IncusOS storage usage property + git cherry-pick 0de3f4ed7144299457d1f37589fff90b39d42b16 # Fix typo: Supported cConditions to Supported Conditions + git cherry-pick 5e19938aae0d0790e645d5d97309360342cff6c7 # shared/util: Fix SingleQuote to actually quote + git cherry-pick 4e5af56d1205563f53481d27e3ce0f1eb45e573e # cmd/incus: Fix get-client-certificate ignoring per-remote certs + git cherry-pick 336e9c14a31bb63d49b02ba6085d67c425ea3f83 # incusd/storage/lvm: Move IncusOS check to pool creation + git cherry-pick 4fcdbbc47937a4d5ba08ca7dbf045deabfd47ce6 # incus-migrate: Allow running as non-root + git cherry-pick 7f5bef42bef75c3fe361aa2af69a37a2c52e1c14 # incus-migrate: Add URL imports + git cherry-pick 8d709107af9e4b44e6848fae4c8e2ff0955e7445 # doc: Ignore broken links on Alpine gitlab + git cherry-pick 6da39979ec860ddd42b2d89711dd78c7bec6e286 # doc: Ignore broken links on docbook website + git cherry-pick 2eae0da145a9ff676f24a792b29e862baa086778 # github: Deal with new Github images + git cherry-pick 9bbd1361a80b420ab864b9dcf2d9b8931faed393 # tests: Fix SR-IOV attached key test + git cherry-pick cbeffb008344906e9b17989d1bfde70a110c2f1b # incusd/device/nic_physical: Allow migration of managed devices go build -o "/usr/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift go build -o "/usr/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus From 6d3d1130cda8931e7760e9a01d5c502fca0519a4 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Thu, 5 Feb 2026 20:38:39 -0500 Subject: [PATCH 38/41] fix: tag Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 2 +- .github/workflows/builds.yml | 277 +++++++++++++--------------- 2 files changed, 130 insertions(+), 149 deletions(-) diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml index f5f977fa..f0a912a6 100644 --- a/.github/workflows/builds-docker.yml +++ b/.github/workflows/builds-docker.yml @@ -29,7 +29,7 @@ jobs: PATH: "/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" - INCUS_TAG: "v6.21.1" + INCUS_TAG: "v6.21.0" INCUS_UI_CANONICAL_TAG: "incus-0.19.2" LXCFS_TAG: "v6.0.5" LXC_TAG: "v6.0.5" diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index c9180937..0cf2ddd9 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -39,12 +39,12 @@ jobs: OS_ARCH: ${{ matrix.arch }} OS_NAME: ${{ matrix.os }} HOME: "/root/" - PKG_CONFIG_PATH: "/usr/incus/lib/pkgconfig/" - CGO_LDFLAGS: "-L/usr/incus/lib/" - CGO_CFLAGS: "-I/usr/incus/include/" - LD_LIBRARY_PATH: "/usr/incus/lib/" - CPATH: "/usr/incus/include/" - PATH: "/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" + PKG_CONFIG_PATH: "/opt/incus/lib/pkgconfig/" + CGO_LDFLAGS: "-L/opt/incus/lib/" + CGO_CFLAGS: "-I/opt/incus/include/" + LD_LIBRARY_PATH: "/opt/incus/lib/" + CPATH: "/opt/incus/include/" + PATH: "/opt/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" @@ -184,11 +184,11 @@ jobs: run: | mkdir /build/ mkdir -p \ - /usr/incus/bin/ \ - /usr/incus/include/ \ - /usr/incus/lib/ \ - /usr/incus/lib/systemd \ - /usr/incus/share/ + /opt/incus/bin/ \ + /opt/incus/include/ \ + /opt/incus/lib/ \ + /opt/incus/lib/systemd \ + /opt/incus/share/ - name: Get the code run: | @@ -221,37 +221,37 @@ jobs: - name: Build liburing run: | cd /build/liburing - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/liburing/ DESTDIR=/build/target/liburing make install - rsync -a /build/target/liburing/usr/incus/include/* /usr/incus/include/ - rsync -a /build/target/liburing/usr/incus/lib/* /usr/incus/lib/ + rsync -a /build/target/liburing/opt/incus/include/* /opt/incus/include/ + rsync -a /build/target/liburing/opt/incus/lib/* /opt/incus/lib/ - name: Build raft run: | cd /build/raft autoreconf -i - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/raft/ DESTDIR=/build/target/raft/ make install - rsync -a /build/target/raft/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/raft/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/raft/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/raft/opt/incus/lib/ /opt/incus/lib/ - name: Build cowsql run: | cd /build/cowsql autoreconf -i - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/cowsql/ DESTDIR=/build/target/cowsql/ make install - rsync -a /build/target/cowsql/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/cowsql/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/cowsql/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/cowsql/opt/incus/lib/ /opt/incus/lib/ - name: Build LXC run: | @@ -260,8 +260,8 @@ jobs: cd /build/lxc meson setup build \ - --prefix=/usr/incus \ - --libdir=/usr/incus/lib \ + --prefix=/opt/incus \ + --libdir=/opt/incus/lib \ -Dexamples=false \ -Dman=false \ -Dtools=false \ @@ -276,11 +276,11 @@ jobs: mkdir -p /build/target/lxc/ DESTDIR=/build/target/lxc/ meson install -C build - rsync -a /build/target/lxc/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/lxc/usr/incus/lib/ /usr/incus/lib/ - mkdir -p /usr/incus/share/lxc/config/common.conf.d/ - mkdir -p /usr/incus/share/lxc/hooks/ - cp /build/target/lxc/usr/incus/share/lxc/hooks/nvidia /usr/incus/share/lxc/hooks/ + rsync -a /build/target/lxc/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/lxc/opt/incus/lib/ /opt/incus/lib/ + mkdir -p /opt/incus/share/lxc/config/common.conf.d/ + mkdir -p /opt/incus/share/lxc/hooks/ + cp /build/target/lxc/opt/incus/share/lxc/hooks/nvidia /opt/incus/share/lxc/hooks/ - name: Build LXCFS run: | @@ -288,20 +288,20 @@ jobs: cd /build/lxcfs meson setup build \ - --prefix=/usr/incus \ - --libdir=/usr/incus/lib \ + --prefix=/opt/incus \ + --libdir=/opt/incus/lib \ -Ddocs=false \ -Dtests=false meson compile -C build mkdir -p /build/target/lxcfs/ DESTDIR=/build/target/lxcfs/ meson install -C build - rsync -a /build/target/lxcfs/usr/incus/bin/ /usr/incus/bin/ - rsync -a /build/target/lxcfs/usr/incus/share/ /usr/incus/share/ - rsync -a /build/target/lxcfs/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/lxcfs/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/lxcfs/opt/incus/share/ /opt/incus/share/ + rsync -a /build/target/lxcfs/opt/incus/lib/ /opt/incus/lib/ - sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /usr/incus/share/lxcfs/lxc.mount.hook - patch -p1 /usr/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" + sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /opt/incus/share/lxcfs/lxc.mount.hook + patch -p1 /opt/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" - name: Build Incus run: | @@ -309,57 +309,40 @@ jobs: cd /build/incus - git cherry-pick 0b0311794c2750b50e9a0aa598143f547ee5653e # doc/openfga: Improve required config keys - git cherry-pick eafa7db765970d7f09c20474781efed3c63f5446 # incusd/network/ovn: Drop now obsolete DNS check - git cherry-pick 539860ce96195859ffc5d477a701c4d7ce967669 # incusd/storage/truenas: fix SetVolumeQuota issue when growing FS volumes - git cherry-pick eb0b2f5d9b35ecf90d09d63854e80ea8602744a7 # cmd/incus-user: Don't reset setup if user has access - git cherry-pick f95e2af5b76c91caa20c2ecef85df9ff6074d70e # incusd/network/physical: Allow parent re-use for bridges - git cherry-pick 969f32300002fd980992e3b62bedf398bdf7dbe6 # incusd/network/physical: Allow vlan.tagged - git cherry-pick b72643a540172fdb69b97b82dd60740ac06ad890 # incusd/device: Add vlan.tagged to physical NICs - git cherry-pick add134c50d1ab69af063f8c0af4178129f09d51e # incusd/device/nic_physical: Fix internal bridge handling - git cherry-pick 110a5235313c8b415d12aa2d72ece95e70bd574f # doc/network_ovn: Add note about advanced external_interfaces syntax - git cherry-pick 58e7df140e1af36dc6d30abc8578b05889be813b # incusd/instance/drivers: Add size parameter to UpdateBlockSize method - git cherry-pick 06309e0d5fdbc265d7e9a226f773c25d624f654d # incusd/storage/drivers: Export roundAbove function - git cherry-pick 62b535b9c03f9b21c625bd56369a235fa528afbd # incusd/storage/drivers: Add Qcow2Resize and export isQcow2Block function - git cherry-pick ef90f5de6a14ca4ac4eb4e8a3d2929128d84d2e4 # incusd/storage: Add support for resizing qcow2 volumes - git cherry-pick 27870526d1cb69d50b443c8b89187d9a16a30ea7 # Added a few more environment variables. PATHEXT and COMPUTERNAME were needed for 'shutdown.exe'. Meanwhile, I've connected as SYSTEM with PsExec to show the environment variables by default and added them. - git cherry-pick bef2fc76a6f9c070cc07e068c7dd3a205884e3d1 # incusd/instance/drivers: Fix adding disk with a device name longer than 31 bytes - git cherry-pick fe9c020eea99b05ed3eee2a5c50ed124e15df14a # incusd/instance/drivers: Add tests for hashName - - go build -o "/usr/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift - go build -o "/usr/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus - go build -o "/usr/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark - go build -o "/usr/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate - go build -o "/usr/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams - go build -o "/usr/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user - go build -o "/usr/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd - go build -o "/usr/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus - go build -o "/usr/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus - - mkdir -p /usr/incus/agent + go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift + go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus + go build -o "/opt/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark + go build -o "/opt/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate + go build -o "/opt/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams + go build -o "/opt/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user + go build -o "/opt/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd + go build -o "/opt/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus + go build -o "/opt/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus + + mkdir -p /opt/incus/agent if [ "$(uname -m)" = "x86_64" ]; then - GOARCH=amd64 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=386 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent elif [ "$(uname -m)" = "aarch64" ]; then - GOARCH=arm64 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=arm64 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=arm64 GOOS=darwin CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.macos.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=arm64 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=arm64 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=arm64 GOOS=darwin CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.macos.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent fi make build-mo - mkdir -p /usr/incus/share/locale - cp po/*.mo /usr/incus/share/locale/ + mkdir -p /opt/incus/share/locale + cp po/*.mo /opt/incus/share/locale/ make doc - cp -R doc/html /usr/incus/doc + cp -R doc/html /opt/incus/doc - mkdir -p /usr/incus/share/completions/ - /usr/incus/bin/incus completion bash > /usr/incus/share/completions/bash - /usr/incus/bin/incus completion fish > /usr/incus/share/completions/fish - /usr/incus/bin/incus completion zsh > /usr/incus/share/completions/zsh + mkdir -p /opt/incus/share/completions/ + /opt/incus/bin/incus completion bash > /opt/incus/share/completions/bash + /opt/incus/bin/incus completion fish > /opt/incus/share/completions/fish + /opt/incus/bin/incus completion zsh > /opt/incus/share/completions/zsh - name: Build UI (canonical) run: | @@ -374,19 +357,19 @@ jobs: yarn install yarn build - mkdir -p /usr/incus/ui-canonical/ - rsync -a /build/incus-ui-canonical/build/ui/ /usr/incus/ui-canonical/ + mkdir -p /opt/incus/ui-canonical/ + rsync -a /build/incus-ui-canonical/build/ui/ /opt/incus/ui-canonical/ - name: Build Distrobuilder run: | cd /build/distrobuilder - go build -o "/usr/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder + go build -o "/opt/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder - name: Build CRIU run: | cd /build/criu make WERROR=0 - cp criu/criu /usr/incus/bin/ + cp criu/criu /opt/incus/bin/ - name: Build libnvidia-container run: | @@ -399,21 +382,21 @@ jobs: mkdir /build/target/libnvidia-container DESTDIR=/build/target/libnvidia-container make install prefix=/ - rsync -a /build/target/libnvidia-container/bin/ /usr/incus/bin/ - rsync -a /build/target/libnvidia-container/include/ /usr/incus/include/ - rsync -a /build/target/libnvidia-container/lib/ /usr/incus/lib/ + rsync -a /build/target/libnvidia-container/bin/ /opt/incus/bin/ + rsync -a /build/target/libnvidia-container/include/ /opt/incus/include/ + rsync -a /build/target/libnvidia-container/lib/ /opt/incus/lib/ - name: Build minio run: | cd /build/minio make build - cp minio /usr/incus/bin/ + cp minio /opt/incus/bin/ - name: Build minio client run: | cd /build/mc make build - cp mc /usr/incus/bin/ + cp mc /opt/incus/bin/ - name: Build seabios if: ${{ matrix.arch == 'amd64' }} @@ -439,8 +422,8 @@ jobs: make oldnoconfig V=1 make V=1 PYTHON=python3 - mkdir -p /usr/incus/share/qemu/ - cp out/bios.bin /usr/incus/share/qemu/seabios.bin + mkdir -p /opt/incus/share/qemu/ + cp out/bios.bin /opt/incus/share/qemu/seabios.bin - name: Build nasm run: | @@ -448,12 +431,12 @@ jobs: cd /build/nasm patch -p1 < "${REPO}/patches/nasm-0000-disable-manpages.patch" - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/nasm/ DESTDIR=/build/target/nasm make install - rsync -a /build/target/nasm/usr/incus/bin/ /usr/incus/bin/ + rsync -a /build/target/nasm/opt/incus/bin/ /opt/incus/bin/ - name: Build EDK2 run: | @@ -517,60 +500,60 @@ jobs: fi } - mkdir -p "/usr/incus/share/qemu/" + mkdir -p "/opt/incus/share/qemu/" build_edk2 \ - "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ - "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + "/opt/incus/share/qemu/OVMF_CODE.4MB.fd" \ + "/opt/incus/share/qemu/OVMF_VARS.4MB.fd" \ -DFD_SIZE_4MB - ln -s OVMF_CODE.4MB.fd /usr/incus/share/qemu/OVMF_CODE.fd - ln -s OVMF_VARS.4MB.fd /usr/incus/share/qemu/OVMF_VARS.fd + ln -s OVMF_CODE.4MB.fd /opt/incus/share/qemu/OVMF_CODE.fd + ln -s OVMF_VARS.4MB.fd /opt/incus/share/qemu/OVMF_VARS.fd - name: Build libtmps run: | cd /build/libtpms ./autogen.sh - ./configure --prefix=/usr/incus --with-tpm2 --with-openssl + ./configure --prefix=/opt/incus --with-tpm2 --with-openssl make mkdir -p /build/target/libtpms/ DESTDIR=/build/target/libtpms make install - rsync -a /build/target/libtpms/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/libtpms/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/libtpms/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/libtpms/opt/incus/lib/ /opt/incus/lib/ - name: Build swtpm run: | cd /build/swtpm ./autogen.sh - ./configure --prefix=/usr/incus --with-seccomp --with-openssl --without-cuse + ./configure --prefix=/opt/incus --with-seccomp --with-openssl --without-cuse make mkdir -p /build/target/swtpm/ DESTDIR=/build/target/swtpm make install - rsync -a /build/target/swtpm/usr/incus/bin/ /usr/incus/bin/ - rsync -a /build/target/swtpm/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/swtpm/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/swtpm/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/swtpm/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/swtpm/opt/incus/lib/ /opt/incus/lib/ - name: Build virtiofsd run: | cd /build/virtiofsd cargo build --release - cp target/release/virtiofsd /usr/incus/bin/ + cp target/release/virtiofsd /opt/incus/bin/ - name: Build lego run: | cd /build/lego - go build -o "/usr/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego + go build -o "/opt/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego - name: Build skopeo run: | cd /build/skopeo - go build -o "/usr/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo + go build -o "/opt/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo - name: Build TrueNAS Incus CTL run: | cd /build/truenas_incus_ctl - go build -o "/usr/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl + go build -o "/opt/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl - name: Build QEMU run: | @@ -582,7 +565,7 @@ jobs: sed -i "/subdir('tests')/d" meson.build ./configure \ - --prefix=/usr/incus \ + --prefix=/opt/incus \ --libexecdir=bin \ --libdir=lib \ --disable-bochs \ @@ -624,14 +607,14 @@ jobs: mkdir /build/target/qemu/ DESTDIR=/build/target/qemu/ make install - rsync -a /build/target/qemu/usr/incus/bin/ /usr/incus/bin/ - rsync -a /build/target/qemu/usr/incus/lib/ /usr/incus/lib/ - rsync -a /build/target/qemu/usr/incus/share/qemu/ /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/kvmvapic.bin /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/vgabios-qxl.bin /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/vgabios-virtio.bin /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/efi-virtio.rom /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/efi-vmxnet3.rom /usr/incus/share/qemu/ + rsync -a /build/target/qemu/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/qemu/opt/incus/lib/ /opt/incus/lib/ + rsync -a /build/target/qemu/opt/incus/share/qemu/ /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/kvmvapic.bin /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-qxl.bin /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-virtio.bin /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-virtio.rom /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-vmxnet3.rom /opt/incus/share/qemu/ - name: Build Secure Boot firmware run: | @@ -648,32 +631,31 @@ jobs: ./edk2-vars-generator -f "${FIRMWARE}" \ -e /build/edk2/Build/*/*/*/EnrollDefaultKeys.efi \ -s /build/edk2/Build/*/*/*/Shell.efi \ - -c "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ - -V "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + -c "/opt/incus/share/qemu/OVMF_CODE.4MB.fd" \ + -V "/opt/incus/share/qemu/OVMF_VARS.4MB.fd" \ -C "$(cat ${REPO}/zabbly-sb.oem.crt)" \ - -o "/usr/incus/share/qemu/OVMF_VARS.4MB.ms.fd" + -o "/opt/incus/share/qemu/OVMF_VARS.4MB.ms.fd" - name: Strip and cleanup binaries run: | - rm -Rf /usr/incus/lib/debug/ - rm -Rf /usr/incus/include/ - rm -Rf /usr/incus/lib/pkgconfig/ - rm /usr/incus/lib/*.a /usr/incus/lib/*.la /usr/incus/lib/*/*.a /usr/incus/lib/*/*.la - - rm /usr/incus/bin/nasm - rm /usr/incus/bin/ndisasm - rm /usr/incus/bin/qemu-bridge-helper - rm /usr/incus/bin/qemu-edid - rm /usr/incus/bin/qemu-io - rm /usr/incus/bin/qemu-nbd - rm /usr/incus/bin/qemu-pr-helper - rm /usr/incus/bin/qemu-storage-daemon - rm /usr/incus/bin/swtpm_* - rm /usr/incus/share/qemu/trace-events-all - - strip /usr/incus/agent/*linux* - strip /usr/incus/bin/* - strip /usr/incus/lib/*so* + rm -Rf /opt/incus/lib/debug/ + rm -Rf /opt/incus/include/ + rm -Rf /opt/incus/lib/pkgconfig/ + rm /opt/incus/lib/*.a /opt/incus/lib/*.la /opt/incus/lib/*/*.a /opt/incus/lib/*/*.la + + rm /opt/incus/bin/nasm + rm /opt/incus/bin/ndisasm + rm /opt/incus/bin/qemu-bridge-helper + rm /opt/incus/bin/qemu-edid + rm /opt/incus/bin/qemu-io + rm /opt/incus/bin/qemu-pr-helper + rm /opt/incus/bin/qemu-storage-daemon + rm /opt/incus/bin/swtpm_* + rm /opt/incus/share/qemu/trace-events-all + + strip /opt/incus/agent/*linux* + strip /opt/incus/bin/* + strip /opt/incus/lib/*so* - name: Make a Debian package env: @@ -689,6 +671,7 @@ jobs: pkg/ \ pkg/etc \ pkg/lib/systemd/system/ \ + pkg/opt/ \ pkg/usr/bin/ \ pkg/usr/lib/sysctl.d/ \ pkg/usr/share/bash-completion/completions/ \ @@ -697,22 +680,20 @@ jobs: cp -R debian pkg/debian cp -R bin/* pkg/usr/bin/ - cp -R /usr/incus pkg/usr/ + cp -R /opt/incus pkg/opt/ cp -R etc/* pkg/etc/ cp -R systemd/system/* pkg/lib/systemd/system/ - cp -R systemd/wrappers/* pkg/usr/incus/lib/systemd/ + cp -R systemd/wrappers/* pkg/opt/incus/lib/systemd/ cp -R systemd/sysctl.d/* pkg/usr/lib/sysctl.d/ - ln -s /usr/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus - ln -s /usr/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish - ln -s /usr/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus + ln -s /opt/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus + ln -s /opt/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish + ln -s /opt/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus - ln -s /usr/incus/bin/lxd-to-incus pkg/usr/bin/lxd-to-incus - - ln -s /usr/incus/bin/fuidshift pkg/usr/bin/fuidshift - ln -s /usr/incus/bin/incus-migrate pkg/usr/bin/incus-migrate - ln -s /usr/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams + ln -s /opt/incus/bin/fuidshift pkg/usr/bin/fuidshift + ln -s /opt/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams + ln -s /opt/incus/bin/incus-benchmark pkg/usr/bin/incus-benchmark mkdir -p pkg/var/lib/incus chmod 711 pkg/var/lib/incus @@ -721,7 +702,7 @@ jobs: chmod 700 pkg/var/log/incus mkdir -p pkg/usr/share/locale - for i in /usr/incus/share/locale/*.mo; do + for i in /opt/incus/share/locale/*.mo; do LANG=$(echo $i | sed -e "s#.*/locale/##g" -e "s#.mo\$##g") mkdir -p pkg/usr/share/locale/${LANG}/LC_MESSAGES ln -s ${i} pkg/usr/share/locale/${LANG}/LC_MESSAGES/incus.mo From ba4326759abe95d807f17d556d3810f5a6399f1c Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Thu, 5 Feb 2026 20:48:10 -0500 Subject: [PATCH 39/41] feat: weekly sync Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 1 + .github/workflows/sync-upstream.yml | 43 +++ sync-docker-build.py | 516 ++++++++++++++++++++++++++++ 3 files changed, 560 insertions(+) create mode 100644 .github/workflows/sync-upstream.yml create mode 100755 sync-docker-build.py diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml index f0a912a6..075d563d 100644 --- a/.github/workflows/builds-docker.yml +++ b/.github/workflows/builds-docker.yml @@ -27,6 +27,7 @@ jobs: LD_LIBRARY_PATH: "/usr/incus/lib/" CPATH: "/usr/incus/include/" PATH: "/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" + # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" INCUS_TAG: "v6.21.0" diff --git a/.github/workflows/sync-upstream.yml b/.github/workflows/sync-upstream.yml new file mode 100644 index 00000000..31dd96af --- /dev/null +++ b/.github/workflows/sync-upstream.yml @@ -0,0 +1,43 @@ +name: Sync Upstream +on: + schedule: + - cron: '0 6 * * 1' # Monday 6am UTC + workflow_dispatch: + +permissions: + contents: write + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: stable + fetch-depth: 0 + token: ${{ secrets.ORG_PAT }} + + - name: Configure git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Merge upstream stable + run: | + git remote add upstream https://github.com/zabbly/incus.git + git fetch upstream stable + git merge upstream/stable --no-edit + + - name: Regenerate Docker build workflow + run: python3 sync-docker-build.py + + - name: Commit and push + run: | + git add .github/workflows/builds-docker.yml + if git diff --cached --quiet; then + echo "No changes to commit" + else + git commit -m "chore: sync builds-docker.yml from upstream" + fi + git push diff --git a/sync-docker-build.py b/sync-docker-build.py new file mode 100755 index 00000000..59cf75a4 --- /dev/null +++ b/sync-docker-build.py @@ -0,0 +1,516 @@ +#!/usr/bin/env python3 +""" +Generate builds-docker.yml from builds.yml. + +Transforms the upstream multi-arch matrix build workflow into a single +Debian Trixie amd64 build running in a Docker container on standard +GitHub-hosted runners. + +Run this whenever builds.yml is updated to sync changes: + python3 sync-docker-build.py +""" + +import os +import re +import sys + + +def main(): + base_dir = os.path.dirname(os.path.abspath(__file__)) + src = os.path.join(base_dir, '.github', 'workflows', 'builds.yml') + dst = os.path.join(base_dir, '.github', 'workflows', 'builds-docker.yml') + + with open(src) as f: + src_lines = f.read().splitlines() + + env_lines = extract_env_block(src_lines) + steps = extract_steps(src_lines) + steps = reorder_steps(steps) + + out = generate(env_lines, steps) + + with open(dst, 'w') as f: + f.write('\n'.join(out) + '\n') + + print(f'Generated {os.path.relpath(dst, base_dir)}') + + +# --------------------------------------------------------------------------- +# Parsing +# --------------------------------------------------------------------------- + +def extract_env_block(lines): + """Extract env var lines between 'env:' and 'steps:' in the job.""" + result = [] + in_env = False + for line in lines: + if re.match(r' env:$', line): + in_env = True + continue + if in_env: + if re.match(r' steps:$', line): + break + result.append(line) + return result + + +def extract_steps(lines): + """Extract steps as list of (name, [lines]).""" + steps = [] + in_steps = False + name = None + step_lines = [] + + for line in lines: + if re.match(r' steps:$', line): + in_steps = True + continue + if not in_steps: + continue + + m = re.match(r' - name: (.+)', line) + if m: + if name is not None: + steps.append((name, _strip_trailing_blanks(step_lines))) + name = m.group(1) + step_lines = [line] + elif name is not None: + step_lines.append(line) + + if name is not None: + steps.append((name, _strip_trailing_blanks(step_lines))) + + return steps + + +def reorder_steps(steps): + """Move 'Configure git' after 'Install dependencies' for Docker.""" + names = [n for n, _ in steps] + by_name = {n: l for n, l in steps} + + if 'Configure git' in names and 'Install dependencies' in names: + names.remove('Configure git') + idx = names.index('Install dependencies') + names.insert(idx + 1, 'Configure git') + + return [(n, by_name[n]) for n in names] + + +def _strip_trailing_blanks(lines): + while lines and lines[-1].strip() == '': + lines.pop() + return lines + + +# --------------------------------------------------------------------------- +# Generation +# --------------------------------------------------------------------------- + +def generate(env_lines, steps): + """Generate the full builds-docker.yml content.""" + out = [] + + # Header + out.extend([ + 'name: Build (Docker)', + 'on:', + ' push:', + ' workflow_dispatch:', + '', + 'permissions:', + ' contents: read', + '', + 'concurrency:', + ' group: docker-${{ github.ref }}', + ' cancel-in-progress: true', + '', + 'jobs:', + ' build-incus:', + ' name: Build Incus (Debian Trixie)', + ' runs-on: ubuntu-latest', + ' container:', + ' image: debian:trixie', + '', + ' env:', + ' OS_ARCH: "amd64"', + ' OS_NAME: "debian-13"', + ]) + + # Env vars (skip OS_ARCH/OS_NAME, already hardcoded above) + for line in env_lines: + s = line.strip() + if s.startswith('OS_ARCH:') or s.startswith('OS_NAME:'): + continue + out.append(line) + + # Steps + out.append('') + out.append(' steps:') + + # Checkout + out.extend([ + ' - name: Checkout code', + ' uses: actions/checkout@v4', + '', + ]) + + # Docker-only: Migrate to /usr/incus + out.extend([ + ' - name: Migrate to /usr/incus', + ' run: ./migrate-to-usr-incus.sh', + '', + ]) + + # Process upstream steps + for name, step_lines in steps: + if name == 'Checkout code': + continue + + transformed = transform_step(name, step_lines) + out.extend(transformed) + out.append('') + + # Release job + out.extend(RELEASE_JOB_LINES) + + return out + + +# --------------------------------------------------------------------------- +# Step transformers +# --------------------------------------------------------------------------- + +STEP_TRANSFORMS = {} + + +def transformer(name): + """Decorator to register a step transformer.""" + def decorator(fn): + STEP_TRANSFORMS[name] = fn + return fn + return decorator + + +def transform_step(name, lines): + """Apply transformation for a step, or pass through.""" + # Fix upstream typo + if name == 'Build libtmps': + lines = [l.replace('Build libtmps', 'Build libtpms') if '- name:' in l else l + for l in lines] + name = 'Build libtpms' + + if name in STEP_TRANSFORMS: + return STEP_TRANSFORMS[name](lines) + return lines + + +@transformer('Install dependencies') +def _transform_install_deps(lines): + """Add awscli and jq packages, use --break-system-packages first.""" + result = [] + for line in lines: + result.append(line) + # Insert awscli after automake (alphabetical order) + if re.match(r'\s+automake \\\s*$', line): + indent = line[:len(line) - len(line.lstrip())] + result.append(f'{indent}awscli \\') + # Insert jq after iproute2 + if re.match(r'\s+iproute2 \\\s*$', line): + indent = line[:len(line) - len(line.lstrip())] + result.append(f'{indent}jq \\') + + # Swap pip install order: try --break-system-packages first (Trixie needs it) + final = [] + for line in result: + if re.match(r'\s+pip3 install meson \|\|', line): + indent = line[:len(line) - len(line.lstrip())] + final.append(f'{indent}pip3 install meson --break-system-packages || pip3 install meson') + elif re.match(r'\s+pip3 install tomli \|\|', line): + indent = line[:len(line) - len(line.lstrip())] + final.append(f'{indent}pip3 install tomli --break-system-packages || pip3 install tomli') + else: + final.append(line) + + return final + + +@transformer('Install Node') +def _transform_install_node(lines): + """Simplify for amd64 only (hardcode x64).""" + node_ver = None + for line in lines: + m = re.search(r'nodejs\.org/dist/(v[\d.]+)/', line) + if m: + node_ver = m.group(1) + break + + if not node_ver: + return [l.replace('${NODE_ARCH}', 'x64') for l in lines + if 'OS_ARCH' not in l] + + return [ + ' - name: Install Node', + ' run: |', + ' mkdir /usr/local/node/', + f' curl -sL "https://nodejs.org/dist/{node_ver}/node-{node_ver}-linux-x64.tar.xz" | tar -C /usr/local/node/ -Jx --strip-components=1', + ] + + +@transformer('Build Incus') +def _transform_build_incus(lines): + """Simplify agents for amd64 only, comment out doc build.""" + result = [] + in_arch_if = False + in_x86_block = False + in_aarch64_block = False + + for line in lines: + s = line.strip() + + # Detect arch conditional for agents + if 'if [ "$(uname -m)" = "x86_64" ]; then' in line: + in_arch_if = True + in_x86_block = True + continue + if in_arch_if and 'elif [ "$(uname -m)" = "aarch64" ]; then' in line: + in_x86_block = False + in_aarch64_block = True + continue + if in_arch_if and s == 'fi': + in_arch_if = False + in_x86_block = False + in_aarch64_block = False + continue + + if in_aarch64_block: + continue + + if in_x86_block: + # De-indent by 4 spaces (remove if-body indent) + if line.startswith(' '): + line = ' ' + line[14:] + result.append(line) + continue + + # Comment out doc build + if s == 'make doc': + indent = len(line) - len(line.lstrip()) + result.append(' ' * indent + '#' + s) + continue + if s == 'cp -R doc/html /usr/incus/doc': + indent = len(line) - len(line.lstrip()) + result.append(' ' * indent + '#' + s) + continue + + result.append(line) + + return result + + +@transformer('Build seabios') +def _transform_build_seabios(lines): + """Remove arch condition (always amd64 in Docker).""" + return [l for l in lines + if not (l.strip().startswith('if:') and 'matrix.arch' in l)] + + +@transformer('Build EDK2') +def _transform_build_edk2(lines): + """Remove aarch64 conditional blocks.""" + return _remove_uname_aarch64_blocks(lines) + + +@transformer('Build Secure Boot firmware') +def _transform_build_secure_boot(lines): + """Remove aarch64 firmware detection.""" + return _remove_uname_aarch64_blocks(lines) + + +@transformer('Build QEMU') +def _transform_build_qemu(lines): + """Hardcode x86_64 target.""" + return [l.replace('$(uname -m)-softmmu', 'x86_64-softmmu') for l in lines] + + +@transformer('Make a Debian package') +def _transform_make_debian_package(lines): + """Simplify for Trixie only (no matrix, no PKGOS).""" + result = [] + i = 0 + codename_emitted = False + + while i < len(lines): + line = lines[i] + s = line.strip() + + # Remove the env: PKGOS block (step-level property) + if s == 'env:' and line.startswith(' '): + i += 1 + # Skip env sub-properties + while i < len(lines) and lines[i].startswith(' ') and ':' in lines[i]: + i += 1 + continue + + # Replace codename detection lines ([ "${PKGOS}" = ... ] && CODENAME=...) + if 'PKGOS' in line and '&& CODENAME=' in line: + if not codename_emitted: + result.append(' CODENAME=trixie') + codename_emitted = True + i += 1 + continue + + # First if block: t64 library names for debian-13/ubuntu-24.04 + if ('if [ "${PKGOS}" = "debian-13" ] || [ "${PKGOS}" = "ubuntu-24.04" ]' in line): + i += 1 + # Extract the if-body (trixie-compatible branch) + body = [] + while i < len(lines) and lines[i].strip() not in ('else', 'fi'): + body.append(lines[i]) + i += 1 + # Skip else block + if i < len(lines) and lines[i].strip() == 'else': + i += 1 + while i < len(lines) and lines[i].strip() != 'fi': + i += 1 + # Skip fi + if i < len(lines) and lines[i].strip() == 'fi': + i += 1 + # De-indent body by 2 spaces (if-body -> base level) + for bl in body: + if bl.startswith(' '): + result.append(' ' + bl[12:]) + else: + result.append(bl) + continue + + # Second if block: LIBFUSE3 for debian-13 + if 'if [ "${PKGOS}" = "debian-13" ]; then' in line: + i += 1 + body = [] + while i < len(lines) and lines[i].strip() not in ('else', 'fi'): + body.append(lines[i]) + i += 1 + if i < len(lines) and lines[i].strip() == 'else': + i += 1 + while i < len(lines) and lines[i].strip() != 'fi': + i += 1 + if i < len(lines) and lines[i].strip() == 'fi': + i += 1 + for bl in body: + if bl.startswith(' '): + result.append(' ' + bl[12:]) + else: + result.append(bl) + continue + + # Replace dch version: $(echo ${PKGOS} | sed "s/-//g") -> debian13 + if 'dch --package incus' in line: + line = line.replace( + '$(echo ${PKGOS} | sed "s/-//g")', + 'debian13' + ) + + result.append(line) + i += 1 + + return result + + +@transformer('Upload resulting build') +def _transform_upload(lines): + """Change artifact name, remove continue-on-error.""" + result = [] + for line in lines: + if 'continue-on-error' in line: + continue + if 'name:' in line and ('matrix.os' in line or 'matrix.arch' in line): + indent = line[:len(line) - len(line.lstrip())] + result.append(f'{indent}name: debian-trixie-amd64') + continue + result.append(line) + return result + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _remove_uname_aarch64_blocks(lines): + """Remove if [ "$(uname -m)" = "aarch64" ] ... fi blocks and preceding blank lines.""" + result = [] + skip_depth = 0 + + for line in lines: + s = line.strip() + + if 'if [ "$(uname -m)" = "aarch64" ]' in line: + skip_depth += 1 + # Remove blank line that preceded this block + if result and result[-1].strip() == '': + result.pop() + continue + + if skip_depth > 0: + if s == 'fi': + skip_depth -= 1 + continue + continue + + result.append(line) + + return result + + +# --------------------------------------------------------------------------- +# Release job (Docker-only, hardcoded) +# --------------------------------------------------------------------------- + +RELEASE_JOB_LINES = [ + ' release:', + ' runs-on: ubuntu-latest', + ' needs: build-incus', + ' permissions:', + ' contents: write # to create and upload assets to releases', + ' attestations: write # to upload assets attestation for build provenance', + ' id-token: write # grant additional permission to attestation action to mint the OIDC token permission', + '', + ' steps:', + ' - name: Checkout', + ' uses: actions/checkout@v4', + ' with:', + ' fetch-depth: 0', + '', + ' - name: Download Artifact', + ' uses: actions/download-artifact@v4', + ' with:', + ' name: debian-trixie-amd64', + ' path: ./dist', + '', + ' - name: Publish to frostyard repo', + ' uses: frostyard/repogen/.github/actions/publish-to-r2@main', + ' with:', + ' r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}', + ' r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}', + ' r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}', + ' r2-bucket: frostyardrepo', + ' purge-cache: "true"', + ' cloudflare-zone: ${{ secrets.CLOUDFLARE_ZONE }}', + ' cloudflare-api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }}', + ' gpg-private-key: ${{ secrets.REPOGEN_GPG_KEY }}', + ' packages-dir: ./dist', + ' package-type: deb # or sysext', + ' base-url: https://repository.frostyard.org # required for sysext', + '', + ' - name: Kickoff snosi', + " if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)", + ' continue-on-error: true', + ' uses: peter-evans/repository-dispatch@v4', + ' with:', + ' token: ${{ secrets.ORG_PAT }}', + ' repository: frostyard/snosi', + ' event-type: build', +] + + +if __name__ == '__main__': + main() From fb7388679913b3d6aea41ccaa6346e6ecec6fe44 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Fri, 27 Feb 2026 20:52:15 -0500 Subject: [PATCH 40/41] fix: docker build Signed-off-by: Brian Ketelsen --- .github/workflows/builds-docker.yml | 293 +++++++++++++--------------- 1 file changed, 138 insertions(+), 155 deletions(-) diff --git a/.github/workflows/builds-docker.yml b/.github/workflows/builds-docker.yml index 075d563d..80192147 100644 --- a/.github/workflows/builds-docker.yml +++ b/.github/workflows/builds-docker.yml @@ -21,36 +21,36 @@ jobs: OS_ARCH: "amd64" OS_NAME: "debian-13" HOME: "/root/" - PKG_CONFIG_PATH: "/usr/incus/lib/pkgconfig/" - CGO_LDFLAGS: "-L/usr/incus/lib/" - CGO_CFLAGS: "-I/usr/incus/include/" - LD_LIBRARY_PATH: "/usr/incus/lib/" - CPATH: "/usr/incus/include/" - PATH: "/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" + PKG_CONFIG_PATH: "/opt/incus/lib/pkgconfig/" + CGO_LDFLAGS: "-L/opt/incus/lib/" + CGO_CFLAGS: "-I/opt/incus/include/" + LD_LIBRARY_PATH: "/opt/incus/lib/" + CPATH: "/opt/incus/include/" + PATH: "/opt/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" - INCUS_TAG: "v6.21.0" - INCUS_UI_CANONICAL_TAG: "incus-0.19.2" - LXCFS_TAG: "v6.0.5" - LXC_TAG: "v6.0.5" + INCUS_TAG: "v6.22.0" + INCUS_UI_CANONICAL_TAG: "incus-0.19.8" + LXCFS_TAG: "v6.0.6" + LXC_TAG: "v6.0.6" # External dependencies COWSQL_TAG: "v1.15.9" CRIU_TAG: "v4.2" - EDK2_TAG: "edk2-stable202511" - GOLANG_TAG: "go1.25.6" - LEGO_TAG: "v4.31.0" + EDK2_TAG: "edk2-stable202602" + GOLANG_TAG: "go1.26.0" + LEGO_TAG: "v4.32.0" LIBTPMS_TAG: "v0.10.2" - LIBURING_TAG: "liburing-2.13" + LIBURING_TAG: "liburing-2.14" MINIO_MC_TAG: "RELEASE.2025-08-13T08-35-41Z" MINIO_TAG: "RELEASE.2025-10-15T17-29-55Z" NASM_TAG: "nasm-2.16.03" NVIDIA_CONTAINER_TAG: "v1.18.2" - QEMU_TAG: "v10.2.0" + QEMU_TAG: "v10.2.1" RAFT_TAG: "v0.22.1" SEABIOS_TAG: "rel-1.17.0" - SKOPEO_TAG: "v1.21.0" + SKOPEO_TAG: "v1.22.0" SWTPM_TAG: "v0.10.1" TRUENAS_INCUS_CTL_TAG: "v0.7.3" VIRTIOFSD_TAG: "v1.13.3" @@ -168,11 +168,11 @@ jobs: run: | mkdir /build/ mkdir -p \ - /usr/incus/bin/ \ - /usr/incus/include/ \ - /usr/incus/lib/ \ - /usr/incus/lib/systemd \ - /usr/incus/share/ + /opt/incus/bin/ \ + /opt/incus/include/ \ + /opt/incus/lib/ \ + /opt/incus/lib/systemd \ + /opt/incus/share/ - name: Get the code run: | @@ -205,37 +205,37 @@ jobs: - name: Build liburing run: | cd /build/liburing - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/liburing/ DESTDIR=/build/target/liburing make install - rsync -a /build/target/liburing/usr/incus/include/* /usr/incus/include/ - rsync -a /build/target/liburing/usr/incus/lib/* /usr/incus/lib/ + rsync -a /build/target/liburing/opt/incus/include/* /opt/incus/include/ + rsync -a /build/target/liburing/opt/incus/lib/* /opt/incus/lib/ - name: Build raft run: | cd /build/raft autoreconf -i - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/raft/ DESTDIR=/build/target/raft/ make install - rsync -a /build/target/raft/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/raft/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/raft/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/raft/opt/incus/lib/ /opt/incus/lib/ - name: Build cowsql run: | cd /build/cowsql autoreconf -i - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/cowsql/ DESTDIR=/build/target/cowsql/ make install - rsync -a /build/target/cowsql/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/cowsql/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/cowsql/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/cowsql/opt/incus/lib/ /opt/incus/lib/ - name: Build LXC run: | @@ -244,8 +244,8 @@ jobs: cd /build/lxc meson setup build \ - --prefix=/usr/incus \ - --libdir=/usr/incus/lib \ + --prefix=/opt/incus \ + --libdir=/opt/incus/lib \ -Dexamples=false \ -Dman=false \ -Dtools=false \ @@ -260,11 +260,11 @@ jobs: mkdir -p /build/target/lxc/ DESTDIR=/build/target/lxc/ meson install -C build - rsync -a /build/target/lxc/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/lxc/usr/incus/lib/ /usr/incus/lib/ - mkdir -p /usr/incus/share/lxc/config/common.conf.d/ - mkdir -p /usr/incus/share/lxc/hooks/ - cp /build/target/lxc/usr/incus/share/lxc/hooks/nvidia /usr/incus/share/lxc/hooks/ + rsync -a /build/target/lxc/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/lxc/opt/incus/lib/ /opt/incus/lib/ + mkdir -p /opt/incus/share/lxc/config/common.conf.d/ + mkdir -p /opt/incus/share/lxc/hooks/ + cp /build/target/lxc/opt/incus/share/lxc/hooks/nvidia /opt/incus/share/lxc/hooks/ - name: Build LXCFS run: | @@ -272,20 +272,20 @@ jobs: cd /build/lxcfs meson setup build \ - --prefix=/usr/incus \ - --libdir=/usr/incus/lib \ + --prefix=/opt/incus \ + --libdir=/opt/incus/lib \ -Ddocs=false \ -Dtests=false meson compile -C build mkdir -p /build/target/lxcfs/ DESTDIR=/build/target/lxcfs/ meson install -C build - rsync -a /build/target/lxcfs/usr/incus/bin/ /usr/incus/bin/ - rsync -a /build/target/lxcfs/usr/incus/share/ /usr/incus/share/ - rsync -a /build/target/lxcfs/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/lxcfs/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/lxcfs/opt/incus/share/ /opt/incus/share/ + rsync -a /build/target/lxcfs/opt/incus/lib/ /opt/incus/lib/ - sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /usr/incus/share/lxcfs/lxc.mount.hook - patch -p1 /usr/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" + sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /opt/incus/share/lxcfs/lxc.mount.hook + patch -p1 /opt/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" - name: Build Incus run: | @@ -293,51 +293,34 @@ jobs: cd /build/incus - git cherry-pick 1c0455c2ca201ec282b504c28096f50cb13a071b # incusd/device/nic: Fix connected logic for non-NIC QEMU devices - git cherry-pick c829eba4b7eec64d3d4f8fdc3d20433b40bb5c8c # doc: Update config - git cherry-pick 945a885af9d3f88c905ad5c5b7af9f1232b69433 # incusd/instance/qmp: Prevent setting link up at initialization - git cherry-pick ee2fc45f2d9300e58d9fb5b378a7f2531034cceb # incusd/instance/qemu: Properly initialize connected status - git cherry-pick 9a7eaf1333fbb902b29a328c02ff54c49e4aa03f # incusd/storage/zfs: Set IncusOS storage usage property - git cherry-pick 0de3f4ed7144299457d1f37589fff90b39d42b16 # Fix typo: Supported cConditions to Supported Conditions - git cherry-pick 5e19938aae0d0790e645d5d97309360342cff6c7 # shared/util: Fix SingleQuote to actually quote - git cherry-pick 4e5af56d1205563f53481d27e3ce0f1eb45e573e # cmd/incus: Fix get-client-certificate ignoring per-remote certs - git cherry-pick 336e9c14a31bb63d49b02ba6085d67c425ea3f83 # incusd/storage/lvm: Move IncusOS check to pool creation - git cherry-pick 4fcdbbc47937a4d5ba08ca7dbf045deabfd47ce6 # incus-migrate: Allow running as non-root - git cherry-pick 7f5bef42bef75c3fe361aa2af69a37a2c52e1c14 # incus-migrate: Add URL imports - git cherry-pick 8d709107af9e4b44e6848fae4c8e2ff0955e7445 # doc: Ignore broken links on Alpine gitlab - git cherry-pick 6da39979ec860ddd42b2d89711dd78c7bec6e286 # doc: Ignore broken links on docbook website - git cherry-pick 2eae0da145a9ff676f24a792b29e862baa086778 # github: Deal with new Github images - git cherry-pick 9bbd1361a80b420ab864b9dcf2d9b8931faed393 # tests: Fix SR-IOV attached key test - git cherry-pick cbeffb008344906e9b17989d1bfde70a110c2f1b # incusd/device/nic_physical: Allow migration of managed devices - - go build -o "/usr/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift - go build -o "/usr/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus - go build -o "/usr/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark - go build -o "/usr/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate - go build -o "/usr/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams - go build -o "/usr/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user - go build -o "/usr/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd - go build -o "/usr/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus - go build -o "/usr/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus - - mkdir -p /usr/incus/agent - GOARCH=amd64 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=386 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift + go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus + go build -o "/opt/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark + go build -o "/opt/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate + go build -o "/opt/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams + go build -o "/opt/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user + go build -o "/opt/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd + go build -o "/opt/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus + go build -o "/opt/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus + + mkdir -p /opt/incus/agent + GOARCH=amd64 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent make build-mo - mkdir -p /usr/incus/share/locale - cp po/*.mo /usr/incus/share/locale/ + mkdir -p /opt/incus/share/locale + cp po/*.mo /opt/incus/share/locale/ #make doc - #cp -R doc/html /usr/incus/doc + cp -R doc/html /opt/incus/doc - mkdir -p /usr/incus/share/completions/ - /usr/incus/bin/incus completion bash > /usr/incus/share/completions/bash - /usr/incus/bin/incus completion fish > /usr/incus/share/completions/fish - /usr/incus/bin/incus completion zsh > /usr/incus/share/completions/zsh + mkdir -p /opt/incus/share/completions/ + /opt/incus/bin/incus completion bash > /opt/incus/share/completions/bash + /opt/incus/bin/incus completion fish > /opt/incus/share/completions/fish + /opt/incus/bin/incus completion zsh > /opt/incus/share/completions/zsh - name: Build UI (canonical) run: | @@ -352,19 +335,19 @@ jobs: yarn install yarn build - mkdir -p /usr/incus/ui-canonical/ - rsync -a /build/incus-ui-canonical/build/ui/ /usr/incus/ui-canonical/ + mkdir -p /opt/incus/ui-canonical/ + rsync -a /build/incus-ui-canonical/build/ui/ /opt/incus/ui-canonical/ - name: Build Distrobuilder run: | cd /build/distrobuilder - go build -o "/usr/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder + go build -o "/opt/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder - name: Build CRIU run: | cd /build/criu make WERROR=0 - cp criu/criu /usr/incus/bin/ + cp criu/criu /opt/incus/bin/ - name: Build libnvidia-container run: | @@ -377,21 +360,21 @@ jobs: mkdir /build/target/libnvidia-container DESTDIR=/build/target/libnvidia-container make install prefix=/ - rsync -a /build/target/libnvidia-container/bin/ /usr/incus/bin/ - rsync -a /build/target/libnvidia-container/include/ /usr/incus/include/ - rsync -a /build/target/libnvidia-container/lib/ /usr/incus/lib/ + rsync -a /build/target/libnvidia-container/bin/ /opt/incus/bin/ + rsync -a /build/target/libnvidia-container/include/ /opt/incus/include/ + rsync -a /build/target/libnvidia-container/lib/ /opt/incus/lib/ - name: Build minio run: | cd /build/minio make build - cp minio /usr/incus/bin/ + cp minio /opt/incus/bin/ - name: Build minio client run: | cd /build/mc make build - cp mc /usr/incus/bin/ + cp mc /opt/incus/bin/ - name: Build seabios run: | @@ -416,8 +399,8 @@ jobs: make oldnoconfig V=1 make V=1 PYTHON=python3 - mkdir -p /usr/incus/share/qemu/ - cp out/bios.bin /usr/incus/share/qemu/seabios.bin + mkdir -p /opt/incus/share/qemu/ + cp out/bios.bin /opt/incus/share/qemu/seabios.bin - name: Build nasm run: | @@ -425,12 +408,12 @@ jobs: cd /build/nasm patch -p1 < "${REPO}/patches/nasm-0000-disable-manpages.patch" - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/nasm/ DESTDIR=/build/target/nasm make install - rsync -a /build/target/nasm/usr/incus/bin/ /usr/incus/bin/ + rsync -a /build/target/nasm/opt/incus/bin/ /opt/incus/bin/ - name: Build EDK2 run: | @@ -447,6 +430,8 @@ jobs: patch -p1 < "${REPO}/patches/edk2-0008-Disable-virtio-keyboard.patch" patch -p1 < "${REPO}/patches/edk2-0009-disable-UEFI-shell-under-SecureBoot.patch" + sed -i "s#02/02/2022#$(date +%m/%d/%Y)#g" OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c + EDK2_ARCH="X64" EDK2_PKG="OvmfPkg/OvmfPkgX64.dsc" EDK2_FV_CODE="OVMF_CODE" @@ -481,60 +466,60 @@ jobs: cp Build/*/*/FV/${EDK2_FV_VARS}.fd "${TARGET_VARS}" } - mkdir -p "/usr/incus/share/qemu/" + mkdir -p "/opt/incus/share/qemu/" build_edk2 \ - "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ - "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + "/opt/incus/share/qemu/OVMF_CODE.4MB.fd" \ + "/opt/incus/share/qemu/OVMF_VARS.4MB.fd" \ -DFD_SIZE_4MB - ln -s OVMF_CODE.4MB.fd /usr/incus/share/qemu/OVMF_CODE.fd - ln -s OVMF_VARS.4MB.fd /usr/incus/share/qemu/OVMF_VARS.fd + ln -s OVMF_CODE.4MB.fd /opt/incus/share/qemu/OVMF_CODE.fd + ln -s OVMF_VARS.4MB.fd /opt/incus/share/qemu/OVMF_VARS.fd - name: Build libtpms run: | cd /build/libtpms ./autogen.sh - ./configure --prefix=/usr/incus --with-tpm2 --with-openssl + ./configure --prefix=/opt/incus --with-tpm2 --with-openssl make mkdir -p /build/target/libtpms/ DESTDIR=/build/target/libtpms make install - rsync -a /build/target/libtpms/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/libtpms/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/libtpms/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/libtpms/opt/incus/lib/ /opt/incus/lib/ - name: Build swtpm run: | cd /build/swtpm ./autogen.sh - ./configure --prefix=/usr/incus --with-seccomp --with-openssl --without-cuse + ./configure --prefix=/opt/incus --with-seccomp --with-openssl --without-cuse make mkdir -p /build/target/swtpm/ DESTDIR=/build/target/swtpm make install - rsync -a /build/target/swtpm/usr/incus/bin/ /usr/incus/bin/ - rsync -a /build/target/swtpm/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/swtpm/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/swtpm/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/swtpm/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/swtpm/opt/incus/lib/ /opt/incus/lib/ - name: Build virtiofsd run: | cd /build/virtiofsd cargo build --release - cp target/release/virtiofsd /usr/incus/bin/ + cp target/release/virtiofsd /opt/incus/bin/ - name: Build lego run: | cd /build/lego - go build -o "/usr/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego + go build -o "/opt/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego - name: Build skopeo run: | cd /build/skopeo - go build -o "/usr/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo + go build -o "/opt/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo - name: Build TrueNAS Incus CTL run: | cd /build/truenas_incus_ctl - go build -o "/usr/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl + go build -o "/opt/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl - name: Build QEMU run: | @@ -546,7 +531,7 @@ jobs: sed -i "/subdir('tests')/d" meson.build ./configure \ - --prefix=/usr/incus \ + --prefix=/opt/incus \ --libexecdir=bin \ --libdir=lib \ --disable-bochs \ @@ -588,14 +573,14 @@ jobs: mkdir /build/target/qemu/ DESTDIR=/build/target/qemu/ make install - rsync -a /build/target/qemu/usr/incus/bin/ /usr/incus/bin/ - rsync -a /build/target/qemu/usr/incus/lib/ /usr/incus/lib/ - rsync -a /build/target/qemu/usr/incus/share/qemu/ /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/kvmvapic.bin /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/vgabios-qxl.bin /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/vgabios-virtio.bin /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/efi-virtio.rom /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/efi-vmxnet3.rom /usr/incus/share/qemu/ + rsync -a /build/target/qemu/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/qemu/opt/incus/lib/ /opt/incus/lib/ + rsync -a /build/target/qemu/opt/incus/share/qemu/ /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/kvmvapic.bin /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-qxl.bin /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-virtio.bin /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-virtio.rom /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-vmxnet3.rom /opt/incus/share/qemu/ - name: Build Secure Boot firmware run: | @@ -609,32 +594,31 @@ jobs: ./edk2-vars-generator -f "${FIRMWARE}" \ -e /build/edk2/Build/*/*/*/EnrollDefaultKeys.efi \ -s /build/edk2/Build/*/*/*/Shell.efi \ - -c "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ - -V "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + -c "/opt/incus/share/qemu/OVMF_CODE.4MB.fd" \ + -V "/opt/incus/share/qemu/OVMF_VARS.4MB.fd" \ -C "$(cat ${REPO}/zabbly-sb.oem.crt)" \ - -o "/usr/incus/share/qemu/OVMF_VARS.4MB.ms.fd" + -o "/opt/incus/share/qemu/OVMF_VARS.4MB.ms.fd" - name: Strip and cleanup binaries run: | - rm -Rf /usr/incus/lib/debug/ - rm -Rf /usr/incus/include/ - rm -Rf /usr/incus/lib/pkgconfig/ - rm /usr/incus/lib/*.a /usr/incus/lib/*.la /usr/incus/lib/*/*.a /usr/incus/lib/*/*.la - - rm /usr/incus/bin/nasm - rm /usr/incus/bin/ndisasm - rm /usr/incus/bin/qemu-bridge-helper - rm /usr/incus/bin/qemu-edid - rm /usr/incus/bin/qemu-io - rm /usr/incus/bin/qemu-nbd - rm /usr/incus/bin/qemu-pr-helper - rm /usr/incus/bin/qemu-storage-daemon - rm /usr/incus/bin/swtpm_* - rm /usr/incus/share/qemu/trace-events-all - - strip /usr/incus/agent/*linux* - strip /usr/incus/bin/* - strip /usr/incus/lib/*so* + rm -Rf /opt/incus/lib/debug/ + rm -Rf /opt/incus/include/ + rm -Rf /opt/incus/lib/pkgconfig/ + rm /opt/incus/lib/*.a /opt/incus/lib/*.la /opt/incus/lib/*/*.a /opt/incus/lib/*/*.la + + rm /opt/incus/bin/nasm + rm /opt/incus/bin/ndisasm + rm /opt/incus/bin/qemu-bridge-helper + rm /opt/incus/bin/qemu-edid + rm /opt/incus/bin/qemu-io + rm /opt/incus/bin/qemu-pr-helper + rm /opt/incus/bin/qemu-storage-daemon + rm /opt/incus/bin/swtpm_* + rm /opt/incus/share/qemu/trace-events-all + + strip /opt/incus/agent/*linux* + strip /opt/incus/bin/* + strip /opt/incus/lib/*so* - name: Make a Debian package run: | @@ -644,6 +628,7 @@ jobs: pkg/ \ pkg/etc \ pkg/lib/systemd/system/ \ + pkg/opt/ \ pkg/usr/bin/ \ pkg/usr/lib/sysctl.d/ \ pkg/usr/share/bash-completion/completions/ \ @@ -652,22 +637,20 @@ jobs: cp -R debian pkg/debian cp -R bin/* pkg/usr/bin/ - cp -R /usr/incus pkg/usr/ + cp -R /opt/incus pkg/opt/ cp -R etc/* pkg/etc/ cp -R systemd/system/* pkg/lib/systemd/system/ - cp -R systemd/wrappers/* pkg/usr/incus/lib/systemd/ + cp -R systemd/wrappers/* pkg/opt/incus/lib/systemd/ cp -R systemd/sysctl.d/* pkg/usr/lib/sysctl.d/ - ln -s /usr/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus - ln -s /usr/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish - ln -s /usr/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus - - ln -s /usr/incus/bin/lxd-to-incus pkg/usr/bin/lxd-to-incus + ln -s /opt/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus + ln -s /opt/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish + ln -s /opt/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus - ln -s /usr/incus/bin/fuidshift pkg/usr/bin/fuidshift - ln -s /usr/incus/bin/incus-migrate pkg/usr/bin/incus-migrate - ln -s /usr/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams + ln -s /opt/incus/bin/fuidshift pkg/usr/bin/fuidshift + ln -s /opt/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams + ln -s /opt/incus/bin/incus-benchmark pkg/usr/bin/incus-benchmark mkdir -p pkg/var/lib/incus chmod 711 pkg/var/lib/incus @@ -676,7 +659,7 @@ jobs: chmod 700 pkg/var/log/incus mkdir -p pkg/usr/share/locale - for i in /usr/incus/share/locale/*.mo; do + for i in /opt/incus/share/locale/*.mo; do LANG=$(echo $i | sed -e "s#.*/locale/##g" -e "s#.mo\$##g") mkdir -p pkg/usr/share/locale/${LANG}/LC_MESSAGES ln -s ${i} pkg/usr/share/locale/${LANG}/LC_MESSAGES/incus.mo From 502cfa7b01d1a265663e38a12ff062c595bbc214 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Fri, 27 Feb 2026 20:59:11 -0500 Subject: [PATCH 41/41] fix: docker build Signed-off-by: Brian Ketelsen --- .github/workflows/builds.yml | 277 ++++++++++++++++------------------- 1 file changed, 129 insertions(+), 148 deletions(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index 21e48dc9..0cf2ddd9 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -39,12 +39,12 @@ jobs: OS_ARCH: ${{ matrix.arch }} OS_NAME: ${{ matrix.os }} HOME: "/root/" - PKG_CONFIG_PATH: "/usr/incus/lib/pkgconfig/" - CGO_LDFLAGS: "-L/usr/incus/lib/" - CGO_CFLAGS: "-I/usr/incus/include/" - LD_LIBRARY_PATH: "/usr/incus/lib/" - CPATH: "/usr/incus/include/" - PATH: "/usr/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" + PKG_CONFIG_PATH: "/opt/incus/lib/pkgconfig/" + CGO_LDFLAGS: "-L/opt/incus/lib/" + CGO_CFLAGS: "-I/opt/incus/include/" + LD_LIBRARY_PATH: "/opt/incus/lib/" + CPATH: "/opt/incus/include/" + PATH: "/opt/incus/bin:/root/.cargo/bin:/usr/local/go/bin:/usr/local/node/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" # Linux Containers projects DISTROBUILDER_TAG: "distrobuilder-3.2" @@ -184,11 +184,11 @@ jobs: run: | mkdir /build/ mkdir -p \ - /usr/incus/bin/ \ - /usr/incus/include/ \ - /usr/incus/lib/ \ - /usr/incus/lib/systemd \ - /usr/incus/share/ + /opt/incus/bin/ \ + /opt/incus/include/ \ + /opt/incus/lib/ \ + /opt/incus/lib/systemd \ + /opt/incus/share/ - name: Get the code run: | @@ -221,37 +221,37 @@ jobs: - name: Build liburing run: | cd /build/liburing - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/liburing/ DESTDIR=/build/target/liburing make install - rsync -a /build/target/liburing/usr/incus/include/* /usr/incus/include/ - rsync -a /build/target/liburing/usr/incus/lib/* /usr/incus/lib/ + rsync -a /build/target/liburing/opt/incus/include/* /opt/incus/include/ + rsync -a /build/target/liburing/opt/incus/lib/* /opt/incus/lib/ - name: Build raft run: | cd /build/raft autoreconf -i - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/raft/ DESTDIR=/build/target/raft/ make install - rsync -a /build/target/raft/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/raft/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/raft/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/raft/opt/incus/lib/ /opt/incus/lib/ - name: Build cowsql run: | cd /build/cowsql autoreconf -i - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/cowsql/ DESTDIR=/build/target/cowsql/ make install - rsync -a /build/target/cowsql/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/cowsql/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/cowsql/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/cowsql/opt/incus/lib/ /opt/incus/lib/ - name: Build LXC run: | @@ -260,8 +260,8 @@ jobs: cd /build/lxc meson setup build \ - --prefix=/usr/incus \ - --libdir=/usr/incus/lib \ + --prefix=/opt/incus \ + --libdir=/opt/incus/lib \ -Dexamples=false \ -Dman=false \ -Dtools=false \ @@ -276,11 +276,11 @@ jobs: mkdir -p /build/target/lxc/ DESTDIR=/build/target/lxc/ meson install -C build - rsync -a /build/target/lxc/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/lxc/usr/incus/lib/ /usr/incus/lib/ - mkdir -p /usr/incus/share/lxc/config/common.conf.d/ - mkdir -p /usr/incus/share/lxc/hooks/ - cp /build/target/lxc/usr/incus/share/lxc/hooks/nvidia /usr/incus/share/lxc/hooks/ + rsync -a /build/target/lxc/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/lxc/opt/incus/lib/ /opt/incus/lib/ + mkdir -p /opt/incus/share/lxc/config/common.conf.d/ + mkdir -p /opt/incus/share/lxc/hooks/ + cp /build/target/lxc/opt/incus/share/lxc/hooks/nvidia /opt/incus/share/lxc/hooks/ - name: Build LXCFS run: | @@ -288,20 +288,20 @@ jobs: cd /build/lxcfs meson setup build \ - --prefix=/usr/incus \ - --libdir=/usr/incus/lib \ + --prefix=/opt/incus \ + --libdir=/opt/incus/lib \ -Ddocs=false \ -Dtests=false meson compile -C build mkdir -p /build/target/lxcfs/ DESTDIR=/build/target/lxcfs/ meson install -C build - rsync -a /build/target/lxcfs/usr/incus/bin/ /usr/incus/bin/ - rsync -a /build/target/lxcfs/usr/incus/share/ /usr/incus/share/ - rsync -a /build/target/lxcfs/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/lxcfs/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/lxcfs/opt/incus/share/ /opt/incus/share/ + rsync -a /build/target/lxcfs/opt/incus/lib/ /opt/incus/lib/ - sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /usr/incus/share/lxcfs/lxc.mount.hook - patch -p1 /usr/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" + sed -i "s#/var/lib/lxcfs#/var/lib/incus-lxcfs#g" /opt/incus/share/lxcfs/lxc.mount.hook + patch -p1 /opt/incus/share/lxcfs/lxc.mount.hook < "${REPO}/patches/lxcfs-0001-hook.patch" - name: Build Incus run: | @@ -309,57 +309,40 @@ jobs: cd /build/incus - git cherry-pick 1c0455c2ca201ec282b504c28096f50cb13a071b # incusd/device/nic: Fix connected logic for non-NIC QEMU devices - git cherry-pick c829eba4b7eec64d3d4f8fdc3d20433b40bb5c8c # doc: Update config - git cherry-pick 945a885af9d3f88c905ad5c5b7af9f1232b69433 # incusd/instance/qmp: Prevent setting link up at initialization - git cherry-pick ee2fc45f2d9300e58d9fb5b378a7f2531034cceb # incusd/instance/qemu: Properly initialize connected status - git cherry-pick 9a7eaf1333fbb902b29a328c02ff54c49e4aa03f # incusd/storage/zfs: Set IncusOS storage usage property - git cherry-pick 0de3f4ed7144299457d1f37589fff90b39d42b16 # Fix typo: Supported cConditions to Supported Conditions - git cherry-pick 5e19938aae0d0790e645d5d97309360342cff6c7 # shared/util: Fix SingleQuote to actually quote - git cherry-pick 4e5af56d1205563f53481d27e3ce0f1eb45e573e # cmd/incus: Fix get-client-certificate ignoring per-remote certs - git cherry-pick 336e9c14a31bb63d49b02ba6085d67c425ea3f83 # incusd/storage/lvm: Move IncusOS check to pool creation - git cherry-pick 4fcdbbc47937a4d5ba08ca7dbf045deabfd47ce6 # incus-migrate: Allow running as non-root - git cherry-pick 7f5bef42bef75c3fe361aa2af69a37a2c52e1c14 # incus-migrate: Add URL imports - git cherry-pick 8d709107af9e4b44e6848fae4c8e2ff0955e7445 # doc: Ignore broken links on Alpine gitlab - git cherry-pick 6da39979ec860ddd42b2d89711dd78c7bec6e286 # doc: Ignore broken links on docbook website - git cherry-pick 2eae0da145a9ff676f24a792b29e862baa086778 # github: Deal with new Github images - git cherry-pick 9bbd1361a80b420ab864b9dcf2d9b8931faed393 # tests: Fix SR-IOV attached key test - git cherry-pick cbeffb008344906e9b17989d1bfde70a110c2f1b # incusd/device/nic_physical: Allow migration of managed devices - - go build -o "/usr/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift - go build -o "/usr/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus - go build -o "/usr/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark - go build -o "/usr/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate - go build -o "/usr/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams - go build -o "/usr/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user - go build -o "/usr/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd - go build -o "/usr/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus - go build -o "/usr/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus - - mkdir -p /usr/incus/agent + go build -o "/opt/incus/bin/fuidshift" github.com/lxc/incus/v6/cmd/fuidshift + go build -o "/opt/incus/bin/incus" github.com/lxc/incus/v6/cmd/incus + go build -o "/opt/incus/bin/incus-benchmark" github.com/lxc/incus/v6/cmd/incus-benchmark + go build -o "/opt/incus/bin/incus-migrate" github.com/lxc/incus/v6/cmd/incus-migrate + go build -o "/opt/incus/bin/incus-simplestreams" github.com/lxc/incus/v6/cmd/incus-simplestreams + go build -o "/opt/incus/bin/incus-user" github.com/lxc/incus/v6/cmd/incus-user + go build -o "/opt/incus/bin/incusd" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/incusd + go build -o "/opt/incus/bin/lxc-to-incus" github.com/lxc/incus/v6/cmd/lxc-to-incus + go build -o "/opt/incus/bin/lxd-to-incus" -tags=libsqlite3 github.com/lxc/incus/v6/cmd/lxd-to-incus + + mkdir -p /opt/incus/agent if [ "$(uname -m)" = "x86_64" ]; then - GOARCH=amd64 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=386 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=386 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.i686" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=amd64 GOOS=darwin CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.macos.x86_64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent elif [ "$(uname -m)" = "aarch64" ]; then - GOARCH=arm64 CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.linux.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=arm64 GOOS=windows CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.windows.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent - GOARCH=arm64 GOOS=darwin CGO_ENABLED=0 go build -o "/usr/incus/agent/incus-agent.macos.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=arm64 CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.linux.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=arm64 GOOS=windows CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.windows.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent + GOARCH=arm64 GOOS=darwin CGO_ENABLED=0 go build -o "/opt/incus/agent/incus-agent.macos.aarch64" -tags=agent,netgo github.com/lxc/incus/v6/cmd/incus-agent fi make build-mo - mkdir -p /usr/incus/share/locale - cp po/*.mo /usr/incus/share/locale/ + mkdir -p /opt/incus/share/locale + cp po/*.mo /opt/incus/share/locale/ make doc - cp -R doc/html /usr/incus/doc + cp -R doc/html /opt/incus/doc - mkdir -p /usr/incus/share/completions/ - /usr/incus/bin/incus completion bash > /usr/incus/share/completions/bash - /usr/incus/bin/incus completion fish > /usr/incus/share/completions/fish - /usr/incus/bin/incus completion zsh > /usr/incus/share/completions/zsh + mkdir -p /opt/incus/share/completions/ + /opt/incus/bin/incus completion bash > /opt/incus/share/completions/bash + /opt/incus/bin/incus completion fish > /opt/incus/share/completions/fish + /opt/incus/bin/incus completion zsh > /opt/incus/share/completions/zsh - name: Build UI (canonical) run: | @@ -374,19 +357,19 @@ jobs: yarn install yarn build - mkdir -p /usr/incus/ui-canonical/ - rsync -a /build/incus-ui-canonical/build/ui/ /usr/incus/ui-canonical/ + mkdir -p /opt/incus/ui-canonical/ + rsync -a /build/incus-ui-canonical/build/ui/ /opt/incus/ui-canonical/ - name: Build Distrobuilder run: | cd /build/distrobuilder - go build -o "/usr/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder + go build -o "/opt/incus/bin/distrobuilder" github.com/lxc/distrobuilder/distrobuilder - name: Build CRIU run: | cd /build/criu make WERROR=0 - cp criu/criu /usr/incus/bin/ + cp criu/criu /opt/incus/bin/ - name: Build libnvidia-container run: | @@ -399,21 +382,21 @@ jobs: mkdir /build/target/libnvidia-container DESTDIR=/build/target/libnvidia-container make install prefix=/ - rsync -a /build/target/libnvidia-container/bin/ /usr/incus/bin/ - rsync -a /build/target/libnvidia-container/include/ /usr/incus/include/ - rsync -a /build/target/libnvidia-container/lib/ /usr/incus/lib/ + rsync -a /build/target/libnvidia-container/bin/ /opt/incus/bin/ + rsync -a /build/target/libnvidia-container/include/ /opt/incus/include/ + rsync -a /build/target/libnvidia-container/lib/ /opt/incus/lib/ - name: Build minio run: | cd /build/minio make build - cp minio /usr/incus/bin/ + cp minio /opt/incus/bin/ - name: Build minio client run: | cd /build/mc make build - cp mc /usr/incus/bin/ + cp mc /opt/incus/bin/ - name: Build seabios if: ${{ matrix.arch == 'amd64' }} @@ -439,8 +422,8 @@ jobs: make oldnoconfig V=1 make V=1 PYTHON=python3 - mkdir -p /usr/incus/share/qemu/ - cp out/bios.bin /usr/incus/share/qemu/seabios.bin + mkdir -p /opt/incus/share/qemu/ + cp out/bios.bin /opt/incus/share/qemu/seabios.bin - name: Build nasm run: | @@ -448,12 +431,12 @@ jobs: cd /build/nasm patch -p1 < "${REPO}/patches/nasm-0000-disable-manpages.patch" - ./configure --prefix=/usr/incus + ./configure --prefix=/opt/incus make mkdir -p /build/target/nasm/ DESTDIR=/build/target/nasm make install - rsync -a /build/target/nasm/usr/incus/bin/ /usr/incus/bin/ + rsync -a /build/target/nasm/opt/incus/bin/ /opt/incus/bin/ - name: Build EDK2 run: | @@ -517,60 +500,60 @@ jobs: fi } - mkdir -p "/usr/incus/share/qemu/" + mkdir -p "/opt/incus/share/qemu/" build_edk2 \ - "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ - "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + "/opt/incus/share/qemu/OVMF_CODE.4MB.fd" \ + "/opt/incus/share/qemu/OVMF_VARS.4MB.fd" \ -DFD_SIZE_4MB - ln -s OVMF_CODE.4MB.fd /usr/incus/share/qemu/OVMF_CODE.fd - ln -s OVMF_VARS.4MB.fd /usr/incus/share/qemu/OVMF_VARS.fd + ln -s OVMF_CODE.4MB.fd /opt/incus/share/qemu/OVMF_CODE.fd + ln -s OVMF_VARS.4MB.fd /opt/incus/share/qemu/OVMF_VARS.fd - name: Build libtmps run: | cd /build/libtpms ./autogen.sh - ./configure --prefix=/usr/incus --with-tpm2 --with-openssl + ./configure --prefix=/opt/incus --with-tpm2 --with-openssl make mkdir -p /build/target/libtpms/ DESTDIR=/build/target/libtpms make install - rsync -a /build/target/libtpms/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/libtpms/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/libtpms/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/libtpms/opt/incus/lib/ /opt/incus/lib/ - name: Build swtpm run: | cd /build/swtpm ./autogen.sh - ./configure --prefix=/usr/incus --with-seccomp --with-openssl --without-cuse + ./configure --prefix=/opt/incus --with-seccomp --with-openssl --without-cuse make mkdir -p /build/target/swtpm/ DESTDIR=/build/target/swtpm make install - rsync -a /build/target/swtpm/usr/incus/bin/ /usr/incus/bin/ - rsync -a /build/target/swtpm/usr/incus/include/ /usr/incus/include/ - rsync -a /build/target/swtpm/usr/incus/lib/ /usr/incus/lib/ + rsync -a /build/target/swtpm/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/swtpm/opt/incus/include/ /opt/incus/include/ + rsync -a /build/target/swtpm/opt/incus/lib/ /opt/incus/lib/ - name: Build virtiofsd run: | cd /build/virtiofsd cargo build --release - cp target/release/virtiofsd /usr/incus/bin/ + cp target/release/virtiofsd /opt/incus/bin/ - name: Build lego run: | cd /build/lego - go build -o "/usr/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego + go build -o "/opt/incus/bin/lego" github.com/go-acme/lego/v4/cmd/lego - name: Build skopeo run: | cd /build/skopeo - go build -o "/usr/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo + go build -o "/opt/incus/bin/skopeo" github.com/containers/skopeo/cmd/skopeo - name: Build TrueNAS Incus CTL run: | cd /build/truenas_incus_ctl - go build -o "/usr/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl + go build -o "/opt/incus/bin/truenas_incus_ctl" truenas/truenas_incus_ctl - name: Build QEMU run: | @@ -582,7 +565,7 @@ jobs: sed -i "/subdir('tests')/d" meson.build ./configure \ - --prefix=/usr/incus \ + --prefix=/opt/incus \ --libexecdir=bin \ --libdir=lib \ --disable-bochs \ @@ -624,14 +607,14 @@ jobs: mkdir /build/target/qemu/ DESTDIR=/build/target/qemu/ make install - rsync -a /build/target/qemu/usr/incus/bin/ /usr/incus/bin/ - rsync -a /build/target/qemu/usr/incus/lib/ /usr/incus/lib/ - rsync -a /build/target/qemu/usr/incus/share/qemu/ /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/kvmvapic.bin /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/vgabios-qxl.bin /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/vgabios-virtio.bin /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/efi-virtio.rom /usr/incus/share/qemu/ - cp /build/qemu/pc-bios/efi-vmxnet3.rom /usr/incus/share/qemu/ + rsync -a /build/target/qemu/opt/incus/bin/ /opt/incus/bin/ + rsync -a /build/target/qemu/opt/incus/lib/ /opt/incus/lib/ + rsync -a /build/target/qemu/opt/incus/share/qemu/ /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/kvmvapic.bin /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-qxl.bin /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/vgabios-virtio.bin /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-virtio.rom /opt/incus/share/qemu/ + cp /build/qemu/pc-bios/efi-vmxnet3.rom /opt/incus/share/qemu/ - name: Build Secure Boot firmware run: | @@ -648,32 +631,31 @@ jobs: ./edk2-vars-generator -f "${FIRMWARE}" \ -e /build/edk2/Build/*/*/*/EnrollDefaultKeys.efi \ -s /build/edk2/Build/*/*/*/Shell.efi \ - -c "/usr/incus/share/qemu/OVMF_CODE.4MB.fd" \ - -V "/usr/incus/share/qemu/OVMF_VARS.4MB.fd" \ + -c "/opt/incus/share/qemu/OVMF_CODE.4MB.fd" \ + -V "/opt/incus/share/qemu/OVMF_VARS.4MB.fd" \ -C "$(cat ${REPO}/zabbly-sb.oem.crt)" \ - -o "/usr/incus/share/qemu/OVMF_VARS.4MB.ms.fd" + -o "/opt/incus/share/qemu/OVMF_VARS.4MB.ms.fd" - name: Strip and cleanup binaries run: | - rm -Rf /usr/incus/lib/debug/ - rm -Rf /usr/incus/include/ - rm -Rf /usr/incus/lib/pkgconfig/ - rm /usr/incus/lib/*.a /usr/incus/lib/*.la /usr/incus/lib/*/*.a /usr/incus/lib/*/*.la - - rm /usr/incus/bin/nasm - rm /usr/incus/bin/ndisasm - rm /usr/incus/bin/qemu-bridge-helper - rm /usr/incus/bin/qemu-edid - rm /usr/incus/bin/qemu-io - rm /usr/incus/bin/qemu-nbd - rm /usr/incus/bin/qemu-pr-helper - rm /usr/incus/bin/qemu-storage-daemon - rm /usr/incus/bin/swtpm_* - rm /usr/incus/share/qemu/trace-events-all - - strip /usr/incus/agent/*linux* - strip /usr/incus/bin/* - strip /usr/incus/lib/*so* + rm -Rf /opt/incus/lib/debug/ + rm -Rf /opt/incus/include/ + rm -Rf /opt/incus/lib/pkgconfig/ + rm /opt/incus/lib/*.a /opt/incus/lib/*.la /opt/incus/lib/*/*.a /opt/incus/lib/*/*.la + + rm /opt/incus/bin/nasm + rm /opt/incus/bin/ndisasm + rm /opt/incus/bin/qemu-bridge-helper + rm /opt/incus/bin/qemu-edid + rm /opt/incus/bin/qemu-io + rm /opt/incus/bin/qemu-pr-helper + rm /opt/incus/bin/qemu-storage-daemon + rm /opt/incus/bin/swtpm_* + rm /opt/incus/share/qemu/trace-events-all + + strip /opt/incus/agent/*linux* + strip /opt/incus/bin/* + strip /opt/incus/lib/*so* - name: Make a Debian package env: @@ -689,6 +671,7 @@ jobs: pkg/ \ pkg/etc \ pkg/lib/systemd/system/ \ + pkg/opt/ \ pkg/usr/bin/ \ pkg/usr/lib/sysctl.d/ \ pkg/usr/share/bash-completion/completions/ \ @@ -697,22 +680,20 @@ jobs: cp -R debian pkg/debian cp -R bin/* pkg/usr/bin/ - cp -R /usr/incus pkg/usr/ + cp -R /opt/incus pkg/opt/ cp -R etc/* pkg/etc/ cp -R systemd/system/* pkg/lib/systemd/system/ - cp -R systemd/wrappers/* pkg/usr/incus/lib/systemd/ + cp -R systemd/wrappers/* pkg/opt/incus/lib/systemd/ cp -R systemd/sysctl.d/* pkg/usr/lib/sysctl.d/ - ln -s /usr/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus - ln -s /usr/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish - ln -s /usr/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus + ln -s /opt/incus/share/completions/bash pkg/usr/share/bash-completion/completions/incus + ln -s /opt/incus/share/completions/fish pkg/usr/share/fish/vendor_completions.d/incus.fish + ln -s /opt/incus/share/completions/zsh pkg/usr/share/zsh/vendor-completions/_incus - ln -s /usr/incus/bin/lxd-to-incus pkg/usr/bin/lxd-to-incus - - ln -s /usr/incus/bin/fuidshift pkg/usr/bin/fuidshift - ln -s /usr/incus/bin/incus-migrate pkg/usr/bin/incus-migrate - ln -s /usr/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams + ln -s /opt/incus/bin/fuidshift pkg/usr/bin/fuidshift + ln -s /opt/incus/bin/incus-simplestreams pkg/usr/bin/incus-simplestreams + ln -s /opt/incus/bin/incus-benchmark pkg/usr/bin/incus-benchmark mkdir -p pkg/var/lib/incus chmod 711 pkg/var/lib/incus @@ -721,7 +702,7 @@ jobs: chmod 700 pkg/var/log/incus mkdir -p pkg/usr/share/locale - for i in /usr/incus/share/locale/*.mo; do + for i in /opt/incus/share/locale/*.mo; do LANG=$(echo $i | sed -e "s#.*/locale/##g" -e "s#.mo\$##g") mkdir -p pkg/usr/share/locale/${LANG}/LC_MESSAGES ln -s ${i} pkg/usr/share/locale/${LANG}/LC_MESSAGES/incus.mo