Log
Every release, as it lands.
Releases are published on GitHub. This page reads them live, so a release appears here when it is published, not when this site is next deployed.

Releases
Every release on afterdarksys/blunix, with its files, their sizes, and their sha256 when the release publishes one.
The release table loads from GitHub when JavaScript runs. Without it, read the releases on GitHub.
v0.1.1-rc.2 is the first signed release. v0.1.0 remains an unsigned test release. Check a download before you use it: put it beside the release's SHA256SUMS and run sha256sum -c --ignore-missing SHA256SUMS. On an unsigned release, that proves the bytes match. It does not prove who built them.
What changed
Changes to the service, newest first. Releases are in the table above.
-
: the first signed release
v0.1.1-rc.2 is out, as a pre-release on Debian 13. It was built by the release build server from the signed tag
v0.1.1-rc.2, then itsSHA256SUMSwas signed offline with the release key. It also shipsbuild-provenance.jsonandSOURCES.md. Read how to verify it. -
: the portal is live
The portal at build.blunix.io is open. The API at api.blunix.io answers. The build hosts on blnx.io serve the latest document for each label. Pinned version hosts are not on yet. Sign-in is After Dark Systems SSO. A release build server now builds official images from signed tags. The release signing key is published below. v0.1.1-rc.2 is the first signed release.
Verify a release
A signed release carries SHA256SUMS.asc, a detached signature over SHA256SUMS. Check the signature first, then the files.
- The key. Blunix Release Signing, [email protected]. OpenPGP, ed25519. It expires on 1 October 2028. Download it from blunix.io/keys/blunix-releases.asc. The same file is keys/blunix-releases.asc in the source repository, so you can check one against the other.
- The fingerprint.
62F7 36BE A2AB 2E1F A16D 5138 BCB3 426C 090A DF92. Compare all of it. A short key ID is not enough. - Step 1. Import the key:
curl -fsSLO https://blunix.io/keys/blunix-releases.asc, thengpg --import blunix-releases.asc. - Step 2. Check the signature:
gpg --verify SHA256SUMS.asc SHA256SUMS. It must say the signature is good and name the fingerprint above. Anything else, stop. - Step 3. Check the files:
sha256sum -c --ignore-missing SHA256SUMS. Every file you downloaded must say OK.
v0.1.0 is an unsigned test release, so it has no SHA256SUMS.asc. For it, only step 3 applies. v0.1.1-rc.2 and later carry SHA256SUMS.asc.
Built in one place, signed in another
Official images come from a dedicated build server. Signing happens somewhere else.
- Signed tags only. The build server builds git tags of afterdarksys/blunix that are signed by the pinned release key. An unsigned or lightweight tag is refused.
- Pull only. It checks GitHub every 10 minutes. Nothing on the internet can connect to it, apart from restricted admin access.
- No keys on the build server. It holds no signing key. Its only credential can write to one staging bucket. Builds there expire after 30 days.
- Signed offline. The maintainer pulls a build from staging, checks it, signs
SHA256SUMSwith the release key, and publishes the GitHub release.
The log we are building
GitHub releases are how images ship today. The design adds an append-only Blunix Log on top: one row per version and channel, holding the artifact digest, the signature, and the version it replaces. None of this is running.
-
The log is the source
A publisher appends a row through the API. An ordinary account key cannot. The public page is a rendering of those rows. An old row stays where it was written.
-
The manifest is generated
systemd-sysupdate reads a manifest at the update URL. That file is produced from the current rows for the channel. Nobody edits it by hand.
-
Mirrors are caches
A row can name more than one https mirror, and GitHub release assets are one of them. The machine checks the digest. A mismatch is refused, and the running image stays. The build is on the platform page.
-
The other slot boots
The new image installs beside the one that is running, and the previous slot still boots. That is how the host lands on its feet.
-
A withdrawn version leaves the manifest
Withdrawing appends a row. The old row remains, so you can see that it shipped and that it was pulled. A new boot does not select it.
Config is the other pipe
An image is a release. The build document for one machine is ciphertext on a label, such as https://ada.blnx.io/. Republishing a label changes the next install from it. It does not rewrite a machine that already applied a document.
- Next install. A new publish replaces what the next install from that label will decrypt. The build hosts are live.
- Already installed. Taking a new document on a running machine is the job of the service client, which is designed, not built.
The account that registers a label is on the account page. The routes are on the API page.