diff options
-rw-r--r-- | .cirrus.yml | 2 | ||||
-rw-r--r-- | Dockerfile | 2 | ||||
-rw-r--r-- | libpod/runtime.go | 45 |
3 files changed, 40 insertions, 9 deletions
diff --git a/.cirrus.yml b/.cirrus.yml index 71fa68d45..0713f6dda 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -30,7 +30,7 @@ env: #### #### Cache-image names to test with (double-quotes around names are critical) ### - _BUILT_IMAGE_SUFFIX: "libpod-6296905679634432" + _BUILT_IMAGE_SUFFIX: "libpod-5642998972416000" FEDORA_CACHE_IMAGE_NAME: "fedora-30-${_BUILT_IMAGE_SUFFIX}" PRIOR_FEDORA_CACHE_IMAGE_NAME: "fedora-29-${_BUILT_IMAGE_SUFFIX}" SPECIAL_FEDORA_CACHE_IMAGE_NAME: "xfedora-30-${_BUILT_IMAGE_SUFFIX}" diff --git a/Dockerfile b/Dockerfile index 3c65bf5a8..4b3130245 100644 --- a/Dockerfile +++ b/Dockerfile @@ -57,7 +57,7 @@ RUN set -x \ && rm -rf "$GOPATH" # Install conmon -ENV CONMON_COMMIT 6f3572558b97bc60dd8f8c7f0807748e6ce2c440 +ENV CONMON_COMMIT 65fe0226d85b69fc9e527e376795c9791199153d RUN set -x \ && export GOPATH="$(mktemp -d)" \ && git clone https://github.com/containers/conmon.git "$GOPATH/src/github.com/containers/conmon.git" \ diff --git a/libpod/runtime.go b/libpod/runtime.go index a06b2bb51..0405a9b85 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -84,6 +84,15 @@ var ( // DefaultDetachKeys is the default keys sequence for detaching a // container DefaultDetachKeys = "ctrl-p,ctrl-q" + + // minConmonMajor is the major version required for conmon + minConmonMajor = 2 + + // minConmonMinor is the minor version required for conmon + minConmonMinor = 0 + + // minConmonPatch is the sub-minor version required for conmon + minConmonPatch = 1 ) // A RuntimeOption is a functional option which alters the Runtime created by @@ -788,6 +797,7 @@ func getLockManager(runtime *Runtime) (lock.Manager, error) { // probeConmon calls conmon --version and verifies it is a new enough version for // the runtime expectations podman currently has func probeConmon(conmonBinary string) error { + versionFormatErr := "conmon version changed format" cmd := exec.Command(conmonBinary, "--version") var out bytes.Buffer cmd.Stdout = &out @@ -799,19 +809,40 @@ func probeConmon(conmonBinary string) error { matches := r.FindStringSubmatch(out.String()) if len(matches) != 4 { - return errors.Wrapf(err, "conmon version changed format") + return errors.Wrapf(err, versionFormatErr) } major, err := strconv.Atoi(matches[1]) - if err != nil || major < 1 { + if err != nil { + return errors.Wrapf(err, versionFormatErr) + } + if major < minConmonMajor { return define.ErrConmonOutdated } - // conmon used to be shipped with CRI-O, and was versioned along with it. - // even though the conmon that came with crio-1.9 to crio-1.15 has a higher - // version number than conmon 1.0.0, 1.0.0 is newer, so we need this check + if major > minConmonMajor { + return nil + } + minor, err := strconv.Atoi(matches[2]) - if err != nil || minor > 9 { + if err != nil { + return errors.Wrapf(err, versionFormatErr) + } + if minor < minConmonMinor { return define.ErrConmonOutdated } + if minor > minConmonMinor { + return nil + } + + patch, err := strconv.Atoi(matches[3]) + if err != nil { + return errors.Wrapf(err, versionFormatErr) + } + if patch < minConmonPatch { + return define.ErrConmonOutdated + } + if patch > minConmonPatch { + return nil + } return nil } @@ -871,7 +902,7 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) { if !foundConmon { if foundOutdatedConmon { - return errors.Wrapf(define.ErrConmonOutdated, "please update to v1.0.0 or later") + return errors.Errorf("please update to v%d.%d.%d or later: %v", minConmonMajor, minConmonMinor, minConmonPatch, define.ErrConmonOutdated) } return errors.Wrapf(define.ErrInvalidArg, "could not find a working conmon binary (configured options: %v)", |