pixop-appliance-update

pixop-appliance-update

Unified operator CLI for qualified Prime appliance releases: signed manifests that pin immutable LIVE and Prime transport (pixop/prime-transport) digests, optional host tool bundles bound to signed manifests, and coordinated staging/apply across both stacks via pixop-image-update.

Availability: Confirm on your appliance with command -v pixop-appliance-update and pixop-appliance-update --help. Operators do not type sudo; the CLI self-elevates when access to root-owned updater state requires it. The immutable Stage0 entrypoint is /opt/pixop/bootstrap/bin/pixop-appliance-update; qualified AMIs expose the command through the normal operator PATH.

What this tool updates (and what it does not)

In scopeOut of scope (AMI / QCOW2 lifecycle)
Digest-pinned LIVE and Prime transport containersHost OS packages, kernel, NVIDIA driver
Relocatable host tools under versioned /opt/pixop when a signed manifest includes host_bundlesystemd units outside host-bundle merge rules, /etc/pixop-live operator config
Signed Stage1 updater self-update via the immutable Stage0 bootstrapdnf upgrade or unmanaged platform patching; replacing Stage0 without a new AMI/QCOW2

Prefer pixop-appliance-update when Pixop publishes a coordinated qualified release (manifest + catalog). Use pixop-image-update only for advanced, per-component digest work when you understand Pulse allowlists and restart policy.

Signed releases (operator view)

Pixop publishes Ed25519-signed release manifests and a signed catalog index. Appliances verify signatures fail-closed before staging or apply: no valid trust key and envelope means no work.

