feat: add kernels list to distro interface
This commit is contained in:
@ -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 {
|
||||
// Fisher–Yates shuffle
|
||||
for i := len(a) - 1; i > 0; i-- {
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user