Configuration change control
Configuration change control
Production runbook for planned configuration changes on Pixop Prime (AWS Marketplace guest or KVM QCOW2 appliance). Pair with the control-plane map in Configuration. This document does not replace WAN firewall design (Network and transport) or transport fault isolation (Transport troubleshooting).
Version gate: Steps below may include relay-only validation (tsduckctl transport, bonded URI groups). Run pixop-version and skip relay workflows unless command -v tsduck-transport-info succeeds and your installed templates use TRANSPORT_BACKEND=relay. Features are capability-gated—not implied by a Marketplace product version label.
1. Change record and roles
Before any production edit, open a maintenance or change ticket that survives handover between NOC shifts.
| Field | Content |
|---|---|
| Appliance identity | Hostname, cloud instance ID or KVM domain, management IP |
| Build baseline | Full pixop-version output; note Marketplace vs KVM |
| Change owner | Engineer performing edits |
| Verifier | Second person or downstream receiver for on-air acceptance |
| Change class | See §2 (runtime UI, persisted save, nvencc.args, transport env/args, image digest, host OS, watchdog) |
| Files touched | Paths only—no secret values in the ticket |
| Pre-change config hash | sha256sum of backed-up files (paths listed, not contents) |
| Planned window | Start/end UTC; rollback deadline |
| Acceptance criteria | Expected program number, resolution, colour signalling, bitrate band, audio continuity, SRT listener policy |
| Rollback plan | Restored file list + exact restart commands |
Roles: The change owner edits configuration and executes restarts. The verifier runs read-only checks and downstream decode/viewing tests. Pixop support owns changes to healthcheck.env, systemd units, and qualified media-path flags outside marked operator blocks in nvencc.args.
2. Classify the change
Match your work to the smallest restart surface. Combining unrelated classes in one window complicates rollback.
| Class | Examples | Apply mechanism | Outage character |
|---|---|---|---|
| A — UI runtime | Temporary grade tweak, ITM experiment | REST runtime / UI (no Save) | No restart; GPU load may change |
| B — UI Save (persisted) | Site default restoration profile | Save → params.json | No immediate restart; overrides CLI defaults on next Pixop start |
| C — Encoder output | Resolution, --output-csp, VUI transfer, CBR kbps, YADIF | Edit nvencc.args → pixopctl restart | Enhanced output gap; ingest SRT unit not stopped by restart alone |
| D — Ingress transport | PIPELINE_LATENCY, video/PCR PID, TRANSPORT_BACKEND, main.ingest.args | Edit files or tsduckctl --apply → tsduckctl restart main | Ingest + mux gap |
| E — Egress transport | Egress relay template, egress-main.env port/policy | tsduckctl restart egress-main | Downstream SRT gap only |
| F — Backbone bitrate | TS_TARGET_BITRATE in network.env / main.env | Restart TSDuck instances that consume the key | TS timing / buffer behavior change—validate with pixop-flow |
| G — Container image | Pixop LIVE or TSDuck digest | pixop-image-update --apply | Restarts active units; use rollback only with local *_IMAGE_PREV |
| H — Host OS / NVIDIA | Driver, kernel, GPU swap | New tested AMI or QCOW2 appliance image | Full migration—not in-place driver patch on the guest |
| I — KVM host | VFIO, bridge, memlock | On the Ubuntu host: unpack the shipped installer archive, cd to the extract root, and run sudo ./scripts/pixop-install (see KVM deployment guide) — not a private git checkout on the guest | Guest down during host maintenance |
| J — Watchdog policy | PIXOP_HEALTHCHECK_RESTART, grace timers | Edit healthcheck.env + support review | Automatic pixopctl recover may interrupt ingress during incidents |
Native vs relay: On native SRT appliances, transport class D/E uses .env SRT keys (TRANSPORT_BACKEND=native or unset). On relay-capable appliances, default templates may use TRANSPORT_BACKEND=relay with *.ingest.args / *.egress.args. Setting relay without relay helpers fails at start—confirm binaries and templates before switching backends (Transport configuration).
--apply helpers: tsduckctl detect-video-pid main --apply and tsduckctl tune-latency main --apply rewrite ingress .env and restart main—treat as class D.
Pixop does not certify unverified “zero outage” configuration changes on a single encoder appliance.
3. Backup and restore strategy
What to back up privately
| Asset | Why |
|---|---|
/etc/pixop-live/nvencc.args | Encoder output contract |
/etc/pixop-live/tsduck/*.env | SRT secrets and PID/latency keys |
/etc/pixop-live/tsduck/*.ingest.args, *.egress.args | Relay templates (no live passphrase in file) |
/var/lib/pixop-live/parameters/params.json | Persisted picture profile—not in pack-config |
Store backups on the appliance or jump host in a root-only directory. Do not email tarballs containing passphrases or JWTs.
What packers are (and are not)
pixop-pack-config— Sanitized copy of/etc/pixop-livewith redaction; nolicense.jwt/ Pulse / Docker bodies; does not captureparams.json(lives under/var/lib/pixop-live/parameters/).pixop-support-bundle— Full diagnostic archive; nests pack-config; still not a production restore source for secrets orparams.json.
Private backup (example)
Run as root on the guest (sudo -i or root shell). Use pixopctl / tsduckctl without extra sudo — the wrappers self-elevate when needed. Reading /etc/pixop-live and writing under /root requires root. Replace CHG-12345 with your ticket id. Record paths and hashes in the change ticket, not file contents.
BKROOT="/root/pixop-config-backup/CHG-12345-$(date -u +%Y%m%dT%H%M%SZ)"
install -d -m 0700 "$BKROOT"
[[ -f /etc/pixop-live/nvencc.args ]] && cp -a /etc/pixop-live/nvencc.args "$BKROOT/"
[[ -f /etc/pixop-live/network.env ]] && cp -a /etc/pixop-live/network.env "$BKROOT/"
[[ -d /etc/pixop-live/tsduck ]] && cp -a /etc/pixop-live/tsduck "$BKROOT/"
if [[ -f /var/lib/pixop-live/parameters/params.json ]]; then
cp -a /var/lib/pixop-live/parameters/params.json "$BKROOT/"
fi
find "$BKROOT" -type f ! -name SHA256SUMS -print0 | sort -z | xargs -0 -r sha256sum > "$BKROOT/SHA256SUMS"
chmod -R u=rwX,go= "$BKROOT"Restore (example)
Only after stopping the change window and notifying downstream. Run as root on the guest. The block below only restores files; restarts are separate so a single-file rollback does not restart the whole stack.
BKROOT="/root/pixop-config-backup/CHG-12345-20261021T120000Z" # your path
sha256sum -c "$BKROOT/SHA256SUMS"
[[ -f "$BKROOT/nvencc.args" ]] && cp -a "$BKROOT/nvencc.args" /etc/pixop-live/nvencc.args
[[ -f "$BKROOT/network.env" ]] && cp -a "$BKROOT/network.env" /etc/pixop-live/network.env
[[ -d "$BKROOT/tsduck" ]] && cp -a "$BKROOT/tsduck/." /etc/pixop-live/tsduck/
if [[ -f "$BKROOT/params.json" ]]; then
install -d -m 2750 -o 1001 -g pixop /var/lib/pixop-live/parameters
cp -a "$BKROOT/params.json" /var/lib/pixop-live/parameters/params.json
chown 1001:pixop /var/lib/pixop-live/parameters/params.json
chmod 0640 /var/lib/pixop-live/parameters/params.json
fiRestart only what you restored (match §2 class):
| Restored asset | Typical restart | Notes |
|---|---|---|
nvencc.args only | pixopctl restart | Enhanced output gap; ingest SRT unit not stopped by restart alone |
params.json only | (none) or pixopctl restart | Class B: overrides apply on next Pixop start; restart only if you must clear runtime vs persisted immediately |
tsduck/*.env / *.ingest.args / *.egress.args (ingress) | tsduckctl restart main | Restoring SRT secrets drops and renegotiates ingest sessions |
| Egress transport files only | tsduckctl restart egress-main | Downstream SRT gap only |
network.env (TS_TARGET_BITRATE, multicast) | tsduckctl restart main and any instance that reads backbone keys (often main + egress-main) | Class F — validate with pixop-flow |
| Multiple classes | Combine the rows above — do not run the full trio unless every layer was restored |
After transport restores, run tsduckctl credentials locally to verify the credential sheet—do not print passphrases into tickets or log collectors.
Image rollback: Use pixop-image-update rollback live|tsduck only when LIVE_IMAGE_PREV / TSDUCK_IMAGE_PREV in env files points at a locally present digest (pixop-image-update).
4. Dry-run and on-air acceptance
Pre-change baseline (read-only)
pixop-version
pixop-preflight
pixop-stack status
tsduckctl check main
tsduckctl check egress-main
pixopctl health
pixop-flow --secs 5When command -v tsduck-transport-info succeeds:
tsduckctl transport main
tsduckctl transport egress-mainInterpretation:
| Check | Confirms | Does not prove |
|---|---|---|
pixop-preflight | Host, images, config presence, UID 1001 write probe under parameters/ | End-to-end video quality |
pixop-flow | UDP payload Mbps on internal stages when a sender is active | Picture processing correctness |
pixopctl health | Prometheus text from local HTTP metrics | Downstream IRD compliance |
tsduckctl check | Unit active + listener/bind policy per transport mode | SRT peer connected or encrypted session health |
curl -sS http://127.0.0.1:8080/v1/metrics.json | Processing counters when fed | WAN reachability |
For SRT, tsduckctl check may report listener bound while the caller peer is offline—that is expected in listener mode.
Post-change acceptance
Repeat baseline commands. With active contribution:
- Confirm
pixop-flowshows motion onIngress -> Pixop,Pixop -> replacement, andFinal merged TS/ egress stages as applicable. - Verify downstream decoder: correct program, resolution, chroma, and HDR/SDR signalling vs your ticket.
- For class C metadata changes, remember VUI flags in
nvencc.argsset signalling; actual tone mapping may still require UI/params.jsonalignment (Live output and encoding, Picture processing).
Rollback by class
| Class | Rollback |
|---|---|
| A | Revert runtime sliders or restart Pixop to last Saved profile |
| B | Restore params.json from backup; pixopctl restart if you need immediate CLI override clearing |
| C | Restore nvencc.args; pixopctl restart |
| D/E/F | Restore tsduck tree + network.env; tsduckctl restart affected instances |
| G | pixop-image-update rollback per target |
| H/I | Revert to previous appliance image / VM snapshot per disaster-recovery plan |
Emergency: Return to last known-good backup under a named ticket—avoid “factory reset” or copying another customer’s /etc tree. pixopctl recover is for wedged pipelines, not routine rollback (Monitoring and health signals).
5. Security and operational hazards
- No inline secrets in tickets, chat, or runbook copies: JWT, SRT passphrases, Pulse passwords, Docker Hub tokens.
- Restrict TCP 8080 to management CIDRs; UI and metrics are HTTP without TLS on the guest.
- Review
pixop-pack-config/ support bundle tarballs before upload; redaction is best-effort. PIXOP_HEALTHCHECK_RESTART=1(default inhealthcheck.env) can schedulepixopctl recoverduring prolonged unhealthy metrics—account for that in change timelines.- Heavy
pixop-processfile jobs contend for GPU with live enhancement; avoid batch loads during the same window as class C or picture changes.
6. Worked examples (no secrets)
Example A — Output HDR signalling to SDR VUI (class C)
Goal: Downstream chain expects BT.709 SDR signalling on the enhanced HEVC elementary stream.
- Back up
nvencc.args(§3). - In the operator colour block, disable the active HLG group and enable the commented SDR BT.709 group per Live output and encoding—one complete profile only.
pixopctl restart.- Accept: downstream VUI reports BT.709; verify picture appearance separately—if the source was HDR, you may still need UI tone-mapping / ITM changes (class A/B), not encoder flags alone.
Example B — Ingress video PID realignment (class D)
Goal: Replacement merge targets the correct video PID after a source lineup change.
- With stable inbound MPEG-TS, run read-only:
tsduckctl detect-video-pid main --secs 10(no--apply). - If the result is unambiguous, run
tsduckctl detect-video-pid main --secs 10 --apply(updatesORIGINAL_VIDEO_PID/INPUT_PCR_PIDand restarts ingress). - Accept:
pixop-flowshows replacement traffic; downstream program video returns; re-check audio PIDs if your workflow carries separate audio rules.
Example C — Pipeline latency tune (class D)
tsduckctl tune-latency main(report only).- If recommendation differs from
PIPELINE_LATENCYinmain.env, apply during a negotiated window:tsduckctl tune-latency main --apply. - Accept: end-to-end latency within agreed bound; no elevated
pixop-flowexit 3 (backbone bitrate pressure againstTS_TARGET_BITRATE).
Related
Updated about 8 hours ago
