Offline Updates
Chinaski releases are handled as artifacts that travel on removable media inside air-gapped environments: a signed bundle, its signature, and your release public key.
The documented workflow
- On a connected machine — get the newest release bundle (a tar.gz) plus its
.sigsignature file from the release location. Signatures are hex-encoded Ed25519 signatures of the bundle's raw bytes, produced by the release signing tool against a release key. - Transfer both files to the air-gapped machine (USB, one-way copy, whatever your transfer discipline is).
- Run the update script:
bash scripts/apply_update.sh \
--bundle chinaski-<version>.tar.gz \
--sig chinaski-<version>.tar.gz.sig \
--pubkey keys/chinaski_release.pub \
[--prefix /opt/chinaski]The script verifies the Ed25519 signature first (tampered bundles are rejected outright), backs up the current application, then applies the update — keeping the previous version recoverable if something goes wrong afterward.
The on-line variant — never automatic
The application has an update-check capability, but it only ever consults a manifest URL you set explicitly (via the CHINASKI_UPDATE_MANIFEST_URL environment variable) and only when air-gap mode is off. Nothing "phones home" for updates without both being configured. Manifest signatures are verified against the release public key when a key is available.
In-operation notes
- Signature verification is mandatory in the update path — not just a recommendation.
- The release public key the updater uses by default is
keys/chinaski_release.pubin the installation; keep it safe and updated alongside future bundles when the project announces the new keys. - Bundles are founded on the same make-bundle machinery used for first installing offline; the bundle carries the CPAN tarballs, so updating to a newer release works without network access as well.
- Before applying an update on a live system, keep a current backup and note the apply script backs up the previous application automatically — the moment to apply is maintenance window, as with any CMS.