diff --git a/machine.go b/machine.go index 4ad9064..2bdd318 100644 --- a/machine.go +++ b/machine.go @@ -4,6 +4,7 @@ package fakemachine import ( + "bufio" "bytes" "fmt" "io/ioutil" @@ -352,10 +353,33 @@ func (m *Machine) writerKernelModules(w *writerhelper.WriterHelper) error { "modules.builtin.bin", "modules.devname"} + usrpath := "/lib/modules" + if mergedUsrSystem() { + usrpath = "/usr/lib/modules" + } + + // build a list of built-in modules so that we don’t attempt to copy them + var builtinModules = make(map[string]bool) + + f, err := os.Open(path.Join(usrpath, kernelRelease, "modules.builtin")) + if err != nil { + return err + } + defer f.Close() + + scanner := bufio.NewScanner(f) + for scanner.Scan() { + module := scanner.Text() + builtinModules[module] = true + } + + if err := scanner.Err(); err != nil { + return err + } + for _, v := range modules { - usrpath := "/lib/modules" - if mergedUsrSystem() { - usrpath = "/usr/lib/modules" + if builtinModules[v] { + continue } if err := w.CopyFile(path.Join(usrpath, kernelRelease, v)); err != nil { return err