From ef35743579921830b2da5b13dec74b899b85208d Mon Sep 17 00:00:00 2001 From: Mikhail Klementev Date: Thu, 18 May 2023 11:28:06 +0000 Subject: [PATCH] refactor: move oraclelinux/ubuntu kernels match to modules --- distro/oraclelinux/oraclelinux.go | 44 ++++++++++++++++++- distro/ubuntu/ubuntu.go | 34 +++++++++++++++ kernel/kernel.go | 72 +------------------------------ 3 files changed, 78 insertions(+), 72 deletions(-) diff --git a/distro/oraclelinux/oraclelinux.go b/distro/oraclelinux/oraclelinux.go index 3d1e1e8..35aa96b 100644 --- a/distro/oraclelinux/oraclelinux.go +++ b/distro/oraclelinux/oraclelinux.go @@ -2,10 +2,14 @@ package oraclelinux import ( "fmt" + "regexp" + "strings" + "time" "github.com/rs/zerolog/log" "code.dumpstack.io/tools/out-of-tree/config" + "code.dumpstack.io/tools/out-of-tree/container" ) func Envs(km config.KernelMask) (envs []string) { @@ -17,7 +21,7 @@ func Runs(km config.KernelMask) (commands []string) { commands = append(commands, fmt.Sprintf(f, s...)) } - if sk.DistroRelease < "6" { + if km.DistroRelease < "6" { log.Fatal().Msgf("no support for pre-EL6") } @@ -27,7 +31,7 @@ func Runs(km config.KernelMask) (commands []string) { cmdf("yum -y groupinstall 'Development Tools'") packages := "linux-firmware grubby" - if sk.DistroRelease <= "7" { + if km.DistroRelease <= "7" { packages += " libdtrace-ctf" } @@ -35,3 +39,39 @@ func Runs(km config.KernelMask) (commands []string) { return } + +func Match(km config.KernelMask) (pkgs []string, err error) { + // FIXME timeout should be in global out-of-tree config + c, err := container.New(km.DockerName(), time.Hour) + if err != nil { + return + } + + cmd := "yum search kernel --showduplicates " + + "| grep '^kernel-[0-9]\\|^kernel-uek-[0-9]' " + + "| grep -v src " + + "| cut -d ' ' -f 1" + + output, err := c.Run(config.Dir("tmp"), cmd) + if err != nil { + return + } + + r, err := regexp.Compile("kernel-" + km.ReleaseMask) + if err != nil { + return + } + + for _, pkg := range strings.Fields(output) { + if r.MatchString(pkg) || strings.Contains(pkg, km.ReleaseMask) { + log.Trace().Msg(pkg) + pkgs = append(pkgs, pkg) + } + } + + if len(pkgs) == 0 { + log.Warn().Msg("no packages matched") + } + + return +} diff --git a/distro/ubuntu/ubuntu.go b/distro/ubuntu/ubuntu.go index 5e1d37b..d69b494 100644 --- a/distro/ubuntu/ubuntu.go +++ b/distro/ubuntu/ubuntu.go @@ -2,8 +2,12 @@ package ubuntu import ( "fmt" + "regexp" + "strings" + "time" "code.dumpstack.io/tools/out-of-tree/config" + "code.dumpstack.io/tools/out-of-tree/container" ) func Envs(km config.KernelMask) (envs []string) { @@ -48,3 +52,33 @@ func Runs(km config.KernelMask) (commands []string) { return } + +func Match(km config.KernelMask) (pkgs []string, err error) { + // FIXME timeout should be in global out-of-tree config + c, err := container.New(km.DockerName(), time.Hour) + if err != nil { + return + } + + cmd := "apt-cache search " + + "--names-only '^linux-image-[0-9\\.\\-]*-generic' " + + "| awk '{ print $1 }'" + + output, err := c.Run(config.Dir("tmp"), cmd) + if err != nil { + return + } + + r, err := regexp.Compile("linux-image-" + km.ReleaseMask) + if err != nil { + return + } + + for _, pkg := range strings.Fields(output) { + if r.MatchString(pkg) || strings.Contains(pkg, km.ReleaseMask) { + pkgs = append(pkgs, pkg) + } + } + + return +} diff --git a/kernel/kernel.go b/kernel/kernel.go index eacd7e5..d9dc804 100644 --- a/kernel/kernel.go +++ b/kernel/kernel.go @@ -13,7 +13,6 @@ import ( "os/exec" "os/signal" "os/user" - "regexp" "runtime" "strings" "time" @@ -31,79 +30,12 @@ import ( "code.dumpstack.io/tools/out-of-tree/fs" ) -func matchDebImagePkg(containerName, mask string) (pkgs []string, err error) { - - cmd := "apt-cache search --names-only '^linux-image-[0-9\\.\\-]*-generic' | awk '{ print $1 }'" - - // FIXME timeout should be in global out-of-tree config - c, err := container.New(containerName, time.Hour) - if err != nil { - return - } - - output, err := c.Run(config.Dir("tmp"), cmd) - if err != nil { - return - } - - r, err := regexp.Compile("linux-image-" + mask) - if err != nil { - return - } - - for _, pkg := range strings.Fields(output) { - if r.MatchString(pkg) || strings.Contains(pkg, mask) { - pkgs = append(pkgs, pkg) - } - } - - return -} - -func matchOracleLinuxPkg(containerName, mask string) ( - pkgs []string, err error) { - - cmd := "yum search kernel --showduplicates " + - "| grep '^kernel-[0-9]\\|^kernel-uek-[0-9]' " + - "| grep -v src " + - "| cut -d ' ' -f 1" - - // FIXME timeout should be in global out-of-tree config - c, err := container.New(containerName, time.Hour) - if err != nil { - return - } - - output, err := c.Run(config.Dir("tmp"), cmd) - if err != nil { - return - } - - r, err := regexp.Compile("kernel-" + mask) - if err != nil { - return - } - - for _, pkg := range strings.Fields(output) { - if r.MatchString(pkg) || strings.Contains(pkg, mask) { - log.Trace().Msg(pkg) - pkgs = append(pkgs, pkg) - } - } - - if len(pkgs) == 0 { - log.Warn().Msg("no packages matched") - } - - return -} - func MatchPackages(km config.KernelMask) (pkgs []string, err error) { switch km.DistroType { case config.Ubuntu: - pkgs, err = matchDebImagePkg(km.DockerName(), km.ReleaseMask) + pkgs, err = ubuntu.Match(km) case config.OracleLinux, config.CentOS: - pkgs, err = matchOracleLinuxPkg(km.DockerName(), km.ReleaseMask) + pkgs, err = oraclelinux.Match(km) case config.Debian: pkgs, err = debian.MatchImagePkg(km) default: