Skip to content

Updates

Snupai edited this page Jun 17, 2026 · 4 revisions

Updates

The project supports signed online and offline updates.

Release Artifacts

Each signed release should provide:

  • multipack-parser-arm64.tar.gz
  • multipack-parser-arm64-manifest.json
  • multipack-parser-arm64-manifest.sig

Online Update Flow

  1. App queries GitHub latest release API.
  2. Finds package + manifest + signature assets.
  3. Verifies manifest signature.
  4. Verifies package SHA-256.
  5. Downloads/copies and installs update.
flowchart TD
    Check["Check Latest Release"] --> Assets["Find Package Manifest Signature"]
    Assets --> VerifySig{"Manifest Signature Valid"}
    VerifySig -- "No" --> FailSig["Stop with Verification Error"]
    VerifySig -- "Yes" --> VerifyHash{"Package SHA256 Matches"}
    VerifyHash -- "No" --> FailHash["Stop with Integrity Error"]
    VerifyHash -- "Yes" --> Install["Install Update"]
Loading

Offline (USB) Update Flow

Put the same three files in:

  • USB root, or
  • updates/ under USB path

The manifest package.file value must match the package filename.

flowchart TD
    Usb["USB Directory"] --> Read["Read Manifest and Signature"]
    Read --> VerifyUsbSig{"Signature Valid"}
    VerifyUsbSig -- "No" --> UsbFail["Reject USB Update"]
    VerifyUsbSig -- "Yes" --> VerifyUsbHash{"SHA256 Valid"}
    VerifyUsbHash -- "No" --> UsbFailHash["Reject Package"]
    VerifyUsbHash -- "Yes" --> Copy["Copy to Cache and Install"]
Loading

Trusted Public Key

The current app embeds the default Ed25519 public key used to verify signed update manifests. Normal ARM64 release bundles and portable .run launchers do not require a separately deployed public key.

Runtime lookup order is:

  1. MULTIPACK_UPDATE_PUBLIC_KEY_PEM
  2. MULTIPACK_UPDATE_PUBLIC_KEY_FILE
  3. update-public-key.pem next to multipack-parser
  4. update-public-key.pem in the current working directory
  5. Embedded public key compiled into src/system/AutoUpdater.cpp

Use file/env overrides only for development, testing, or key rotation.

Signing Setup (Maintainers)

Generate Ed25519 key pair:

openssl genpkey -algorithm Ed25519 -out update-signing-private.pem
openssl pkey -in update-signing-private.pem -pubout -out update-public-key.pem

Set GitHub secret:

  • UPDATE_SIGNING_PRIVATE_KEY_B64 = base64(private key PEM)

The secret is a repository Actions secret. Do not commit or deploy the private key or the base64 secret value.

When rotating keys, update the embedded public key in AutoUpdater.cpp and then rebuild the ARM64 release bundle so future updates can verify the new signatures.

See repository doc docs/UPDATE_SIGNING.md for full release setup.


← Previous: Build and Deploy | Home | Next: XML-RPC API →

Clone this wiki locally