[lxc-devel] [PATCH] lxc-start-ephemeral: Fix broken mount logic

Stéphane Graber stgraber at ubuntu.com
Fri Oct 18 17:27:46 UTC 2013


This reworks the mount logic for lxc-start-ephemeral to be as follow:
 - Any real (non-bind) entry gets copied to the target fstab
 - Any bind-mount from a virtual fs gets copied to the target fstab
 - Any remaining bind-mount if confirmed to be valid gets setup as an
   overlay.

Extra bind-mounts passed through the -b option are mounted by the
pre-mount script and don't need processing by the fstab generator.

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 src/lxc/lxc-start-ephemeral.in | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/lxc/lxc-start-ephemeral.in b/src/lxc/lxc-start-ephemeral.in
index af8da80..0f0c398 100644
--- a/src/lxc/lxc-start-ephemeral.in
+++ b/src/lxc/lxc-start-ephemeral.in
@@ -164,30 +164,32 @@ if orig.get_config_item("lxc.mount"):
                 line.replace(orig.get_config_item("lxc.rootfs"),
                              dest.get_config_item("lxc.rootfs"))
 
-                # Skip any line that's not a bind mount
                 fields = line.split()
+
+                # Skip invalid entries
                 if len(fields) < 4:
+                    continue
+
+                # Non-bind mounts are kept as-is
+                if "bind" not in fields[3]:
                     dest_fd.write("%s\n" % line)
                     continue
 
-                if fields[2] != "bind" and "bind" not in fields[3]:
+                # Bind mounts of virtual filesystems are also kept as-is
+                src_path = fields[0].split("/")
+                if len(src_path) > 1 and src_path[1] in ("proc", "sys"):
                     dest_fd.write("%s\n" % line)
                     continue
 
-                # Process any remaining line
+                # Skip invalid mount points
                 dest_mount = os.path.abspath(os.path.join("%s/rootfs/" % (
                                              dest_path), fields[1]))
 
-                if dest_mount == os.path.abspath("%s/rootfs/%s" % (
-                                                 dest_path, args.bdir)):
-
-                    dest_fd.write("%s\n" % line)
-                    continue
-
                 if "%s/rootfs/" % dest_path not in dest_mount:
                     print(_("Skipping mount entry '%s' as it's outside "
                             "of the container rootfs.") % line)
 
+                # Setup an overlay for anything remaining
                 overlay_dirs += [(fields[0], dest_mount)]
 
 # Generate pre-mount script
-- 
1.8.3.2





More information about the lxc-devel mailing list