feat(amzebs-01): channel → nixos-26.05 [upgrade 6/6 · bump] #111
Labels
No labels
bug
enhancement
in-progress
needs-info
needs-triage
p0
ready-for-agent
ready-for-human
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/nixos#111
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
▶ Hold until [5/6 · verify] is closed. Then arm: relabel
ready-for-agent. Final host.Task: bump
hosts/amzebs-01/channeltonixos-26.05; open PR.26.05 specifics for amzebs-01:
sslCert/sslKeyremoved → migrate tosettings.main.smtpd_tls_chain_filesonly if used (verify; eval flags). Host runs postfix + rspamd.linuxPackages_6_18) self-disables to 6.18, same as nas.25.11.Acceptance: pre-commit eval green against 26.05; PR notes any postfix/rspamd change.
Scope addition: drop promtail on the 26.05 bump
26.05 removed
services.promtail(EOL), so this bump must also drop amzebs-01's./utils/modules/promtailimport (mirror nb/nas: replace with a paused-shipping comment referencing the separate promtail->alloy migration #118). amzebs-01 is a plain promtail client; alloy setup is not in scope here.Full agent brief will be posted when this issue is armed.
Agent Brief
Category: enhancement
Summary: Bump amzebs-01 to nixos-26.05 (6/6 — the final host of the staged fleet upgrade) and fix what 26.05 surfaces. Eval-only gate;
system.stateVersionstays 25.11.Current behavior:
amzebs-01 tracks
https://channels.nixos.org/nixos-25.11. It runs a Laravel stack (nginx + php82-fpm + MySQL/MariaDB), a loopback-only postfix submission relay configured through the pre-26.05services.postfix.{hostname,domain,config}options, rspamd (DKIM + ARC signing + postfix milter), and ships journals via grafana-alloy. It declares nonixpkgs.config.permittedInsecurePackages/allowInsecurePredicate, and every ACME cert uses the HTTP-01 challenge (acmeRoot), not DNS-01.Desired behavior:
amzebs-01 tracks nixos-26.05 and the pre-commit dry-build (eval) is green, with all current runtime behavior preserved. Full build + runtime verification (reboot onto the 6.18 kernel; Laravel/MySQL/mail-filtering checks) is the separate verify job #112 — not this PR.
26.05 changes to handle:
Add a
nixpkgs.config.allowInsecurePredicate(eval-blocking, near-certain). 26.05'smakePythonWriterinterpreter guard is a tautology that force-evaluates the wholepypy2Packagesset — pulled in via theusers-groupsshell-program assertion that evaluatespkgs.fish— tripping the now-insecurepypy2.7-*members (CVE-2025-47273). nb/nas/fw/web-arm all needed this; amzebs-01 will too. It carries no existing insecure allowance, so add a fresh predicate whose only clause is the pypy2.7 prefix (mirror the nb/nas shape, single reason):If 26.05 additionally flags any other amzebs package insecure, fold it into the same predicate (none expected — there's no openssl-1.1.1v/w allowance to migrate here, unlike the other hosts).
Migrate postfix to the 26.05
settingsshape. The RFC-42 postfix rewrite renamedservices.postfix.{hostname,domain,config,masterConfig}underservices.postfix.settings.{main,master}(keys/values unchanged — only the option path moved). amzebs-01 currently setshostname,domain, and aconfig = { … }map. Move them all undersettings.main:hostname → settings.main.myhostname,domain → settings.main.mydomain, and merge theconfigmap intosettings.main. Watch the duplicate: theconfigmap already setsmyhostname, so after folding in the old top-levelhostnamethere must be exactly onesettings.main.myhostname— drop the redundant one.mapFiles."header_checks"stays as-is (it survives on 26.05). The host that already runs postfix on 26.05 (mail) is the reference for the exact shape. Pre-commit eval is the gate.Kernel pin — leave it.
boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.18.22") (lib.mkDefault pkgs.linuxPackages_6_18)self-disables once the channel default reaches ≥6.18.22 (same as nas). It's a correct guard; no edit needed.rspamd 4.0 — don't touch the config. The NixOS option surface amzebs uses (
services.rspamd.enable/extraConfig/postfix.enable) is eval-safe. rspamd-4.0 config semantics (thedkim_signing/arc/milter_headersblocks) are runtime and are verified at #112 — do not edit the rspamd config speculatively here.Acceptance criteria:
hosts/amzebs-01/channel=https://channels.nixos.org/nixos-26.05nixpkgs.config.allowInsecurePredicatepresent, coveringpypy2.7-*(plus anything else 26.05 eval flags)hostname/domain/config→settings.main(exactly onemyhostname);mapFilesintact; no deprecated postfix option remainssystem.stateVersionunchanged (25.11)Closes #111Out of scope (confirmed N/A — don't chase these):
./utils/modules/alloyand has no promtail import. This supersedes the 2026-06-07 comment above — there is nothing to drop.sslCert/sslKey/smtpd_tls_*: N/A — postfix is loopback-only (inet_interfaces = loopback-only, localhost-onlymynetworks), no inbound TLS, no cert options.credentialsFile→environmentFile: N/A — amzebs uses HTTP-01 (acmeRoot) on every cert; no DNS-01credentialsFile(this was web-arm-specific).secret_key: N/A — amzebs has no docker pin, uses MySQL/MariaDB (not postgres), and runs no grafana.rspamd-dkim-keyandmysql-readonly-passwordalready exist; the bump introduces none.🎉 Final host — merge + verify puts the whole fleet on 26.05.