-
Notifications
You must be signed in to change notification settings - Fork 0
Troubleshooting
CYPT71 edited this page Aug 9, 2026
·
1 revision
| Message / symptom | Cause | Fix |
|---|---|---|
binary is not executable |
the file has no execute bit |
chmod 0755 service, then rebuild with CGO_ENABLED=0
|
binary must be a regular file |
you pointed -binary at a directory, symlink, or special file |
pass a real, regular executable file |
unsupported architecture "X" (supported: amd64, arm64) |
-arch was something else |
pass -arch amd64 or -arch arm64, and build the binary for that same target |
output already exists: ... |
-output already exists (files are never overwritten, intentionally) |
choose a new output path |
entrypoint must be an absolute, clean container path |
-entrypoint wasn't absolute, wasn't path.Clean-stable, or was exactly /
|
use something like /app/service
|
invalid label "X" (expected key=value) |
a -label had no =, or an empty key |
fix the key=value pair |
duplicate label "X" |
the same label key was passed twice | remove the duplicate; the builder refuses to guess which value should win |
| CI rejects the binary before building anything |
scripts/ci/verify-elf.sh found a PT_INTERP header (dynamic linking) or a wrong-architecture ELF |
rebuild with CGO_ENABLED=0 GOOS=linux GOARCH=<arch>
|
Full flag reference: CLI Reference.
| Symptom | Fix |
|---|---|
Registry publication fails in ci-release.yml
|
use the workflow's own artifacts instead of retrying blindly; confirm the repository's Actions permissions actually allow packages: write before retrying |
| Can't tell if a pulled image matches what was validated | pull by digest, not tag, and cross-check against release-reports/verified-layout.tar / signature-verification.json from the release's evidence bundle - see Testing and CI/CD
|
| Symptom | Fix |
|---|---|
docker build/podman build fails in the verify stage |
the layout at ./oci-image failed one of the sanity checks (missing marker file, wrong blob count, digest mismatch) - re-run python3 scripts/ci/verify-oci-layout.py ./oci-image standalone for a precise reason |
docker exec/podman exec -it ... sh doesn't work |
the final image is FROM scratch - there is no shell by design; see Debugging Minimal Containers
|
Service unreachable after docker run/podman run
|
check you actually published the port (--publish 8080:8080) and that the entrypoint is listening on 0.0.0.0, not just 127.0.0.1, inside the container |
| Symptom | Fix |
|---|---|
scripts/microvm/check-kvm.sh fails on /dev/kvm
|
see the 4-step install procedure in MicroVM Support |
OCI_VALIDATION_FAILURE: ... from run-microvm.sh
|
the directory you pointed it at isn't a genuine, structurally-valid cmd/oci-builder layout (or was tampered with) - run-microvm.sh refuses to boot it by design (see MicroVM Support); rebuild it with cmd/oci-builder and re-run python3 scripts/ci/verify-oci-layout.py <dir> standalone for the precise reason |
image architecture is 'X' but the host is 'Y' |
build the image for the host's own architecture (-arch amd64 on an x86_64 host, -arch arm64 on an aarch64 host) - KVM cannot accelerate a cross-architecture guest, and this tooling deliberately doesn't fall back to slow emulation |
| Guest never becomes reachable / times out |
run-microvm.sh prints the full guest console log on failure - look for a kernel panic or a missing boot-critical driver, and compare against scripts/microvm/kernel-common.config/kernel-<arch>.config
|
| Kernel build fails | confirm the build toolchain is installed (see MicroVM Support step 2); build-kernel.sh requires a Linux host matching the target architecture and refuses to run on macOS or a mismatched host architecture |
-sandbox on fails to start QEMU |
your QEMU build lacks seccomp support; disable with MICROVM_QEMU_SANDBOX= scripts/microvm/run-microvm.sh ... (see MicroVM Support) |
| Checksum mismatch downloading the kernel source | this should never happen against an unmodified build-kernel.sh - if it does, treat it as a potential integrity issue (a compromised mirror, a MITM) and stop; don't bypass the check |
| Symptom | Fix |
|---|---|
python3 scripts/ci/verify-workflows.py fails locally |
read the specific WORKFLOW_VALIDATION_FAILURE line(s) it prints - each names the exact file, job, and rule violated (unpinned action, missing timeout, wrong runner, missing set -euo pipefail, etc.); see Testing and CI/CD for the full rule set |
verify-workflows.py errors with a Ruby-related failure |
it shells out to ruby -ryaml -rjson to parse YAML without a Python YAML dependency - make sure ruby is on PATH
|
Coverage gate fails in ci-quality.yml
|
run go test ./... -coverprofile=coverage.out && go tool cover -func=coverage.out locally and add tests for whatever package dropped below 85% total |
This is a single-layer image generator, not a Dockerfile interpreter,
registry client, image signer, SBOM generator, or runtime security policy
engine. It does not prove an executable is actually static - you build it
that way; CI's verify-elf.sh independently checks the result, but the
Go builder itself trusts the caller's CGO_ENABLED=0 build. See
Project scope, honestly stated.
© 2026 CYPT71
platform-factory
Core
- Architecture and OCI Layout
- Next-generation Architecture
- Architecture Decision Records
- Security Model
- Threat Model and Residual Risks
- Independent Security Review Process
- CLI Reference
- Project Configuration and Dependency Freezing
- mTLS Configuration
- Meine Graal
CI/CD
Running an image
- Production Adoption Guide
- Dockerfile Consumer
- Local Dev (Podman/macOS)
- MicroVM Support
- MicroVM Administration
- Large-image streaming
Operating