Commit Graph

3762 Commits

Author SHA1 Message Date
Christian Brauner
9a09badcf5 check for btrfs fs in should_default_to_snapshot
Check if we're really on a btrfs filesystem before we call btrfs_same_fs().
Otherwise we will report misleading errors although everything went fine.

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2016-01-28 11:58:57 +01:00
Christian Brauner
7cfe3dd71f add lxc-copy to see_also.sgml.in
Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2016-01-28 11:58:57 +01:00
Christian Brauner
f433697442 lxc-ls: try to protect stack in recursive function
As ls_get() is non-tail recursive we face the inherent danger of blowing up the
stack at some level of nesting. To have at least some security we define
MAX_NESTLVL to be 5. That should be sufficient for most users. The argument lvl
to ls_get() can be used to keep track of the level of nesting we are at. If lvl
is greater than the allowed default level return (without error) and unwind the
stack.

--nesting gains an optional numeric argument. This allows the user to specify
the maximum level of nesting she/he wants to see. Fair warning: If your nesting
level is really deep and/or you have a lot of containers your might run into
trouble.

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2016-01-28 11:58:57 +01:00
Tycho Andersen
7f9171e528 cgmanager: don't make tasks + cgroup.procs +x
No reason for these to be +x, and it looks weird.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2016-01-28 11:58:57 +01:00
Bogdan Purcareata
81e3c9cf8b lxc_setup_fs: Create /dev/shm folder if it doesn't exist
When running application containers with lxc-execute, /dev is
populated only with device entries. Since /dev is a tmpfs mount in
the container environment, the /dev/shm folder not being present is not
a sufficient reason for the /dev/shm mount to fail.

Create the /dev/shm directory if not present.

Signed-off-by: Bogdan Purcareata <bogdan.purcareata@nxp.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2016-01-28 11:58:57 +01:00
Bogdan Purcareata
01074e5b34 open_without_symlink: Account when prefix is empty string
In the current implementation, the open_without_symlink function
will default to opening the root mount only if the passed rootfs
prefix is null. It doesn't account for the case where this prefix
is passed as an empty string.

Properly handle this second case as well.

Signed-off-by: Bogdan Purcareata <bogdan.purcareata@nxp.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2016-01-28 11:58:57 +01:00
Marko Hauptvogel
020104c3ad Document network clear option
Should be mentioned separately because it will reset a big group of options.

Signed-off-by: Marko Hauptvogel <marko.hauptvogel@googlemail.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2016-01-28 11:58:21 +01:00
Christian Brauner
8d62583ac5 fix lockpath removal in Python lxc-ls
The lock path for lxc is not

	RUNTIME_PATH/lock/lxc

but rather

	RUNTIME_PATH/lxc/lock

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2016-01-28 11:58:18 +01:00
Marko Hauptvogel
ff68914914 Document clear behaviour of list options
More general for all list options.

Seems to currently affect:
lxc.network (clear all NICs)
lxc.network.* (clear current NIC)
lxc.cap.drop
lxc.cap.keep
lxc.cgroup
lxc.mount.entry
lxc.mount.auto
lxc.hook
lxc.id_map
lxc.group
lxc.environment

Signed-off-by: Marko Hauptvogel <marko.hauptvogel@googlemail.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2016-01-28 11:58:16 +01:00
KATOH Yasufumi
9c3f2966dd doc: Add valueless lxc.cap.drop behaviour to Japanese man page
Update for commit 7eff30f

Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2016-01-28 11:58:14 +01:00
Sungbae Yoo
1cddc3a414 doc: Add LXC_SRC_NAME to Korean lxc.container.conf(5)
Update for commit 0794541

