From 736f857c1170a2f25e8af6b26694418b27a46043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Ecs=C3=A9di?= Date: Mon, 14 Oct 2019 17:28:25 +0200 Subject: [PATCH 1/2] Fix Red Hat os detection --- cmd/pke/app/util/linux/autodetect.go | 9 +++++++-- cmd/pke/app/util/linux/os_version_linux.go | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cmd/pke/app/util/linux/autodetect.go b/cmd/pke/app/util/linux/autodetect.go index 1cc15277..d620008a 100644 --- a/cmd/pke/app/util/linux/autodetect.go +++ b/cmd/pke/app/util/linux/autodetect.go @@ -17,6 +17,7 @@ package linux import ( "io" + "github.com/Masterminds/semver" "github.com/banzaicloud/pke/cmd/pke/app/constants" ) @@ -48,8 +49,12 @@ func ContainerdPackagesImpl(out io.Writer) (ContainerdPackages, error) { if err != nil { ver, err = RedHatVersion(out) } - if err == nil && (ver == "7" || ver == "8.0") { - return NewYumInstaller(), nil + if err == nil { + v, _ := semver.NewVersion(ver) + c, _ := semver.NewConstraint("7.x-0 || 8.x-0") + if c.Check(v) { + return NewYumInstaller(), nil + } } if distro, err := LSBReleaseDistributorID(out); err == nil { diff --git a/cmd/pke/app/util/linux/os_version_linux.go b/cmd/pke/app/util/linux/os_version_linux.go index 9f3a9177..b96c74e1 100644 --- a/cmd/pke/app/util/linux/os_version_linux.go +++ b/cmd/pke/app/util/linux/os_version_linux.go @@ -16,7 +16,10 @@ package linux import ( "bytes" + "fmt" "io" + "io/ioutil" + "regexp" "strings" "emperror.dev/errors" @@ -51,7 +54,18 @@ func CentOSVersion(w io.Writer) (string, error) { func RedHatVersion(w io.Writer) (string, error) { o, err := runner.Cmd(w, "rpm", "--query", "redhat-release").Output() if err != nil { - return "", err + // /etc/redhat-release + b, err := ioutil.ReadFile("/etc/redhat-release") + _, _ = fmt.Fprintf(w, "/etc/redhat-release: %q, err: %v\n", b, err) + if err != nil { + return "", err + } + re := regexp.MustCompile(`\d+(\.\d+)?`) + ver := re.Find(b) + if len(ver) == 0 { + return "", errors.New("failed to parse version") + } + return string(ver), nil } s := bytes.SplitN(o, dash, 4) From 59cd61db41bf81198d32f5086b4618427ad64213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Ecs=C3=A9di?= Date: Tue, 15 Oct 2019 15:27:55 +0200 Subject: [PATCH 2/2] Fix Red Hat os detection --- cmd/pke/app/util/linux/autodetect.go | 11 ++++++++--- cmd/pke/app/util/linux/kernel.go | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/cmd/pke/app/util/linux/autodetect.go b/cmd/pke/app/util/linux/autodetect.go index d620008a..dc281a0f 100644 --- a/cmd/pke/app/util/linux/autodetect.go +++ b/cmd/pke/app/util/linux/autodetect.go @@ -22,11 +22,16 @@ import ( ) func KubernetesPackagesImpl(out io.Writer) (KubernetesPackages, error) { - if ver, err := CentOSVersion(out); err == nil { - if ver == "7" { + ver, err := CentOSVersion(out) + if err != nil { + ver, err = RedHatVersion(out) + } + if err == nil { + v, _ := semver.NewVersion(ver) + c, _ := semver.NewConstraint("7.x-0 || 8.x-0") + if c.Check(v) { return NewYumInstaller(), nil } - return nil, constants.ErrUnsupportedOS } if distro, err := LSBReleaseDistributorID(out); err == nil { diff --git a/cmd/pke/app/util/linux/kernel.go b/cmd/pke/app/util/linux/kernel.go index 56ecf3aa..39805da5 100644 --- a/cmd/pke/app/util/linux/kernel.go +++ b/cmd/pke/app/util/linux/kernel.go @@ -33,6 +33,8 @@ func KernelVersionConstraint(out io.Writer, constraint string) error { if err != nil { return err } + // Red Hat Linux uses underscore: 3.10.0-327.el7.x86_64 + version = bytes.ReplaceAll(version, []byte("_"), []byte("")) v := string(bytes.TrimSpace(version)) ver, err := semver.NewVersion(v) if err != nil {