1
0

feat: initial implementation of distro interface

This commit is contained in:
2023-05-18 21:37:07 +00:00
parent c3774714fd
commit 120fcdc56b
8 changed files with 292 additions and 114 deletions

View File

@ -14,10 +14,73 @@ import (
"code.dumpstack.io/tools/out-of-tree/cache"
"code.dumpstack.io/tools/out-of-tree/config"
"code.dumpstack.io/tools/out-of-tree/container"
"code.dumpstack.io/tools/out-of-tree/distro"
"code.dumpstack.io/tools/out-of-tree/distro/debian/snapshot"
"code.dumpstack.io/tools/out-of-tree/fs"
)
func init() {
releases := []Release{
Wheezy,
Jessie,
Stretch,
Buster,
Bullseye,
}
for _, release := range releases {
container := fmt.Sprintf("out_of_tree_debian_%d", release)
distro.Register(Debian{
release: release,
container: container,
})
}
}
type Debian struct {
release Release
container string
}
func (d Debian) ID() distro.ID {
return distro.Debian
}
func (d Debian) Equal(dd distro.Distro) bool {
if dd.ID != distro.Debian {
return false
}
return releaseFromString(dd.Release) == d.release
}
func (d Debian) Packages() (packages []string, err error) {
kernels, err := GetKernels()
if err != nil {
log.Error().Err(err).Msg("get kernels")
return
}
for _, dk := range kernels {
p := strings.Replace(dk.Image.Deb.Name, ".deb", "", -1)
var kr Release
kr, err = kernelRelease(p)
if err != nil {
log.Warn().Err(err).Msg("")
continue
}
if kr != d.release {
continue
}
packages = append(packages, p)
}
return
}
type Release int
const (
@ -111,38 +174,6 @@ func kernelRelease(deb string) (r Release, err error) {
return
}
func Match(km config.Target) (pkgs []string, err error) {
kernels, err := GetKernels()
if err != nil {
log.Error().Err(err).Msg("get kernels")
return
}
release := releaseFromString(km.Distro.Release)
r := regexp.MustCompile(km.Kernel.Regex)
for _, dk := range kernels {
p := strings.Replace(dk.Image.Deb.Name, ".deb", "", -1)
var kr Release
kr, err = kernelRelease(p)
if err != nil {
log.Warn().Err(err).Msg("")
continue
}
if kr != release {
continue
}
if r.MatchString(p) {
pkgs = append(pkgs, p)
}
}
return
}
func Envs(km config.Target) (envs []string) {
envs = append(envs, "DEBIAN_FRONTEND=noninteractive")
return