Introduces the headline feature of the kernel catalog: pulling a kernel
bundle over HTTP without any local build step.
Catalog format (internal/kernelcat/catalog.go):
- Catalog { Version, Entries } + CatEntry { Name, Distro, Arch,
KernelVersion, TarballURL, TarballSHA256, SizeBytes, Description }.
- catalog.json is embedded via go:embed and ships with each banger
binary. It starts empty (Phase 5's CI pipeline will populate it).
- Lookup(name) returns the matching entry or os.ErrNotExist.
Fetch (internal/kernelcat/fetch.go):
- HTTP GET with streaming SHA256 over the response body.
- zstd-decode (github.com/klauspost/compress/zstd) -> tar extract into
<kernelsDir>/<name>/.
- Hardens against path-traversal tarball entries (members whose
normalised path escapes the target dir, and unsafe symlink
targets) and sha256-mismatch downloads; any failure removes the
partially-populated target dir.
- Regular files, directories, and safe symlinks are supported; other
tar types (hardlinks, devices, fifos) are silently skipped.
- After extraction, recomputes sha256 over the on-disk vmlinux and
writes the manifest with Source="pull:<url>".
Daemon methods (internal/daemon/kernels.go):
- KernelPull(ctx, {Name, Force}) - lookup in embedded catalog, refuse
overwrite unless Force, delegate to kernelcat.Fetch.
- KernelCatalog(ctx) - return the embedded catalog annotated per-entry
with whether it has been pulled locally.
RPC: kernel.pull, kernel.catalog dispatch cases.
CLI:
- `banger kernel pull <name> [--force]`.
- `banger kernel list --available` prints the catalog with a
pulled/available STATE column and a human-readable size.
Tests: fetch round-trip (extract + manifest + sha256), sha256 mismatch
rejection with cleanup, missing-vmlinux rejection, path-traversal
rejection, HTTP error propagation, catalog parsing, lookup,
pulled-status reconciliation. All 20 packages green.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
65 lines
2.7 KiB
Modula-2
65 lines
2.7 KiB
Modula-2
module banger
|
|
|
|
go 1.25.0
|
|
|
|
require (
|
|
github.com/firecracker-microvm/firecracker-go-sdk v1.0.0
|
|
github.com/miekg/dns v1.1.72
|
|
github.com/pelletier/go-toml v1.9.5
|
|
github.com/sirupsen/logrus v1.9.4
|
|
github.com/spf13/cobra v1.8.1
|
|
golang.org/x/crypto v0.46.0
|
|
golang.org/x/sys v0.39.0
|
|
modernc.org/sqlite v1.38.2
|
|
)
|
|
|
|
require (
|
|
github.com/PuerkitoBio/purell v1.1.1 // indirect
|
|
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
|
|
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect
|
|
github.com/containerd/fifo v1.0.0 // indirect
|
|
github.com/containernetworking/cni v1.0.1 // indirect
|
|
github.com/containernetworking/plugins v1.0.1 // indirect
|
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
|
github.com/go-openapi/analysis v0.21.2 // indirect
|
|
github.com/go-openapi/errors v0.20.2 // indirect
|
|
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
|
github.com/go-openapi/jsonreference v0.19.6 // indirect
|
|
github.com/go-openapi/loads v0.21.1 // indirect
|
|
github.com/go-openapi/runtime v0.24.0 // indirect
|
|
github.com/go-openapi/spec v0.20.4 // indirect
|
|
github.com/go-openapi/strfmt v0.21.2 // indirect
|
|
github.com/go-openapi/swag v0.21.1 // indirect
|
|
github.com/go-openapi/validate v0.22.0 // indirect
|
|
github.com/go-stack/stack v1.8.1 // indirect
|
|
github.com/google/uuid v1.6.0 // indirect
|
|
github.com/hashicorp/errwrap v1.0.0 // indirect
|
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
|
github.com/josharian/intern v1.0.0 // indirect
|
|
github.com/klauspost/compress v1.18.5 // indirect
|
|
github.com/mailru/easyjson v0.7.7 // indirect
|
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
|
github.com/mdlayher/socket v0.2.0 // indirect
|
|
github.com/mdlayher/vsock v1.1.1 // indirect
|
|
github.com/mitchellh/mapstructure v1.4.3 // indirect
|
|
github.com/ncruces/go-strftime v0.1.9 // indirect
|
|
github.com/oklog/ulid v1.3.1 // indirect
|
|
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
|
github.com/pkg/errors v0.9.1 // indirect
|
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
|
github.com/spf13/pflag v1.0.5 // indirect
|
|
github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5 // indirect
|
|
github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f // indirect
|
|
go.mongodb.org/mongo-driver v1.8.3 // indirect
|
|
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect
|
|
golang.org/x/mod v0.31.0 // indirect
|
|
golang.org/x/net v0.48.0 // indirect
|
|
golang.org/x/sync v0.19.0 // indirect
|
|
golang.org/x/text v0.32.0 // indirect
|
|
golang.org/x/tools v0.40.0 // indirect
|
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
|
modernc.org/libc v1.66.3 // indirect
|
|
modernc.org/mathutil v1.7.1 // indirect
|
|
modernc.org/memory v1.11.0 // indirect
|
|
)
|