Commit Graph

3298 Commits

Author SHA1 Message Date
Cyril Bitterich
19fcf68ffb lxc-debian.in: Fixed errors if dbus is not installed
The lxc-debian template debootstraps a minimum debian system which does not contain dbus.
If systemd is used this will result in getty-static.service to be used instead of getty@ .
The systemd default files uses 6 tty's instead of the 4 the script creates.
This will lead to repeated error messages in the systemd journal.

Signed-off-by: Cyril Bitterich <Cyril.Bitterich@1und1.de>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-05-12 10:05:47 -04:00
Stéphane Graber
b219dcecd7 Merge pull request #499 from krichter722/gitignore
added build and test results to .gitignore
2015-05-11 20:20:26 +00:00
Karl-Philipp Richter
9cae8ae97d added doc/api/doxygen_sqlite3.db to .gitignore
Signed-off-by: Karl-Philipp Richter <krichter722@aol.de>
2015-05-11 21:59:19 +02:00
Stéphane Graber
6ad27c4282 Merge pull request #504 from thmo/lua53
Fix Lua 5.3 compatibility code.
2015-05-11 18:09:54 +00:00
Stéphane Graber
ae829be398 Merge pull request #498 from brauner/master
Make lxc-checkconfig work with kernel versions > 3
2015-05-11 18:03:09 +00:00
Stéphane Graber
e7831129a2 Merge pull request #486 from dikei/master
Sort the cgroup memory settings before applying.
2015-05-11 17:52:48 +00:00
Serge Hallyn
54c23a6a62 Merge pull request #512 from martinpitt/master
Call /lib/apparmor/profile-load directly instead of the wrapper
2015-05-07 08:55:02 -05:00
Martin Pitt
580f58c79b Call /lib/apparmor/profile-load directly instead of the wrapper
AppArmor ships /lib/apparmor/profile-load. /lib/init/apparmor-profile-load is
merely a wrapper which calls the former, so just call it directly to avoid the
dependency on the wrapper.

LP: #1432683
2015-05-07 13:38:50 +02:00
Kien Truong
365d180a39 Properly free memory of sorted cgroup settings
We need to use lxc_list_for_each_safe, otherwise de-allocation
will fail with a list size bigger than 2. The pointer to the head
of the list also need freeing after we've freed all other elements
of the list.

Signed-off-by: Kien Truong <duckientruong@gmail.com>
2015-05-05 00:22:00 +01:00
Kien Truong
fac7c66386 Check malloc failure when sorting cgroup settings.
Signed-off-by: Kien Truong <duckientruong@gmail.com>
2015-05-05 00:21:59 +01:00
Kien Truong
aaf2683052 Sort the cgroup memory settings before applying.
Add a function to sort the cgroup settings before applying.
Currently, the function will put memory.memsw.limit_in_bytes after
memory.limit_in_bytes setting so the container will start
regardless of the order specified in the input. Fix #453

Signed-off-by: Kien Truong <duckientruong@gmail.com>
2015-05-05 00:21:59 +01:00
Serge Hallyn
44481bff6b overlay: create workdir if it doesn't exist
Otherwise a container created before we needed workdir will fail
to start after a kernel+lxc update.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2015-05-04 08:12:18 -05:00
Stéphane Graber
47fcda9926
Fix lxc-net regression on missing restorecon
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-28 09:01:40 +02:00
Tycho Andersen
85c50991da c/r: check for criu images in the checkpoint directory
CRIU can get confused if there are two dumps that are written to the same
directory, so we make some minimal effort to prevent people from doing this.
This is a better alternative than forcing liblxc to create the directory, since
it is mostly race free (and neither solution is bullet proof anyway if someone
rsyncs some bad images over the top of the good ones).

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-28 08:24:39 +02:00
Stéphane Graber
370f2e811c lxc-net: Rework/cleanup
This updates lxc-net with the following changes:
 - Better recover from crashes/partial runs
 - Better error detection and reporting
 - Less code duplication (use the stop code on crash)
 - Better state tracking
 - Allow for restart of all of lxc-net except for the bridge itself
 - Only support iproute from this point on (ifconfig's been deprecated
   for years)

V2: Use template variables everywhere

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-28 08:23:17 +02:00
Thomas Moschny
98088cfbee Fix Lua 5.3 compatibility code.
If Lua 5.3 is compiled with LUA_COMPAT_5_2 defined, the
luaL_checkunsigned compatibility macro is already defined
in lauxlib.h.

