From 2790ac68b32b399c872de88388bdccc359ed7a88 Mon Sep 17 00:00:00 2001 From: Kenfe-Mickael Laventure Date: Mon, 24 Oct 2016 15:18:58 -0700 Subject: [PATCH] Add expected 3rd party binaries commit ids to info Signed-off-by: Kenfe-Mickael Laventure --- Dockerfile | 1 + Dockerfile.aarch64 | 1 + Dockerfile.armhf | 1 + Dockerfile.ppc64le | 1 + Dockerfile.s390x | 1 + Dockerfile.simple | 1 + api/types/types.go | 11 +++++++ cli/command/system/info.go | 16 +++++++++ daemon/config_common_unix.go | 10 ++++++ daemon/config_windows.go | 5 +++ daemon/daemon.go | 3 ++ daemon/info.go | 44 +++++++++++++++++++++++++ daemon/oci_linux.go | 2 +- hack/dockerfile/binaries-commits | 8 +++++ hack/dockerfile/install-binaries.sh | 7 +--- hack/make/.go-autogen | 16 ++++++--- integration-cli/docker_cli_info_test.go | 2 +- libcontainerd/client_linux.go | 14 ++++++++ libcontainerd/client_solaris.go | 14 ++++++++ libcontainerd/client_windows.go | 4 +++ libcontainerd/types.go | 8 +++++ 21 files changed, 157 insertions(+), 13 deletions(-) create mode 100644 hack/dockerfile/binaries-commits diff --git a/Dockerfile b/Dockerfile index 5a7743984b..9d344c813e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -236,6 +236,7 @@ RUN ./contrib/download-frozen-image-v2.sh /docker-frozen-images \ # Install tomlv, vndr, runc, containerd, tini, docker-proxy # Please edit hack/dockerfile/install-binaries.sh to update them. +COPY hack/dockerfile/binaries-commits /tmp/binaries-commits COPY hack/dockerfile/install-binaries.sh /tmp/install-binaries.sh RUN /tmp/install-binaries.sh tomlv vndr runc containerd tini proxy diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 36302c8b25..ce03d8db4a 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -164,6 +164,7 @@ RUN ./contrib/download-frozen-image-v2.sh /docker-frozen-images \ # Install tomlv, vndr, runc, containerd, tini, docker-proxy # Please edit hack/dockerfile/install-binaries.sh to update them. +COPY hack/dockerfile/binaries-commits /tmp/binaries-commits COPY hack/dockerfile/install-binaries.sh /tmp/install-binaries.sh RUN /tmp/install-binaries.sh tomlv vndr runc containerd tini proxy diff --git a/Dockerfile.armhf b/Dockerfile.armhf index b16200548c..7f213f8f60 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -168,6 +168,7 @@ RUN ./contrib/download-frozen-image-v2.sh /docker-frozen-images \ # Install tomlv, vndr, runc, containerd, tini, docker-proxy # Please edit hack/dockerfile/install-binaries.sh to update them. +COPY hack/dockerfile/binaries-commits /tmp/binaries-commits COPY hack/dockerfile/install-binaries.sh /tmp/install-binaries.sh RUN /tmp/install-binaries.sh tomlv vndr runc containerd tini proxy diff --git a/Dockerfile.ppc64le b/Dockerfile.ppc64le index ad300c9142..3f550d1804 100644 --- a/Dockerfile.ppc64le +++ b/Dockerfile.ppc64le @@ -187,6 +187,7 @@ RUN ./contrib/download-frozen-image-v2.sh /docker-frozen-images \ # Install tomlv, vndr, runc, containerd, tini, docker-proxy # Please edit hack/dockerfile/install-binaries.sh to update them. +COPY hack/dockerfile/binaries-commits /tmp/binaries-commits COPY hack/dockerfile/install-binaries.sh /tmp/install-binaries.sh RUN /tmp/install-binaries.sh tomlv vndr runc containerd tini proxy diff --git a/Dockerfile.s390x b/Dockerfile.s390x index af9e2cdf63..6baa3a160a 100644 --- a/Dockerfile.s390x +++ b/Dockerfile.s390x @@ -179,6 +179,7 @@ RUN ./contrib/download-frozen-image-v2.sh /docker-frozen-images \ # Install tomlv, vndr, runc, containerd, tini, docker-proxy # Please edit hack/dockerfile/install-binaries.sh to update them. +COPY hack/dockerfile/binaries-commits /tmp/binaries-commits COPY hack/dockerfile/install-binaries.sh /tmp/install-binaries.sh RUN /tmp/install-binaries.sh tomlv vndr runc containerd tini proxy diff --git a/Dockerfile.simple b/Dockerfile.simple index bc598ca93e..4a15a381d2 100644 --- a/Dockerfile.simple +++ b/Dockerfile.simple @@ -60,6 +60,7 @@ ENV CGO_LDFLAGS -L/lib # Install runc, containerd, tini and docker-proxy # Please edit hack/dockerfile/install-binaries.sh to update them. +COPY hack/dockerfile/binaries-commits /tmp/binaries-commits COPY hack/dockerfile/install-binaries.sh /tmp/install-binaries.sh RUN /tmp/install-binaries.sh runc containerd tini proxy diff --git a/api/types/types.go b/api/types/types.go index 5591646b69..a9187497a9 100644 --- a/api/types/types.go +++ b/api/types/types.go @@ -150,6 +150,13 @@ type Version struct { BuildTime string `json:",omitempty"` } +// Commit records a external tool actual commit id version along the +// one expect by dockerd as set at build time +type Commit struct { + ID string + Expected string +} + // InfoBase contains the base response of Remote API: // GET "/info" type InfoBase struct { @@ -207,6 +214,10 @@ type InfoBase struct { // running containers are detected LiveRestoreEnabled bool Isolation container.Isolation + InitBinary string + ContainerdCommit Commit + RuncCommit Commit + InitCommit Commit } // SecurityOpt holds key/value pair about a security option diff --git a/cli/command/system/info.go b/cli/command/system/info.go index 5ea23ed430..fceef59237 100644 --- a/cli/command/system/info.go +++ b/cli/command/system/info.go @@ -143,6 +143,22 @@ func prettyPrintInfo(dockerCli *command.DockerCli, info types.Info) error { } if info.OSType == "linux" { + fmt.Fprintf(dockerCli.Out(), "Init Binary: %v\n", info.InitBinary) + + for _, ci := range []struct { + Name string + Commit types.Commit + }{ + {"containerd", info.ContainerdCommit}, + {"runc", info.RuncCommit}, + {"init", info.InitCommit}, + } { + fmt.Fprintf(dockerCli.Out(), "%s version: %s", ci.Name, ci.Commit.ID) + if ci.Commit.ID != ci.Commit.Expected { + fmt.Fprintf(dockerCli.Out(), " (expected: %s)", ci.Commit.Expected) + } + fmt.Fprintf(dockerCli.Out(), "\n") + } if len(info.SecurityOptions) != 0 { fmt.Fprintf(dockerCli.Out(), "Security Options:\n") for _, o := range info.SecurityOptions { diff --git a/daemon/config_common_unix.go b/daemon/config_common_unix.go index e03a4f7e2d..ab76fe7b1b 100644 --- a/daemon/config_common_unix.go +++ b/daemon/config_common_unix.go @@ -78,3 +78,13 @@ func (config *Config) GetAllRuntimes() map[string]types.Runtime { func (config *Config) GetExecRoot() string { return config.ExecRoot } + +// GetInitPath returns the configure docker-init path +func (config *Config) GetInitPath() string { + config.reloadLock.Lock() + defer config.reloadLock.Unlock() + if config.InitPath != "" { + return config.InitPath + } + return DefaultInitBinary +} diff --git a/daemon/config_windows.go b/daemon/config_windows.go index 1219dbd767..df59dcf302 100644 --- a/daemon/config_windows.go +++ b/daemon/config_windows.go @@ -46,6 +46,11 @@ func (config *Config) GetRuntime(name string) *types.Runtime { return nil } +// GetInitPath returns the configure docker-init path +func (config *Config) GetInitPath() string { + return "" +} + // GetDefaultRuntimeName returns the current default runtime func (config *Config) GetDefaultRuntimeName() string { return stockRuntimeName diff --git a/daemon/daemon.go b/daemon/daemon.go index 8bbc8f42d4..292fbfcfe2 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -66,6 +66,9 @@ var ( // containerd if none is specified DefaultRuntimeBinary = "docker-runc" + // DefaultInitBinary is the name of the default init binary + DefaultInitBinary = "docker-init" + errSystemNotSupported = fmt.Errorf("The Docker daemon is not supported on this platform.") ) diff --git a/daemon/info.go b/daemon/info.go index 7baeedc692..474ff5252d 100644 --- a/daemon/info.go +++ b/daemon/info.go @@ -1,8 +1,11 @@ package daemon import ( + "context" "os" + "os/exec" "runtime" + "strings" "sync/atomic" "time" @@ -147,6 +150,47 @@ func (daemon *Daemon) SystemInfo() (*types.Info, error) { v.CPUSet = sysInfo.Cpuset v.Runtimes = daemon.configStore.GetAllRuntimes() v.DefaultRuntime = daemon.configStore.GetDefaultRuntimeName() + v.InitBinary = daemon.configStore.GetInitPath() + + v.ContainerdCommit.Expected = dockerversion.ContainerdCommitID + if sv, err := daemon.containerd.GetServerVersion(context.Background()); err == nil { + v.ContainerdCommit.ID = sv.Revision + } else { + logrus.Warnf("failed to retrieve containerd version: %v", err) + v.ContainerdCommit.ID = "N/A" + } + + v.RuncCommit.Expected = dockerversion.RuncCommitID + if rv, err := exec.Command(DefaultRuntimeBinary, "--version").Output(); err == nil { + parts := strings.Split(strings.TrimSpace(string(rv)), "\n") + if len(parts) == 3 { + parts = strings.Split(parts[1], ": ") + if len(parts) == 2 { + v.RuncCommit.ID = strings.TrimSpace(parts[1]) + } + } + } else { + logrus.Warnf("failed to retrieve %s version: %v", DefaultRuntimeBinary, err) + v.RuncCommit.ID = "N/A" + } + if v.RuncCommit.ID == "" { + logrus.Warnf("failed to retrieve %s version: unknown output format", DefaultRuntimeBinary) + v.RuncCommit.ID = "N/A" + } + + v.InitCommit.Expected = dockerversion.InitCommitID + if rv, err := exec.Command(DefaultInitBinary, "--version").Output(); err == nil { + parts := strings.Split(string(rv), " ") + if len(parts) == 3 { + v.InitCommit.ID = strings.TrimSpace(parts[2]) + } else { + logrus.Warnf("failed to retrieve %s version: unknown output format", DefaultInitBinary) + v.InitCommit.ID = "N/A" + } + } else { + logrus.Warnf("failed to retrieve %s version", DefaultInitBinary) + v.InitCommit.ID = "N/A" + } } hostname := "" diff --git a/daemon/oci_linux.go b/daemon/oci_linux.go index 5cac76843d..0b97daee2a 100644 --- a/daemon/oci_linux.go +++ b/daemon/oci_linux.go @@ -596,7 +596,7 @@ func (daemon *Daemon) populateCommonSpec(s *specs.Spec, c *container.Container) s.Process.Args = append([]string{"/dev/init", c.Path}, c.Args...) var path string if daemon.configStore.InitPath == "" && c.HostConfig.InitPath == "" { - path, err = exec.LookPath("docker-init") + path, err = exec.LookPath(DefaultInitBinary) if err != nil { return err } diff --git a/hack/dockerfile/binaries-commits b/hack/dockerfile/binaries-commits new file mode 100644 index 0000000000..4d118e3a4a --- /dev/null +++ b/hack/dockerfile/binaries-commits @@ -0,0 +1,8 @@ +#!/bin/sh + +TOMLV_COMMIT=9baf8a8a9f2ed20a8e54160840c492f937eeaf9a +RUNC_COMMIT=ac031b5bf1cc92239461125f4c1ffb760522bbf2 +CONTAINERD_COMMIT=8517738ba4b82aff5662c97ca4627e7e4d03b531 +TINI_COMMIT=v0.13.0 +LIBNETWORK_COMMIT=0f534354b813003a754606689722fe253101bc4e +VNDR_COMMIT=f56bd4504b4fad07a357913687fb652ee54bb3b0 diff --git a/hack/dockerfile/install-binaries.sh b/hack/dockerfile/install-binaries.sh index 0a29536d08..bd4c63c645 100755 --- a/hack/dockerfile/install-binaries.sh +++ b/hack/dockerfile/install-binaries.sh @@ -2,12 +2,7 @@ set -e set -x -TOMLV_COMMIT=9baf8a8a9f2ed20a8e54160840c492f937eeaf9a -RUNC_COMMIT=ac031b5bf1cc92239461125f4c1ffb760522bbf2 -CONTAINERD_COMMIT=8517738ba4b82aff5662c97ca4627e7e4d03b531 -TINI_COMMIT=v0.13.0 -LIBNETWORK_COMMIT=0f534354b813003a754606689722fe253101bc4e -VNDR_COMMIT=f56bd4504b4fad07a357913687fb652ee54bb3b0 +. $(dirname "$0")/binaries-commits RM_GOPATH=0 diff --git a/hack/make/.go-autogen b/hack/make/.go-autogen index 582cd7cff7..e954778ce3 100644 --- a/hack/make/.go-autogen +++ b/hack/make/.go-autogen @@ -2,6 +2,8 @@ rm -rf autogen +source hack/dockerfile/binaries-commits + cat > dockerversion/version_autogen.go <