mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #39210 from tonistiigi/update-buildkit
vendor: update buildkit to f238f1ef
This commit is contained in:
commit
8861376202
13 changed files with 119 additions and 19 deletions
|
@ -27,7 +27,7 @@ github.com/imdario/mergo 7c29201646fa3de8506f70121347
|
||||||
golang.org/x/sync e225da77a7e68af35c70ccbf71af2b83e6acac3c
|
golang.org/x/sync e225da77a7e68af35c70ccbf71af2b83e6acac3c
|
||||||
|
|
||||||
# buildkit
|
# buildkit
|
||||||
github.com/moby/buildkit 8c0fa8fdec187d8f259a349d2da16dc2dc5f144a # v0.5.0
|
github.com/moby/buildkit f238f1efb04f00bf0cc147141fda9ddb55c8bc49
|
||||||
github.com/tonistiigi/fsutil 3bbb99cdbd76619ab717299830c60f6f2a533a6b
|
github.com/tonistiigi/fsutil 3bbb99cdbd76619ab717299830c60f6f2a533a6b
|
||||||
github.com/grpc-ecosystem/grpc-opentracing 8e809c8a86450a29b90dcc9efbf062d0fe6d9746
|
github.com/grpc-ecosystem/grpc-opentracing 8e809c8a86450a29b90dcc9efbf062d0fe6d9746
|
||||||
github.com/opentracing/opentracing-go 1361b9cd60be79c4c3a7fa9841b3c132e40066a7
|
github.com/opentracing/opentracing-go 1361b9cd60be79c4c3a7fa9841b3c132e40066a7
|
||||||
|
|
2
vendor/github.com/moby/buildkit/client/llb/exec.go
generated
vendored
2
vendor/github.com/moby/buildkit/client/llb/exec.go
generated
vendored
|
@ -177,7 +177,7 @@ func (e *ExecOp) Marshal(c *Constraints) (digest.Digest, []byte, *pb.OpMetadata,
|
||||||
addCap(&e.constraints, pb.CapExecMetaNetwork)
|
addCap(&e.constraints, pb.CapExecMetaNetwork)
|
||||||
}
|
}
|
||||||
|
|
||||||
if e.meta.Security != SecurityModeInsecure {
|
if e.meta.Security != SecurityModeSandbox {
|
||||||
addCap(&e.constraints, pb.CapExecMetaSecurity)
|
addCap(&e.constraints, pb.CapExecMetaSecurity)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
3
vendor/github.com/moby/buildkit/client/solve.go
generated
vendored
3
vendor/github.com/moby/buildkit/client/solve.go
generated
vendored
|
@ -410,9 +410,6 @@ func parseCacheOptions(opt SolveOpt) (*cacheOptions, error) {
|
||||||
if csDir == "" {
|
if csDir == "" {
|
||||||
return nil, errors.New("local cache importer requires src")
|
return nil, errors.New("local cache importer requires src")
|
||||||
}
|
}
|
||||||
if err := os.MkdirAll(csDir, 0755); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
cs, err := contentlocal.NewStore(csDir)
|
cs, err := contentlocal.NewStore(csDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
2
vendor/github.com/moby/buildkit/control/gateway/gateway.go
generated
vendored
2
vendor/github.com/moby/buildkit/control/gateway/gateway.go
generated
vendored
|
@ -63,7 +63,9 @@ func (gwf *GatewayForwarder) lookupForwarder(ctx context.Context) (gateway.LLBBr
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
<-ctx.Done()
|
<-ctx.Done()
|
||||||
|
gwf.mu.Lock()
|
||||||
gwf.updateCond.Broadcast()
|
gwf.updateCond.Broadcast()
|
||||||
|
gwf.mu.Unlock()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
gwf.mu.RLock()
|
gwf.mu.RLock()
|
||||||
|
|
17
vendor/github.com/moby/buildkit/executor/oci/spec_unix.go
generated
vendored
17
vendor/github.com/moby/buildkit/executor/oci/spec_unix.go
generated
vendored
|
@ -95,6 +95,23 @@ func GenerateSpec(ctx context.Context, meta executor.Meta, mounts []executor.Mou
|
||||||
Options: []string{"ro", "nosuid", "noexec", "nodev"},
|
Options: []string{"ro", "nosuid", "noexec", "nodev"},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if processMode == NoProcessSandbox {
|
||||||
|
var maskedPaths []string
|
||||||
|
for _, s := range s.Linux.MaskedPaths {
|
||||||
|
if !hasPrefix(s, "/proc") {
|
||||||
|
maskedPaths = append(maskedPaths, s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s.Linux.MaskedPaths = maskedPaths
|
||||||
|
var readonlyPaths []string
|
||||||
|
for _, s := range s.Linux.ReadonlyPaths {
|
||||||
|
if !hasPrefix(s, "/proc") {
|
||||||
|
readonlyPaths = append(readonlyPaths, s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s.Linux.ReadonlyPaths = readonlyPaths
|
||||||
|
}
|
||||||
|
|
||||||
if meta.SecurityMode == pb.SecurityMode_INSECURE {
|
if meta.SecurityMode == pb.SecurityMode_INSECURE {
|
||||||
//make sysfs rw mount for insecure mode.
|
//make sysfs rw mount for insecure mode.
|
||||||
for _, m := range s.Mounts {
|
for _, m := range s.Mounts {
|
||||||
|
|
18
vendor/github.com/moby/buildkit/executor/runcexecutor/executor.go
generated
vendored
18
vendor/github.com/moby/buildkit/executor/runcexecutor/executor.go
generated
vendored
|
@ -41,6 +41,8 @@ type Opt struct {
|
||||||
// ProcessMode
|
// ProcessMode
|
||||||
ProcessMode oci.ProcessMode
|
ProcessMode oci.ProcessMode
|
||||||
IdentityMapping *idtools.IdentityMapping
|
IdentityMapping *idtools.IdentityMapping
|
||||||
|
// runc run --no-pivot (unrecommended)
|
||||||
|
NoPivot bool
|
||||||
}
|
}
|
||||||
|
|
||||||
var defaultCommandCandidates = []string{"buildkit-runc", "runc"}
|
var defaultCommandCandidates = []string{"buildkit-runc", "runc"}
|
||||||
|
@ -54,6 +56,7 @@ type runcExecutor struct {
|
||||||
networkProviders map[pb.NetMode]network.Provider
|
networkProviders map[pb.NetMode]network.Provider
|
||||||
processMode oci.ProcessMode
|
processMode oci.ProcessMode
|
||||||
idmap *idtools.IdentityMapping
|
idmap *idtools.IdentityMapping
|
||||||
|
noPivot bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(opt Opt, networkProviders map[pb.NetMode]network.Provider) (executor.Executor, error) {
|
func New(opt Opt, networkProviders map[pb.NetMode]network.Provider) (executor.Executor, error) {
|
||||||
|
@ -111,6 +114,7 @@ func New(opt Opt, networkProviders map[pb.NetMode]network.Provider) (executor.Ex
|
||||||
networkProviders: networkProviders,
|
networkProviders: networkProviders,
|
||||||
processMode: opt.ProcessMode,
|
processMode: opt.ProcessMode,
|
||||||
idmap: opt.IdentityMapping,
|
idmap: opt.IdentityMapping,
|
||||||
|
noPivot: opt.NoPivot,
|
||||||
}
|
}
|
||||||
return w, nil
|
return w, nil
|
||||||
}
|
}
|
||||||
|
@ -193,6 +197,17 @@ func (w *runcExecutor) Exec(ctx context.Context, meta executor.Meta, root cache.
|
||||||
opts = append(opts, containerdoci.WithRootFSReadonly())
|
opts = append(opts, containerdoci.WithRootFSReadonly())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
identity = idtools.Identity{
|
||||||
|
UID: int(uid),
|
||||||
|
GID: int(gid),
|
||||||
|
}
|
||||||
|
if w.idmap != nil {
|
||||||
|
identity, err = w.idmap.ToHost(identity)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if w.cgroupParent != "" {
|
if w.cgroupParent != "" {
|
||||||
var cgroupsPath string
|
var cgroupsPath string
|
||||||
lastSeparator := w.cgroupParent[len(w.cgroupParent)-1:]
|
lastSeparator := w.cgroupParent[len(w.cgroupParent)-1:]
|
||||||
|
@ -269,7 +284,8 @@ func (w *runcExecutor) Exec(ctx context.Context, meta executor.Meta, root cache.
|
||||||
|
|
||||||
logrus.Debugf("> creating %s %v", id, meta.Args)
|
logrus.Debugf("> creating %s %v", id, meta.Args)
|
||||||
status, err := w.runc.Run(runCtx, id, bundle, &runc.CreateOpts{
|
status, err := w.runc.Run(runCtx, id, bundle, &runc.CreateOpts{
|
||||||
IO: &forwardIO{stdin: stdin, stdout: stdout, stderr: stderr},
|
IO: &forwardIO{stdin: stdin, stdout: stdout, stderr: stderr},
|
||||||
|
NoPivot: w.noPivot,
|
||||||
})
|
})
|
||||||
close(done)
|
close(done)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
47
vendor/github.com/moby/buildkit/frontend/dockerfile/dockerfile2llb/convert.go
generated
vendored
47
vendor/github.com/moby/buildkit/frontend/dockerfile/dockerfile2llb/convert.go
generated
vendored
|
@ -172,10 +172,6 @@ func Dockerfile2LLB(ctx context.Context, dt []byte, opt ConvertOpt) (*llb.State,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(allDispatchStates.states) == 1 {
|
|
||||||
allDispatchStates.states[0].stageName = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
var target *dispatchState
|
var target *dispatchState
|
||||||
if opt.Target == "" {
|
if opt.Target == "" {
|
||||||
target = allDispatchStates.lastTarget()
|
target = allDispatchStates.lastTarget()
|
||||||
|
@ -207,6 +203,14 @@ func Dockerfile2LLB(ctx context.Context, dt []byte, opt ConvertOpt) (*llb.State,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if has, state := hasCircularDependency(allDispatchStates.states); has {
|
||||||
|
return nil, nil, fmt.Errorf("circular dependency detected on stage: %s", state.stageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(allDispatchStates.states) == 1 {
|
||||||
|
allDispatchStates.states[0].stageName = ""
|
||||||
|
}
|
||||||
|
|
||||||
eg, ctx := errgroup.WithContext(ctx)
|
eg, ctx := errgroup.WithContext(ctx)
|
||||||
for i, d := range allDispatchStates.states {
|
for i, d := range allDispatchStates.states {
|
||||||
reachable := isReachable(target, d)
|
reachable := isReachable(target, d)
|
||||||
|
@ -1130,6 +1134,41 @@ func isReachable(from, to *dispatchState) (ret bool) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hasCircularDependency(states []*dispatchState) (bool, *dispatchState) {
|
||||||
|
var visit func(state *dispatchState) bool
|
||||||
|
if states == nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
visited := make(map[*dispatchState]struct{})
|
||||||
|
path := make(map[*dispatchState]struct{})
|
||||||
|
|
||||||
|
visit = func(state *dispatchState) bool {
|
||||||
|
_, ok := visited[state]
|
||||||
|
if ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
visited[state] = struct{}{}
|
||||||
|
path[state] = struct{}{}
|
||||||
|
for dep := range state.deps {
|
||||||
|
_, ok = path[dep]
|
||||||
|
if ok {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if visit(dep) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete(path, state)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for _, state := range states {
|
||||||
|
if visit(state) {
|
||||||
|
return true, state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
func parseUser(str string) (uid uint32, gid uint32, err error) {
|
func parseUser(str string) (uid uint32, gid uint32, err error) {
|
||||||
if str == "" {
|
if str == "" {
|
||||||
return 0, 0, nil
|
return 0, 0, nil
|
||||||
|
|
31
vendor/github.com/moby/buildkit/frontend/gateway/gateway.go
generated
vendored
31
vendor/github.com/moby/buildkit/frontend/gateway/gateway.go
generated
vendored
|
@ -158,7 +158,7 @@ func (gf *gatewayFrontend) Solve(ctx context.Context, llbBridge frontend.Fronten
|
||||||
rootFS = workerRef.ImmutableRef
|
rootFS = workerRef.ImmutableRef
|
||||||
}
|
}
|
||||||
|
|
||||||
lbf, err := newLLBBridgeForwarder(ctx, llbBridge, gf.workers)
|
lbf, ctx, err := newLLBBridgeForwarder(ctx, llbBridge, gf.workers)
|
||||||
defer lbf.conn.Close()
|
defer lbf.conn.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -210,6 +210,9 @@ func (gf *gatewayFrontend) Solve(ctx context.Context, llbBridge frontend.Fronten
|
||||||
err = llbBridge.Exec(ctx, meta, rootFS, lbf.Stdin, lbf.Stdout, os.Stderr)
|
err = llbBridge.Exec(ctx, meta, rootFS, lbf.Stdin, lbf.Stdout, os.Stderr)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if errors.Cause(err) == context.Canceled && lbf.isErrServerClosed {
|
||||||
|
err = errors.Errorf("frontend grpc server closed unexpectedly")
|
||||||
|
}
|
||||||
// An existing error (set via Return rpc) takes
|
// An existing error (set via Return rpc) takes
|
||||||
// precedence over this error, which in turn takes
|
// precedence over this error, which in turn takes
|
||||||
// precedence over a success reported via Return.
|
// precedence over a success reported via Return.
|
||||||
|
@ -294,15 +297,24 @@ func NewBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLBBridg
|
||||||
return lbf
|
return lbf
|
||||||
}
|
}
|
||||||
|
|
||||||
func newLLBBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLBBridge, workers frontend.WorkerInfos) (*llbBridgeForwarder, error) {
|
func newLLBBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLBBridge, workers frontend.WorkerInfos) (*llbBridgeForwarder, context.Context, error) {
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
lbf := NewBridgeForwarder(ctx, llbBridge, workers)
|
lbf := NewBridgeForwarder(ctx, llbBridge, workers)
|
||||||
server := grpc.NewServer()
|
server := grpc.NewServer()
|
||||||
grpc_health_v1.RegisterHealthServer(server, health.NewServer())
|
grpc_health_v1.RegisterHealthServer(server, health.NewServer())
|
||||||
pb.RegisterLLBBridgeServer(server, lbf)
|
pb.RegisterLLBBridgeServer(server, lbf)
|
||||||
|
|
||||||
go serve(ctx, server, lbf.conn)
|
go func() {
|
||||||
|
serve(ctx, server, lbf.conn)
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
default:
|
||||||
|
lbf.isErrServerClosed = true
|
||||||
|
}
|
||||||
|
cancel()
|
||||||
|
}()
|
||||||
|
|
||||||
return lbf, nil
|
return lbf, ctx, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type pipe struct {
|
type pipe struct {
|
||||||
|
@ -372,11 +384,12 @@ type llbBridgeForwarder struct {
|
||||||
// lastRef solver.CachedResult
|
// lastRef solver.CachedResult
|
||||||
// lastRefs map[string]solver.CachedResult
|
// lastRefs map[string]solver.CachedResult
|
||||||
// err error
|
// err error
|
||||||
doneCh chan struct{} // closed when result or err become valid through a call to a Return
|
doneCh chan struct{} // closed when result or err become valid through a call to a Return
|
||||||
result *frontend.Result
|
result *frontend.Result
|
||||||
err error
|
err error
|
||||||
exporterAttr map[string][]byte
|
exporterAttr map[string][]byte
|
||||||
workers frontend.WorkerInfos
|
workers frontend.WorkerInfos
|
||||||
|
isErrServerClosed bool
|
||||||
*pipe
|
*pipe
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
vendor/github.com/moby/buildkit/frontend/gateway/grpcclient/client.go
generated
vendored
2
vendor/github.com/moby/buildkit/frontend/gateway/grpcclient/client.go
generated
vendored
|
@ -28,6 +28,8 @@ type GrpcClient interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(ctx context.Context, opts map[string]string, session, product string, c pb.LLBBridgeClient, w []client.WorkerInfo) (GrpcClient, error) {
|
func New(ctx context.Context, opts map[string]string, session, product string, c pb.LLBBridgeClient, w []client.WorkerInfo) (GrpcClient, error) {
|
||||||
|
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
|
||||||
|
defer cancel()
|
||||||
resp, err := c.Ping(ctx, &pb.PingRequest{})
|
resp, err := c.Ping(ctx, &pb.PingRequest{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
6
vendor/github.com/moby/buildkit/session/grpchijack/dial.go
generated
vendored
6
vendor/github.com/moby/buildkit/session/grpchijack/dial.go
generated
vendored
|
@ -46,6 +46,7 @@ type conn struct {
|
||||||
|
|
||||||
closedOnce sync.Once
|
closedOnce sync.Once
|
||||||
readMu sync.Mutex
|
readMu sync.Mutex
|
||||||
|
writeMu sync.Mutex
|
||||||
err error
|
err error
|
||||||
closeCh chan struct{}
|
closeCh chan struct{}
|
||||||
}
|
}
|
||||||
|
@ -79,6 +80,8 @@ func (c *conn) Read(b []byte) (n int, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *conn) Write(b []byte) (int, error) {
|
func (c *conn) Write(b []byte) (int, error) {
|
||||||
|
c.writeMu.Lock()
|
||||||
|
defer c.writeMu.Unlock()
|
||||||
m := &controlapi.BytesMessage{Data: b}
|
m := &controlapi.BytesMessage{Data: b}
|
||||||
if err := c.stream.SendMsg(m); err != nil {
|
if err := c.stream.SendMsg(m); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
|
@ -93,7 +96,9 @@ func (c *conn) Close() (err error) {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if cs, ok := c.stream.(grpc.ClientStream); ok {
|
if cs, ok := c.stream.(grpc.ClientStream); ok {
|
||||||
|
c.writeMu.Lock()
|
||||||
err = cs.CloseSend()
|
err = cs.CloseSend()
|
||||||
|
c.writeMu.Unlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -106,6 +111,7 @@ func (c *conn) Close() (err error) {
|
||||||
err = c.stream.RecvMsg(m)
|
err = c.stream.RecvMsg(m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err != io.EOF {
|
if err != io.EOF {
|
||||||
|
c.readMu.Unlock()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = nil
|
err = nil
|
||||||
|
|
2
vendor/github.com/moby/buildkit/session/manager.go
generated
vendored
2
vendor/github.com/moby/buildkit/session/manager.go
generated
vendored
|
@ -162,7 +162,9 @@ func (sm *Manager) Get(ctx context.Context, id string) (Caller, error) {
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
sm.mu.Lock()
|
||||||
sm.updateCondition.Broadcast()
|
sm.updateCondition.Broadcast()
|
||||||
|
sm.mu.Unlock()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
2
vendor/github.com/moby/buildkit/solver/jobs.go
generated
vendored
2
vendor/github.com/moby/buildkit/solver/jobs.go
generated
vendored
|
@ -404,7 +404,9 @@ func (jl *Solver) Get(id string) (*Job, error) {
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
<-ctx.Done()
|
<-ctx.Done()
|
||||||
|
jl.mu.Lock()
|
||||||
jl.updateCond.Broadcast()
|
jl.updateCond.Broadcast()
|
||||||
|
jl.mu.Unlock()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
jl.mu.RLock()
|
jl.mu.RLock()
|
||||||
|
|
4
vendor/github.com/moby/buildkit/util/progress/progress.go
generated
vendored
4
vendor/github.com/moby/buildkit/util/progress/progress.go
generated
vendored
|
@ -101,7 +101,9 @@ func (pr *progressReader) Read(ctx context.Context) ([]*Progress, error) {
|
||||||
select {
|
select {
|
||||||
case <-done:
|
case <-done:
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
pr.mu.Lock()
|
||||||
pr.cond.Broadcast()
|
pr.cond.Broadcast()
|
||||||
|
pr.mu.Unlock()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
pr.mu.Lock()
|
pr.mu.Lock()
|
||||||
|
@ -163,7 +165,9 @@ func pipe() (*progressReader, *progressWriter, func()) {
|
||||||
pr.cond = sync.NewCond(&pr.mu)
|
pr.cond = sync.NewCond(&pr.mu)
|
||||||
go func() {
|
go func() {
|
||||||
<-ctx.Done()
|
<-ctx.Done()
|
||||||
|
pr.mu.Lock()
|
||||||
pr.cond.Broadcast()
|
pr.cond.Broadcast()
|
||||||
|
pr.mu.Unlock()
|
||||||
}()
|
}()
|
||||||
pw := &progressWriter{
|
pw := &progressWriter{
|
||||||
reader: pr,
|
reader: pr,
|
||||||
|
|
Loading…
Add table
Reference in a new issue