From 8ea62ad5b781a07233d7254c3cc5c7aa7085f6eb Mon Sep 17 00:00:00 2001 From: Federico Di Pierro Date: Fri, 29 Mar 2024 11:37:04 +0100 Subject: [PATCH] fix(pkg/driverbuilder): fix `local` executor to correctly fetch KERNELDIR. Signed-off-by: Federico Di Pierro --- pkg/driverbuilder/local.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/pkg/driverbuilder/local.go b/pkg/driverbuilder/local.go index 280ad7e2..6ab34133 100644 --- a/pkg/driverbuilder/local.go +++ b/pkg/driverbuilder/local.go @@ -2,6 +2,7 @@ package driverbuilder import ( "bufio" + "bytes" "context" _ "embed" "errors" @@ -13,7 +14,6 @@ import ( "os/exec" "os/user" "path/filepath" - "strings" "time" ) @@ -67,12 +67,23 @@ func (lbp *LocalBuildProcessor) Start(b *builder.Build) error { // if an unsupported target is passed. // Go on skipping automatic kernel headers download. if err == nil { - slog.Info("Trying automatic kernel headers download.") + slog.Info("Trying automatic kernel headers download") kernelDownloadScript, err := builder.KernelDownloadScript(realBuilder, nil, kr) + // Patch kernel download script to echo KERNELDIR. + // We need to capture KERNELDIR to later pass it as env variable to the build. + kernelDownloadScript += "\necho $KERNELDIR" if err == nil { out, err := exec.Command("bash", "-c", kernelDownloadScript).Output() if err == nil { - path := strings.TrimSuffix(string(out), "\n") + // Scan all stdout line by line and + // store last line as KERNELDIR path. + reader := bytes.NewReader(out) + scanner := bufio.NewScanner(reader) + var path string + for scanner.Scan() { + path = scanner.Text() + } + slog.Info("Setting KERNELDIR env var", "path", path) // add the kerneldir path to env lbp.envMap[kernelDirEnv] = path defer func() { @@ -80,11 +91,11 @@ func (lbp *LocalBuildProcessor) Start(b *builder.Build) error { _ = os.RemoveAll(path) }() } else { - slog.Warn("Failed to download headers.", "err", err) + slog.Warn("Failed to download headers", "err", err) } } } else { - slog.Info("Skipping kernel headers automatic download.", "err", err) + slog.Info("Skipping kernel headers automatic download", "err", err) } } @@ -137,7 +148,7 @@ func (lbp *LocalBuildProcessor) Start(b *builder.Build) error { srcProbePath := vv.GetProbeFullPath(c) if len(lbp.srcDir) == 0 { - slog.Info("Downloading driver sources.") + slog.Info("Downloading driver sources") // Download src! libsDownloadScript, err := builder.LibsDownloadScript(c) if err != nil { @@ -168,14 +179,14 @@ func (lbp *LocalBuildProcessor) Start(b *builder.Build) error { stdout, err := cmd.StdoutPipe() if err != nil { - slog.Warn("Failed to pipe stdout. Trying without piping.", "err", err) + slog.Warn("Failed to pipe stdout", "err", err) _, err = cmd.CombinedOutput() } else { cmd.Stderr = cmd.Stdout // redirect stderr to stdout so that we catch it defer stdout.Close() err = cmd.Start() if err != nil { - slog.Warn("Failed to execute command.", "err", err) + slog.Warn("Failed to execute command", "err", err) } else { // print the output of the subprocess line by line scanner := bufio.NewScanner(stdout)