diff --git a/internal/pkg/extensions/kernel_modules.go b/internal/pkg/extensions/kernel_modules.go index 0d0e3e47b..acd715867 100644 --- a/internal/pkg/extensions/kernel_modules.go +++ b/internal/pkg/extensions/kernel_modules.go @@ -115,11 +115,13 @@ func GenerateKernelModuleDependencyTreeExtension(extensionsPathWithKernelModules // writable overlayfs mount inside a container required a tmpfs mount overlays.Set("overlays-tmpfs", mount.NewMountPoint("tmpfs", constants.VarSystemOverlaysPath, "tmpfs", unix.MS_I_VERSION, "")) + rootfsKernelModulesPath := filepath.Join(rootfsMountPath, constants.DefaultKernelModulesPath) + // append the rootfs mount point - extensionsPathWithKernelModules = append(extensionsPathWithKernelModules, filepath.Join(rootfsMountPath, constants.DefaultKernelModulesPath)) + extensionsPathWithKernelModules = append(extensionsPathWithKernelModules, rootfsKernelModulesPath) // create the overlayfs mount point as read write - mp := mount.NewMountPoint("", strings.Join(extensionsPathWithKernelModules, ":"), "", unix.MS_I_VERSION, "", mount.WithFlags(mount.Overlay|mount.Shared)) + mp := mount.NewMountPoint(strings.Join(extensionsPathWithKernelModules, ":"), rootfsKernelModulesPath, "", unix.MS_I_VERSION, "", mount.WithFlags(mount.Overlay|mount.Shared)) overlays.Set("overlays-mnt", mp) if err = mount.Mount(overlays); err != nil { @@ -168,7 +170,7 @@ func GenerateKernelModuleDependencyTreeExtension(extensionsPathWithKernelModules func logErr(f func() error) { // if file is already closed, ignore the error - if err := f(); !errors.Is(err, os.ErrClosed) { + if err := f(); err != nil && !errors.Is(err, os.ErrClosed) { log.Println(err) } } diff --git a/internal/pkg/mount/mount.go b/internal/pkg/mount/mount.go index 9a9cee397..c98c7ceb3 100644 --- a/internal/pkg/mount/mount.go +++ b/internal/pkg/mount/mount.go @@ -444,7 +444,12 @@ func overlay(p *Point) error { } } - opts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", p.target, diff, workdir) + lowerDir := p.target + if p.source != "" { + lowerDir = p.source + } + + opts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lowerDir, diff, workdir) if err := unix.Mount("overlay", p.target, "overlay", 0, opts); err != nil { return fmt.Errorf("error creating overlay mount to %s: %w", p.target, err) }