Signed-off-by: Sungbae Yoo <sungbae.yoo@samsung.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2016-01-28 11:58:10 +01:00
Stéphane Graber
9dacccdc16
Fix android build
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2016-01-20 14:12:16 -05:00
Stéphane Graber
bb2d53c594 Merge pull request #771 from bostjan/refactor/gitignore-templates-wildcard
Refactor templates section of .gitignore - no need to specify individual templates anymore
2016-01-20 10:03:36 -05:00
Stéphane Graber
bf195aa542 Merge pull request #770 from bostjan/bugfix/gitignore-templates-sparclinux
.gitignore: add missing templates/sparclinux to ignore list
2016-01-20 10:03:13 -05:00
Stéphane Graber
9243207444 Merge pull request #769 from nehaljwani/patch-1
Fix Comment inside Fedora Template
2016-01-20 10:02:48 -05:00
Bostjan Skufca
9337a1a3a5 Refactor .gitignore section for templates/* - no need to specifiy individual templates anymore
Signed-off-by: Bostjan Skufca <bostjan@a2o.si>
2016-01-20 14:20:56 +00:00
Bostjan Skufca
c188108a72 .gitignore: add templates/sparclinux to ignore list
Signed-off-by: Bostjan Skufca <bostjan@a2o.si>
2016-01-20 14:16:15 +00:00
Nehal J Wani
3bca4f5bb1 Fix Comment inside Fedora Template
We no longer use mirrors.kernel.org.
Commit f71e8f4 switched it to archives.fedoraproject.org

Signed-off-by: Nehal J Wani <nehaljw.kkd1@gmail.com>
2016-01-20 00:32:37 +05:30
Serge Hallyn
685062d6ff avoid printing null string in error message
Show the ifindex in case it's useful

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2016-01-14 15:08:49 -08:00
Serge Hallyn
157f21051e Merge pull request #757 from tsdmgz/opensuse-template
Add openSUSE Leap release in opensuse template
2016-01-13 23:42:07 -08:00
Serge Hallyn
bdaa0884c4 cgmanager: drop possibly expected failures to a WARN
Otherwise every lxc-info by a user who doesn't own all his cgroups
will result in a set of error messages which are really innocuous.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2016-01-13 15:17:50 -08:00
Serge Hallyn
3e376eee6a cgmanager: drop the cgm_supports_multiple_controllers bool
What we want is to make sure we dont' use controller 'all' if cgmanager
doesn't support, if all our cgroups aren't the same, or if we cannot
controll all our cgroups.  We were mixing some of these conditions.  Use
cgm_all_controllers_same for all.  (Might want to rename it, but we want
to stick with just one).

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2016-01-13 10:05:18 -08:00
Serge Hallyn
a571193241 Merge pull request #748 from brauner/2015-01-01/lxc_ls
Reimplement lxc-ls in C
2016-01-13 09:33:10 -08:00
Serge Hallyn
5f4aafaccb cgmanager - fix (again) previous commit
Bad late-night commit.  We were doing a while loop for a reason.  Just
initialize i to 0 before the while loop.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2016-01-13 09:28:15 -08:00
Christian Brauner
15fd209a88 reimplement lxc-ls in C
This is a reimplementation of lxc-ls in C. It supports all features previously
supported by lxc-ls.

- All flags and parameters have the same name as before except when the user
  specifies a regex to filter container names by. In the previous Python
  implementation the regex was passed without paramter flag. The new
  C-implementation has the parameter flag -r/--regex for this.

- Since we fork in lxc_attach() we need some form of IPC. Opening shared memory
  in the parent (mmap()) seems to be impractical since we don't know the size
  of the mapping beforehand. The other option is to open shared memory in the
  child and then to attach the parent to it but then we would need to resort to
  shm_open() or shmget(). Instead we go for a socketpair() here and wait for
  the child.
- Note that we call lxc_attach() and pass ls_get() as exec function to it (To
  be even more specific: We do not pass ls_get() directly but rather a wrapper
  function for ls_get() which receives a few arguments to enable the
  communication between child and parent.). This implementation has the
  advantage that we do not depend on any lxc executables being present in the
  container. The gist in code:

	ls_get()
	{
		/* Gather all relevant information */

		/* get nested containers */
		if (args->ls_nested && running) {
			/* set up some more stuff */

			/*
			 * execute ls_get() in namespace of the container to
 			 * get nested containers
			 */
  			c->attach(c, ls_get_wrapper, &wrapargs, &aopt, &out)

			/* do some cleaning up */
		}
	}

- When the user requests listing of nested containers without fancy-format
  enabled we want him to easily recognize which container is nested in which.
  So in this case we do not simply record the name but rather the name
  prepended with all the parents of the container:

	grand-grand-parent/grand-parent/parent/child