ItemLocation
Remote catalog base URL/etc/pixop-live/appliance-release-catalog.url when installed; else PIXOP_APPLIANCE_RELEASE_CATALOG_URL. The baked URL takes precedence over an environment override.
Remote objects{base}/index.json (signed index), {base}/manifests/<release>.json (signed manifests), optional {base}/revocations/index.json (signed revocation registry on commissioned appliances), optional {base}/updater/index.json (signed updater catalog)
Local catalog (fallback)/opt/pixop/share/appliance-release/catalog/*.json
Trust public key/opt/pixop/share/appliance-release/trust/release-signing.pub
Applied provenance/var/lib/pixop-live/appliance-update/applied-release.json

When a remote catalog URL is configured, check, plan, and apply use the signed index for discovery and verify each manifest envelope (Ed25519 + SHA-256 hash from the index). Unsigned remote metadata is never trusted. When no URL is configured, discovery uses the local catalog directory only.

Manifests use schema pixop-appliance-release/v1. Each manifest includes min_appliance_version (AMI semver from bake metadata); plan and apply fail closed when the local appliance is older.

ECR digests in a manifest are checked against Pulse POST /v1/appliance/registry-credentials allowlists before apply and --download-only download paths (plan shows intended digests only; it does not call Pulse or ECR).

Offline or USB delivery: pixop-appliance-update plan <release> --manifest /path/to/signed.json.

Revocation registry (commissioned appliances)

Appliances with channel commissioning (catalog URL + channel marker) also require a signed revocation registry at <catalog>/revocations/index.json. For those systems, plan, apply, and --download-only (including offline --manifest) fail closed when the registry is missing, invalid, replayed, or lists the target release as revoked. check and status show registry metadata; rollback and internal boot-recover do not consult revocation (already-applied releases keep running until you roll back or replace the platform).

Run pixop-appliance-update doctor (read-only) to diagnose catalog URL wiring, trust key presence, remote signed index reachability, and revocation registry health on commissioned DEV/PROD channels.

Software update vs updater self-update

Two related but separate mechanisms share one CLI entrypoint:

TrackCommandsPurpose
Appliance releasecheck, status, plan, apply, rollback, historyQualified LIVE + transport (+ optional host bundle) from release manifests
Updater self-updateupdater-check, updater-plan, updater-applyImmutable Stage0 verifies and activates a new versioned Stage1 updater from <catalog>/updater/index.json; Stage0 itself is not changed

updater-apply downloads a signed ZIP/metadata pair and invokes bootstrap updater-install (not a generic package manager). Use updater-apply … --download-only to verify and stage bytes without installing.

Stage0-only bootstrap commands (updater-recover, updater-install, updater-status) exist for recovery engineering; operators normally use the high-level updater-* commands above.

Commands

pixop-appliance-update check
pixop-appliance-update status
pixop-appliance-update history [--limit N] [--transaction ID] [--layer LAYER] [--json]
pixop-appliance-update doctor
pixop-appliance-update plan <release> [--download-only] [--manifest <path>]
pixop-appliance-update apply <release> [--download-only] [--manifest <path>]
pixop-appliance-update rollback
pixop-appliance-update updater-check
pixop-appliance-update updater-plan <package_id|latest>
pixop-appliance-update updater-apply <package_id|latest> [--download-only]
CommandRestarts services?
check / status / plan / doctor / history / updater-check / updater-planNever
apply --download-only / updater-apply --download-onlyNever (stage verified artifacts only)
applyOnly units that were active at apply time (via pixop-image-update)
rollbackSame per-component rollback rules as pixop-image-update
updater-apply (without --download-only)Activates a new Stage1 updater; Stage0 remains immutable

Apply order: stage host bundle (when present) and both images, then switch host pointer, then apply tsduck then live (host-first so restarts load new runners). download-only stages verified archives only (no current / env digest switch). Interrupted operations leave a durable journal under /var/lib/pixop-live/appliance-update/ (and related trees); resolve or roll back before retrying.

pixopctl pull and tsduckctl pull remain refused. Per-component rollback is still available with pixop-image-update rollback live|tsduck.

history (read-only)

Structured update timeline from append-only JSONL under:

Layer (--layer)Path
appliance-update (default set includes all three)/var/lib/pixop-live/appliance-update/events.jsonl
image-update/var/lib/pixop-live/image-update/events.jsonl
updater-self-update/var/lib/pixop-live/updater-self-update/events.jsonl

Options:

FlagEffect
--limit NMax transactions to list (default 50; 0 lists none)
--transaction IDFull timeline for one transaction
--layer …Filter to one layer
--jsonMachine-readable JSON

Durable *.json journals in the same directories remain authoritative for recovery; JSONL is for operators and bounded export in support packs.

Host bundles

Manifests may include structured host_bundle metadata (id, archive_path, artifact_sha256, artifact_bytes, min_host_applier_version) pointing at an immutable ZIP on the same HTTPS catalog origin. Trust is manifest-bound: staged bundle.zip bytes and attestation must match the signed fields; apply re-verifies and does not fetch remotely (use download-only or the apply staging phase first). Merge uses the baked AMI baseline plus bundle overlay (host-only files from a prior bundle are dropped when omitted from the new ZIP; AMI files cannot be removed). Materializes releases/host-<id>, switches current, then applies transport/LIVE. rollback restores previous_host_release from the applied stamp when recorded.

Host bundle apply requires a host applier and versioned /opt/pixop layout on a qualified AMI recipe—confirm with pixop-appliance-update plan / -h on your instance, not from documentation alone.

Internal entrypoint (not customer workflow)

boot-recover performs early-boot offline composite journal recovery when systemd recovery units run. It is not a substitute for operator rollback or support-directed recovery during maintenance. Do not run it unless Pixop support directs you.

Platform refresh lifecycle

Plan periodic qualified platform refresh (new Marketplace AMI or delivered QCOW2) on a cadence that matches your change policy—many teams target roughly six months as a planning horizon, but Pixop does not guarantee a fixed cadence or that every hardware/OS combination stays qualified indefinitely. Between platform refreshes, use signed pixop-appliance-update (preferred) or digest-pinned pixop-image-update for software contained in qualified releases. Do not run unmanaged dnf upgrade on production guests; kernel, driver, and OS compatibility are validated only on published appliance images.

Related


Did this page help you?