pixop-image-update

pixop-image-update

Download and apply digest-pinned Pixop LIVE (docker.io/pixop/live) or TSDuck (public.ecr.aws/z7b3p1n3/tsduck) container images. Updates LIVE_IMAGE / TSDUCK_IMAGE in env files and restarts only units that were active at apply time.

Does not upgrade host OS, NVIDIA driver, or systemd units — those require a new tested AMI or QCOW2. Generic docker pull with mutable tags is not a supported operator workflow.

Version note: Confirm on your appliance with pixop-version, command -v pixop-image-update, and pixop-image-update -h. Operators do not type sudo; the tool re-executes to /opt/pixop/bin/pixop-image-update when needed. status may auto-elevate when env files are not world-readable.

Trusted references

Immutable form only:

live    docker.io/pixop/live@sha256:<64-lowercase-hex>
tsduck  public.ecr.aws/z7b3p1n3/tsduck@sha256:<64-lowercase-hex>

Pixop publishes digests for your release line. Production appliances should not rely on mutable tags.

TargetEnv fileKeys
live/etc/pixop-live/live.envLIVE_IMAGE, LIVE_IMAGE_PREV
tsduck/etc/pixop-live/tsduck.envTSDUCK_IMAGE, TSDUCK_IMAGE_PREV

Journal / lock: /var/lib/pixop-live/image-update/, /run/pixop-live/image-update.lock.

Usage

pixop-image-update status [live|tsduck]
pixop-image-update rollback live|tsduck
pixop-image-update live  <digest-ref> (--download-only | --apply)
pixop-image-update tsduck <digest-ref> (--download-only | --apply)
pixop-image-update -h|--help
pixop-image-update help
RuleDetail
Exactly one of --download-only / --applyRequired for live / tsduck image lines
--apply never pullsImage must exist locally (docker images)
rollback never pulls*_IMAGE_PREV digest must be present locally
Hub auth optionsOnly live --download-only

Docker Hub (LIVE download only)

Private docker.io/pixop/live pulls need a read-only Hub token at download time:

  • Interactive prompt after elevation, or
  • --dockerhub-username USER --dockerhub-token-stdin (token on stdin, never argv)

Credentials live only in a temporary DOCKER_CONFIG (mode 0700) for the pull, then removed. They are not stored in env files, journal, or permanent docker config.

TSDuck pulls from public ECR — no Hub credentials.

Workflow

1. Download (may contact registry)

pixop-image-update live docker.io/pixop/live@sha256:<hex> --download-only
pixop-image-update tsduck public.ecr.aws/z7b3p1n3/tsduck@sha256:<hex> --download-only

2. Apply (local only)

pixop-image-update live docker.io/pixop/live@sha256:<hex> --apply
pixop-image-update tsduck public.ecr.aws/z7b3p1n3/tsduck@sha256:<hex> --apply

Apply behavior:

TargetIf unit was activeIf inactive
liveRestarts pixop-live.service, waits for healthUpdates env only; prints no restart
tsduckRestarts each active tsduck-in@ / tsduck-out@ unitUpdates shared TSDUCK_IMAGE only

TSDuck apply prints: TSDuck restart will interrupt active media paths.

If digest already matches configured value and image is local → no restart.

3. Rollback

pixop-image-update rollback live
pixop-image-update rollback tsduck

Requires LIVE_IMAGE_PREV / TSDUCK_IMAGE_PREV from the last successful apply and local image present. Swaps current/previous digests in env and restarts previously active units.

4. Status

pixop-image-update status
pixop-image-update status live

Shows configured / previous digest, local image presence, pixop-live or active TSDuck units. If an unresolved transaction exists, prints recovery instructions (do not start another apply until resolved).

Exit codes

CodeTypical cause
0Success
1General failure (missing local image, apply error)
2Usage (bad ref, both/neither download+apply, bad Hub options on tsduck/apply)
3Lock timeout
4Pending / unresolved transaction policy
5Rollback / recovery failure

Operational risk

RiskMitigation
SRT disconnect during TSDuck restartSchedule off-hours; warn partners
Pixop restart mid-streamPrefer maintenance window; ingress may need recover after LIVE apply
Partial failed applyCheck status for unresolved tx; follow printed recovery
Wrong digestrollback if prev recorded; else re-download known good digest

Host stack changes (kernel, driver, unit files) still need a new appliance image — this tool only swaps pinned container digests.

What does not work

ApproachWhy
docker pull pixop/live:latestNot digest-pinned; not wired into env
pixopctl pull / pixop-stack pullExplicitly refused
Apply without prior downloadApply verifies local image only
Hub token on tsduck downloadRejected at CLI parse

Task matrix

GoalCommand
See current digestspixop-image-update status
Stage new LIVE image... live @sha256:... --download-only
Cut over LIVE... live @sha256:... --apply
Revert LIVEpixop-image-update rollback live
Update all TSDuck containerstsduck ... --download-only then --apply
CI pull LIVEecho "$TOKEN" | pixop-image-update live @sha256:... --download-only --dockerhub-username u --dockerhub-token-stdin

After LIVE apply, pixopctl restart is not required — image-update restarts when needed. After only env edit without this tool, use pixopctl/stack as appropriate.

Related


Did this page help you?