1
0
Fork 0

refactor: move oraclelinux/ubuntu kernels match to modules

timestamps
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 (
"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
}

View File

@ -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
}

View File

@ -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: