|
@@ -6,7 +6,9 @@ import (
|
|
|
"path/filepath"
|
|
|
|
|
|
"github.com/containerd/containerd/content/local"
|
|
|
+ ctdmetadata "github.com/containerd/containerd/metadata"
|
|
|
"github.com/containerd/containerd/platforms"
|
|
|
+ "github.com/containerd/containerd/snapshots"
|
|
|
"github.com/docker/docker/api/types"
|
|
|
"github.com/docker/docker/api/types/filters"
|
|
|
"github.com/docker/docker/builder/builder-next/adapters/containerimage"
|
|
@@ -29,13 +31,15 @@ import (
|
|
|
dockerfile "github.com/moby/buildkit/frontend/dockerfile/builder"
|
|
|
"github.com/moby/buildkit/frontend/gateway"
|
|
|
"github.com/moby/buildkit/frontend/gateway/forwarder"
|
|
|
- "github.com/moby/buildkit/snapshot/blobmapping"
|
|
|
+ containerdsnapshot "github.com/moby/buildkit/snapshot/containerd"
|
|
|
"github.com/moby/buildkit/solver/bboltcachestorage"
|
|
|
"github.com/moby/buildkit/util/binfmt_misc"
|
|
|
"github.com/moby/buildkit/util/entitlements"
|
|
|
+ "github.com/moby/buildkit/util/leaseutil"
|
|
|
"github.com/moby/buildkit/worker"
|
|
|
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
|
|
"github.com/pkg/errors"
|
|
|
+ bolt "go.etcd.io/bbolt"
|
|
|
)
|
|
|
|
|
|
func newController(rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
|
@@ -55,7 +59,7 @@ func newController(rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
|
|
return nil, errors.Errorf("could not access graphdriver")
|
|
|
}
|
|
|
|
|
|
- sbase, err := snapshot.NewSnapshotter(snapshot.Opt{
|
|
|
+ snapshotter, err := snapshot.NewSnapshotter(snapshot.Opt{
|
|
|
GraphDriver: driver,
|
|
|
LayerStore: dist.LayerStore,
|
|
|
Root: root,
|
|
@@ -69,20 +73,22 @@ func newController(rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- store = &contentStoreNoLabels{store}
|
|
|
+
|
|
|
+ db, err := bolt.Open(filepath.Join(root, "containerdmeta.db"), 0644, nil)
|
|
|
+ if err != nil {
|
|
|
+ return nil, errors.WithStack(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ mdb := ctdmetadata.NewDB(db, store, map[string]snapshots.Snapshotter{})
|
|
|
+
|
|
|
+ store = containerdsnapshot.NewContentStore(mdb.ContentStore(), "buildkit")
|
|
|
|
|
|
md, err := metadata.NewStore(filepath.Join(root, "metadata.db"))
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- snapshotter := blobmapping.NewSnapshotter(blobmapping.Opt{
|
|
|
- Content: store,
|
|
|
- Snapshotter: sbase,
|
|
|
- MetadataStore: md,
|
|
|
- })
|
|
|
-
|
|
|
- layerGetter, ok := sbase.(imagerefchecker.LayerGetter)
|
|
|
+ layerGetter, ok := snapshotter.(imagerefchecker.LayerGetter)
|
|
|
if !ok {
|
|
|
return nil, errors.Errorf("snapshotter does not implement layergetter")
|
|
|
}
|
|
@@ -96,6 +102,8 @@ func newController(rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
|
|
Snapshotter: snapshotter,
|
|
|
MetadataStore: md,
|
|
|
PruneRefChecker: refChecker,
|
|
|
+ LeaseManager: leaseutil.WithNamespace(ctdmetadata.NewLeaseManager(mdb), "buildkit"),
|
|
|
+ ContentStore: store,
|
|
|
})
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
@@ -109,6 +117,7 @@ func newController(rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
|
|
ImageStore: dist.ImageStore,
|
|
|
ReferenceStore: dist.ReferenceStore,
|
|
|
ResolverOpt: opt.ResolverOpt,
|
|
|
+ LayerStore: dist.LayerStore,
|
|
|
})
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
@@ -121,7 +130,7 @@ func newController(rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- differ, ok := sbase.(containerimageexp.Differ)
|
|
|
+ differ, ok := snapshotter.(containerimageexp.Differ)
|
|
|
if !ok {
|
|
|
return nil, errors.Errorf("snapshotter doesn't support differ")
|
|
|
}
|
|
@@ -145,7 +154,7 @@ func newController(rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
|
|
return nil, errors.Wrap(err, "could not get builder GC policy")
|
|
|
}
|
|
|
|
|
|
- layers, ok := sbase.(mobyworker.LayerAccess)
|
|
|
+ layers, ok := snapshotter.(mobyworker.LayerAccess)
|
|
|
if !ok {
|
|
|
return nil, errors.Errorf("snapshotter doesn't support differ")
|
|
|
}
|