78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
|
// Copyright 2018 Mikhail Klementev. All rights reserved.
|
||
|
// Use of this source code is governed by a AGPLv3 license
|
||
|
// (or later) that can be found in the LICENSE file.
|
||
|
|
||
|
// +build linux
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"log"
|
||
|
"os/exec"
|
||
|
"strings"
|
||
|
|
||
|
"code.dumpstack.io/tools/out-of-tree/config"
|
||
|
"github.com/zcalusic/sysinfo"
|
||
|
)
|
||
|
|
||
|
func genHostKernels(download bool) (kcfg config.KernelConfig, err error) {
|
||
|
si := sysinfo.SysInfo{}
|
||
|
si.GetSysInfo()
|
||
|
|
||
|
distroType, err := config.NewDistroType(si.OS.Vendor)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
cmd := exec.Command("ls", "/lib/modules")
|
||
|
rawOutput, err := cmd.CombinedOutput()
|
||
|
if err != nil {
|
||
|
log.Println(string(rawOutput), err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
kernelsBase := "/boot/"
|
||
|
files, err := ioutil.ReadDir(kernelsBase)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// only for compatibility, docker is not really used
|
||
|
dii := dockerImageInfo{
|
||
|
ContainerName: config.KernelMask{
|
||
|
DistroType: distroType,
|
||
|
DistroRelease: si.OS.Version,
|
||
|
}.DockerName(),
|
||
|
}
|
||
|
|
||
|
rootfs, err := genRootfsImage(dii, download)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
for _, k := range strings.Fields(string(rawOutput)) {
|
||
|
ki := config.KernelInfo{
|
||
|
DistroType: distroType,
|
||
|
DistroRelease: si.OS.Version,
|
||
|
KernelRelease: k,
|
||
|
|
||
|
KernelSource: "/lib/modules/" + k + "/build",
|
||
|
|
||
|
KernelPath: kernelsBase + genKernelPath(files, k),
|
||
|
InitrdPath: kernelsBase + genInitrdPath(files, k),
|
||
|
RootFS: rootfs,
|
||
|
}
|
||
|
|
||
|
vmlinux := "/usr/lib/debug/boot/vmlinux-" + k
|
||
|
log.Println("vmlinux", vmlinux)
|
||
|
if exists(vmlinux) {
|
||
|
ki.VmlinuxPath = vmlinux
|
||
|
}
|
||
|
|
||
|
kcfg.Kernels = append(kcfg.Kernels, ki)
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|