From 465c11dc8736d3e2a9a3b76ece6abdeb63a2f676 Mon Sep 17 00:00:00 2001 From: Shengjing Zhu Date: Tue, 7 Jan 2020 14:25:13 +0800 Subject: [PATCH] Fix build with gccgo + archive: don't convert syscall.Timespec to unix.Timespec archive/tar_unix.go:179:76: error: invalid type conversion (cannot use type syscall.Timespec as type unix.Timespec) 179 | timespec := []unix.Timespec{unix.Timespec(fs.StatAtime(st)), unix.Timespec(fs.StatMtime(st))} + gccgo has no plugin support https://github.com/golang/go/issues/36403 + update github.com/containerd/continuity to include same fix for Timespec Signed-off-by: Shengjing Zhu --- archive/tar_unix.go | 5 +++- plugin/plugin_go18.go | 2 +- plugin/plugin_other.go | 2 +- vendor.conf | 2 +- .../containerd/continuity/fs/copy.go | 6 ++++- .../containerd/continuity/fs/copy_linux.go | 5 +++- .../containerd/continuity/fs/fstest/file.go | 10 +++++--- .../continuity/fs/fstest/testsuite.go | 2 +- .../github.com/containerd/continuity/go.mod | 23 +++++++++++++++++++ .../containerd/continuity/vendor.conf | 13 ----------- 10 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 vendor/github.com/containerd/continuity/go.mod delete mode 100644 vendor/github.com/containerd/continuity/vendor.conf diff --git a/archive/tar_unix.go b/archive/tar_unix.go index e87218753..d081351f1 100644 --- a/archive/tar_unix.go +++ b/archive/tar_unix.go @@ -176,7 +176,10 @@ func copyDirInfo(fi os.FileInfo, path string) error { return errors.Wrapf(err, "failed to chmod %s", path) } - timespec := []unix.Timespec{unix.Timespec(fs.StatAtime(st)), unix.Timespec(fs.StatMtime(st))} + timespec := []unix.Timespec{ + unix.NsecToTimespec(syscall.TimespecToNsec(fs.StatAtime(st))), + unix.NsecToTimespec(syscall.TimespecToNsec(fs.StatMtime(st))), + } if err := unix.UtimesNanoAt(unix.AT_FDCWD, path, timespec, unix.AT_SYMLINK_NOFOLLOW); err != nil { return errors.Wrapf(err, "failed to utime %s", path) } diff --git a/plugin/plugin_go18.go b/plugin/plugin_go18.go index 5b82db868..927fe6196 100644 --- a/plugin/plugin_go18.go +++ b/plugin/plugin_go18.go @@ -1,4 +1,4 @@ -// +build go1.8,!windows,amd64,!static_build +// +build go1.8,!windows,amd64,!static_build,!gccgo /* Copyright The containerd Authors. diff --git a/plugin/plugin_other.go b/plugin/plugin_other.go index 2978f60fd..0c5e14165 100644 --- a/plugin/plugin_other.go +++ b/plugin/plugin_other.go @@ -1,4 +1,4 @@ -// +build !go1.8 windows !amd64 static_build +// +build !go1.8 windows !amd64 static_build gccgo /* Copyright The containerd Authors. diff --git a/vendor.conf b/vendor.conf index 5cd582816..fc88e7aa4 100644 --- a/vendor.conf +++ b/vendor.conf @@ -3,7 +3,7 @@ github.com/BurntSushi/toml 3012a1dbe2e4bd1391d42b32f057 github.com/containerd/btrfs af5082808c833de0e79c1e72eea9fea239364877 github.com/containerd/cgroups fada802a7909d430bd17126fd6e4bbf5716f2bcd github.com/containerd/console 8375c3424e4d7b114e8a90a4a40c8e1b40d1d4e6 -github.com/containerd/continuity f2a389ac0a02ce21c09edd7344677a601970f41c +github.com/containerd/continuity 0ec596719c75bfd42908850990acea594b7593ac github.com/containerd/fifo bda0ff6ed73c67bfb5e62bc9c697f146b7fd7f13 github.com/containerd/go-runc a5c2862aed5e6358b305b0e16bfce58e0549b1cd github.com/containerd/ttrpc 92c8520ef9f86600c650dd540266a007bf03670f diff --git a/vendor/github.com/containerd/continuity/fs/copy.go b/vendor/github.com/containerd/continuity/fs/copy.go index ad61022ad..818bba2cd 100644 --- a/vendor/github.com/containerd/continuity/fs/copy.go +++ b/vendor/github.com/containerd/continuity/fs/copy.go @@ -80,7 +80,7 @@ func copyDirectory(dst, src string, inodes map[uint64]string, o *copyDirOpts) er return errors.Wrapf(err, "failed to stat %s", src) } if !stat.IsDir() { - return errors.Errorf("source is not directory") + return errors.Errorf("source %s is not directory", src) } if st, err := os.Stat(dst); err != nil { @@ -104,6 +104,10 @@ func copyDirectory(dst, src string, inodes map[uint64]string, o *copyDirOpts) er return errors.Wrapf(err, "failed to copy file info for %s", dst) } + if err := copyXAttrs(dst, src, o.xeh); err != nil { + return errors.Wrap(err, "failed to copy xattrs") + } + for _, fi := range fis { source := filepath.Join(src, fi.Name()) target := filepath.Join(dst, fi.Name()) diff --git a/vendor/github.com/containerd/continuity/fs/copy_linux.go b/vendor/github.com/containerd/continuity/fs/copy_linux.go index 81c71522a..72bae7d4e 100644 --- a/vendor/github.com/containerd/continuity/fs/copy_linux.go +++ b/vendor/github.com/containerd/continuity/fs/copy_linux.go @@ -51,7 +51,10 @@ func copyFileInfo(fi os.FileInfo, name string) error { } } - timespec := []unix.Timespec{unix.Timespec(StatAtime(st)), unix.Timespec(StatMtime(st))} + timespec := []unix.Timespec{ + unix.NsecToTimespec(syscall.TimespecToNsec(StatAtime(st))), + unix.NsecToTimespec(syscall.TimespecToNsec(StatMtime(st))), + } if err := unix.UtimesNanoAt(unix.AT_FDCWD, name, timespec, unix.AT_SYMLINK_NOFOLLOW); err != nil { return errors.Wrapf(err, "failed to utime %s", name) } diff --git a/vendor/github.com/containerd/continuity/fs/fstest/file.go b/vendor/github.com/containerd/continuity/fs/fstest/file.go index 8351bb0b1..574b67576 100644 --- a/vendor/github.com/containerd/continuity/fs/fstest/file.go +++ b/vendor/github.com/containerd/continuity/fs/fstest/file.go @@ -20,9 +20,9 @@ import ( "bytes" "io" "math/rand" - "net" "os" "path/filepath" + "syscall" "time" ) @@ -158,11 +158,15 @@ func Link(oldname, newname string) Applier { func CreateSocket(name string, perm os.FileMode) Applier { return applyFn(func(root string) error { fullPath := filepath.Join(root, name) - ln, err := net.Listen("unix", fullPath) + fd, err := syscall.Socket(syscall.AF_UNIX, syscall.SOCK_STREAM, 0) if err != nil { return err } - defer ln.Close() + defer syscall.Close(fd) + sa := &syscall.SockaddrUnix{Name: fullPath} + if err := syscall.Bind(fd, sa); err != nil { + return err + } return os.Chmod(fullPath, perm) }) } diff --git a/vendor/github.com/containerd/continuity/fs/fstest/testsuite.go b/vendor/github.com/containerd/continuity/fs/fstest/testsuite.go index 4be08a2ec..d465d219c 100644 --- a/vendor/github.com/containerd/continuity/fs/fstest/testsuite.go +++ b/vendor/github.com/containerd/continuity/fs/fstest/testsuite.go @@ -90,7 +90,7 @@ var ( Symlink("libnothing.so", "/usr/local/lib/libnothing.so.2"), CreateDir("/home", 0755), CreateDir("/home/derek", 0700), - CreateDir("/var/run/socket", 0700), + // TODO: CreateSocket: how should Sockets be handled in continuity? ) // basicTest covers basic operations diff --git a/vendor/github.com/containerd/continuity/go.mod b/vendor/github.com/containerd/continuity/go.mod new file mode 100644 index 000000000..86a7f148c --- /dev/null +++ b/vendor/github.com/containerd/continuity/go.mod @@ -0,0 +1,23 @@ +module github.com/containerd/continuity + +go 1.11 + +require ( + bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898 + github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4 + github.com/golang/protobuf v1.2.0 + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/onsi/ginkgo v1.10.1 // indirect + github.com/onsi/gomega v1.7.0 // indirect + github.com/opencontainers/go-digest v1.0.0-rc1 + github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7 + github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2 + github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee + github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95 // indirect + github.com/stretchr/testify v1.4.0 // indirect + golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3 // indirect + golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f + golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e + gopkg.in/airbrake/gobrake.v2 v2.0.9 // indirect + gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 // indirect +) diff --git a/vendor/github.com/containerd/continuity/vendor.conf b/vendor/github.com/containerd/continuity/vendor.conf deleted file mode 100644 index 5bd88d5fd..000000000 --- a/vendor/github.com/containerd/continuity/vendor.conf +++ /dev/null @@ -1,13 +0,0 @@ -bazil.org/fuse 371fbbdaa8987b715bdd21d6adc4c9b20155f748 -github.com/dustin/go-humanize bb3d318650d48840a39aa21a027c6630e198e626 -github.com/golang/protobuf 1e59b77b52bf8e4b449a57e6f79f21226d571845 -github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75 -github.com/opencontainers/go-digest 279bed98673dd5bef374d3b6e4b09e2af76183bf -github.com/pkg/errors f15c970de5b76fac0b59abb32d62c17cc7bed265 -github.com/sirupsen/logrus 89742aefa4b206dcf400792f3bd35b542998eb3b -github.com/spf13/cobra 2da4a54c5ceefcee7ca5dd0eea1e18a3b6366489 -github.com/spf13/pflag 4c012f6dcd9546820e378d0bdda4d8fc772cdfea -golang.org/x/crypto 9f005a07e0d31d45e6656d241bb5c0f2efd4bc94 -golang.org/x/net a337091b0525af65de94df2eb7e98bd9962dcbe2 -golang.org/x/sync 450f422ab23cf9881c94e2db30cac0eb1b7cf80c -golang.org/x/sys 77b0e4315053a57ed2962443614bdb28db152054