Commit 01dae5c4 by Stéphane Graber Committed by Serge Hallyn

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: 's avatarStéphane Graber <stgraber@ubuntu.com> Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
parent 3ca91fb6
...@@ -164,30 +164,32 @@ if orig.get_config_item("lxc.mount"): ...@@ -164,30 +164,32 @@ if orig.get_config_item("lxc.mount"):
line.replace(orig.get_config_item("lxc.rootfs"), line.replace(orig.get_config_item("lxc.rootfs"),
dest.get_config_item("lxc.rootfs")) dest.get_config_item("lxc.rootfs"))
# Skip any line that's not a bind mount
fields = line.split() fields = line.split()
# Skip invalid entries
if len(fields) < 4: if len(fields) < 4:
continue
# Non-bind mounts are kept as-is
if "bind" not in fields[3]:
dest_fd.write("%s\n" % line) dest_fd.write("%s\n" % line)
continue 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) dest_fd.write("%s\n" % line)
continue continue
# Process any remaining line # Skip invalid mount points
dest_mount = os.path.abspath(os.path.join("%s/rootfs/" % ( dest_mount = os.path.abspath(os.path.join("%s/rootfs/" % (
dest_path), fields[1])) 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: if "%s/rootfs/" % dest_path not in dest_mount:
print(_("Skipping mount entry '%s' as it's outside " print(_("Skipping mount entry '%s' as it's outside "
"of the container rootfs.") % line) "of the container rootfs.") % line)
# Setup an overlay for anything remaining
overlay_dirs += [(fields[0], dest_mount)] overlay_dirs += [(fields[0], dest_mount)]
# Generate pre-mount script # Generate pre-mount script
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment