1
0

refactor: move container generation to distro modules

This commit is contained in:
2023-05-23 13:20:48 +00:00
parent ff7bed76f2
commit a1999115db
12 changed files with 212 additions and 152 deletions

View File

@ -47,6 +47,11 @@ func (centos CentOS) Packages() (pkgs []string, err error) {
return
}
err = c.Build("centos:"+centos.release, centos.envs(), centos.runs())
if err != nil {
return
}
cmd := "yum search kernel --showduplicates 2>/dev/null " +
"| grep '^kernel-[0-9]' " +
"| grep -v src " +
@ -63,11 +68,11 @@ func (centos CentOS) Packages() (pkgs []string, err error) {
return
}
func Envs(km config.Target) (envs []string) {
func (centos CentOS) envs() (envs []string) {
return
}
func Runs(km config.Target) (commands []string) {
func (centos CentOS) runs() (commands []string) {
cmdf := func(f string, s ...interface{}) {
commands = append(commands, fmt.Sprintf(f, s...))
}
@ -75,7 +80,7 @@ func Runs(km config.Target) (commands []string) {
var repos []string
// TODO refactor
switch km.Distro.Release {
switch centos.release {
case "6":
repofmt := "[6.%d-%s]\\nbaseurl=https://vault.centos.org/6.%d/%s/$basearch/\\ngpgcheck=0"
for i := 0; i <= 10; i++ {
@ -109,7 +114,7 @@ func Runs(km config.Target) (commands []string) {
repos = append(repos, fmt.Sprintf(repofmt, ver, "appstream", ver, "AppStream"))
}
default:
log.Fatal().Msgf("no support for %s %s", km.Distro.ID, km.Distro.Release)
log.Fatal().Msgf("no support for centos %s", centos.release)
return
}
@ -126,14 +131,14 @@ func Runs(km config.Target) (commands []string) {
cmdf("yum -y groupinstall 'Development Tools'")
if km.Distro.Release < "8" {
if centos.release < "8" {
cmdf("yum -y install deltarpm")
} else {
cmdf("yum -y install grub2-tools-minimal elfutils-libelf-devel")
}
var flags string
if km.Distro.Release >= "8" {
if centos.release >= "8" {
flags = "--noautoremove"
}

View File

@ -0,0 +1,22 @@
package centos
import (
"testing"
"github.com/stretchr/testify/assert"
"code.dumpstack.io/tools/out-of-tree/distro"
)
func TestCentOS(t *testing.T) {
assert := assert.New(t)
u := CentOS{release: "7", container: "out_of_tree_centos_7"}
assert.Equal(u.ID(), distro.CentOS)
assert.Equal(u.Release(), "7")
assert.True(u.Equal(distro.Distro{Release: "7", ID: distro.CentOS}))
assert.NotEmpty(u.Packages())
}

View File

@ -60,6 +60,16 @@ func (d Debian) Equal(dd distro.Distro) bool {
}
func (d Debian) Packages() (packages []string, err error) {
c, err := container.New(d.container)
if err != nil {
return
}
err = c.Build(d.image(), d.envs(), d.runs())
if err != nil {
return
}
kernels, err := GetKernels()
if err != nil {
log.Error().Err(err).Msg("get kernels")
@ -178,15 +188,15 @@ func kernelRelease(deb string) (r Release, err error) {
return
}
func Envs(km config.Target) (envs []string) {
func (d Debian) envs() (envs []string) {
envs = append(envs, "DEBIAN_FRONTEND=noninteractive")
return
}
func ContainerImage(km config.Target) (image string) {
func (d Debian) image() (image string) {
image += "debian:"
switch ReleaseFromString(km.Distro.Release) {
switch d.release {
case Wheezy:
image += "wheezy-20190228"
case Jessie:
@ -194,7 +204,7 @@ func ContainerImage(km config.Target) (image string) {
case Stretch:
image += "stretch-20220622"
default:
image += km.Distro.Release
image += d.release.String()
}
return
@ -231,14 +241,12 @@ func repositories(release Release) (repos []string) {
return
}
func Runs(km config.Target) (commands []string) {
release := ReleaseFromString(km.Distro.Release)
func (d Debian) runs() (commands []string) {
cmdf := func(f string, s ...interface{}) {
commands = append(commands, fmt.Sprintf(f, s...))
}
repos := repositories(release)
repos := repositories(d.release)
if len(repos) != 0 {
cmdf("rm /etc/apt/sources.list")
@ -260,7 +268,7 @@ func Runs(km config.Target) (commands []string) {
"'^(gcc-[0-9].[0-9]|gcc-[0-9])$'",
}
if release < 9 {
if d.release < 9 {
pkglist = append(pkglist, "module-init-tools")
}

View File

@ -2,6 +2,10 @@ package debian
import (
"testing"
"github.com/stretchr/testify/assert"
"code.dumpstack.io/tools/out-of-tree/distro"
)
func TestKernelRelease(t *testing.T) {
@ -38,3 +42,16 @@ func TestKernelRelease(t *testing.T) {
}
}
}
func TestDebian(t *testing.T) {
assert := assert.New(t)
u := Debian{release: Wheezy, container: "out_of_tree_debian_7"}
assert.Equal(u.ID(), distro.Debian)
assert.Equal(u.Release(), "wheezy")
assert.True(u.Equal(distro.Distro{Release: "wheezy", ID: distro.Debian}))
assert.NotEmpty(u.Packages())
}

View File

@ -47,6 +47,11 @@ func (ol OracleLinux) Packages() (pkgs []string, err error) {
return
}
err = c.Build("oraclelinux:"+ol.release, ol.envs(), ol.runs())
if err != nil {
return
}
cmd := "yum search kernel --showduplicates 2>/dev/null " +
"| grep '^kernel-[0-9]\\|^kernel-uek-[0-9]' " +
"| grep -v src " +
@ -64,16 +69,16 @@ func (ol OracleLinux) Packages() (pkgs []string, err error) {
return
}
func Envs(km config.Target) (envs []string) {
func (ol OracleLinux) envs() (envs []string) {
return
}
func Runs(km config.Target) (commands []string) {
func (ol OracleLinux) runs() (commands []string) {
cmdf := func(f string, s ...interface{}) {
commands = append(commands, fmt.Sprintf(f, s...))
}
if km.Distro.Release < "6" {
if ol.release < "6" {
log.Fatal().Msgf("no support for pre-EL6")
}
@ -83,7 +88,7 @@ func Runs(km config.Target) (commands []string) {
cmdf("yum -y groupinstall 'Development Tools'")
packages := "linux-firmware grubby"
if km.Distro.Release <= "7" {
if ol.release <= "7" {
packages += " libdtrace-ctf"
}

View File

@ -0,0 +1,22 @@
package oraclelinux
import (
"testing"
"github.com/stretchr/testify/assert"
"code.dumpstack.io/tools/out-of-tree/distro"
)
func TestOracleLinux(t *testing.T) {
assert := assert.New(t)
u := OracleLinux{release: "9", container: "out_of_tree_oraclelinux_9"}
assert.Equal(u.ID(), distro.OracleLinux)
assert.Equal(u.Release(), "9")
assert.True(u.Equal(distro.Distro{Release: "9", ID: distro.OracleLinux}))
assert.NotEmpty(u.Packages())
}

View File

@ -53,6 +53,11 @@ func (u Ubuntu) Packages() (pkgs []string, err error) {
return
}
err = c.Build("ubuntu:"+u.release, u.envs(), u.runs())
if err != nil {
return
}
cmd := "apt-cache search " +
"--names-only '^linux-image-[0-9\\.\\-]*-generic$' " +
"| awk '{ print $1 }'"
@ -69,17 +74,17 @@ func (u Ubuntu) Packages() (pkgs []string, err error) {
return
}
func Envs(km config.Target) (envs []string) {
func (u Ubuntu) envs() (envs []string) {
envs = append(envs, "DEBIAN_FRONTEND=noninteractive")
return
}
func Runs(km config.Target) (commands []string) {
func (u Ubuntu) runs() (commands []string) {
cmdf := func(f string, s ...interface{}) {
commands = append(commands, fmt.Sprintf(f, s...))
}
if km.Distro.Release < "14.04" {
if u.release < "14.04" {
cmdf("sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/' " +
"/etc/apt/sources.list")
}
@ -88,14 +93,14 @@ func Runs(km config.Target) (commands []string) {
cmdf("apt-get install -y build-essential libelf-dev")
cmdf("apt-get install -y wget git")
if km.Distro.Release == "12.04" {
if u.release == "12.04" {
cmdf("apt-get install -y grub")
cmdf("cp /bin/true /usr/sbin/grub-probe")
cmdf("mkdir -p /boot/grub")
cmdf("touch /boot/grub/menu.lst")
}
if km.Distro.Release < "14.04" {
if u.release < "14.04" {
return
}

View File

@ -0,0 +1,22 @@
package ubuntu
import (
"testing"
"github.com/stretchr/testify/assert"
"code.dumpstack.io/tools/out-of-tree/distro"
)
func TestUbuntu(t *testing.T) {
assert := assert.New(t)
u := Ubuntu{release: "22.04", container: "out_of_tree_ubuntu_22__04"}
assert.Equal(u.ID(), distro.Ubuntu)
assert.Equal(u.Release(), "22.04")
assert.True(u.Equal(distro.Distro{Release: "22.04", ID: distro.Ubuntu}))
assert.NotEmpty(u.Packages())
}