mirror of https://github.com/containers/podman.git
runtime: use FindCommon from c/common
it detects conmon-rs. [NO NEW TESTS NEEDED] no functionalities added. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
86f665a1da
commit
20ad122741
|
|
@ -2,15 +2,11 @@ package libpod
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
|
|
@ -44,17 +40,6 @@ import (
|
|||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
const (
|
||||
// conmonMinMajorVersion is the major version required for conmon.
|
||||
conmonMinMajorVersion = 2
|
||||
|
||||
// conmonMinMinorVersion is the minor version required for conmon.
|
||||
conmonMinMinorVersion = 0
|
||||
|
||||
// conmonMinPatchVersion is the sub-minor version required for conmon.
|
||||
conmonMinPatchVersion = 24
|
||||
)
|
||||
|
||||
// A RuntimeOption is a functional option which alters the Runtime created by
|
||||
// NewRuntime
|
||||
type RuntimeOption func(*Runtime) error
|
||||
|
|
@ -308,7 +293,7 @@ func getLockManager(runtime *Runtime) (lock.Manager, error) {
|
|||
// Sets up containers/storage, state store, OCI runtime
|
||||
func makeRuntime(runtime *Runtime) (retErr error) {
|
||||
// Find a working conmon binary
|
||||
cPath, err := findConmon(runtime.config.Engine.ConmonPath)
|
||||
cPath, err := runtime.config.FindConmon()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -670,102 +655,6 @@ func makeRuntime(runtime *Runtime) (retErr error) {
|
|||
return nil
|
||||
}
|
||||
|
||||
// findConmon iterates over conmonPaths and returns the path
|
||||
// to the first conmon binary with a new enough version. If none is found,
|
||||
// we try to do a path lookup of "conmon".
|
||||
func findConmon(conmonPaths []string) (string, error) {
|
||||
foundOutdatedConmon := false
|
||||
for _, path := range conmonPaths {
|
||||
stat, err := os.Stat(path)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if stat.IsDir() {
|
||||
continue
|
||||
}
|
||||
if err := probeConmon(path); err != nil {
|
||||
logrus.Warnf("Conmon at %s invalid: %v", path, err)
|
||||
foundOutdatedConmon = true
|
||||
continue
|
||||
}
|
||||
logrus.Debugf("Using conmon: %q", path)
|
||||
return path, nil
|
||||
}
|
||||
|
||||
// Search the $PATH as last fallback
|
||||
if path, err := exec.LookPath("conmon"); err == nil {
|
||||
if err := probeConmon(path); err != nil {
|
||||
logrus.Warnf("Conmon at %s is invalid: %v", path, err)
|
||||
foundOutdatedConmon = true
|
||||
} else {
|
||||
logrus.Debugf("Using conmon from $PATH: %q", path)
|
||||
return path, nil
|
||||
}
|
||||
}
|
||||
|
||||
if foundOutdatedConmon {
|
||||
return "", fmt.Errorf(
|
||||
"please update to v%d.%d.%d or later: %w",
|
||||
conmonMinMajorVersion, conmonMinMinorVersion, conmonMinPatchVersion, define.ErrConmonOutdated)
|
||||
}
|
||||
|
||||
return "", fmt.Errorf(
|
||||
"could not find a working conmon binary (configured options: %v): %w",
|
||||
conmonPaths, define.ErrInvalidArg)
|
||||
}
|
||||
|
||||
// probeConmon calls conmon --version and verifies it is a new enough version for
|
||||
// the runtime expectations the container engine currently has.
|
||||
func probeConmon(conmonBinary string) error {
|
||||
cmd := exec.Command(conmonBinary, "--version")
|
||||
var out bytes.Buffer
|
||||
cmd.Stdout = &out
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
r := regexp.MustCompile(`^conmon version (?P<Major>\d+).(?P<Minor>\d+).(?P<Patch>\d+)`)
|
||||
|
||||
matches := r.FindStringSubmatch(out.String())
|
||||
if len(matches) != 4 {
|
||||
return fmt.Errorf("%v: %w", define.ErrConmonVersionFormat, err)
|
||||
}
|
||||
major, err := strconv.Atoi(matches[1])
|
||||
if err != nil {
|
||||
return fmt.Errorf("%v: %w", define.ErrConmonVersionFormat, err)
|
||||
}
|
||||
if major < conmonMinMajorVersion {
|
||||
return define.ErrConmonOutdated
|
||||
}
|
||||
if major > conmonMinMajorVersion {
|
||||
return nil
|
||||
}
|
||||
|
||||
minor, err := strconv.Atoi(matches[2])
|
||||
if err != nil {
|
||||
return fmt.Errorf("%v: %w", define.ErrConmonVersionFormat, err)
|
||||
}
|
||||
if minor < conmonMinMinorVersion {
|
||||
return define.ErrConmonOutdated
|
||||
}
|
||||
if minor > conmonMinMinorVersion {
|
||||
return nil
|
||||
}
|
||||
|
||||
patch, err := strconv.Atoi(matches[3])
|
||||
if err != nil {
|
||||
return fmt.Errorf("%v: %w", define.ErrConmonVersionFormat, err)
|
||||
}
|
||||
if patch < conmonMinPatchVersion {
|
||||
return define.ErrConmonOutdated
|
||||
}
|
||||
if patch > conmonMinPatchVersion {
|
||||
return nil
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// TmpDir gets the current Libpod temporary files directory.
|
||||
func (r *Runtime) TmpDir() (string, error) {
|
||||
if !r.valid {
|
||||
|
|
|
|||
Loading…
Reference in New Issue