From 4799a1e7eced77ae8ef48579b81aa71127958a61 Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Tue, 13 Jan 2015 00:08:37 +0000 Subject: [PATCH] lxc-start-ephemeral: handle the overlayfs workdir option (v2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We fixed this some time ago for basic lxc-start, but never did lxc-start-ephemeral. Since the lxc-start patches were pushed, Miklos has given us a way to detect whether we need the workdir= option. So the bdev.c code could be simplified to check for "overlay\n" in /proc/filesystems just as lxc-start-ephemeral does. This patch doesn't do that. Changelog (v2): 1. use 'overlay' fstype for new overlay upstream module 2. avoid using unneeded readlines(). Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- src/lxc/lxc-start-ephemeral.in | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/lxc/lxc-start-ephemeral.in b/src/lxc/lxc-start-ephemeral.in index c999e74d5..36e257983 100644 --- a/src/lxc/lxc-start-ephemeral.in +++ b/src/lxc/lxc-start-ephemeral.in @@ -219,6 +219,14 @@ for entry in args.cdir: dst_path = "%s/rootfs/%s" % (dest_path, src_path) overlay_dirs += [(src_path, dst_path)] +# do we have the new overlay fs which requires workdir, or the older +# overlayfs which does not? +have_new_overlay = False +with open("/proc/filesystems", "r") as fd: + for line in fd: + if line == "nodev\toverlay\n": + have_new_overlay = True + # Generate pre-mount script with open(os.path.join(dest_path, "pre-mount"), "w+") as fd: os.fchmod(fd.fileno(), 0o755) @@ -231,16 +239,31 @@ LXC_NAME="%s" count = 0 for entry in overlay_dirs: target = "%s/delta%s" % (dest_path, count) + workdir = "%s/work%s" % (dest_path, count) fd.write("mkdir -p %s %s\n" % (target, entry[1])) + if have_new_overlay: + fd.write("mkdir -p %s\n" % workdir) if args.storage_type == "tmpfs": fd.write("mount -n -t tmpfs -o mode=0755 none %s\n" % (target)) + if have_new_overlay: + fd.write("mount -n -t tmpfs -o mode=0755 none %s\n" % (workdir)) fd.write("getfacl -a %s | setfacl --set-file=- %s || true\n" % (entry[0], target)) fd.write("getfacl -a %s | setfacl --set-file=- %s || true\n" % (entry[0], entry[1])) + if have_new_overlay: + fd.write("getfacl -a %s | setfacl --set-file=- %s || true\n" % (entry[0], workdir)) if args.union_type == "overlayfs": - fd.write("mount -n -t overlayfs" + if have_new_overlay: + fd.write("mount -n -t overlay" + " -oupperdir=%s,lowerdir=%s,workdir=%s none %s\n" % ( + target, + entry[0], + workdir, + entry[1])) + else: + fd.write("mount -n -t overlayfs" " -oupperdir=%s,lowerdir=%s none %s\n" % ( target, entry[0],