Signed-off-by: Thomas Moschny <thomas.moschny@gmx.de>
2015-04-26 23:26:27 +02:00
Karl-Philipp Richter
cf80a71f0f added build and test results to .gitignore
Signed-off-by: Karl-Philipp Richter <krichter722@aol.de>
2015-04-25 13:36:02 +02:00
Christian Brauner
56983b40c7 Make lxc-checkconfig work with kernel versions > 3
(1) Add test for kernel version greater 3.
(2) Use && and || instead of -a and -o as suggested in
    http://www.unix.com/man-page/posix/1p/test/.

lxc-checkconfig will currently report "missing" on "Cgroup memory controller"
for kernel versions greater 3. This happens because the script, before checking
for the corresponding memory variable in the kernel config, currently will test
whether we have a major kernel version greater- or equal to 3 and a minor kernel
version greater- or equal to 6. This adds an additional test whether we have a
major kernel version greater than 3.

Signed-off-by: Christian Brauner <christianvanbrauner@gmail.com>
2015-04-25 10:05:07 +02:00
Natanael Copa
83828d6770 lxc-alpine: create /dev/shm before mounting
This is needed for lxc.autodev=1 to work.

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-24 11:04:32 -04:00
Stéphane Graber
d47961ebd6 Add IPv6 support to lxc-net
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-24 11:00:32 -04:00
Serge Hallyn
2366b8a769 use poll instead of select
Particularly when using the go-lxc api with lots of threads, it
happens that if the open files limit is > 1024, we will try to
select on fd > 1024 which breaks on glibc.

So use poll instead of select.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-22 11:55:33 -05:00
Serge Hallyn
858377e4d9 logs: introduce a thread-local 'current' lxc_config (v2)
The logging code uses a global log_fd and log_level to direct
logging (ERROR(), etc).  While the container configuration file allows
for lxc.loglevel and lxc.logfile, those are only used at configuration
file read time to set the global variables.  This works ok in the
lxc front-end programs, but becomes a problem with threaded API users.

The simplest solution would be to not allow per-container configuration
files, but it'd be nice to avoid that.

Passing a logfd or lxc_conf into every ERROR/INFO/etc call is "possible",
but would be a huge complication as there are many functions, including
struct member functions and callbacks, which don't have that info and
would need to get it from somewhere.

So the approach I'm taking here is to say that all real container work
is done inside api calls, and therefore the API calls themselves can
set a thread-local variable indicating which log info to use.  If
unset, then use the global values.  The lxc-* programs, when called
with a '-o logfile' argument, set a global variable to indicate that
the user-specified value should be used.

In this patch:

If the lxc container configuration specifies a loglevel/logfile, only
set the lxc_config's logfd and loglevel according to those, not the
global values.

Each API call is wrapped to set/unset the current_config.  (The few
exceptions are calls which do not result in any log actions)

Update logfile appender to use the logfile specified in lxc_conf if (a)
current_config is set and (b) the lxc-* command did not override it.

