From: Stéphane Graber Date: Fri, 18 Oct 2013 17:27:46 +0000 (-0400) Subject: lxc-start-ephemeral: Fix broken mount logic X-Git-Tag: lxc-1.0.0.alpha2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01dae5c455f77fe11c5902f899885eddecd84514;p=thirdparty%2Flxc.git lxc-start-ephemeral: Fix broken mount logic 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 Signed-off-by: Serge Hallyn --- diff --git a/src/lxc/lxc-start-ephemeral.in b/src/lxc/lxc-start-ephemeral.in index af8da80bc..0f0c398b5 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