aboutsummaryrefslogtreecommitdiffstats
path: root/.extras/image-builder
AgeCommit message (Collapse)AuthorFilesLines
2026-07-14extract docker tooling to ../sbo-dockerbuildDanilo M.7-1140/+0
The test-build tool and image-builder chain grew from a .extras/ helper into a standalone toolchain, now maintained in its own repo (../sbo-dockerbuild). Remove them here (scripts, examples, design docs) and repoint CLAUDE.md: test-building is now done with the installed `test-build` CLI, deps resolved from the SBo tree, both trees verified per bump. Package-maintenance files stay: nvchecker.toml, hooks/, assets/. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14image-builder: catch build/push failures, prune cache on --forceDanilo M.3-7/+44
The main loop runs build_variant in an `if ! (...)` condition, which suppresses set -e inside the subshell, so a failed docker build fell through to push a nonexistent tag and log "Done" (seen live: a transient containerd export lock reported success). Add explicit exit checks on docker build and docker push in all three scripts; return non-zero so the variant is marked failed. Also prune the build cache before a --force full-image build: --force already implies --no-cache, so the stale cache is dead weight that still loads the snapshotter's lock bookkeeping and has raced the layer export. Best-effort, never fails the build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14image-builder: cron moved to 03:00/05:00 (trees now sync 01:00/02:00)Danilo M.1-14/+15
Tree syncs moved earlier (01:00, 02:00), so the image chain runs earlier too and both variants are ready well before the ~09:00 work start: -current 03:00/03:20/04:30 (ready ~04:35), 15.0 05:00/05:20/06:30 (ready ~06:35). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14image-builder: cron gates both variants, add 15.0, drop --forceDanilo M.1-5/+13
All three scripts self-gate (ChangeLog hash, base digest, full digest + .txz hash), so --force was forcing needless full rebuilds. Drop it: unchanged nights are now cheap no-ops. Add the 15.0 variant (09:00/09:20/11:00), which on frozen stable rebuilds only when the 15.0 repo actually changes. -current stays at 06:00/06:20/08:00. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14image-builder: README cron matches deployed 06:00/06:20/08:00 scheduleDanilo M.1-4/+6
The nightly chain on docker.noland.dnx runs after the NAS repo syncs (04:00, 05:00): bootstrap 06:00, full-image 06:20 (~55 min), testbuild 08:00. Also add the --version current --force flags the deployed crontab actually uses. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: feed full build from LAN NFS mirror over HTTP, fix GPG verifyDanilo M.3-2/+38
The full-image build pulled the entire Slackware tree from slackware.nl over WAN: slow (40+ min), flaky (truncated .asc downloads), and it wedged the legacy builder. The identical tree is on LAN NFS, so serve it to the build container instead. - config: add HTTP_MIRROR_HOST/PORT (docker0 bridge gateway + ephemeral port). - bootstrap.sh: bake the LAN HTTP mirror URL into the base image instead of slackware.nl, so the full build inherits it. - build-full-image.sh: start an ephemeral python3 http.server rooted at the variant NFS tree on the bridge for the build duration, killed via the EXIT trap; require_mount so an unmounted NAS fails loud; wait for the server before building. Also fix a silent-failure bug: without importing the Slackware GPG key against the mirror first, slackpkg cannot verify CHECKSUMS.md5 and installs almost nothing (94 packages instead of ~1788). Add "slackpkg update gpg" as the first Dockerfile step; verified the package count jumps 94 -> 1788 with it. Fetch is incremental (slackpkg downloads only installed packages), unlike the buildkit --build-context path which eagerly copies the whole multi-GB tree. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: fix false GPG-update warning from SIGPIPE on yes pipeDanilo M.1-1/+9
bootstrap fed slackpkg update gpg with "yes YES |". When slackpkg exits first (key already valid), yes takes SIGPIPE and, under set -e/pipefail, the pipeline reports non-zero even though the key import succeeded, firing a bogus "slackpkg GPG update failed" warning on every run. Read slackpkg own status via PIPESTATUS[1] instead of the pipeline status, inside an if so set -e/pipefail does not abort on the SIGPIPE; capture PIPESTATUS as the first command in each branch so no intervening command resets it. Verified: warning gone on re-run, key still imports. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: accept any Slackware pkg extension (*.t?z) not just .txzDanilo M.2-10/+11
Upstream sbopkg ships as .tgz, not .txz. The require_pkgs guard, txz_hash find, cp staging, and Dockerfile COPY all hard-coded *.txz, so a .tgz package failed the presence check and was excluded from the rebuild hash. Widen every glob to *.t?z (matches .txz/.tgz/.tbz/.tlz); stage the whole pkgs dir into the image and installpkg the lot, dropping the in-image extension coupling entirely. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: require_mount in changelog gate so unmounted NAS fails loudDanilo M.1-0/+1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: mark scripts executableDanilo M.4-0/+0
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: README with VM setup checklistDanilo M.1-0/+58
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: per-variant isolation, non-zero exit on failureDanilo M.3-3/+18
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: guard FULL_DIGEST recompute against set -e abortDanilo M.1-1/+1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: build-sbo-testbuild.shDanilo M.1-0/+117
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: build-full-image.shDanilo M.1-0/+184
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: bootstrap.sh cleanup trap on EXIT not RETURNDanilo M.1-1/+1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: bootstrap.sh base image from NASDanilo M.1-0/+525
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: lib.sh self-checkDanilo M.1-0/+68
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: curl -sS in fetch for http error diagnosticsDanilo M.1-1/+1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13image-builder: config + lib.sh helpersDanilo M.2-0/+79
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>