From 7b75cd8b94367645adb2dd5be016e6f98d8e6a89 Mon Sep 17 00:00:00 2001 From: Noel Georgi Date: Tue, 14 Feb 2023 00:50:04 +0530 Subject: [PATCH] fix: kernel module dependency tree generation This fixes the issue when the overlay mount target directory was used as lowerdir for the mount, creating extra folders in the extension. Fix the issue by adding support for normal overlay mounts to use a source directory when specified. Also fixes a small issue where messages was logged when error is nil. Signed-off-by: Noel Georgi --- internal/pkg/extensions/kernel_modules.go | 8 +++++--- internal/pkg/mount/mount.go | 7 ++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/internal/pkg/extensions/kernel_modules.go b/internal/pkg/extensions/kernel_modules.go index 0d0e3e47b0..acd7158671 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 9a9cee3975..c98c7ceb34 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) }