1
0
Fork 0

refactor: move oraclelinux/ubuntu kernels match to modules

master
dump_stack() 2023-05-18 11:28:06 +00:00
parent 71c2b2001c
commit ef35743579
Signed by: dump_stack
GPG Key ID: BE44DA8C062D87DC
3 changed files with 78 additions and 72 deletions

View File

@ -2,10 +2,14 @@ package oraclelinux
import ( import (
"fmt" "fmt"
"regexp"
"strings"
"time"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
"code.dumpstack.io/tools/out-of-tree/config" "code.dumpstack.io/tools/out-of-tree/config"
"code.dumpstack.io/tools/out-of-tree/container"
) )
func Envs(km config.KernelMask) (envs []string) { 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...)) commands = append(commands, fmt.Sprintf(f, s...))
} }
if sk.DistroRelease < "6" { if km.DistroRelease < "6" {
log.Fatal().Msgf("no support for pre-EL6") 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'") cmdf("yum -y groupinstall 'Development Tools'")
packages := "linux-firmware grubby" packages := "linux-firmware grubby"
if sk.DistroRelease <= "7" { if km.DistroRelease <= "7" {
packages += " libdtrace-ctf" packages += " libdtrace-ctf"
} }
@ -35,3 +39,39 @@ func Runs(km config.KernelMask) (commands []string) {
return 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
}

View File

@ -2,8 +2,12 @@ package ubuntu
import ( import (
"fmt" "fmt"
"regexp"
"strings"
"time"
"code.dumpstack.io/tools/out-of-tree/config" "code.dumpstack.io/tools/out-of-tree/config"
"code.dumpstack.io/tools/out-of-tree/container"
) )
func Envs(km config.KernelMask) (envs []string) { func Envs(km config.KernelMask) (envs []string) {
@ -48,3 +52,33 @@ func Runs(km config.KernelMask) (commands []string) {
return 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
}

View File

@ -13,7 +13,6 @@ import (
"os/exec" "os/exec"
"os/signal" "os/signal"
"os/user" "os/user"
"regexp"
"runtime" "runtime"
"strings" "strings"
"time" "time"
@ -31,79 +30,12 @@ import (
"code.dumpstack.io/tools/out-of-tree/fs" "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) { func MatchPackages(km config.KernelMask) (pkgs []string, err error) {
switch km.DistroType { switch km.DistroType {
case config.Ubuntu: case config.Ubuntu:
pkgs, err = matchDebImagePkg(km.DockerName(), km.ReleaseMask) pkgs, err = ubuntu.Match(km)
case config.OracleLinux, config.CentOS: case config.OracleLinux, config.CentOS:
pkgs, err = matchOracleLinuxPkg(km.DockerName(), km.ReleaseMask) pkgs, err = oraclelinux.Match(km)
case config.Debian: case config.Debian:
pkgs, err = debian.MatchImagePkg(km) pkgs, err = debian.MatchImagePkg(km)
default: default: