[lxc-devel] [PATCH v3] Add lxc-copy executable

Christian Brauner christianvanbrauner at gmail.com
Fri Nov 6 10:59:49 UTC 2015


Changes v3 (only changes in the commit message):

(1) Make it explicit that the flag -e / --ephemeral starts ephemeral containers.
(2) Fix missing -e flag in examples (c) and (d).
(3) Fix example (d). The flag to create a non-ephemeral container is -D and not
    -K.
(4) Add some more exampled to illustrate -D, -K, and -M flags.

Changes v2:
(1) The mkdtemp() call accidently created a directory in the current working
    directory of the shell it was called in. This is now fixed by correctly
    creating the full path first and then using the offset
    strlen(my_args->newpath) + 1 to point my_args->newname to the name of the
    container:

        ret = snprintf(randname, MAXPATHLEN, "%s/%s_XXXXXX", my_args->newpath, my_args->name);
	if (ret < 0 || ret >= MAXPATHLEN)
		return -1;
	if (!mkdtemp(randname))
		return -1;
	my_args->newname = randname + strlen(my_args->newpath) + 1;

Changes in comparison to first implementation:

(1) Instead of using a custom function to generate random names for ephemeral
    container we use mkdtemp(). This will be safer and the code considerably
    easier.
(2) Make the whole code easily extendable by using a design centered around a
    struct and an enum. The current design will allow us to add further mount
    types should we want to:
        enum mnttype {
        	LXC_MNT_BIND,
        	LXC_MNT_AUFS,
        	LXC_MNT_OVL,
        };

        struct mnts {
        	enum mnttype type;
        	char *src;
        	char *dest;
        	char *options;
        	char *upper;
        	char *workdir;
        	char *lower;
        };

   (E.g. lowerdir is currently not used but we could in the future allow users
    to specify multiple lowerdirs on the command line. All we would have to do
    is to extend the corresponding parse function parse_ovl_mnt().)

(3) We use getsubopt() to parse the custom mounts user can specify with the -m
    flag and the keys {aufs,bind,overlay}. This will avoid redundancy because
    users do not have to specify multiple -m flags but can rather just do -m
    bind=/a:/b,overlay/c:/d etc. Furthermore, it will allow us to add further
    keys rather easily.

(4) There is a branch lxccopy on github for easier testing:

        https://github.com/brauner/lxc/tree/lxccopy

Serge, I wonder how many bugs you will find. :)

Christian Brauner (1):
  Add lxc-copy executable

 src/lxc/Makefile.am |   2 +
 src/lxc/arguments.h |   2 +
 src/lxc/lxc_copy.c  | 744 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 748 insertions(+)
 create mode 100644 src/lxc/lxc_copy.c

-- 
2.6.2



More information about the lxc-devel mailing list