1
0

feat: add kernels list to distro interface

This commit is contained in:
2023-05-23 22:00:20 +00:00
parent c1ec4add81
commit daaef89050
9 changed files with 103 additions and 99 deletions

View File

@ -15,7 +15,6 @@ import (
"runtime"
"strings"
"github.com/naoina/toml"
"github.com/rs/zerolog/log"
"code.dumpstack.io/tools/out-of-tree/cache"
@ -193,92 +192,6 @@ func GenRootfsImage(d container.Image, download bool) (rootfs string, err error)
return
}
func UpdateKernelsCfg(host, download bool) (err error) {
newkcfg := config.KernelConfig{}
if host {
// Get host kernels
newkcfg, err = genHostKernels(download)
if err != nil {
return
}
}
// Get docker kernels
dockerImages, err := container.Images()
if err != nil {
return
}
for _, d := range dockerImages {
// TODO Requires changing the idea of how we list
// kernels from containers to distro/-related
// functions.
if strings.Contains(d.Name, "debian") {
err = debian.ContainerKernels(d, &newkcfg)
if err != nil {
log.Print("gen kernels", d.Name, ":", err)
}
continue
}
err = listContainersKernels(d, &newkcfg, download)
if err != nil {
log.Print("gen kernels", d.Name, ":", err)
continue
}
}
stripkcfg := config.KernelConfig{}
for _, nk := range newkcfg.Kernels {
if !hasKernel(nk, stripkcfg) {
stripkcfg.Kernels = append(stripkcfg.Kernels, nk)
}
}
buf, err := toml.Marshal(&stripkcfg)
if err != nil {
return
}
buf = append([]byte("# Autogenerated\n# DO NOT EDIT\n\n"), buf...)
kernelsCfgPath := config.File("kernels.toml")
err = ioutil.WriteFile(kernelsCfgPath, buf, 0644)
if err != nil {
return
}
log.Info().Msgf("%s is successfully updated", kernelsCfgPath)
return
}
func listContainersKernels(dii container.Image, newkcfg *config.KernelConfig,
download bool) (err error) {
c, err := container.New(dii.Distro)
if err != nil {
return
}
kernels, err := c.Kernels()
if err != nil {
return
}
newkcfg.Kernels = append(newkcfg.Kernels, kernels...)
return
}
func hasKernel(ki distro.KernelInfo, kcfg config.KernelConfig) bool {
for _, sk := range kcfg.Kernels {
if sk == ki {
return true
}
}
return false
}
func ShuffleStrings(a []string) []string {
// FisherYates shuffle
for i := len(a) - 1; i > 0; i-- {

View File

@ -21,7 +21,7 @@ import (
"code.dumpstack.io/tools/out-of-tree/fs"
)
func genHostKernels(download bool) (kcfg config.KernelConfig, err error) {
func GenHostKernels(download bool) (kernels []distro.KernelInfo, err error) {
si := sysinfo.SysInfo{}
si.GetSysInfo()
@ -97,7 +97,7 @@ func genHostKernels(download bool) (kcfg config.KernelConfig, err error) {
ki.VmlinuxPath = vmlinux
}
kcfg.Kernels = append(kcfg.Kernels, ki)
kernels = append(kernels, ki)
}
return