- docs/getting-started.md — install per distro, first use, common workflows - docs/architecture.md — 9-crate dependency graph, design decisions, data flow - docs/manifest-spec.md — manifest v1 specification - docs/lock-spec.md — lock file v2 specification - docs/store-spec.md — store format v2 specification - docs/hash-contract.md — two-phase identity hashing algorithm - docs/security-model.md — threat model, mount/device/env policy, privilege model - docs/cli-stability.md — 23 stable commands, exit codes, stability guarantees - docs/protocol-v1.md — remote protocol v1 draft - docs/layer-limitations-v1.md — phase 1 layer limitations - docs/api-reference.md — public API reference (Engine, D-Bus) - docs/versioning-policy.md — semantic versioning, deprecation policy - docs/verification.md — release artifact verification (SHA256, cosign, SBOM) - docs/e2e-testing.md — E2E test guide with distro-specific prerequisites - README.md — project overview, features, quick start, installation - CONTRIBUTING.md — development setup, architecture principles, code standards - CHANGELOG.md — full changelog for 0.1.0 and 2.0 hardening
5.1 KiB
Verifying Karapace Downloads
Every tagged release includes signed binaries for both glibc and musl (static) targets, SHA256 checksums, and in-toto provenance attestations. All artifacts are signed with cosign using GitHub Actions OIDC — no manual keys involved.
These instructions are mechanically verified in CI: the verify-docs-executable job
in supply-chain-test.yml executes these exact commands on every PR.
Choosing a Binary
| Binary | Linking | Use Case |
|---|---|---|
karapace-linux-x86_64-gnu |
Dynamic (glibc) | Standard Linux distributions |
karapace-linux-x86_64-musl |
Static (musl) | Minimal containers, Alpine, any distro |
karapace-dbus-linux-x86_64-gnu |
Dynamic (glibc) | D-Bus service on standard distros |
karapace-dbus-linux-x86_64-musl |
Static (musl) | D-Bus service in containers |
The musl binaries are fully statically linked and require no system libraries.
1. Verify SHA256 Checksums
# For glibc binaries:
sha256sum -c SHA256SUMS-gnu
# For musl binaries:
sha256sum -c SHA256SUMS-musl
Both karapace and karapace-dbus must show OK.
2. Verify Cosign Signatures
Install cosign:
# Verify karapace binary (use -gnu or -musl suffix as appropriate)
cosign verify-blob karapace-linux-x86_64-gnu \
--signature karapace-gnu.sig \
--certificate karapace-gnu.crt \
--certificate-identity-regexp 'https://github.com/marcoallegretti/karapace' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
# Verify karapace-dbus binary
cosign verify-blob karapace-dbus-linux-x86_64-gnu \
--signature karapace-dbus-gnu.sig \
--certificate karapace-dbus-gnu.crt \
--certificate-identity-regexp 'https://github.com/marcoallegretti/karapace' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
Both commands must print Verified OK. Replace -gnu with -musl for static binaries.
3. Verify Provenance Attestation
cosign verify-blob provenance-gnu.json \
--signature provenance-gnu.json.sig \
--certificate provenance-gnu.json.crt \
--certificate-identity-regexp 'https://github.com/marcoallegretti/karapace' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
Inspect the provenance to verify the build origin:
python3 -c "
import json
with open('provenance-gnu.json') as f:
prov = json.load(f)
src = prov['predicate']['invocation']['configSource']
print(f'Commit: {src[\"digest\"][\"sha1\"]}')
print(f'Repo: {src[\"uri\"]}')
print(f'Workflow: {src[\"entryPoint\"]}')
print(f'Builder: {prov[\"predicate\"][\"builder\"][\"id\"]}')
"
4. Inspect SBOM
The CycloneDX SBOM lists all Rust dependencies and their versions:
python3 -m json.tool karapace_bom.json | head -50
Build Reproducibility
All CI release builds enforce:
CARGO_INCREMENTAL=0— disables incremental compilationcargo cleanbefore every release build — eliminates stale intermediate artifactsSOURCE_DATE_EPOCH=0— deterministic timestamps--remap-path-prefix— eliminates runner-specific filesystem pathsstrip = true+lto = "thin"— deterministic output
Reproducibility requirement: Build invocations must use identical -p flags.
Building -p karapace-cli alone may produce a different binary than
-p karapace-cli -p karapace-dbus due to codegen unit ordering.
Both glibc and musl builds are verified for same-run and cross-run reproducibility (ubuntu-latest vs ubuntu-22.04). Musl static builds are expected to be fully runner-independent since they have no dynamic library dependencies.
Local Development Builds
Local dev builds use .cargo/config.toml to remap dependency paths via --remap-path-prefix.
This eliminates local filesystem paths from release binaries. The remapping is configured for
the project maintainer's paths; other developers should update the paths in .cargo/config.toml
or set RUSTFLAGS directly.
Local builds are for development only. CI builds are the authoritative release artifacts.
Release Artifacts
Each GitHub release contains artifacts for both x86_64-unknown-linux-gnu (glibc) and
x86_64-unknown-linux-musl (static) targets:
| File | Description |
|---|---|
karapace-linux-x86_64-gnu |
CLI binary (glibc) |
karapace-linux-x86_64-musl |
CLI binary (static musl) |
karapace-dbus-linux-x86_64-gnu |
D-Bus service binary (glibc) |
karapace-dbus-linux-x86_64-musl |
D-Bus service binary (static musl) |
SHA256SUMS-gnu |
SHA256 checksums for glibc binaries |
SHA256SUMS-musl |
SHA256 checksums for musl binaries |
karapace-gnu.sig / .crt |
Cosign signature + certificate (glibc CLI) |
karapace-musl.sig / .crt |
Cosign signature + certificate (musl CLI) |
karapace-dbus-gnu.sig / .crt |
Cosign signature + certificate (glibc D-Bus) |
karapace-dbus-musl.sig / .crt |
Cosign signature + certificate (musl D-Bus) |
provenance-gnu.json / .sig / .crt |
Provenance attestation (glibc) |
provenance-musl.json / .sig / .crt |
Provenance attestation (musl) |