- Pretty-printing nested containers: Any call to list_*_containers() will
  return a sorted array of container names.  Furthermore, the recursive
  implementation of lxc_ls() will automatically put the containers in the
  correct order regarding their nesting. That is if we have the following
  nesting:

	A
	A --> S
	A --> T --> O
	A --> T --> O --> L
	A --> T --> O --> M
	A --> U
	A --> U --> P
	A --> U --> Q
	B

  The array ls_get() will set up looks like this:
	A S T O L M U P Q B

  Hence, we only need to keep an additional variable nestlvl to indicate the
  nesting level a container is at and use that to compute (a) the maximum field
  width we need to print out the container names and (b) to correctly indent
  each container according to its nesting level when printing it.

- add comments to make the ls_get() function more accessible

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
2016-01-13 17:06:23 +01:00
Serge Hallyn
449710f84a cgmanager: fix abuse of 'i'
we were initializing i to 0, then doing a while i <, but then a
separate commit (by myself) used i as a generic variable in between
those two.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2016-01-12 17:21:59 -08:00
Serge Hallyn
3b117b8500 Merge pull request #742 from brauner/2015-12-12/split_bdev_into_modules
Split bdev into modules
2016-01-12 00:07:33 -08:00
Christian Brauner
cdb4e53a7d Cleanup bdev.c after splitting into modules
The function

	- bdev_get();

becomes static. It is called from nowhere else so far and never appeared in any
header.

Minor changes

	- Avoid comparisons between int and size_t types. Use size_t where
	  possible else cast to size_t when it makes sense.
	- insert missing spaces between operators
	- put declarations for all static functions at the top

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
2016-01-12 08:50:45 +01:00
Christian Brauner
bf76c012b3 Split bdev into modules: lxcnbd
The functions

	- clone_attach_nbd();
	- do_attach_nbd();
	- nbd_busy();
	- nbd_detach();
	- nbd_get_partition();
	- wait_for_partition();

move from bdev.c to lxcnbd.c. They remain static

The functions

	- attach_nbd();
	- detach_nbd_idx();
	- nbd_clonepaths();
	- nbd_create();
	- nbd_destroy();
	- nbd_detect();
	- nbd_mount();
	- nbd_umount();
	- requires_nbd();

move from bdev.c to lxcnbd.{c,h}. They all become extern.

The struct

	- struct nbd_attach_data

moves from bdev.c to lxcnbd.c.

Adapt Makefile.am to include lxcnbd.{c,h}.

The structs

       - struct bdev; /* defined in bdev.h */
       - struct bdev_specs; /* defined in lxccontainer.h */
       - struct lxc_conf; /* defined conf.h */

are forward declared/put as incomplete types into lxcnbd.h as the functions
associated with nbd need access to it.

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
2016-01-12 08:50:45 +01:00
Christian Brauner
3ceb282072 Split bdev into modules: lxcrbd
The functions

	- rbd_clonepaths();
	- rbd_create();
	- rbd_destroy();
	- rbd_detect();
	- rbd_mount();
	- rbd_umount();

move from bdev.c to lxcrbd.{c,h}. All functions previously declared static
become extern.

Adapt Makefile.am to include lxcrbd.{c,h}.

The structs

       - struct bdev; /* defined in bdev.h */
       - struct bdev_specs; /* defined in lxccontainer.h */
       - struct lxc_conf; /* defined conf.h */

are forward declared/put as incomplete types into lxcrbd.h as the functions
associated with rbd need access to it.

Put:

       - #define __STDC_FORMAT_MACROS

and include:

       - #include <inttypes.h>

in lxcrbd.c so that the format specifier PRIu64 is available.

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
2016-01-12 08:50:45 +01:00
Christian Brauner
304b4cf3ae Split bdev into modules: lxcloop
The functions

	- loop_clonepaths();
	- loop_create();
	- loop_destroy();
	- loop_detect();
	- loop_mount();
	- loop_umount();

move from bdev.c to lxcloop.{c,h}. All functions previously declared static
become extern.

The functions

	- do_loop_create();
	- find_free_loopdev_no_control();
	- find_free_loopdev();

move from bdev.c to lxcloop.c. They remain static.

Adapt Makefile.am to include lxcloop.{c,h}.

The structs

       - struct bdev; /* defined in bdev.h */
       - struct bdev_specs; /* defined in lxccontainer.h */
       - struct lxc_conf; /* defined conf.h */