Changelog (2015-04-21):
	. always re-set current_config to NULL at end of an API
	  call, rather than storing the previous value.  We don't
	  nest API calls.
	. remove the log_lock stuff which wasn't used
	. lxc_conf_free: if the config is current_config, set
	  current_config to NULL.  (It can't be another thread's
	  current_config, or we wouldn't be freeing it)
	. lxc_check_inherited: don't close fd if it is the
	  current_config->logfd.  Note this is only called when
	  starting a container, so we have no other threads at
	  this point.

Changelog (2015-04-22)
	. Unset the per-container logfd on destroy
	.
	. Do so before we rm the containerdir.  Otherwise if the logfile is set
	. to $lxcpath/$name/log, the containerdir won't be fully deleted.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-22 11:54:46 -05:00
Bogdan Purcareata
ed52814c77 lxc-busybox: add OpenSSH support
Add an additional template parameter for SSH support in the container. Currently
this can be implemented using the Dropbear or OpenSSH utility. The respective
tool needs to be available on the host Linux.

If the parameter is omitted, the template will look for the Dropbear utility on
the host and install it if it is available (legacy behavior).

Adding OpenSSH support has been done following the model in the lxc-sshd
template.

Signed-off-by: Bogdan Purcareata <bogdan.purcareata@freescale.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-22 12:34:19 -04:00
Tycho Andersen
507cee3618 c/r: re-open fds after clone()
If we don't re-open these after clone, the init process has a pointer to the
parent's /dev/{zero,null}. CRIU seese these and wants to dump the parent's
mount namespace, which is unnecessary. Instead, we should just re-open
stdin/out/err after we do the clone and pivot root, to ensure that we have
pointers to the devcies in init's rootfs instead of the host's.

v2: Only close fds if the container was daemonized. This didn't turn out as
    nicely as described on the list because lxc_start() doesn't actually have
    the struct lxc_container, so it cant see the flag. Instead, we just pass it
    down everywhere.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-22 12:30:32 -04:00
Tycho Andersen
dd62857af3 c/r: enable hugetlbfs in criu
In vivid containers hugetlbfs is mounted, but it is not one of the hardcoded
fses in criu, so we need to tell criu that it is okay to automount it.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-22 12:30:29 -04:00
Tycho Andersen
8ba5ced736 c/r: check version of criu
Note that we allow both a tagged version or a git build that has sufficient
patches for the features we require.

v2: close criu's stderr too

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-22 12:29:51 -04:00
Tycho Andersen
e29fe1dd21 c/r: move criu code to its own file
Trying to cage the beast that is lxccontainer.c.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-22 12:29:48 -04:00
Tycho Andersen
cba98d127b c/r: use criu option instead of lxc-restore-net
As of criu 1.5, the --veth-pair argument supports an additional parameter that
is the bridge name to attach to. This enables us to get rid of the goofy
action-script hack that passed bridge names as environment variables.

This patch is on top of the systemd/lxcfs mount rework patch, as we probably
want to wait to use 1.5 options until it has been out for a while and is in
distros.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-22 12:29:46 -04:00
Tycho Andersen
40962b642d c/r: rework external mountpoint handling v4
CRIU now supports autodetection of external mounts via the --ext-mount-map auto
--enable-external-sharing --enable-external-masters options, so we don't need
to explicitly pass the cgmanager mount or any of the mounts from the config.
This also means that lxcfs mounts (since they are bind mounts from outside the
container) are autodetected, meaning that c/r of containers using lxcfs works.

A further advantage of this patch is that it addresses some of the ugliness
that was in the exec_criu() function. There are other criu options that will
allow us to trim this even further, though.

Finally, with --enable-external-masters, criu understands slave mounts in the
container with shared mounts in the peer group that are outside the namespace.
This allows containers on a systemd host to be dumped and restored correctly.

However, these options have just landed in criu trunk today, and the next
tagged release will be 1.6 on June 1, so we should avoid merging this into any
stable releases until then.

v2: remount / as private before bind mounting the container's directory for
    criu. The problem here is that if / is mounted as shared, even if we
    unshare() the /var/lib/lxc/rootfs mountpoint propagates outside of our
    mount namespace, which is bad, since we don't want to leak mounts. In
    particular, this leak confuses criu the second time it goes to checkpoint
    the container.

v3: whoops, we really want / as MS_SLAVE | MS_REC here, to match what start
    does

v4: rebase onto master for revert of logging patch

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-22 12:29:43 -04:00
Serge Hallyn
a16f71a1d1 Revert (by hand) "logs: introduce a thread-local 'current' lxc_config"
This is hopefully temporary - it works great for lxc itself, but seems
to be upsetting golang.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Tested-by: Tycho Andersen <tycho.andersen@canonical.com>
2015-04-14 15:58:58 -05:00
Serge Hallyn
95d5b1475f Revert "lxc-cmd-stop: two fixes"
This breaks code that depended on the monitor being fully dead before
c->stop() returns.

This reverts commit 62e0416106.
2015-04-14 14:56:51 -05:00
Serge Hallyn
d775f21bb1 Revert "do_lxcap_stop: wait until container is stopped"
This breaks lxc-test-concurrent.

This reverts commit fef9aa89e9.
2015-04-14 14:56:10 -05:00
Serge Hallyn
fef9aa89e9 do_lxcap_stop: wait until container is stopped
In the past, lxc-cmd-stop would wait until the command pipe was closed
before returning, ensuring that the container monitor had exited.
Now that we accept the actual success return value, lxcapi_stop can
return success before the monitor has fully exited.

So explicitly wait for the container to stop, when lxc-cmd-stop returned
success.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2015-04-14 09:28:20 -05:00
Tycho Andersen
69f97e3c12 don't compare unsigned values as negative ones
Instead, check that the result is larger than its parts.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-13 18:04:00 -05:00
Laurent Vivier
e97aa8176f lxc-fedora: manage secondary architectures
URL for packages and LiveOS differs from x86, x86_64 and ARM.

This patch allows to select the good mirror URL according to
the architecture.

Primary architecture: http://mirrors.kernel.org/fedora
Secondary architecture: http://mirrors.kernel.org/fedora-secondary

The managed secondary architectures are only ppc64 and s390x,
the secondary architectures for Fedora 20 (the base of initial bootstrap).

Signed-off-by: Laurent Vivier <Laurent@Vivier.EU>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-13 16:57:44 -05:00
Tycho Andersen
e438ef7c9a fix dead code
We've already checked that c is not null above, so the false branch can never
be taken here.

Reported-by: Coverity
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-13 16:54:47 -05:00
Tycho Andersen
dcd1e26274 fix NULL dereference
lxc_console dereferences C, so we should check that it is not null and fail if
it is.

Reported-by: Coverity
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-13 16:54:45 -05:00
Tycho Andersen
284c4b01cc c/r: no double fclose() of mnts
Reported-by: Coverity
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-13 16:54:42 -05:00
Tycho Andersen
70642c3307 fix integer overflow in setproctitle
1. don't cast to long
2. check overflow before addition

v2: just remove the cast, don't change the type of the variables

Reported-by: Coverity
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-13 16:51:12 -05:00
Serge Hallyn
62e0416106 lxc-cmd-stop: two fixes
These are two fixes for long, long-standing bugs.

1. When we stop a container from the lxc_cmd stop handler, we kill its
init task, then we unfreeze the container to make sure it receives the
signal.  When that unfreeze succeeds, we were immediately returning 0,
without sending a response to the invoker.

2. lxc_cmd returns the length of the field received.  In the case of
an lxc_cmd_stop this is 16.  But a comment claims we expect no response,
only a 0.  In fact the handler does send a response, which may or may
not include an error.  So don't call an error just because we got back a
response.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-13 16:50:01 -05:00
Tycho Andersen
4a49dda234 add vim swap files to .gitignore
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-10 11:02:21 -04:00
Tycho Andersen
f813849cee c/r: populate clone flags on restore
Since attach asks the restore process what the clone flags were, if we forgot
to set them then the attach command ran in the hosts namespaces instead of the
containers, which is a Very Bad Thing :). Instead, we remember to set the clone
flags in the restore process' handler, so that we report them correctly to any
attach processes who ask.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-10 11:02:16 -04:00
teruo-oshida
3335c60896 update path of tty.conf
$container_rootfs may not be used so 'sed' will try to patch
"/etc/init/tty.conf". It must not be correct.

