diff --git a/README.md b/README.md index 10b2b0e6..ae8c566f 100644 --- a/README.md +++ b/README.md @@ -232,7 +232,7 @@ export JAEGER_TRACE=0.0.0.0:6831 ### Supported runc version -During development, BuildKit is tested with the version of runc that is being used by the containerd repository. Please refer to [runc.md](https://github.com/containerd/containerd/blob/v1.1.0/RUNC.md) for more information. +During development, BuildKit is tested with the version of runc that is being used by the containerd repository. Please refer to [runc.md](https://github.com/containerd/containerd/blob/v1.1.3/RUNC.md) for more information. ### Running BuildKit without root privileges diff --git a/client/client_test.go b/client/client_test.go index af0aefa3..37241ead 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -65,6 +65,10 @@ func TestClientIntegration(t *testing.T) { }) } +func newContainerd(cdAddress string) (*containerd.Client, error) { + return containerd.New(cdAddress, containerd.WithTimeout(60*time.Second)) +} + func testExtraHosts(t *testing.T, sb integration.Sandbox) { t.Parallel() @@ -670,7 +674,7 @@ func testBuildPushAndValidate(t *testing.T, sb integration.Sandbox) { // TODO: make public pull helper function so this can be checked for standalone as well - client, err := containerd.New(cdAddress) + client, err := newContainerd(cdAddress) require.NoError(t, err) defer client.Close() @@ -1312,7 +1316,7 @@ loop0: // TODO: make public pull helper function so this can be checked for standalone as well - client, err := containerd.New(cdAddress) + client, err := newContainerd(cdAddress) require.NoError(t, err) defer client.Close() diff --git a/cmd/buildctl/build_test.go b/cmd/buildctl/build_test.go index de724eb6..ad1e9327 100644 --- a/cmd/buildctl/build_test.go +++ b/cmd/buildctl/build_test.go @@ -9,6 +9,7 @@ import ( "os" "path/filepath" "testing" + "time" "github.com/containerd/containerd" "github.com/containerd/containerd/namespaces" @@ -90,7 +91,7 @@ func testBuildContainerdExporter(t *testing.T, sb integration.Sandbox) { err = cmd.Run() require.NoError(t, err) - client, err := containerd.New(cdAddress) + client, err := containerd.New(cdAddress, containerd.WithTimeout(60*time.Second)) require.NoError(t, err) defer client.Close() diff --git a/cmd/buildkitd/main_containerd_worker.go b/cmd/buildkitd/main_containerd_worker.go index 7dd198ce..25bf2ad9 100644 --- a/cmd/buildkitd/main_containerd_worker.go +++ b/cmd/buildkitd/main_containerd_worker.go @@ -5,6 +5,7 @@ package main import ( "os" "strings" + "time" ctd "github.com/containerd/containerd" "github.com/moby/buildkit/worker" @@ -66,7 +67,7 @@ func containerdWorkerInitializer(c *cli.Context, common workerInitializerOpt) ([ logrus.Warn("rootless mode is not supported for containerd workers. disabling containerd worker.") return nil, nil } - opt, err := containerd.NewWorkerOpt(common.root, socket, ctd.DefaultSnapshotter, labels) + opt, err := containerd.NewWorkerOpt(common.root, socket, ctd.DefaultSnapshotter, labels, ctd.WithTimeout(60*time.Second)) if err != nil { return nil, err } diff --git a/examples/buildkit0/buildkit.go b/examples/buildkit0/buildkit.go index 6a9c3982..d706c625 100644 --- a/examples/buildkit0/buildkit.go +++ b/examples/buildkit0/buildkit.go @@ -17,7 +17,7 @@ type buildOpt struct { func main() { var opt buildOpt flag.BoolVar(&opt.withContainerd, "with-containerd", true, "enable containerd worker") - flag.StringVar(&opt.containerd, "containerd", "v1.1.0", "containerd version") + flag.StringVar(&opt.containerd, "containerd", "v1.1.3", "containerd version") flag.StringVar(&opt.runc, "runc", "dd56ece8236d6d9e5bed4ea0c31fe53c7b873ff4", "runc version") flag.Parse() diff --git a/examples/buildkit1/buildkit.go b/examples/buildkit1/buildkit.go index 090534f6..72725c3a 100644 --- a/examples/buildkit1/buildkit.go +++ b/examples/buildkit1/buildkit.go @@ -17,7 +17,7 @@ type buildOpt struct { func main() { var opt buildOpt flag.BoolVar(&opt.withContainerd, "with-containerd", true, "enable containerd worker") - flag.StringVar(&opt.containerd, "containerd", "v1.1.0", "containerd version") + flag.StringVar(&opt.containerd, "containerd", "v1.1.3", "containerd version") flag.StringVar(&opt.runc, "runc", "dd56ece8236d6d9e5bed4ea0c31fe53c7b873ff4", "runc version") flag.Parse() diff --git a/examples/buildkit2/buildkit.go b/examples/buildkit2/buildkit.go index 6a1cb404..36b95c23 100644 --- a/examples/buildkit2/buildkit.go +++ b/examples/buildkit2/buildkit.go @@ -17,7 +17,7 @@ type buildOpt struct { func main() { var opt buildOpt flag.BoolVar(&opt.withContainerd, "with-containerd", true, "enable containerd worker") - flag.StringVar(&opt.containerd, "containerd", "v1.1.0", "containerd version") + flag.StringVar(&opt.containerd, "containerd", "v1.1.3", "containerd version") flag.StringVar(&opt.runc, "runc", "dd56ece8236d6d9e5bed4ea0c31fe53c7b873ff4", "runc version") flag.Parse() diff --git a/examples/buildkit3/buildkit.go b/examples/buildkit3/buildkit.go index e5a9fb8a..fabb4e80 100644 --- a/examples/buildkit3/buildkit.go +++ b/examples/buildkit3/buildkit.go @@ -18,7 +18,7 @@ type buildOpt struct { func main() { var opt buildOpt flag.BoolVar(&opt.withContainerd, "with-containerd", true, "enable containerd worker") - flag.StringVar(&opt.containerd, "containerd", "v1.1.0", "containerd version") + flag.StringVar(&opt.containerd, "containerd", "v1.1.3", "containerd version") flag.StringVar(&opt.runc, "runc", "dd56ece8236d6d9e5bed4ea0c31fe53c7b873ff4", "runc version") flag.StringVar(&opt.buildkit, "buildkit", "master", "buildkit version") flag.Parse() diff --git a/examples/gobuild/main.go b/examples/gobuild/main.go index 058a0bf6..b48c8e8f 100644 --- a/examples/gobuild/main.go +++ b/examples/gobuild/main.go @@ -43,7 +43,7 @@ func run() error { _ = buildkitd containerd, err := gb.BuildExe(gobuild.BuildOpt{ - Source: llb.Git("github.com/containerd/containerd", "v1.1.0"), + Source: llb.Git("github.com/containerd/containerd", "v1.1.3"), MountPath: "/go/src/github.com/containerd/containerd", Pkg: "github.com/containerd/containerd/cmd/containerd", BuildTags: []string{"no_btrfs"}, diff --git a/frontend/dockerfile/dockerfile_test.go b/frontend/dockerfile/dockerfile_test.go index 7d87b955..f37294f5 100644 --- a/frontend/dockerfile/dockerfile_test.go +++ b/frontend/dockerfile/dockerfile_test.go @@ -77,6 +77,10 @@ func TestIntegration(t *testing.T) { }) } +func newContainerd(cdAddress string) (*containerd.Client, error) { + return containerd.New(cdAddress, containerd.WithTimeout(60*time.Second)) +} + func testExportMultiPlatform(t *testing.T, sb integration.Sandbox) { t.Parallel() @@ -470,7 +474,7 @@ ENTRYPOINT my entrypoint }, nil) require.NoError(t, err) - ctr, err := containerd.New(cdAddress) + ctr, err := newContainerd(cdAddress) require.NoError(t, err) defer ctr.Close() @@ -561,7 +565,7 @@ COPY foo . }, nil) require.NoError(t, err) - ctr, err := containerd.New(cdAddress) + ctr, err := newContainerd(cdAddress) require.NoError(t, err) defer ctr.Close() @@ -1060,7 +1064,7 @@ ENV foo=bar err = cmd.Run() require.NoError(t, err) - client, err := containerd.New(cdAddress) + client, err := newContainerd(cdAddress) require.NoError(t, err) defer client.Close() @@ -1143,7 +1147,7 @@ EXPOSE 5000 cdAddress = cd.ContainerdAddress() } - client, err := containerd.New(cdAddress) + client, err := newContainerd(cdAddress) require.NoError(t, err) defer client.Close() @@ -1324,7 +1328,7 @@ RUN ["ls"] cdAddress = cd.ContainerdAddress() } - client, err := containerd.New(cdAddress) + client, err := newContainerd(cdAddress) require.NoError(t, err) defer client.Close() @@ -1482,7 +1486,7 @@ USER nobody cdAddress = cd.ContainerdAddress() } - client, err := containerd.New(cdAddress) + client, err := newContainerd(cdAddress) require.NoError(t, err) defer client.Close() @@ -2055,7 +2059,7 @@ LABEL foo=bar cdAddress = cd.ContainerdAddress() } - client, err := containerd.New(cdAddress) + client, err := newContainerd(cdAddress) require.NoError(t, err) defer client.Close() @@ -2230,7 +2234,7 @@ RUN echo bar > bar cdAddress = cd.ContainerdAddress() } - client, err := containerd.New(cdAddress) + client, err := newContainerd(cdAddress) require.NoError(t, err) defer client.Close() @@ -2300,7 +2304,7 @@ RUN echo bar > bar }, } - ctd, err := containerd.New(cdAddress) + ctd, err := newContainerd(cdAddress) require.NoError(t, err) defer ctd.Close() diff --git a/hack/dockerfiles/test.Dockerfile b/hack/dockerfiles/test.Dockerfile index d5838072..1bc3a664 100644 --- a/hack/dockerfiles/test.Dockerfile +++ b/hack/dockerfiles/test.Dockerfile @@ -1,5 +1,5 @@ ARG RUNC_VERSION=dd56ece8236d6d9e5bed4ea0c31fe53c7b873ff4 -ARG CONTAINERD_VERSION=v1.1.0 +ARG CONTAINERD_VERSION=v1.1.3 # containerd v1.0 for integration tests ARG CONTAINERD10_VERSION=v1.0.3 # available targets: buildkitd, buildkitd.oci_only, buildkitd.containerd_only diff --git a/util/testutil/integration/containerd.go b/util/testutil/integration/containerd.go index 752d3124..416615a4 100644 --- a/util/testutil/integration/containerd.go +++ b/util/testutil/integration/containerd.go @@ -82,6 +82,9 @@ func (c *containerd) New() (sb Sandbox, cl func() error, err error) { address := filepath.Join(tmpdir, "containerd.sock") config := fmt.Sprintf(`root = %q state = %q +# CRI plugins listens on 10010/tcp for stream server. +# We disable CRI plugin so that multiple instance can run simultaneously. +disabled_plugins = ["cri"] [grpc] address = %q @@ -102,14 +105,15 @@ state = %q logs := map[string]*bytes.Buffer{} - if stop, err := startCmd(cmd, logs); err != nil { + ctdStop, err := startCmd(cmd, logs) + if err != nil { return nil, nil, err - } else { - deferF.append(stop) } if err := waitUnix(address, 5*time.Second); err != nil { - return nil, nil, err + ctdStop() + return nil, nil, errors.Wrapf(err, "containerd did not start up: %s", formatLogs(logs)) } + deferF.append(ctdStop) buildkitdSock, stop, err := runBuildkitd([]string{"buildkitd", "--oci-worker=false", @@ -123,6 +127,16 @@ state = %q return &cdsandbox{address: address, sandbox: sandbox{address: buildkitdSock, logs: logs, cleanup: deferF, rootless: false}}, cl, nil } +func formatLogs(m map[string]*bytes.Buffer) string { + var ss []string + for k, b := range m { + if b != nil { + ss = append(ss, fmt.Sprintf("%q:%q", k, b.String())) + } + } + return strings.Join(ss, ",") +} + type cdsandbox struct { sandbox address string diff --git a/vendor.conf b/vendor.conf index 7195f480..38d1e8b1 100644 --- a/vendor.conf +++ b/vendor.conf @@ -6,7 +6,7 @@ github.com/davecgh/go-spew v1.1.0 github.com/pmezard/go-difflib v1.0.0 golang.org/x/sys 1b2967e3c290b7c545b3db0deeda16e9be4f98a2 -github.com/containerd/containerd v1.2.0-beta.0 +github.com/containerd/containerd 830363acac529947d794b50c3eec3bc47c59a183 github.com/containerd/typeurl a93fcdb778cd272c6e9b3028b2f42d813e785d40 golang.org/x/sync 450f422ab23cf9881c94e2db30cac0eb1b7cf80c github.com/sirupsen/logrus v1.0.0 diff --git a/vendor/github.com/containerd/containerd/archive/tar_windows.go b/vendor/github.com/containerd/containerd/archive/tar_windows.go index 025796a7..a3f585ac 100644 --- a/vendor/github.com/containerd/containerd/archive/tar_windows.go +++ b/vendor/github.com/containerd/containerd/archive/tar_windows.go @@ -259,7 +259,7 @@ func fileInfoFromHeader(hdr *tar.Header) (name string, size int64, fileInfo *win if err != nil { return "", 0, nil, err } - fileInfo.FileAttributes = uintptr(attr) + fileInfo.FileAttributes = uint32(attr) } else { if hdr.Typeflag == tar.TypeDir { fileInfo.FileAttributes |= syscall.FILE_ATTRIBUTE_DIRECTORY diff --git a/vendor/github.com/containerd/containerd/cio/io_windows.go b/vendor/github.com/containerd/containerd/cio/io_windows.go index a751f7d7..5208f3ea 100644 --- a/vendor/github.com/containerd/containerd/cio/io_windows.go +++ b/vendor/github.com/containerd/containerd/cio/io_windows.go @@ -74,7 +74,7 @@ func copyIO(fifos *FIFOSet, ioset *Streams) (*cio, error) { if fifos.Stdout != "" { l, err := winio.ListenPipe(fifos.Stdout, nil) if err != nil { - return nil, errors.Wrapf(err, "failed to create stdin pipe %s", fifos.Stdout) + return nil, errors.Wrapf(err, "failed to create stdout pipe %s", fifos.Stdout) } defer func(l net.Listener) { if err != nil { @@ -99,7 +99,7 @@ func copyIO(fifos *FIFOSet, ioset *Streams) (*cio, error) { }() } - if !fifos.Terminal && fifos.Stderr != "" { + if fifos.Stderr != "" { l, err := winio.ListenPipe(fifos.Stderr, nil) if err != nil { return nil, errors.Wrapf(err, "failed to create stderr pipe %s", fifos.Stderr) diff --git a/vendor/github.com/containerd/containerd/client.go b/vendor/github.com/containerd/containerd/client.go index 788a381d..bafc1b09 100644 --- a/vendor/github.com/containerd/containerd/client.go +++ b/vendor/github.com/containerd/containerd/client.go @@ -82,6 +82,9 @@ func New(address string, opts ...ClientOpt) (*Client, error) { return nil, err } } + if copts.timeout == 0 { + copts.timeout = 10 * time.Second + } rt := fmt.Sprintf("%s.%s", plugin.RuntimePlugin, runtime.GOOS) if copts.defaultRuntime != "" { rt = copts.defaultRuntime @@ -115,7 +118,7 @@ func New(address string, opts ...ClientOpt) (*Client, error) { ) } connector := func() (*grpc.ClientConn, error) { - ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), copts.timeout) defer cancel() conn, err := grpc.DialContext(ctx, dialer.DialAddress(address), gopts...) if err != nil { diff --git a/vendor/github.com/containerd/containerd/client_opts.go b/vendor/github.com/containerd/containerd/client_opts.go index 6e619873..d6adcb2e 100644 --- a/vendor/github.com/containerd/containerd/client_opts.go +++ b/vendor/github.com/containerd/containerd/client_opts.go @@ -17,6 +17,8 @@ package containerd import ( + "time" + "github.com/containerd/containerd/images" "github.com/containerd/containerd/platforms" "github.com/containerd/containerd/remotes" @@ -28,6 +30,7 @@ type clientOpts struct { defaultRuntime string services *services dialOptions []grpc.DialOption + timeout time.Duration } // ClientOpt allows callers to set options on the containerd client @@ -71,6 +74,14 @@ func WithServices(opts ...ServicesOpt) ClientOpt { } } +// WithTimeout sets the connection timeout for the client +func WithTimeout(d time.Duration) ClientOpt { + return func(c *clientOpts) error { + c.timeout = d + return nil + } +} + // RemoteOpt allows the caller to set distribution options for a remote type RemoteOpt func(*Client, *RemoteContext) error diff --git a/vendor/github.com/containerd/containerd/oci/spec_opts_unix.go b/vendor/github.com/containerd/containerd/oci/spec_opts_unix.go index 80ffd165..6299b8a2 100644 --- a/vendor/github.com/containerd/containerd/oci/spec_opts_unix.go +++ b/vendor/github.com/containerd/containerd/oci/spec_opts_unix.go @@ -143,6 +143,7 @@ func WithImageConfigArgs(image Image, args []string) SpecOpts { cmd = args } s.Process.Args = append(config.Entrypoint, cmd...) + cwd := config.WorkingDir if cwd == "" { cwd = "/" diff --git a/vendor/github.com/containerd/containerd/vendor.conf b/vendor/github.com/containerd/containerd/vendor.conf index 84db92d0..b565252e 100644 --- a/vendor/github.com/containerd/containerd/vendor.conf +++ b/vendor/github.com/containerd/containerd/vendor.conf @@ -1,5 +1,5 @@ -github.com/containerd/go-runc edcf3de1f4971445c42d61f20d506b30612aa031 -github.com/containerd/console 4d8a41f4ce5b9bae77c41786ea2458330f43f081 +github.com/containerd/go-runc 808e8444ac4633a8e5eb7314fc6b5d27051727dd +github.com/containerd/console c12b1e7919c14469339a5d38f2f8ed9b64a9de23 github.com/containerd/cgroups 5e610833b72089b37d0e615de9a92dfc043757c2 github.com/containerd/typeurl a93fcdb778cd272c6e9b3028b2f42d813e785d40 github.com/containerd/fifo 3d5202aec260678c48179c56f40e6f38a095738c @@ -20,7 +20,7 @@ github.com/gogo/protobuf v1.0.0 github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef github.com/golang/protobuf v1.1.0 github.com/opencontainers/runtime-spec d810dbc60d8c5aeeb3d054bd1132fab2121968ce # v1.0.1-43-gd810dbc -github.com/opencontainers/runc 69663f0bd4b60df09991c08812a60108003fa340 +github.com/opencontainers/runc 20aff4f0488c6d4b8df4d85b4f63f1f704c11abd github.com/sirupsen/logrus v1.0.0 github.com/urfave/cli 7bc6a0acffa589f415f88aca16cc1de5ffd66f9c golang.org/x/net b3756b4b77d7b13260a0a2ec658753cf48922eac @@ -32,8 +32,8 @@ github.com/opencontainers/image-spec v1.0.1 golang.org/x/sync 450f422ab23cf9881c94e2db30cac0eb1b7cf80c github.com/BurntSushi/toml a368813c5e648fee92e5f6c30e3944ff9d5e8895 github.com/grpc-ecosystem/go-grpc-prometheus 6b7015e65d366bf3f19b2b2a000a831940f0f7e0 -github.com/Microsoft/go-winio v0.4.7 -github.com/Microsoft/hcsshim v0.6.11 +github.com/Microsoft/go-winio v0.4.10 +github.com/Microsoft/hcsshim 44c060121b68e8bdc40b411beba551f3b4ee9e55 github.com/boltdb/bolt e9cf4fae01b5a8ff89d0ec6b32f0d9c9f79aefdd google.golang.org/genproto d80a6e20e776b0b17a324d0ba1ab50a39c8e8944 golang.org/x/text 19e51611da83d6be54ddafce4a4af510cb3e9ea4