are forward declared/put as incomplete types into lxcloop.h as the functions
associated with loop need access to it.

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
2016-01-12 08:50:45 +01:00
Christian Brauner
9d983015ff Split bdev into modules: lxcdir
The functions

	- dir_clonepaths();
	- dir_create();
	- dir_destroy();
	- dir_detect();
	- dir_mount();
	- dir_umount();

move from bdev.c to lxcdir.{c,h}. All functions which previously were static
become extern.

Adapt Makefile.am to include lxcdir.{c,h}.

The structs

       - struct bdev; /* defined in bdev.h */
       - struct bdev_specs; /* defined in lxccontainer.h */
       - struct lxc_conf; /* defined conf.h */

are forward declared/put as incomplete types into lxcdir.h as the functions
associated with dir need access to it.

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
2016-01-12 08:50:45 +01:00
Christian Brauner
00f0a1f896 Split bdev into modules: lxcaufs
The functions

	- aufs_clonepaths();
	- aufs_create();
	- aufs_destroy();
	- aufs_detect();
	- aufs_mount();
	- aufs_umount();

move from bdev.c to lxcaufs.{c,h}. All functions which previously were static
become extern.

Adapt Makefile.am to include lxcaufs.{c,h}.

The structs

       - struct bdev; /* defined in bdev.h */
       - struct bdev_specs; /* defined in lxccontainer.h */
       - struct lxc_conf; /* defined conf.h */

are forward declared/put as incomplete types into lxcaufs.h as the functions
associated with aufs need access to it.

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
2016-01-12 08:50:45 +01:00
Christian Brauner
2b9cbd533d Split bdev into modules: lxclvm
The functions

	- lvm_detect();
	- lvm_mount();
	- lvm_umount();
	- lvm_compare_lv_attr();
	- lvm_is_thin_volume();
	- lvm_is_thin_pool();
	- lvm_snapshot();
	- lvm_clonepaths();
	- lvm_destroy();
	- lvm_create();

move from bdev.c to lxclvm.{c,h}. All functions previously declared as static
become public.

Adapt Makefile.am to include lxclvm.{c,h}.

The function:

	- mount_unknown_fs();

becomes public.

Rationale: It is already called from different places and will be called by lvm,
	and rdb. Also, it is defined twice exactly the same way. Once in conf.c
	and once in bdev.c. Let's avoid that.
	Defining the same function twice in different places just asks for
	trouble.

The functions:

	- blk_getsize();
	- detect_fs();
	- do_mkfs();
	- is_blktype();

become public as they will be called for loop, lvm, and or rdb.

Move the definition of:

	- DEFAULT_FS_SIZE
	- DEFAULT_FSTYPE

from bdev.c to bdev.h to grant other modules access to it.

Remove:
	- find_fstype_cb();

from conf.c. It is defined static in bdev.c

Put:

	- #define __STDC_FORMAT_MACROS

and include:

	- #include <inttypes.h>

in lxclvm.c so that the format specifier PRIu64 is available.

The structs:

	- struct bdev; /* defined in bdev.h */
	- struct bdev_specs; /* defined in lxccontainer.h */
	- struct lxc_conf; /* defined conf.h */

are forward declared/put as incomplete types into lxclvm.h as the functions
associated with lvm need access to it.

Take the chance to restructure bdev.c:

	- put bdev structs which have already been split out into separate
	  modules at the top
	- put declarations of all static functions at the top (This includes
	  all functions associated with modules that have not yet already been
	  put into a separate module.)

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
2016-01-12 08:50:45 +01:00
Christian Brauner
8907f44457 Split bdev into modules: lxczfs
The functions:

	- zfs_clone();
	- zfs_clonepaths();
	- zfs_create();
	- zfs_destroy();
	- zfs_detect();
	- zfs_list_entry();
	- zfs_mount();
	- zfs_umount();

move from bdev.c to lxczfs.{c,h}. All functions previously declared as static
become public.

Adapt Makefile.am to include lxczfs.{c,h}.

The structs:

	- struct bdev; /* defined in bdev.h */
	- struct bdev_specs; /* defined in lxccontainer.h */
	- struct lxc_conf; /* defined conf.h */

are forward declared/put as incomplete types into lxczfs.h as the functions
associated with zfs need access to it.

