]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
lxc-start-ephemeral: Fix broken mount logic
authorStéphane Graber <stgraber@ubuntu.com>
Fri, 18 Oct 2013 17:27:46 +0000 (13:27 -0400)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Fri, 18 Oct 2013 18:33:26 +0000 (13:33 -0500)
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@ubuntu.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/lxc-start-ephemeral.in

index af8da80bca3cb679dbe097ba57ef16fe1cbd763f..0f0c398b5ccfe73bd22dda7a2bdc27ce6a713067 100644 (file)
@@ -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