From f8c45fc28964a69d51fe41f967c9fe0734b68a72 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 7 Sep 2026 13:09:39 +0200 Subject: image-builder: abort early when the docker daemon is unreachable A dead dockerd is a global failure, not a per-variant one, but every stage treated it as the latter: the digest probes read an unreachable daemon as "no digest, rebuilding to be safe", the build then failed, and the variant loop logged "WARNING: variant X failed; continuing" and moved on. Cron kept exiting nonzero into a log nobody read, so a daemon that died in August went unnoticed for 25 days while no image was ever rebuilt. Add require_docker() to lib.sh, following the existing require_mount() precedent, and call it before the variant loop in all three stages. One loud error, exit 1, instead of a nightly pile of warnings. In build-full-image.sh the check goes before the --force cache prune, since that prune also talks to the daemon. Self-check stubs `docker` so it never contacts a real daemon. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01AD4jP4wFMpBgEvd9ZP9Xhu --- image-builder/lib.sh | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'image-builder/lib.sh') diff --git a/image-builder/lib.sh b/image-builder/lib.sh index dfb076b..8a22828 100644 --- a/image-builder/lib.sh +++ b/image-builder/lib.sh @@ -72,6 +72,15 @@ txz_hash() { done <<< "$files" | sha256sum | cut -d' ' -f1 } +# require_docker +# Assert the docker daemon answers before any variant is attempted. A dead +# daemon is global, not per-variant: without this each variant "fails and +# continues", the digest probes read as "no digest, rebuild to be safe", and +# cron logs warnings nightly while nothing is ever built. Fail loudly once. +require_docker() { + docker info >/dev/null 2>&1 || _err "docker daemon not reachable; is dockerd running?" +} + # require_mount VERSION # Assert the NAS tree for VERSION is mounted (file:// mirror only). # x86_64 tree dir is slackware64-${VERSION}. -- cgit v1.2.3