Minor changes:

	- Use exit(EXIT_FAILURE) instead of exit(1).
	- Use brackets around else {} if the if {} did:
		I.e. instead of:

			if {
				// do one;
				// do two;
			} else
				// do three;

		use:

			if {
				// do one;
				// do two;
			} else {
				// do three;
			}
	- Instead of declaring char pointers and arrays on the same line, i.e.:

		char arr[len], *p;

	  do:

		char arr[len];
		char *p;

	  which makes intentions a lot clearer.

	- Since we require c99 anyway, use finer-grained scoping by declaring
	  variables where they are needed instead of simply at the top.

Signed-off-by: Christian Brauner <christian.brauner@mailbox.org>
2016-01-12 08:50:45 +01:00
Stéphane Graber
4dbfaf3084 Merge pull request #750 from peti/patch-1
bash completion: the 'have' command was deprecated in favor of '_have'
2016-01-12 09:47:59 +02:00
Stéphane Graber
63ecff3577 Merge pull request #760 from hallyn/2016-01-11/btrfs
copy_storage: try to use snapshot for btrfs
2016-01-12 09:45:46 +02:00
Stéphane Graber
52ba9c5400 Merge pull request #761 from hallyn/2016-01-11/preservens.1
preserve inherited fds for stop hook
2016-01-12 09:43:20 +02:00
Serge Hallyn
330cbe36d8 preserve inherited fds for stop hook
When preserving fds for the stop hook, make sure to also save
any fds we've inherited.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2016-01-11 20:55:30 -08:00
Serge Hallyn
ffe344373e Set the right variable to NULL when unsetting ipv6_gateway
We were freeing one and setting a different one to NULL, eventually
leading to a crash when closing the netdev (at container shutdown)
and freeing already-freed memory.

Closes #732

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2016-01-11 18:26:37 -08:00
Serge Hallyn
15a90a10d9 copy_storage: try to use snapshot for btrfs
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2016-01-11 14:22:43 -08:00
Peter Simons
3db8dd39a7 bash completion: the 'have' command was deprecated in favor of '_have'
`bash-completion` version 2.1 and later no longer include the `have` command,
and consequently the `lxc` competion file fails on such systems. The command is
now called `_have`.

Signed-off-by: Peter Simons <simons@cryp.to>
2016-01-11 18:28:09 +01:00
Terzeus S. Dominguez
6441f6ba7a
Fix zypper repo for Leap
Leap repos are moved one level deeper. Included oss repo only.

Signed-off-by: Terzeus S. Dominguez <zeus@dmgznet.com>
2016-01-11 22:35:26 +08:00
Terzeus S. Dominguez
9a4fe12dc4
Add iproute2 and net-tools to Leap install
Added missing network utilities to base install for Leap. Included
check to do it for Leap 42.1 only.

Signed-off-by: Terzeus S. Dominguez <zeus@dmgznet.com>
2016-01-11 03:31:30 +08:00
Terzeus S. Dominguez
3b7f70d214
Fix typo
Signed-off-by: Terzeus S. Dominguez <zeus@dmgznet.com>
2016-01-11 02:13:10 +08:00
Terzeus S. Dominguez
f2d63d7ac4
Add openSUSE Leap release in opensuse template
Signed-off-by: Terzeus S. Dominguez <zeus@dmgznet.com>
2016-01-10 23:25:41 +08:00
Serge Hallyn
c7ec3de825 Merge pull request #752 from hallyn/2016-01-04/cgroup.use
2016 01 04/cgroup.use
2016-01-08 13:05:42 -08:00
Serge Hallyn
c4cafa080c add LXC_CGNS_AWARE env variable for mount hooks
This way the lxcfs mount hook can know whether lxc knows about
cgroup namespaces.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2016-01-08 13:03:37 -08:00
Serge Hallyn
6cee93ac80 attach: unshare cgroupns if possible
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
---
Changelog 20160104: only try if kernel supports cgns.
2016-01-08 13:03:37 -08:00
Serge Hallyn
12983ba458 container start: unshare cgns when possible
We'll probably want to make this configurable with a
lxc.cgroupns = [1|0], but for now just always do it.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>

---
Changelog 20160104: only try to unshare if /proc/self/ns/cgroup exists.
2016-01-08 13:03:37 -08:00