Parsing each half back proves each is well-formed; it never proves they belong together. A key from one generation beside a cert from another passes both individual parse checks, gets blessed, and then nginx refuses to start at the exact moment the marker claims first boot succeeded. gen_tls() now extracts the public key from each half and compares them before the swap, and needs_tls() applies the same check to what is already installed, so a mismatched pair that reached disk some other way (an older build, a half-finished manual edit) is repaired instead of quietly breaking nginx. Extraction subsumes parsing, so this replaces the separate -noout parse checks rather than adding to them. Kept deliberately in step with regenerate_tls_cert() in core/archipelago/src/api/rpc/system/handlers.rs, which does the same comparison on the running node after a rename. Test harness: the openssl stub keypair now carries the generation it came from, and STUB_OPENSSL_MISMATCH emits a cert from a different one — the pair that passes both parse checks and still breaks nginx. New case 9 covers both directions: fail closed when the mismatch arises during generation, repair exactly once when found already on disk, and no spin on the run after either. 9/9 passing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Archived ISO build recipes
These scripts built the Archipelago auto-installer ISO (bundled and
unbundled variants). As of v1.7.43-alpha, ISOs are no longer part of the
release deliverable. Releases ship as tarballs consumed by
scripts/self-update.sh on existing nodes.
Archived here rather than deleted so they can be resurrected if ISO distribution is reintroduced.
Contents
build-auto-installer-iso.sh— orchestrator, bundles container images into squashfsbuild-unbundled-iso.sh— thin wrapper that sets BUNDLE_IMAGES=0 and delegatestest-iso-qemu.sh— smoke-tests a built ISO under QEMUscripts/convert-iso-to-disk.sh— converts an ISO to a raw disk imageBUILD-ISO-STATUS.md,ISO-BUILD-CHECKLIST.md— contributor guidesbranding/isohdpfx.bin— isolinux MBR hybrid image.gitea-workflows/build-iso-dev.yml— CI workflow that ran the build+smoke-test
To resurrect
git mv image-recipe/_archived/* image-recipe/(adjust paths back)- Restore
.gitea/workflows/build-iso-dev.yml - Re-add release-process references (see
scripts/create-release.sh,docs/BETA-RELEASE-CHECKLIST.md,docs/hotfix-process.md,README.md).
Why archived
The release flow is simpler and faster as tarball-only:
releases/vX.Y.Z-alpha/archipelago(backend binary)releases/vX.Y.Z-alpha/archipelago-frontend-X.Y.Z-alpha.tar.gz(frontend + AIUI + filebrowser UI assets)releases/manifest.json(pointers + changelog)
Nodes pull these via scripts/self-update.sh from either Gitea mirror.
Filebrowser and AIUI remain bundled inside the frontend tarball and deployed
atomically by self-update.sh.