diff options
author | Nikolai Lifanov <lifanov@FreeBSD.org> | 2018-01-03 20:24:18 +0000 |
---|---|---|
committer | Nikolai Lifanov <lifanov@FreeBSD.org> | 2018-01-03 20:24:18 +0000 |
commit | 52f26681bc26e9b608b4498843c17a9cca45bd8a (patch) | |
tree | ea96d9bc19f32529a62d5e04c31fe7821c0f6504 /sysutils/docker | |
parent | 784e67257c3006d2dbdbca6285a99b55659f0c1d (diff) | |
download | ports-52f26681bc26e9b608b4498843c17a9cca45bd8a.tar.gz ports-52f26681bc26e9b608b4498843c17a9cca45bd8a.zip |
Notes
Diffstat (limited to 'sysutils/docker')
9 files changed, 295 insertions, 4 deletions
diff --git a/sysutils/docker/Makefile b/sysutils/docker/Makefile index 618dae9f7c3b..b4862d355985 100644 --- a/sysutils/docker/Makefile +++ b/sysutils/docker/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME= docker -PORTVERSION= 17.06.1 +PORTVERSION= 17.12.0 DISTVERSIONPREFIX= v DISTVERSIONSUFFIX= -ce CATEGORIES= sysutils diff --git a/sysutils/docker/distinfo b/sysutils/docker/distinfo index 4b9edb330eac..f37eb7377746 100644 --- a/sysutils/docker/distinfo +++ b/sysutils/docker/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1503236000 -SHA256 (docker-docker-ce-v17.06.1-ce_GH0.tar.gz) = 2ca8615162873b32d9565f95a4b2977d025fd44c69e087046e004f5dfb1ce30c -SIZE (docker-docker-ce-v17.06.1-ce_GH0.tar.gz) = 9682381 +TIMESTAMP = 1515007414 +SHA256 (docker-docker-ce-v17.12.0-ce_GH0.tar.gz) = 945e3eb62e35e9399983a956299bbbf878442c5a164262ed82b7aa7366731a83 +SIZE (docker-docker-ce-v17.12.0-ce_GH0.tar.gz) = 11011208 diff --git a/sysutils/docker/files/patch-components_cli_cli_config_credentials_default__store__freebsd.go b/sysutils/docker/files/patch-components_cli_cli_config_credentials_default__store__freebsd.go new file mode 100644 index 000000000000..cc7ef13d484a --- /dev/null +++ b/sysutils/docker/files/patch-components_cli_cli_config_credentials_default__store__freebsd.go @@ -0,0 +1,16 @@ +--- components/cli/cli/config/credentials/default_store_freebsd.go.orig 2018-01-03 19:51:59 UTC ++++ components/cli/cli/config/credentials/default_store_freebsd.go +@@ -0,0 +1,13 @@ ++package credentials ++ ++import ( ++ "github.com/docker/docker-credential-helpers/pass" ++) ++ ++func defaultCredentialsStore() string { ++ if pass.PassInitialized { ++ return "pass" ++ } ++ ++ return "secretservice" ++} diff --git a/sysutils/docker/files/patch-components_cli_cli_config_credentials_default__store__unsupported.go b/sysutils/docker/files/patch-components_cli_cli_config_credentials_default__store__unsupported.go new file mode 100644 index 000000000000..b87e130eaa05 --- /dev/null +++ b/sysutils/docker/files/patch-components_cli_cli_config_credentials_default__store__unsupported.go @@ -0,0 +1,8 @@ +--- components/cli/cli/config/credentials/default_store_unsupported.go.orig 2017-12-27 17:03:35 UTC ++++ components/cli/cli/config/credentials/default_store_unsupported.go +@@ -1,4 +1,4 @@ +-// +build !windows,!darwin,!linux ++// +build !windows,!darwin,!linux,!freebsd + + package credentials + diff --git a/sysutils/docker/files/patch-components_cli_vendor_github.com_docker_docker-credential-helpers_pass_pass__freebsd.go b/sysutils/docker/files/patch-components_cli_vendor_github.com_docker_docker-credential-helpers_pass_pass__freebsd.go new file mode 100644 index 000000000000..d9942018c1c5 --- /dev/null +++ b/sysutils/docker/files/patch-components_cli_vendor_github.com_docker_docker-credential-helpers_pass_pass__freebsd.go @@ -0,0 +1,211 @@ +--- components/cli/vendor/github.com/docker/docker-credential-helpers/pass/pass_freebsd.go.orig 2018-01-03 19:51:59 UTC ++++ components/cli/vendor/github.com/docker/docker-credential-helpers/pass/pass_freebsd.go +@@ -0,0 +1,208 @@ ++// A `pass` based credential helper. Passwords are stored as arguments to pass ++// of the form: "$PASS_FOLDER/base64-url(serverURL)/username". We base64-url ++// encode the serverURL, because under the hood pass uses files and folders, so ++// /s will get translated into additional folders. ++package pass ++ ++import ( ++ "encoding/base64" ++ "errors" ++ "fmt" ++ "io/ioutil" ++ "os" ++ "os/exec" ++ "path" ++ "strings" ++ ++ "github.com/docker/docker-credential-helpers/credentials" ++) ++ ++const PASS_FOLDER = "docker-credential-helpers" ++ ++var ( ++ PassInitialized bool ++) ++ ++func init() { ++ PassInitialized = exec.Command("pass").Run() == nil ++} ++ ++func runPass(stdinContent string, args ...string) (string, error) { ++ cmd := exec.Command("pass", args...) ++ ++ stdin, err := cmd.StdinPipe() ++ if err != nil { ++ return "", err ++ } ++ defer stdin.Close() ++ ++ stderr, err := cmd.StderrPipe() ++ if err != nil { ++ return "", err ++ } ++ defer stderr.Close() ++ ++ stdout, err := cmd.StdoutPipe() ++ if err != nil { ++ return "", err ++ } ++ defer stdout.Close() ++ ++ err = cmd.Start() ++ if err != nil { ++ return "", err ++ } ++ ++ _, err = stdin.Write([]byte(stdinContent)) ++ if err != nil { ++ return "", err ++ } ++ stdin.Close() ++ ++ errContent, err := ioutil.ReadAll(stderr) ++ if err != nil { ++ return "", fmt.Errorf("error reading stderr: %s", err) ++ } ++ ++ result, err := ioutil.ReadAll(stdout) ++ if err != nil { ++ return "", fmt.Errorf("Error reading stdout: %s", err) ++ } ++ ++ cmdErr := cmd.Wait() ++ if cmdErr != nil { ++ return "", fmt.Errorf("%s: %s", cmdErr, errContent) ++ } ++ ++ return string(result), nil ++} ++ ++// Pass handles secrets using Linux secret-service as a store. ++type Pass struct{} ++ ++// Add adds new credentials to the keychain. ++func (h Pass) Add(creds *credentials.Credentials) error { ++ if !PassInitialized { ++ return errors.New("pass store is uninitialized") ++ } ++ ++ if creds == nil { ++ return errors.New("missing credentials") ++ } ++ ++ encoded := base64.URLEncoding.EncodeToString([]byte(creds.ServerURL)) ++ ++ _, err := runPass(creds.Secret, "insert", "-f", "-m", path.Join(PASS_FOLDER, encoded, creds.Username)) ++ return err ++} ++ ++// Delete removes credentials from the store. ++func (h Pass) Delete(serverURL string) error { ++ if !PassInitialized { ++ return errors.New("pass store is uninitialized") ++ } ++ ++ if serverURL == "" { ++ return errors.New("missing server url") ++ } ++ ++ encoded := base64.URLEncoding.EncodeToString([]byte(serverURL)) ++ _, err := runPass("", "rm", "-rf", path.Join(PASS_FOLDER, encoded)) ++ return err ++} ++ ++// listPassDir lists all the contents of a directory in the password store. ++// Pass uses fancy unicode to emit stuff to stdout, so rather than try ++// and parse this, let's just look at the directory structure instead. ++func listPassDir(args ...string) ([]os.FileInfo, error) { ++ passDir := os.ExpandEnv("$HOME/.password-store") ++ for _, e := range os.Environ() { ++ parts := strings.SplitN(e, "=", 2) ++ if len(parts) < 2 { ++ continue ++ } ++ ++ if parts[0] != "PASSWORD_STORE_DIR" { ++ continue ++ } ++ ++ passDir = parts[1] ++ break ++ } ++ ++ p := path.Join(append([]string{passDir, PASS_FOLDER}, args...)...) ++ contents, err := ioutil.ReadDir(p) ++ if err != nil { ++ if os.IsNotExist(err) { ++ return []os.FileInfo{}, nil ++ } ++ ++ return nil, err ++ } ++ ++ return contents, nil ++} ++ ++// Get returns the username and secret to use for a given registry server URL. ++func (h Pass) Get(serverURL string) (string, string, error) { ++ if !PassInitialized { ++ return "", "", errors.New("pass store is uninitialized") ++ } ++ ++ if serverURL == "" { ++ return "", "", errors.New("missing server url") ++ } ++ ++ encoded := base64.URLEncoding.EncodeToString([]byte(serverURL)) ++ ++ usernames, err := listPassDir(encoded) ++ if err != nil { ++ return "", "", err ++ } ++ ++ if len(usernames) < 1 { ++ return "", "", fmt.Errorf("no usernames for %s", serverURL) ++ } ++ ++ actual := strings.TrimSuffix(usernames[0].Name(), ".gpg") ++ secret, err := runPass("", "show", path.Join(PASS_FOLDER, encoded, actual)) ++ return actual, secret, err ++} ++ ++// List returns the stored URLs and corresponding usernames for a given credentials label ++func (h Pass) List() (map[string]string, error) { ++ if !PassInitialized { ++ return nil, errors.New("pass store is uninitialized") ++ } ++ ++ servers, err := listPassDir() ++ if err != nil { ++ return nil, err ++ } ++ ++ resp := map[string]string{} ++ ++ for _, server := range servers { ++ if !server.IsDir() { ++ continue ++ } ++ ++ serverURL, err := base64.URLEncoding.DecodeString(server.Name()) ++ if err != nil { ++ return nil, err ++ } ++ ++ usernames, err := listPassDir(server.Name()) ++ if err != nil { ++ return nil, err ++ } ++ ++ if len(usernames) < 1 { ++ return nil, fmt.Errorf("no usernames for %s", serverURL) ++ } ++ ++ resp[string(serverURL)] = strings.TrimSuffix(usernames[0].Name(), ".gpg") ++ } ++ ++ return resp, nil ++} diff --git a/sysutils/docker/files/patch-components_cli_vendor_github.com_docker_docker_pkg_archive_archive__unix.go b/sysutils/docker/files/patch-components_cli_vendor_github.com_docker_docker_pkg_archive_archive__unix.go new file mode 100644 index 000000000000..a0b650ce5f9a --- /dev/null +++ b/sysutils/docker/files/patch-components_cli_vendor_github.com_docker_docker_pkg_archive_archive__unix.go @@ -0,0 +1,11 @@ +--- components/cli/vendor/github.com/docker/docker/pkg/archive/archive_unix.go.orig 2017-12-27 17:03:35 UTC ++++ components/cli/vendor/github.com/docker/docker/pkg/archive/archive_unix.go +@@ -62,7 +62,7 @@ func getInodeFromStat(stat interface{}) (inode uint64, + s, ok := stat.(*syscall.Stat_t) + + if ok { +- inode = s.Ino ++ inode = uint64(s.Ino) + } + + return diff --git a/sysutils/docker/files/patch-components_cli_vendor_github.com_docker_docker_pkg_archive_changes__unix.go b/sysutils/docker/files/patch-components_cli_vendor_github.com_docker_docker_pkg_archive_changes__unix.go new file mode 100644 index 000000000000..3d33fe9f8952 --- /dev/null +++ b/sysutils/docker/files/patch-components_cli_vendor_github.com_docker_docker_pkg_archive_changes__unix.go @@ -0,0 +1,11 @@ +--- components/cli/vendor/github.com/docker/docker/pkg/archive/changes_unix.go.orig 2017-12-27 17:03:35 UTC ++++ components/cli/vendor/github.com/docker/docker/pkg/archive/changes_unix.go +@@ -29,7 +29,7 @@ func (info *FileInfo) isDir() bool { + } + + func getIno(fi os.FileInfo) uint64 { +- return fi.Sys().(*syscall.Stat_t).Ino ++ return uint64(fi.Sys().(*syscall.Stat_t).Ino) + } + + func hasHardlinks(fi os.FileInfo) bool { diff --git a/sysutils/docker/files/patch-components_cli_vendor_github.com_tonistiigi_fsutil_diskwriter__freebsd.go b/sysutils/docker/files/patch-components_cli_vendor_github.com_tonistiigi_fsutil_diskwriter__freebsd.go new file mode 100644 index 000000000000..b3ebc38cc7dd --- /dev/null +++ b/sysutils/docker/files/patch-components_cli_vendor_github.com_tonistiigi_fsutil_diskwriter__freebsd.go @@ -0,0 +1,23 @@ +--- components/cli/vendor/github.com/tonistiigi/fsutil/diskwriter_freebsd.go.orig 2018-01-03 19:54:52 UTC ++++ components/cli/vendor/github.com/tonistiigi/fsutil/diskwriter_freebsd.go +@@ -0,0 +1,20 @@ ++// +build freebsd ++ ++package fsutil ++ ++import ( ++ "github.com/pkg/errors" ++ "golang.org/x/sys/unix" ++) ++ ++func chtimes(path string, un int64) error { ++ var utimes [2]unix.Timespec ++ utimes[0] = unix.NsecToTimespec(un) ++ utimes[1] = utimes[0] ++ ++ if err := unix.UtimesNanoAt(unix.AT_FDCWD, path, utimes[0:], unix.AT_SYMLINK_NOFOLLOW); err != nil { ++ return errors.Wrap(err, "failed call to UtimesNanoAt") ++ } ++ ++ return nil ++} diff --git a/sysutils/docker/files/patch-components_cli_vendor_github.com_tonistiigi_fsutil_walker__unix.go b/sysutils/docker/files/patch-components_cli_vendor_github.com_tonistiigi_fsutil_walker__unix.go new file mode 100644 index 000000000000..cad645a4a729 --- /dev/null +++ b/sysutils/docker/files/patch-components_cli_vendor_github.com_tonistiigi_fsutil_walker__unix.go @@ -0,0 +1,11 @@ +--- components/cli/vendor/github.com/tonistiigi/fsutil/walker_unix.go.orig 2018-01-03 19:53:04 UTC ++++ components/cli/vendor/github.com/tonistiigi/fsutil/walker_unix.go +@@ -41,7 +41,7 @@ func setUnixOpt(fi os.FileInfo, stat *Stat, path strin + stat.Devminor = int64(minor(uint64(s.Rdev))) + } + +- ino := s.Ino ++ ino := uint64(s.Ino) + if s.Nlink > 1 { + if oldpath, ok := seenFiles[ino]; ok { + stat.Linkname = oldpath |