diff --git a/doc/release-notes/rl-2511.section.md b/doc/release-notes/rl-2511.section.md index a62e6bc0c001..968056e2acb5 100644 --- a/doc/release-notes/rl-2511.section.md +++ b/doc/release-notes/rl-2511.section.md @@ -59,6 +59,13 @@ - `ansible-later` has been removed because it was discontinued by the author. +- `k3s` airgap images passthru attributes have changed: + - `imagesList` was removed + - `airgapImages` was renamed to `airgap-images` + - `airgapImagesAmd64` was renamed to `airgap-images-amd64-tar-zst` + - `airgapImagesArm64` was renamed to `airgap-images-arm64-tar-zst` + - `airgapImagesArm` was renamed to `airgap-images-arm-tar-zst` + - `stalwart-mail` since `0.13.0` "introduces a significant redesign of the MTA’s delivery and queueing subsystem". See [the upgrading announcement for the `0.13.0` release](https://github.com/stalwartlabs/stalwart/blob/89b561b5ca1c5a11f2a768b4a2cfef0f473b7a01/UPGRADING.md#upgrading-from-v012x-and-v011x-to-v013x). - Greetd and its original greeters (`tuigreet`, `gtkgreet`, `qtgreet`, `regreet`, `wlgreet`) were moved from `greetd` namespace to top level (`greetd.tuigreet` -> `tuigreet`, `greetd.greetd` -> `greetd`, etc). The original attrs are available for compatibility as passthrus of `greetd`, but will emit a warning. They will be removed in future releases. diff --git a/nixos/tests/k3s/airgap-images.nix b/nixos/tests/k3s/airgap-images.nix index 84a535feb7fc..79fd2c77025b 100644 --- a/nixos/tests/k3s/airgap-images.nix +++ b/nixos/tests/k3s/airgap-images.nix @@ -22,21 +22,13 @@ import ../make-test-python.nix ( "--disable servicelb" "--disable traefik" ]; - images = [ k3s.airgapImages ]; + images = [ k3s.airgap-images ]; }; }; testScript = '' - import json - - start_all() machine.wait_for_unit("k3s") machine.wait_until_succeeds("journalctl -r --no-pager -u k3s | grep \"Imported images from /var/lib/rancher/k3s/agent/images/\"") - images = json.loads(machine.succeed("crictl img -o json")) - image_names = [i["repoTags"][0] for i in images["images"]] - with open("${k3s.imagesList}") as expected_images: - for line in expected_images: - assert line.rstrip() in image_names, f"The image {line.rstrip()} is not present in the airgap images archive" ''; } ) diff --git a/pkgs/applications/networking/cluster/k3s/1_30/images-versions.json b/pkgs/applications/networking/cluster/k3s/1_30/images-versions.json index c37737fbbfd6..9ec9d1b5d8a2 100644 --- a/pkgs/applications/networking/cluster/k3s/1_30/images-versions.json +++ b/pkgs/applications/networking/cluster/k3s/1_30/images-versions.json @@ -1,18 +1,26 @@ { - "airgap-images-amd64": { + "airgap-images-amd64-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.30.14%2Bk3s2/k3s-airgap-images-amd64.tar.gz", + "sha256": "f98a57f7b25a4537096fbe9755f96cfd05bfe6fc6315f111c0f44e1abf4aad6d" + }, + "airgap-images-amd64-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.30.14%2Bk3s2/k3s-airgap-images-amd64.tar.zst", "sha256": "9bda99cde833c4e13fb4d35fa46fd57d4b1a2eefc33e00fa352ce686c871c842" }, - "airgap-images-arm": { + "airgap-images-arm-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.30.14%2Bk3s2/k3s-airgap-images-arm.tar.gz", + "sha256": "33df3a2b155118198c48e66426a04292a348aa53fef126a3cb8e4fe7aea83ccc" + }, + "airgap-images-arm-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.30.14%2Bk3s2/k3s-airgap-images-arm.tar.zst", "sha256": "d40a78ff14b40547bca6d05db3d7e767b272bb9257628ebd3905d1659bc49bd5" }, - "airgap-images-arm64": { + "airgap-images-arm64-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.30.14%2Bk3s2/k3s-airgap-images-arm64.tar.gz", + "sha256": "bba9c2e417ece797a5ae8bf9346bb35dc8ab163828c801a2cb512d6097610b52" + }, + "airgap-images-arm64-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.30.14%2Bk3s2/k3s-airgap-images-arm64.tar.zst", "sha256": "6561f91f14c8419c9d1c20fb9af7948757d87bd91855b376058d9f2e16010452" - }, - "images-list": { - "url": "https://github.com/k3s-io/k3s/releases/download/v1.30.14%2Bk3s2/k3s-images.txt", - "sha256": "1f87ad26acac5e553279a64942c0e3eeef5c026cc2f82661d358990848672584" } } diff --git a/pkgs/applications/networking/cluster/k3s/1_31/images-versions.json b/pkgs/applications/networking/cluster/k3s/1_31/images-versions.json index 3eb41c7c1b00..8ea08a211171 100644 --- a/pkgs/applications/networking/cluster/k3s/1_31/images-versions.json +++ b/pkgs/applications/networking/cluster/k3s/1_31/images-versions.json @@ -1,18 +1,26 @@ { - "airgap-images-amd64": { + "airgap-images-amd64-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.31.11%2Bk3s1/k3s-airgap-images-amd64.tar.gz", + "sha256": "fa4f87e7e82c0e613f854eedf8f64d2cdabbd127f3ae84707ed1ca59e2137855" + }, + "airgap-images-amd64-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.31.11%2Bk3s1/k3s-airgap-images-amd64.tar.zst", "sha256": "c98ad7590af33ef7e148920eb809dfd0f8145a623fdd8d32c6efeecab6088412" }, - "airgap-images-arm": { + "airgap-images-arm-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.31.11%2Bk3s1/k3s-airgap-images-arm.tar.gz", + "sha256": "0b6009407069fdd684d9627c5fa4bdb31ea4644172f1f429a2cce15d2c18631d" + }, + "airgap-images-arm-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.31.11%2Bk3s1/k3s-airgap-images-arm.tar.zst", "sha256": "c1bd7557836538592dbd59f798e7a4b91d7aef74c8f9f71631060c96a5288dd6" }, - "airgap-images-arm64": { + "airgap-images-arm64-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.31.11%2Bk3s1/k3s-airgap-images-arm64.tar.gz", + "sha256": "6fa41db4ee001c1db8a404dd38f17f2426f27f688f9f7a2a76f4ef336f51c886" + }, + "airgap-images-arm64-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.31.11%2Bk3s1/k3s-airgap-images-arm64.tar.zst", "sha256": "97f0db38f57a2dc63167795620ba34a89348d874ecc91fbf3d8d962dc1392e47" - }, - "images-list": { - "url": "https://github.com/k3s-io/k3s/releases/download/v1.31.11%2Bk3s1/k3s-images.txt", - "sha256": "1f87ad26acac5e553279a64942c0e3eeef5c026cc2f82661d358990848672584" } } diff --git a/pkgs/applications/networking/cluster/k3s/1_32/images-versions.json b/pkgs/applications/networking/cluster/k3s/1_32/images-versions.json index b5c452ddc819..5755fbf56aff 100644 --- a/pkgs/applications/networking/cluster/k3s/1_32/images-versions.json +++ b/pkgs/applications/networking/cluster/k3s/1_32/images-versions.json @@ -1,18 +1,26 @@ { - "airgap-images-amd64": { + "airgap-images-amd64-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.32.7%2Bk3s1/k3s-airgap-images-amd64.tar.gz", + "sha256": "f6a8720aa9bb03d0c8a97a93e994557292f1efba1fa6648cd8a07830622ce748" + }, + "airgap-images-amd64-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.32.7%2Bk3s1/k3s-airgap-images-amd64.tar.zst", "sha256": "965f5767c08cffc96bf0967813e7c3fec4c41309e9952a480f0a50865bebd039" }, - "airgap-images-arm": { + "airgap-images-arm-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.32.7%2Bk3s1/k3s-airgap-images-arm.tar.gz", + "sha256": "9aa6f9f33e58e04fb9d8f9cd5c51dd01c6092d7b5434f84341b2f74bc8de783e" + }, + "airgap-images-arm-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.32.7%2Bk3s1/k3s-airgap-images-arm.tar.zst", "sha256": "57ab9c306cc96f8dd925bc788c80e49c2d13ee7a222a12235fb525529ad25ac0" }, - "airgap-images-arm64": { + "airgap-images-arm64-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.32.7%2Bk3s1/k3s-airgap-images-arm64.tar.gz", + "sha256": "9633b71655ed0f4af556c148f9bf7753221b3c9b42a8d902391187789302adca" + }, + "airgap-images-arm64-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.32.7%2Bk3s1/k3s-airgap-images-arm64.tar.zst", "sha256": "1aa05a55492ba0872fa8a0ff518d6e947869bea32dc2b8e5223bdcf53450c7f9" - }, - "images-list": { - "url": "https://github.com/k3s-io/k3s/releases/download/v1.32.7%2Bk3s1/k3s-images.txt", - "sha256": "e786e9a6f0331a92a2257a12995028761bfee1b5bfaac866025b64162e69bfe0" } } diff --git a/pkgs/applications/networking/cluster/k3s/1_33/images-versions.json b/pkgs/applications/networking/cluster/k3s/1_33/images-versions.json index 6e80722b9f5a..bd07f3e8f7a2 100644 --- a/pkgs/applications/networking/cluster/k3s/1_33/images-versions.json +++ b/pkgs/applications/networking/cluster/k3s/1_33/images-versions.json @@ -1,18 +1,26 @@ { - "airgap-images-amd64": { + "airgap-images-amd64-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.3%2Bk3s1/k3s-airgap-images-amd64.tar.gz", + "sha256": "64690dc963f6cbff8adb175a1bc41e6bf207734a9a214362544a36361a2d8350" + }, + "airgap-images-amd64-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.3%2Bk3s1/k3s-airgap-images-amd64.tar.zst", "sha256": "51b6ddeafa465e542f0707272736100916886dd49abcb1420ee52878dd3638a9" }, - "airgap-images-arm": { + "airgap-images-arm-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.3%2Bk3s1/k3s-airgap-images-arm.tar.gz", + "sha256": "878d17722dd98e7d88de93a83606e0c9b0d7587c7e4a043559b5236a353fb224" + }, + "airgap-images-arm-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.3%2Bk3s1/k3s-airgap-images-arm.tar.zst", "sha256": "339dd2b33b40f03bf95ee2e5dcb8e543ab6852e156cb8aaebe3885717a2966b5" }, - "airgap-images-arm64": { + "airgap-images-arm64-tar-gz": { + "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.3%2Bk3s1/k3s-airgap-images-arm64.tar.gz", + "sha256": "e4ab063deb50241e60218a3a30ce090a5817daa0f38dacd10651e27b2be28b9e" + }, + "airgap-images-arm64-tar-zst": { "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.3%2Bk3s1/k3s-airgap-images-arm64.tar.zst", "sha256": "c12ec7b122f34eb1f89310b05e66b500a2f49522d7cd4ceb3475a675cab6ebc6" - }, - "images-list": { - "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.3%2Bk3s1/k3s-images.txt", - "sha256": "e786e9a6f0331a92a2257a12995028761bfee1b5bfaac866025b64162e69bfe0" } } diff --git a/pkgs/applications/networking/cluster/k3s/builder.nix b/pkgs/applications/networking/cluster/k3s/builder.nix index a165b8f68fb7..d7f98cd7ba93 100644 --- a/pkgs/applications/networking/cluster/k3s/builder.nix +++ b/pkgs/applications/networking/cluster/k3s/builder.nix @@ -130,38 +130,15 @@ let traefikChart = fetchurl chartVersions.traefik; traefik-crdChart = fetchurl chartVersions.traefik-crd; - mutFirstChar = - f: s: - let - firstChar = f (lib.substring 0 1 s); - rest = lib.substring 1 (-1) s; - in - firstChar + rest; - - kebabToCamel = - s: - mutFirstChar lib.toLower (lib.concatMapStrings (mutFirstChar lib.toUpper) (lib.splitString "-" s)); - - # finds the images archive for the desired architecture, throws in case no suitable archive is found - findImagesArchive = - arch: - let - imagesVersionsNames = builtins.attrNames imagesVersions; - in - lib.findFirst ( - n: lib.hasInfix arch n - ) (throw "k3s: no airgap images for ${arch} available") imagesVersionsNames; - # a shortcut that provides the images archive for the host platform. Currently only supports # aarch64 (arm64) and x86_64 (amd64), throws on other architectures. - airgapImages = fetchurl ( - if stdenv.hostPlatform.isAarch64 then - imagesVersions.${findImagesArchive "arm64"} - else if stdenv.hostPlatform.isx86_64 then - imagesVersions.${findImagesArchive "amd64"} - else - throw "k3s: airgap images cannot be found automatically for architecture ${stdenv.hostPlatform.linuxArch}, consider using an image archive with an explicit architecture." - ); + airgap-images = + { + x86_64-linux = fetchurl imagesVersions.airgap-images-amd64-tar-zst; + aarch64-linux = fetchurl imagesVersions.airgap-images-arm64-tar-zst; + } + .${stdenv.hostPlatform.system} + or (throw "k3s: no airgap images available for system ${stdenv.hostPlatform.system}, consider using an image archive with an explicit architecture."); # so, k3s is a complicated thing to package # This derivation attempts to avoid including any random binaries from the @@ -467,7 +444,7 @@ buildGoModule rec { ''; passthru = { - inherit airgapImages; + inherit airgap-images; k3sCNIPlugins = k3sCNIPlugins; k3sContainerd = k3sContainerd; k3sRepo = k3sRepo; @@ -481,10 +458,13 @@ buildGoModule rec { lib.mapAttrs (name: value: nixosTests.k3s.${name}.${k3s_version}) nixosTests.k3s; tests = passthru.mkTests k3sVersion; updateScript = updateScript; + imagesList = throw "k3s.imagesList was removed"; + airgapImages = throw "k3s.airgapImages was renamed to k3s.airgap-images"; + airgapImagesAmd64 = throw "k3s.airgapImagesAmd64 was renamed to k3s.airgap-images-amd64-tar-zst"; + airgapImagesArm64 = throw "k3s.airgapImagesArm64 was renamed to k3s.airgap-images-arm64-tar-zst"; + airgapImagesArm = throw "k3s.airgapImagesArm was renamed to k3s.airgap-images-arm-tar-zst"; } - // (lib.mapAttrs' ( - name: _: lib.nameValuePair (kebabToCamel name) (fetchurl imagesVersions.${name}) - ) imagesVersions); + // (lib.mapAttrs (_: value: fetchurl value) imagesVersions); meta = baseMeta; } diff --git a/pkgs/applications/networking/cluster/k3s/update-script.sh b/pkgs/applications/networking/cluster/k3s/update-script.sh index 0a1d06a656c0..aced5253abf1 100755 --- a/pkgs/applications/networking/cluster/k3s/update-script.sh +++ b/pkgs/applications/networking/cluster/k3s/update-script.sh @@ -83,22 +83,20 @@ mv chart-versions.nix.update chart-versions.nix SHA256_HASHES="\ $($CURL "https://github.com/k3s-io/k3s/releases/download/v${K3S_VERSION}/sha256sum-amd64.txt") $($CURL "https://github.com/k3s-io/k3s/releases/download/v${K3S_VERSION}/sha256sum-arm64.txt") -$($CURL "https://github.com/k3s-io/k3s/releases/download/v${K3S_VERSION}/sha256sum-arm.txt") -$($CURL "https://github.com/k3s-io/k3s/releases/download/v${K3S_VERSION}/k3s-images.txt" | sha256sum | cut -d' ' -f1) k3s-images.txt" +$($CURL "https://github.com/k3s-io/k3s/releases/download/v${K3S_VERSION}/sha256sum-arm.txt")" # Get all airgap images files associated with this release IMAGES_ARCHIVES=$($CURL "https://api.github.com/repos/k3s-io/k3s/releases/tags/v${K3S_VERSION}" | \ - # Filter the assets so that only zstd archives and text files that have "images" in their name remain - jq -r '.assets[] | select(.name | (contains("images") and (endswith(".tar.zst") or endswith("k3s-images.txt")))) | - "\(.name) \(.browser_download_url)"') + # Filter the assets for airgap images archives + jq -r '.assets[] | select(.name | test("^k3s-airgap-images-.*\\.tar\\.")) | "\(.name) \(.browser_download_url)"') # Create a JSON object for each airgap images file and prefetch all download URLs in the process # Combine all JSON objects and write the result to images-versions.json while read -r name url; do # Pick the right hash based on the name sha256=$(grep "$name" <<< "$SHA256_HASHES" | cut -d ' ' -f 1) - # Remove the k3s- prefix and file endings - clean_name=$(sed -e 's/^k3s-//' -e 's/\.tar\.zst//' -e 's/\.txt/-list/' <<< "$name") + # Remove the k3s prefix and replace all dots with hyphens + clean_name=$(sed -e "s/^k3s-//" -e "s/\./-/g" <<< "$name") jq --null-input --arg name "$clean_name" \ --arg url "$url" \ --arg sha256 "$sha256" \