From af6f06905fe4ea9cbf2b628dd630ba3b25eb78b2 Mon Sep 17 00:00:00 2001 From: "Adam C. Stephens" Date: Sun, 2 Mar 2025 14:35:42 +0000 Subject: [PATCH 1/4] incus: 6.9.0 -> 6.10.0 https://discuss.linuxcontainers.org/t/incus-6-10-has-been-released/23077 https://github.com/lxc/incus/releases/tag/v6.10.0 --- ...f3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch | 40 +++++++++++++++ ...ba1b1a28a9e87793af78db5589aef67dd6b9.patch | 49 +++++++++++++++++++ pkgs/by-name/in/incus/package.nix | 11 +++-- 3 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 pkgs/by-name/in/incus/20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch create mode 100644 pkgs/by-name/in/incus/62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch diff --git a/pkgs/by-name/in/incus/20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch b/pkgs/by-name/in/incus/20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch new file mode 100644 index 000000000000..163966f2bad5 --- /dev/null +++ b/pkgs/by-name/in/incus/20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch @@ -0,0 +1,40 @@ +From 20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?St=C3=A9phane=20Graber?= +Date: Sat, 1 Mar 2025 02:31:01 -0500 +Subject: [PATCH] incusd/device/disk: Include cluster name and config path in + RBD string +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Stéphane Graber +--- + internal/server/device/device_utils_disk.go | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/internal/server/device/device_utils_disk.go b/internal/server/device/device_utils_disk.go +index 36ceef93383..2065a29bdbb 100644 +--- a/internal/server/device/device_utils_disk.go ++++ b/internal/server/device/device_utils_disk.go +@@ -63,12 +63,21 @@ func DiskParseRBDFormat(rbd string) (string, string, map[string]string, error) { + + // DiskGetRBDFormat returns a rbd formatted string with the given values. + func DiskGetRBDFormat(clusterName string, userName string, poolName string, volumeName string) string { ++ // Resolve any symlinks to config path. ++ confPath := fmt.Sprintf("/etc/ceph/%s.conf", clusterName) ++ target, err := filepath.EvalSymlinks(confPath) ++ if err == nil { ++ confPath = target ++ } ++ + // Configuration values containing :, @, or = can be escaped with a leading \ character. + // According to https://docs.ceph.com/docs/hammer/rbd/qemu-rbd/#usage + optEscaper := strings.NewReplacer(":", `\:`, "@", `\@`, "=", `\=`) + opts := []string{ + fmt.Sprintf("id=%s", optEscaper.Replace(userName)), + fmt.Sprintf("pool=%s", optEscaper.Replace(poolName)), ++ fmt.Sprintf("cluster=%s", optEscaper.Replace(clusterName)), ++ fmt.Sprintf("conf=%s", optEscaper.Replace(confPath)), + } + + return fmt.Sprintf("%s%s%s/%s%s%s", RBDFormatPrefix, RBDFormatSeparator, optEscaper.Replace(poolName), optEscaper.Replace(volumeName), RBDFormatSeparator, strings.Join(opts, ":")) diff --git a/pkgs/by-name/in/incus/62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch b/pkgs/by-name/in/incus/62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch new file mode 100644 index 000000000000..1e2dd52a6c60 --- /dev/null +++ b/pkgs/by-name/in/incus/62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch @@ -0,0 +1,49 @@ +From 62b7ba1b1a28a9e87793af78db5589aef67dd6b9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?St=C3=A9phane=20Graber?= +Date: Sat, 1 Mar 2025 02:31:49 -0500 +Subject: [PATCH] incusd/instance/qemu: Provide the RBD keyring to QEMU +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Closes #1708 + +Signed-off-by: Stéphane Graber +--- + internal/server/instance/drivers/driver_qemu.go | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/internal/server/instance/drivers/driver_qemu.go b/internal/server/instance/drivers/driver_qemu.go +index 1c7f98b1b9c..7593ba3d36f 100644 +--- a/internal/server/instance/drivers/driver_qemu.go ++++ b/internal/server/instance/drivers/driver_qemu.go +@@ -4226,17 +4226,29 @@ func (d *qemu) addDriveConfig(qemuDev map[string]any, bootIndexes map[string]int + rbdImageName := storageDrivers.CephGetRBDImageName(vol, "", false) + + // Scan & pass through options. ++ clusterName := storageDrivers.CephDefaultCluster ++ userName := storageDrivers.CephDefaultUser ++ + blockDev["pool"] = poolName + blockDev["image"] = rbdImageName + for key, val := range opts { + // We use 'id' where qemu uses 'user'. + if key == "id" { + blockDev["user"] = val ++ userName = val ++ } else if key == "cluster" { ++ clusterName = val + } else { + blockDev[key] = val + } + } + ++ // Parse the secret (QEMU runs unprivileged and can't read the keyring directly). ++ rbdSecret, err = storageDrivers.CephKeyring(clusterName, userName) ++ if err != nil { ++ return nil, err ++ } ++ + // The aio option isn't available when using the rbd driver. + delete(blockDev, "aio") + } diff --git a/pkgs/by-name/in/incus/package.nix b/pkgs/by-name/in/incus/package.nix index 56dc51e57065..d9936676cee3 100644 --- a/pkgs/by-name/in/incus/package.nix +++ b/pkgs/by-name/in/incus/package.nix @@ -1,8 +1,11 @@ import ./generic.nix { - hash = "sha256-bi++GJLLYlX8JZwmxx4S2EGALuwVOGW4G7u2Nv6s26k="; - version = "6.9.0"; - vendorHash = "sha256-aYQOKO5RMPqChV6hXPBfSLKdfCuS+BFVmpakJX7swKg="; - patches = [ ]; + hash = "sha256-na+YkpjymfpXGf6Y27PzlQH/Ol2hE7z9y7vruClUIb4="; + version = "6.10.0"; + vendorHash = "sha256-/8aBG8RiC03+oVI9lgPFwbi3b4juumziXL4WH0k/4PA="; + patches = [ + ./20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch + ./62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch + ]; nixUpdateExtraArgs = [ "--override-filename=pkgs/by-name/in/incus/package.nix" ]; From d7cd4f34717ba1192fb414d5a482ec088c5b7c85 Mon Sep 17 00:00:00 2001 From: "Adam C. Stephens" Date: Sun, 2 Mar 2025 09:53:46 -0500 Subject: [PATCH 2/4] incus-ui-canonical: add updateScript --- pkgs/by-name/in/incus-ui-canonical/package.nix | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/in/incus-ui-canonical/package.nix b/pkgs/by-name/in/incus-ui-canonical/package.nix index c7acf20fece6..6948ef6e3ff2 100644 --- a/pkgs/by-name/in/incus-ui-canonical/package.nix +++ b/pkgs/by-name/in/incus-ui-canonical/package.nix @@ -9,6 +9,7 @@ yarn, nixosTests, git, + nix-update-script, }: let # this rarely changes https://github.com/zabbly/incus/blob/daily/patches/ui-canonical-renames.sed @@ -72,7 +73,16 @@ stdenv.mkDerivation rec { runHook postInstall ''; - passthru.tests.default = nixosTests.incus.ui; + passthru = { + tests.default = nixosTests.incus.ui; + + updateScript = nix-update-script { + extraArgs = [ + "--version-regex" + "incus-([0-9\\.]+)" + ]; + }; + }; meta = { description = "Web user interface for Incus"; From a737e541acae1e0ef527a3dcb79481b3cb94ed01 Mon Sep 17 00:00:00 2001 From: "Adam C. Stephens" Date: Sun, 2 Mar 2025 09:56:18 -0500 Subject: [PATCH 3/4] incus-ui-canonical: 0.14.7 -> 0.15.0 https://github.com/canonical/lxd-ui/releases/tag/0.15 https://github.com/zabbly/incus-ui-canonical/releases/tag/incus-0.15.0 --- pkgs/by-name/in/incus-ui-canonical/package.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/in/incus-ui-canonical/package.nix b/pkgs/by-name/in/incus-ui-canonical/package.nix index 6948ef6e3ff2..7c44b8815fe9 100644 --- a/pkgs/by-name/in/incus-ui-canonical/package.nix +++ b/pkgs/by-name/in/incus-ui-canonical/package.nix @@ -20,18 +20,19 @@ let in stdenv.mkDerivation rec { pname = "incus-ui-canonical"; - version = "0.14.7"; + version = "0.15.0"; src = fetchFromGitHub { owner = "zabbly"; repo = "incus-ui-canonical"; + # only use tags prefixed by incus- they are the tested fork versions tag = "incus-${version}"; - hash = "sha256-O8dXTtpeFs2muwXHuNZsXjr15gWYlPmdjW4aQHwDBpY="; + hash = "sha256-I0t2ShMkc/zYn7I6Vcd9A31ZAscY0D7cWAdF80NwRGg="; }; offlineCache = fetchYarnDeps { yarnLock = "${src}/yarn.lock"; - hash = "sha256-dkATFNjAPhrPbXhcJ/R4eIpcagKEwBSnRfLwqTPIe6c="; + hash = "sha256-O7oEAjmCEmPpsO/rdkZVhUkxhFzhHpPRbmci3yRBA7g="; }; patchPhase = '' From c3b1c33c7fca82d66f9ac1c0f2e60bc0b610473b Mon Sep 17 00:00:00 2001 From: "Adam C. Stephens" Date: Mon, 3 Mar 2025 17:45:10 -0500 Subject: [PATCH 4/4] incus: 6.10.0 -> 6.10.1 https://github.com/lxc/incus/releases/tag/v6.10.1 --- ...f3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch | 40 --------------- ...ba1b1a28a9e87793af78db5589aef67dd6b9.patch | 49 ------------------- pkgs/by-name/in/incus/package.nix | 9 ++-- 3 files changed, 3 insertions(+), 95 deletions(-) delete mode 100644 pkgs/by-name/in/incus/20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch delete mode 100644 pkgs/by-name/in/incus/62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch diff --git a/pkgs/by-name/in/incus/20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch b/pkgs/by-name/in/incus/20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch deleted file mode 100644 index 163966f2bad5..000000000000 --- a/pkgs/by-name/in/incus/20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?St=C3=A9phane=20Graber?= -Date: Sat, 1 Mar 2025 02:31:01 -0500 -Subject: [PATCH] incusd/device/disk: Include cluster name and config path in - RBD string -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Stéphane Graber ---- - internal/server/device/device_utils_disk.go | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/internal/server/device/device_utils_disk.go b/internal/server/device/device_utils_disk.go -index 36ceef93383..2065a29bdbb 100644 ---- a/internal/server/device/device_utils_disk.go -+++ b/internal/server/device/device_utils_disk.go -@@ -63,12 +63,21 @@ func DiskParseRBDFormat(rbd string) (string, string, map[string]string, error) { - - // DiskGetRBDFormat returns a rbd formatted string with the given values. - func DiskGetRBDFormat(clusterName string, userName string, poolName string, volumeName string) string { -+ // Resolve any symlinks to config path. -+ confPath := fmt.Sprintf("/etc/ceph/%s.conf", clusterName) -+ target, err := filepath.EvalSymlinks(confPath) -+ if err == nil { -+ confPath = target -+ } -+ - // Configuration values containing :, @, or = can be escaped with a leading \ character. - // According to https://docs.ceph.com/docs/hammer/rbd/qemu-rbd/#usage - optEscaper := strings.NewReplacer(":", `\:`, "@", `\@`, "=", `\=`) - opts := []string{ - fmt.Sprintf("id=%s", optEscaper.Replace(userName)), - fmt.Sprintf("pool=%s", optEscaper.Replace(poolName)), -+ fmt.Sprintf("cluster=%s", optEscaper.Replace(clusterName)), -+ fmt.Sprintf("conf=%s", optEscaper.Replace(confPath)), - } - - return fmt.Sprintf("%s%s%s/%s%s%s", RBDFormatPrefix, RBDFormatSeparator, optEscaper.Replace(poolName), optEscaper.Replace(volumeName), RBDFormatSeparator, strings.Join(opts, ":")) diff --git a/pkgs/by-name/in/incus/62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch b/pkgs/by-name/in/incus/62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch deleted file mode 100644 index 1e2dd52a6c60..000000000000 --- a/pkgs/by-name/in/incus/62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 62b7ba1b1a28a9e87793af78db5589aef67dd6b9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?St=C3=A9phane=20Graber?= -Date: Sat, 1 Mar 2025 02:31:49 -0500 -Subject: [PATCH] incusd/instance/qemu: Provide the RBD keyring to QEMU -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Closes #1708 - -Signed-off-by: Stéphane Graber ---- - internal/server/instance/drivers/driver_qemu.go | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/internal/server/instance/drivers/driver_qemu.go b/internal/server/instance/drivers/driver_qemu.go -index 1c7f98b1b9c..7593ba3d36f 100644 ---- a/internal/server/instance/drivers/driver_qemu.go -+++ b/internal/server/instance/drivers/driver_qemu.go -@@ -4226,17 +4226,29 @@ func (d *qemu) addDriveConfig(qemuDev map[string]any, bootIndexes map[string]int - rbdImageName := storageDrivers.CephGetRBDImageName(vol, "", false) - - // Scan & pass through options. -+ clusterName := storageDrivers.CephDefaultCluster -+ userName := storageDrivers.CephDefaultUser -+ - blockDev["pool"] = poolName - blockDev["image"] = rbdImageName - for key, val := range opts { - // We use 'id' where qemu uses 'user'. - if key == "id" { - blockDev["user"] = val -+ userName = val -+ } else if key == "cluster" { -+ clusterName = val - } else { - blockDev[key] = val - } - } - -+ // Parse the secret (QEMU runs unprivileged and can't read the keyring directly). -+ rbdSecret, err = storageDrivers.CephKeyring(clusterName, userName) -+ if err != nil { -+ return nil, err -+ } -+ - // The aio option isn't available when using the rbd driver. - delete(blockDev, "aio") - } diff --git a/pkgs/by-name/in/incus/package.nix b/pkgs/by-name/in/incus/package.nix index d9936676cee3..9216562d3a93 100644 --- a/pkgs/by-name/in/incus/package.nix +++ b/pkgs/by-name/in/incus/package.nix @@ -1,11 +1,8 @@ import ./generic.nix { - hash = "sha256-na+YkpjymfpXGf6Y27PzlQH/Ol2hE7z9y7vruClUIb4="; - version = "6.10.0"; + hash = "sha256-uuaJoUrAZ1kSeO2xdXhfdI8Zy4zbA9r1pIhPMqzUios="; + version = "6.10.1"; vendorHash = "sha256-/8aBG8RiC03+oVI9lgPFwbi3b4juumziXL4WH0k/4PA="; - patches = [ - ./20dff3230ea0a1d0a0e26a45c1a4e6c95fb3ada2.patch - ./62b7ba1b1a28a9e87793af78db5589aef67dd6b9.patch - ]; + patches = [ ]; nixUpdateExtraArgs = [ "--override-filename=pkgs/by-name/in/incus/package.nix" ];