Files
panda-rpki-oss/docs/command-line-reference.md
yuyr 4975128945
Some checks failed
ci / rust (push) Has been cancelled
ci / docker (push) Has been cancelled
ci / audit (push) Has been cancelled
20260914 强制 TOML 配置并完善 TA 刷新与 daemon
2026-09-14 16:58:08 +08:00

4.9 KiB

Command-line reference

For every field, default, constraint and complete example, see the TOML configuration reference。

Runtime settings come from one explicit TOML file; the binary does not read PANDA_RPKI_LOG_* overrides and does not accept legacy validation flags.

Commands

panda-rpki --help
panda-rpki --version
panda-rpki -V
panda-rpki validate --help
panda-rpki daemon --help
panda-rpki validate --config FILE
panda-rpki validate --config FILE --check-config
panda-rpki validate --config FILE --print-config
panda-rpki daemon --config FILE
panda-rpki daemon --config FILE --check-config
panda-rpki daemon --config FILE --print-config

Only these long options are accepted: --help, --version, --config, --check-config and --print-config. -h aliases help and -V aliases version. --config FILE is required for a normal validate/daemon run and may also be written as --config=FILE. Help does not read a config. Check and print are mutually exclusive and do not run validation. Unknown, repeated or legacy options—including a daemon -- tail—return exit code 2.

TOML schema

Every file contains config-version = 1 and a matching mode value:

config-version = 1
mode = "validate"
out = "output"
rrdp-state-dir = "state"
rrdp-sync-mode = "auto"
ccr-out = "output/result.ccr"
publish-dir = "publish"
ta-refresh-policy = "allow-valid-cache"
require-complete = false

[[anchors]]
id = "ripe"
tal = "input/ripe.tal"
ta = "input/ripe.cer"       # omit for automatic refresh from the TAL URI
constraints = "input/ripe.constraints"

All paths are relative to the TOML file, not the process working directory. Absolute paths are accepted. id defaults to the TAL filename stem and must be unique. constraints defaults to a same-stem .constraints file beside the TAL. Automatic TA refresh supports HTTPS and rsync, validates the TAL binding, signature and current validity, and stores a keyed cache at <rrdp-state-dir>.ta-cache/. allow-valid-cache may use a still-valid cached certificate when refresh fails and marks the run partial; require-fresh does not fall back.

The remaining common keys and defaults are:

Key Default
max-ca-depth 64
http-timeout-secs 300 (0 is normalized to 1)
http-root-cert []
parallel-max-repo-sync-workers-global 8
parallel-phase2-object-workers 8
parallel-phase2-worker-queue-capacity 256
parallel-repo-worker-queue-capacity 256 (effective minimum 1024)
log-level info
log-format text
log-progress-interval-secs 10
run-timeout-secs 0 (disabled)
require-complete false

Validate-only keys are out (required), rrdp-state-dir, rrdp-sync-mode, ccr-out and optional publish-dir. Daemon-only keys are state-root (required), interval-secs (60), max-runs (unlimited), retain-runs (10) and shutdown-grace-secs (30). Daemon does not accept validate-only keys; it creates a per-run validate TOML internally.

Inspection and outcomes

--check-config validates syntax, fields, local TAL/TA/constraints and existing path types without network access, directory creation, state writes or locks. --print-config emits configVersion, mode, effective, sources and normalizations as JSON; defaults are filled and paths are absolute.

Validation writes summary.json, vrps.csv, vaps.csv, timing files and an optional CCR. The final result-complete.json is written only after all required artifacts are ready. resultStatus is success, partial or failed:

Status Default exit require-complete = true
success 0 0
partial 0 3
failed 2 2

summary.json adds trustAnchors, taFailedCount, repositoryFailedCount, taCacheFallbackCount, resultStatus and publicationStatus. A cache fallback or a failed anchor makes an otherwise complete artifact set partial; rejected objects alone do not.

With publish-dir, only a complete success is copied to an immutable run:

publish/runs/<run-id>/{vrps.csv,vaps.csv,summary.json,stage-timing.json,
  analysis/timing.json,result-complete.json[,result.ccr]}
publish/latest -> runs/<run-id>
publish/last-attempt.json

latest changes atomically and never moves for partial or failed attempts. Daemon uses its existing state-root/runs/run_000001/ layout and atomically points state-root/latest at the newest successful run; it retains completed runs according to retain-runs while preserving the latest pointer.

Configuration lifecycle

TAL files are never auto-updated. Omitting an anchor's ta field refreshes its TA certificate on each cycle; providing ta selects fixed mode. TOML is read once at process start. Put log-format = "text" and ta-refresh-policy at the top level, before any [[anchors]] tables. See Docker reload steps and complete container TOML examples.