51b7262b724205280ba85f8c59acdde9412597a1
8
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
c3b8ae8ed9 |
Fix CI: json-c for crun, and fetch crun's git submodules as pinned tarballs
Verified end-to-end with a full local build of all 8 packages on the actual runner host (docker exec against vbatts/slackware:15.0, bind- mounted repo on the cache pool) instead of round-tripping through Gitea Actions for each fix — much faster for a chain of issues this deep. All 8 packages now build successfully from a clean checkout. Three fixes, all in crun (the last package still failing): 1. "Package requirements (json-c >= 0.14) were not met" — added json-c to the toolchain bootstrap. 2. crun depends on the libocispec git submodule, which in turn depends on the image-spec and runtime-spec git submodules. GitHub's source archive tarball never includes submodule content (no .git directory for `git submodule update` to work against — the existing `|| true` masked this failing silently). Fetched all three as their own pinned tarballs instead, at the exact commits crun 1.28 references (cross-checked via the GitHub contents API), matching how every other dependency in this project is already pinned. 3. crun.c unconditionally #includes git-version.h, which crun's own Makefile only generates via `git describe` (again, no .git) or from a pre-existing .tarball-git-version.h — the file crun's own `make dist` would have written, which we never run. Write that file ourselves in the exact format the Makefile already expects; this is the documented fallback path bundled release tarballs rely on, not a workaround around it. Also includes the podman go-md2man pre-seed fix and setup-slackware- buildenv.sh python3 addition from the previous commit's follow-up testing (both already verified working in this same local build run). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
f1962acc8c |
Fix CI: correct the pinned Go toolchain SHA256
GO_SRC_SHA256 was wrong since it was first pinned in Task 1 — this path had never actually been exercised in any prior CI run or local test because every earlier failure happened before reaching the Go install step, or (once it did run) nothing had checked the pinned value against go.dev's own published checksum yet. Task 88's log caught it: the real go1.26.5 linux-amd64 tarball hashes to 5c2c3b16caefa1d968a94c1daca04a7ca301a496d9b086e17ad77bb81393f053 (cross-checked against https://go.dev/dl/?mode=json directly), not the previously pinned value. Also independently re-verified LIBSECCOMP_SRC_SHA256 against the real v2.6.1 tarball while looking at this — that one was already correct. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
23a1ab22a6 |
Fix CI: unshadow the pinned Go, and add python3/protoc/go-md2man
Task 84's log got further than any run so far — 4 of 8 packages (aardvark-dns, passt, fuse-overlayfs, unraid-podman) built successfully — and surfaced four distinct, genuine build-time issues for the rest: 1. podman: go.mod parsing failed with "invalid go version '1.25.6': must match format 1.23". Root cause: slackpkg's batch-mode `install gcc` (verified directly) pulls in every gcc-<lang> sibling package Slackware's gcc SlackBuild produces — including gcc-go, an ancient bundled go1.16.5. Our Go bootstrap only installed the pinned $GO_VERSION when `command -v go` found nothing, so gcc-go's go1.16.5 silently won. Fixed by always installing/overwriting the pinned Go and prepending it to PATH, regardless of what else provides `go`. 2. crun: "no suitable Python interpreter found" — added python3. 3. netavark: build.rs (via prost-build) needs a `protoc` binary; Slackware packages no protobuf/protoc at all. Added the official prebuilt release binary, pinned + checksummed (no `unzip` on this image either, so extracted with `python3 -m zipfile` instead of adding yet another package). 4. conmon: `make install`'s docs target needs go-md2man, not packaged by Slackware and no prebuilt release exists upstream. `go install` it, pinned to a tagged release, now that our own Go is reliably on PATH. All four verified directly against vbatts/slackware:15.0 on the actual runner host before this commit. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
e912180e8d |
Fix two real bugs in the package build scripts, found via a live CI run
The toolchain bootstrap fixes finally got build-packages.sh far enough
to attempt actual package builds, surfacing two genuine bugs (not
environment/toolchain issues) in task 80's log:
1. sb_fetch_and_verify() echoed its "Fetching..."/"SHA256 verified..."
progress messages to stdout, same stream its return value (the
tarball path) is returned on. Every caller captures that return value
via `tarball=$(sb_fetch_and_verify ...)`, so command substitution
swallowed the progress lines into $tarball too, and the resulting
multi-line garbage got handed to `tar -xf` as a single bogus
filename. Fixed by sending the progress echoes to stderr.
2. unraid-podman.SlackBuild read plugin/podman.plg's version via
`grep -oP` with a variable-length lookbehind ({1,10} to match
flexible whitespace). PCRE requires fixed-length lookbehind; this
works on a PCRE2 grep (e.g. most dev machines) but fails outright
("lookbehind assertion is not fixed length") on Slackware's PCRE1
grep. Replaced with a portable sed capture group.
Both verified directly against vbatts/slackware:15.0 on the runner host
before this commit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
||
|
|
3133d45d74 |
Fix CI: add cmake and its transitive runtime deps to the toolchain bootstrap
yajl (needed by conmon, bootstrapped from source since Slackware ships no package for it) builds via CMake, not the cmake-free autoconf script its ./configure wrapper name suggests. Tracing the failure through the actual vbatts/slackware:15.0 image on the runner host surfaced a chain of packages slackpkg does not auto-resolve (Slackware packages carry no dependency metadata at all): cmake needs libarchive, which needs lz4 and libxml2; the patched make/gmake this mirror serves needs guile, which needs gc; compiling anything needs kernel-headers for <linux/errno.h>; and this build's binutils (ar/ranlib) needs flex, while objdump needs elfutils. All added to the same slackpkg install list as the rest of the toolchain, keeping everything on one mutually consistent version set. Verified end-to-end against vbatts/slackware:15.0 on the actual runner host at each step of this dependency chain. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
acb9fb704b |
Fix CI: bootstrap the full Slackware build toolchain via slackpkg
The build-packages.yml run was failing for two compounding reasons, found by testing directly against vbatts/slackware:15.0 on the actual runner host: 1. The image ships neither git nor its HTTPS runtime libs, so actions/checkout failed immediately. 2. It's a minimal rootfs with none of the 'D' (development) series — no gcc, make, autoconf, pkg-config, curl, glib2, libcap, or fuse3 — contrary to setup-slackware-buildenv.sh's assumption that a "full" Slackware install already provides these. An earlier fix attempt hand-pinned git + its deps (nghttp2, brotli, cyrus-sasl) by exact file + SHA256 from the base 15.0 release directory. That drifted out of sync with the newer, patched curl slackpkg installs later in the same container — same shared library, two different builds, causing a runtime symbol lookup error. Both steps now resolve every package through slackpkg's own prioritized mirror instead, keeping the whole toolchain on one mutually consistent version set. Verified end-to-end (git ls-remote and curl both succeed over HTTPS against the real Gitea instance, full toolchain present) in a fresh vbatts/slackware:15.0 container. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
2e6832903b |
Fix CI: silence false-positive ShellCheck/EditorConfig findings
- podman-common.sh: file-wide shellcheck disable=SC2034 for its constants, which are intentionally defined for other scripts to source, not used within the file itself (ShellCheck can't see cross-file usage in that direction). Confirmed as the actual cause of the failing ShellCheck job via the real Gitea Actions log. - podman-storage.sh: use the retry counter in cmd_unmount's log message instead of leaving it genuinely unused (real SC2034 hit, not a false positive). - lint.yml: replace the editorconfig-checker/action-* marketplace action with a pinned, checksum-verified direct binary download — more robust than relying on third-party action resolution on self-hosted Gitea Actions runners — and disable its IndentSize check, which false-positives on Markdown's nested-list indentation and shell heredoc bodies. scripts/dev/lint.sh mirrors the same check for local use. All three lint.yml jobs verified passing locally. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
e2fefcdf9c |
Add reproducible build system, native Unraid plugin, and WebUI
- versions.env pins podman, conmon, crun, netavark, aardvark-dns, passt, and fuse-overlayfs to verified upstream source checksums; SlackBuild recipes, scripts/build-packages.sh, checksums.sh, release.sh, and update-versions.sh implement the reproducible pipeline; GitHub Actions workflows build in a Slackware container and publish releases without committing any binaries. - plugin/podman.plg installs/updates/removes all eight packages (the seven components plus the plugin's own unraid-podman scaffolding package) via upgradepkg, using the official Unraid array-event hook mechanism (event/disks_mounted, event/stopping) instead of editing /boot/config/go. rc.podman and the sbin/ helper scripts implement storage creation, config seeding/sync, preflight checks, autostart with per-container Safe-Mode, and package verify/update/rollback. - webui/plugins/podman implements the Dashboard, Containers, Pods, Images, Volumes, Networks, Logs, Terminal, Compose, and Settings panels against the approved mockup (webui/mockups/prototype.html), talking to podman system service exclusively via PodmanClient.php (libpod REST API over the Unix socket), with two documented exceptions: Terminal's one-shot exec model and Compose's use of the podman compose CLI, since libpod has no REST equivalent for either. - docs/ARCHITECTURE.md and docs/ROADMAP.md record the design decisions and honest current status (syntax-checked, unit- and integration-tested against fake sockets/servers; not yet run against a real Unraid/Podman/Slackware system). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |