New internal/imagepull/ subpackage. Three concerns, each independently testable: Pull (imagepull.go): - github.com/google/go-containerregistry's remote.Image with the linux/amd64 platform pinned. Anonymous pulls only for v1. - Layer blobs cached on disk via cache.NewFilesystemCache under <cacheDir>/blobs/sha256/<hex> — OCI-standard layout so skopeo/crane could co-exist later. - Eagerly touches every layer once so network errors surface at Pull time, not deep in Flatten. Flatten (flatten.go): - Replays layers oldest-first into destDir. - Whiteout-aware: .wh.<name> deletes the named entry, .wh..wh..opq wipes the parent directory's contents from prior layers. - Path-traversal hardening mirrored from kernelcat extractTar: reject .., absolute paths, and symlinks/hardlinks whose resolved target escapes destDir. - Handles tar.TypeReg, TypeDir, TypeSymlink, TypeLink. Skips device/fifo nodes silently (need privilege; udev/devtmpfs handles them in the guest). BuildExt4 (ext4.go): - Truncates outFile to sizeBytes, then runs `mkfs.ext4 -F -d <srcDir> -E root_owner=0:0`. No mount, no sudo, no loopback. - 64 MiB floor; callers handle real sizing with content-aware headroom. - File ownership in the resulting ext4 reflects srcDir's on-disk ownership — runner's uid/gid since extraction was unprivileged. Documented in package doc as a Phase A v1 limitation; Phase B will add a debugfs- or tar2ext4-based ownership fixup. paths.Layout gains OCICacheDir at $XDG_CACHE_HOME/banger/oci/, ensured at startup alongside the other dirs. Tests use go-containerregistry's in-process registry to push and pull synthetic multi-layer images. Cover: layer caching round-trip, whiteout + opaque-marker handling, path-traversal rejection, unsafe symlink rejection, real mkfs.ext4 round-trip (skipped if mkfs.ext4 absent), and tiny-size rejection. go-containerregistry v0.21.5 added as a direct dep, plus its transitive closure (containerd/stargz, opencontainers/go-digest, docker/cli config helpers, etc). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
73 lines
3.2 KiB
Modula-2
73 lines
3.2 KiB
Modula-2
module banger
|
|
|
|
go 1.25.0
|
|
|
|
require (
|
|
github.com/firecracker-microvm/firecracker-go-sdk v1.0.0
|
|
github.com/google/go-containerregistry v0.21.5
|
|
github.com/klauspost/compress v1.18.5
|
|
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.10.2
|
|
golang.org/x/crypto v0.50.0
|
|
golang.org/x/sys v0.43.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/containerd/stargz-snapshotter/estargz v0.18.2 // indirect
|
|
github.com/containernetworking/cni v1.0.1 // indirect
|
|
github.com/containernetworking/plugins v1.0.1 // indirect
|
|
github.com/docker/cli v29.4.0+incompatible // indirect
|
|
github.com/docker/docker-credential-helpers v0.9.3 // 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/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/go-homedir v1.1.0 // 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/opencontainers/go-digest v1.0.0 // indirect
|
|
github.com/opencontainers/image-spec v1.1.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.10 // indirect
|
|
github.com/vbatts/tar-split v0.12.2 // 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.35.0 // indirect
|
|
golang.org/x/net v0.53.0 // indirect
|
|
golang.org/x/sync v0.20.0 // indirect
|
|
golang.org/x/text v0.36.0 // indirect
|
|
golang.org/x/tools v0.44.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
|
|
)
|