diff --git a/container/container.go b/container/container.go index 0afe83f..6878849 100644 --- a/container/container.go +++ b/container/container.go @@ -8,7 +8,6 @@ import ( "bufio" "errors" "fmt" - "io/ioutil" "os" "os/exec" "path" @@ -22,7 +21,6 @@ import ( "code.dumpstack.io/tools/out-of-tree/config" "code.dumpstack.io/tools/out-of-tree/distro" - "code.dumpstack.io/tools/out-of-tree/fs" ) var Runtime = "docker" @@ -377,6 +375,48 @@ func (c Container) Run(workdir string, cmds []string) (out string, err error) { return } +func FindKernel(entries []os.DirEntry, kname string) (name string, err error) { + for _, e := range entries { + var fi os.FileInfo + fi, err = e.Info() + if err != nil { + return + } + + if strings.HasPrefix(fi.Name(), "vmlinuz") { + if strings.Contains(fi.Name(), kname) { + name = fi.Name() + return + } + } + } + + err = errors.New("cannot find kernel") + return +} + +func FindInitrd(entries []os.DirEntry, kname string) (name string, err error) { + for _, e := range entries { + var fi os.FileInfo + fi, err = e.Info() + if err != nil { + return + } + + if strings.HasPrefix(fi.Name(), "initrd") || + strings.HasPrefix(fi.Name(), "initramfs") { + + if strings.Contains(fi.Name(), kname) { + name = fi.Name() + return + } + } + } + + err = errors.New("cannot find kernel") + return +} + func (c Container) Kernels() (kernels []distro.KernelInfo, err error) { if !c.Exist() { return @@ -392,27 +432,33 @@ func (c Container) Kernels() (kernels []distro.KernelInfo, err error) { } } - moddirs, err := ioutil.ReadDir(libmodules) + moddirs, err := os.ReadDir(libmodules) if err != nil { return } - bootfiles, err := ioutil.ReadDir(boot) + bootfiles, err := os.ReadDir(boot) if err != nil { return } - for _, krel := range moddirs { + for _, e := range moddirs { + var krel os.FileInfo + krel, err = e.Info() + if err != nil { + return + } + c.Log.Debug().Msgf("generate config entry for %s", krel.Name()) var kernelFile, initrdFile string - kernelFile, err = fs.FindKernel(bootfiles, krel.Name()) + kernelFile, err = FindKernel(bootfiles, krel.Name()) if err != nil { c.Log.Warn().Msgf("cannot find kernel %s", krel.Name()) continue } - initrdFile, err = fs.FindInitrd(bootfiles, krel.Name()) + initrdFile, err = FindInitrd(bootfiles, krel.Name()) if err != nil { c.Log.Warn().Msgf("cannot find initrd %s", krel.Name()) continue diff --git a/fs/fs.go b/fs/fs.go index 75e3393..6b27e99 100644 --- a/fs/fs.go +++ b/fs/fs.go @@ -70,33 +70,3 @@ func FindBySubstring(dir, substring string) (k string, err error) { err = errors.New("not found") return } - -func FindKernel(files []os.FileInfo, kname string) (name string, err error) { - for _, file := range files { - if strings.HasPrefix(file.Name(), "vmlinuz") { - if strings.Contains(file.Name(), kname) { - name = file.Name() - return - } - } - } - - err = errors.New("cannot find kernel") - return -} - -func FindInitrd(files []os.FileInfo, kname string) (name string, err error) { - for _, file := range files { - if strings.HasPrefix(file.Name(), "initrd") || - strings.HasPrefix(file.Name(), "initramfs") { - - if strings.Contains(file.Name(), kname) { - name = file.Name() - return - } - } - } - - err = errors.New("cannot find kernel") - return -} diff --git a/kernel/kernel_linux.go b/kernel/kernel_linux.go index 063dc4a..f165189 100644 --- a/kernel/kernel_linux.go +++ b/kernel/kernel_linux.go @@ -8,13 +8,14 @@ package kernel import ( - "io/ioutil" + "os" "os/exec" "strings" "github.com/rs/zerolog/log" "github.com/zcalusic/sysinfo" + "code.dumpstack.io/tools/out-of-tree/container" "code.dumpstack.io/tools/out-of-tree/distro" "code.dumpstack.io/tools/out-of-tree/fs" ) @@ -38,12 +39,11 @@ func GenHostKernels(download bool) (kernels []distro.KernelInfo, err error) { } kernelsBase := "/boot/" - bootfiles, err := ioutil.ReadDir(kernelsBase) + bootfiles, err := os.ReadDir(kernelsBase) if err != nil { return } - // only for compatibility, docker is not really used dist := distro.Distro{ ID: distroType, Release: si.OS.Version, @@ -58,13 +58,13 @@ func GenHostKernels(download bool) (kernels []distro.KernelInfo, err error) { log.Debug().Msgf("generate config entry for %s", krel) var kernelFile, initrdFile string - kernelFile, err = fs.FindKernel(bootfiles, krel) + kernelFile, err = container.FindKernel(bootfiles, krel) if err != nil { log.Warn().Msgf("cannot find kernel %s", krel) continue } - initrdFile, err = fs.FindInitrd(bootfiles, krel) + initrdFile, err = container.FindInitrd(bootfiles, krel) if err != nil { log.Warn().Msgf("cannot find initrd %s", krel) continue