Signed-off-by: Teruo Oshida <teruo.oshida@miraclelinux.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-07 12:10:53 -04:00
Stéphane Graber
5622425a42
Really fix Android...
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-06 19:02:40 -04:00
Stéphane Graber
684f79a55a
Fix Android build because of getmntent_r
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-06 17:58:44 -04:00
Tycho Andersen
9fc7f8c015 c/r: tell CRIU about all external mounts in the config
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-06 12:52:09 -04:00
Tycho Andersen
3fdf4a73a2 Use SYSERROR instead of perror
It is impolite to print stuff to stderror owned by other people, and they might
miss it anyway since it's not in the normal log location.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-06 12:49:47 -04:00
Tycho Andersen
5b3105f5e4 don't hang on some errors in do_restore
Instead, the parent always writes a status to the pipe.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-06 12:49:44 -04:00
Tycho Andersen
c9d8f2ee72 lxcapi_restore shouldn't steal the calling process
Previously, lxcapi_restore used the calling process as the lxc monitor process
(and just never returned), requiring users to fork before calling it. This, of
course, would cause problems for things like LXD, which can't fork.

Now, restore() forks the monitor as a child of the process that calls it. Users
who want to daemonize the restore process need to fork themselves.
lxc-checkpoint has been updated to reflect this behavior change.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2015-04-06 12:48:48 -04:00
Stéphane Graber
428b68dbeb Fix incomplete destruction of unprivileged ephemeral containers
If an unprivileged ephemeral container is started as follows,

    lxc-start-ephemeral -o trusty -n test_ephemeral

Then an empty directory remains upon exit from the container,

    ~/.local/share/lxc/test_ephemeral/tmpfs/delta0

(The tmpfs filesystem is successfully unmounted, but we seem to lack
permission to delete the delta0 directory).

This issue arose following commits 4799a1e and dd2271e .

The following patch resolves the issue. It has been tested on ubuntu
14.04 with the lxc-daily ppa.
Since gmail screws up the formatting of the patch via line-wrapping
etc, please copy the patch from the issue-tracker rather than from
this email.

Signed-off by: Oleg Freedholm <overlayfs@gmail.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2015-04-06 12:12:10 -04:00