23a1ab22a6ef2dd81ff128bd843174c859f2c4dc
6
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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> |