]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
lxc-start-ephemeral: handle the overlayfs workdir option (v2)
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Tue, 13 Jan 2015 00:08:37 +0000 (00:08 +0000)
committerStéphane Graber <stgraber@ubuntu.com>
Fri, 28 Aug 2015 20:01:25 +0000 (16:01 -0400)
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 <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
src/lxc/lxc-start-ephemeral.in

index 0ab08d07a81e74de170b1e708783097aabbd510f..1a6480a621607e1de09977be9aa5ee0f027430b7 100644 (file)
@@ -200,6 +200,14 @@ if orig.get_config_item("lxc.mount"):
                 # Setup an overlay for anything remaining
                 overlay_dirs += [(fields[0], dest_mount)]
 
+# 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)
@@ -212,13 +220,26 @@ 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))
 
         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],