Commit Graph

1578 Commits

Author SHA1 Message Date
Dwight Engen
190a2ea88e remove unused lxc_copy_file
Commit e3642c43 added lxc_copy_file for use in 64e1ae63. The use of it
was removed in commit 1bc60a65. Removing it reduces dead code and the
footprint of liblxc.

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2013-04-10 15:24:29 -05:00
Serge Hallyn
fd95f2402d lxc.functions: don't let LXC_PATH= line end in failure
Otherwise if called from dash with set -e, dash will exit.  This
causes lxc-clone to fail.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2013-04-09 16:23:05 -05:00
Daniel Lezcano
e9831f8353 lxc-0.9.0
Signed-off-by: Daniel Lezcano <daniel.lezcano@free.fr>
2013-04-05 11:47:48 +02:00
Daniel Lezcano
d082b436af Merge git://github.com/lxc/lxc
Signed-off-by: Daniel Lezcano <daniel.lezcano@free.fr>
2013-04-05 11:45:57 +02:00
Dwight Engen
91f7ea5341 gitignore doc/legacy/lxc-ls.1
Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2013-04-01 14:24:46 -04:00
Stéphane Graber
5a3d2e1efa API shouldn't be calling create for already defined containers or destroy for non defined ones
Currently it always calls create/destroy which might be confusing for the code
that checks the return value of those calls to determine whether operation
completed successfully or not.

>>> c = lxc.Container("r")
>>> c.create("ubuntu")
True
>>> c.create("ubuntu")
True
>>> c.create("ubuntu")
True
>>> c.create("ubuntu")
True
>>> c.create("ubuntu")
>>> c.destroy()
True
>>> c.destroy()
lxc-destroy: 'r' does not exist
False
>>> c.destroy()
lxc-destroy: 'r' does not exist
False

New behaviour

>>> c = lxc.Container("r")
>>> c.create('ubuntu')
True
>>> c.create('ubuntu')
False
>>> c.destroy()
True
>>> c.destroy()
False
>>>

Tested with following script;

import lxc
c = lxc.Container("abcdef")
print ("set", c.set_config_item("lxc.utsname", "abcdef"))
print ("save", c.save_config())
print ("create", c.create("ubuntu"))
print ("create", c.create("ubuntu"))
print ("destroy", c.destroy())
print ("destroy", c.destroy())
print ("set", c.set_config_item("lxc.utsname", "abcdef"))
print ("save", c.save_config())
print ("destroy", c.destroy())
print ("destroy", c.destroy())

Signed-off-by: S.Çağlar Onur <caglar@10ur.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-04-01 10:36:29 -04:00
S.Çağlar Onur
6b5d5b974d Make lxc.functions return the default lxcpath if /etc/lxc/lxc.conf doesn't provide one
Currently it returns the default path only if /etc/lxc/lxc.conf missing.
Since default lxc.conf doesn't contain lxcpath variable (this is at least the case in ubuntu) all tools fails if one doesn't give -P

caglar@qgq:~/Project/lxc/examples$ sudo /usr/bin/lxc-create -n test
lxc-create: no configuration path defined

Signed-off-by: S.Çağlar Onur <caglar@10ur.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-04-01 10:12:56 -04:00
Serge Hallyn
4bc8b18529 lxc-create: require absolute path for non-standard templates
Otherwise, as an example, if doing 'lxc-create -t debian' while
there is a 'debian' directory, lxc-create will fail to do the
right thing.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2013-04-01 10:06:59 -04:00
Christian Seiler
799f96fdd8 lxc-attach: Implement --clear-env and --keep-env
This patch introduces the --clear-env and --keep-env options for
lxc-attach, that allows the user to specify whether the environment
should be passed on inside the container or not.

This is to be expanded upon in later versions, this patch only
introduces the most basic functionality.

Signed-off-by: Christian Seiler <christian@iwakd.de>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-04-01 10:05:30 -04:00
Christian Seiler
818fd9c752 lxc-shutdown: Make all processes exit before timeout if shutdown works
The following rationale is for using the -t option:

Currently, lxc-shutdown uses a subprocess for the timeout handling,
where a 'sleep $TIMEOUT' is executed, which will kill the main process
after the timeout has occurred, thus causing the main process to stop
the container hard with lxc-stop.

On the other hand, if the timeout is not reached, the main process
kills the subprocess. The trouble now is that if you kill a shell that
is running in the background, the kill will only take effect as soon as
the program currently running in the shell exits.

This in turn means that the subprocess will never terminate before
reaching the timeout. In an interactive shell, this does not matter,
since people will just not notice the process and lxc-shutdown returns
immediately. In a non-interactive enironment, however, there may be
circumstances that cause the calling program to wait until even that
subprocess is terminated, which means that shutdown will always take as
long as the timeout, even if the container shuts down quite a bit
earlier.

This change makes sure that also all subprocesses of the background
process are killed from the main process. This will immediately
terminate the background process, thus ensuring the desired behaviour.

Signed-off-by: Christian Seiler <christian@iwakd.de>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-04-01 10:05:25 -04:00
Serge Hallyn
f3ca99fd5f rcfile shouldn't be recorded in lxc_conf if the attempt to load a config file fails
Though it's more subtle than that.  If the file doesn't exist or we
can't access it, then don't record it.  But if we have parse errors,
then do.

This is mainly to help out API users who try to read a container
configuration file before calling c->create().  If the file doesn't
exist, then without this patch the subsequent create() will not
use the default /etc/lxc/default.conf.  The API user could check
for the file ahead of time, but this check makes his life easier
without costing us anything.

Signed-off-by: S.Çağlar Onur" <caglar@10ur.org>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2013-03-28 10:34:06 -05:00
Matthias Brugger
bb787bc51f lxc.sgml.in: Fix typo in man page.
This patch fixes a small typo in the man page.

Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-27 17:30:18 -04:00
Serge Hallyn
488538117d lxc-clone: support 'permanent ephemeral' containers
All of this needs a rewrite/redesign, and that will be coming (details
below), but for now

You can start 'non-ephemeral ephemeral' containers using

	lxc-start-ephemeral -o oldname -n newname --keep-data

When you shut that down, the container stick around and can be
restarted.  Now lxc-clone will recognize such a container by the
presence of the delta0/ which contains the read-write overlayfs
layer.  This means you can do incremental development of containers,
i.e.

	lxc-create -t ubuntu -n r1
	lxc-start-ephemeral --keep-data -o r1 -n r1-2
	# make some changes, poweroff
	lxc-clone -o r1-2 -n r1-3
	# make some changes...
	lxc-clone -o r1-3 -n r1-4
	# etc...

Now, as for design changes...  from a higher level

	1. lxc-clone should be re-written in c and exported through the
	   api.
	2. lxc-clone should support overlayfs and aufs
	3. lxc-start-ephemeral should become a thin layer which clones a
	   container, starts and stops and destroys it.

at a lower level,

	1. the api should support container->setup_mounts
	2. lxc-clone should be written as a set of backend classes which
	   can copy mounts to each other.  So when you load a container
	   which is lvm-backed, it creates a lvm backend class.  That
	   class instance can be converted into a loopback or qemu-nbd
	   or directory backed class.  A directory-backed class can be
	   converted into a overlayfs or aufs backed class, which (a)
	   uses the dirctory-backed class as the read-only base, and (b)
	   pins the base container (so it can't be deleted until all
	   snapshots are deleted).

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2013-03-27 17:14:07 -04:00
Stéphane Graber
f63b1efdb4 lxc-start-ephemeral: Implement -n to match manpage
The -n/--name option of lxc-start-ephemeral was never implemented
even though it was documented in the manpage.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-27 10:03:11 -04:00
David Ward
a0f379bfec Set all mounts to MS_SLAVE when starting a container without a rootfs
If the filesystem mounts on the host have the MS_SHARED or MS_SLAVE
flag set, and a container without a rootfs is started, then any new
mounts created inside the container are currently propagated into
the host. In addition to mounts placed in the configuration file of
the container or performed manually after startup, the automatic
mounting of /proc by lxc-execute will propagate back into the host,
effectively crippling the entire system. This can be prevented by
setting the MS_SLAVE flag on all mounts (inside the container's own
mount namespace) during startup if a rootfs is not configured.

Signed-off-by: David Ward <david.ward@ll.mit.edu>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-27 09:20:50 -04:00
Stéphane Graber
8a63c0a9d9 ubuntu: Tweak architecture support
This updates the various checks to match the grid below:

== lxc-ubuntu support per architecture ==
amd64: amd64, i386, armel, armhf, powerpc
i386: i386, armel, armhf, powerpc
armel: armel, armhf
armhf: armhf, armel
powerpc: powerpc

== lxc-ubuntu-cloud support per architecture ==
amd64: amd64, i386
i386: i386
armel: armel, armhf
armhf: armhf, armel

Note that most of the foreign architectures on x86 are supported
through the use of qemu-user-static. This one however isn't yet
support for cloud images (I'll send a patch for 1.0).

Also, qemu-user-static is technically able to emulate amd64 on i386
but qemu-debootstrap doesn't appear to know that and fails quite miserably.

We may also want to add a test for amd64 kernel but i386 userspace, which
is a valid combination that allows running an amd64 container on an i386
host without requiring emulation, but that's for another patch.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-27 09:19:42 -04:00
Stéphane Graber
9a42db48e0 Fix 'make clean'
This is mostly to make debuild happy as it doesn't tolerate any
leftover file when building twice in a row.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-26 14:54:12 -04:00
Stéphane Graber
c13c0e08da EXTRA_DIST: Fix missing files with "make dist"
I recently noticed that the generated tarballs with "make dist"
were incomplete unless the configure script was run on a machine
with all possible build dependencies.

That's wrong as you clearly don't need those dependencies to generate
the tarball. This change fixes that.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-26 13:12:29 -04:00
Stéphane Graber
1fbb470b02 python: Fix runtime failure on armhf
Recent testing on Ubuntu armhf showed that the python module was
failing to import. After some time tracking the issue down, the problem
was identified as being a non-terminated list of get/setters.

This commit fixes that issue as well as a few other potential ones that
were identified during debugging.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-26 11:15:52 -04:00
David Ward
b3a39ba6bd lxc-attach: Clear environment and set container=lxc
The child process's environment should be manipulated the same way
by lxc-attach as it would be by lxc-start or lxc-execute.

Signed-off-by: David Ward <david.ward@ll.mit.edu>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-21 11:12:03 -04:00
Ryota Ozaki
89d556d83a Use $localstatedir/log/lxc for default log path
When we install lxc by manual (configure; make; make install),
all files are installed under /usr/local/. Configuration files
and setting files of containers are stored under /usr/local/ too,
however, only log files are stored under /var/log/ not
/usr/local/var/log.

This patch changes the default log path to $localstatedir/log/lxc
(by default $localstatedir is /usr/local/var) where is an ordinary
directory, which is probably expected and unsurprising.

Signed-off-by: Ryota Ozaki <ozaki.ryota@gmail.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-19 09:18:50 -04:00
Christian Seiler
495c33c8e8 Properly handle timeout case in lxc-shutdown
Signed-off-by: Christian Seiler <christian@iwakd.de>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-19 09:18:40 -04:00
Dennis Schridde
7f145a6d0d Fix for ia64: Use __clone2 for ia64 in lxc/start.c
Signed-off-by: Dennis Schridde <devurandom@gmx.net>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-19 09:18:30 -04:00
Christian Seiler
d71d919efb Properly cleanup network devices if pinning root filesystem didn't work
Signed-off-by: Christian Seiler <christian@iwakd.de>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-19 09:18:20 -04:00
Dennis Schridde
675693a5d7 Build fix for ia64: Declare __clone2 in lxc/namespace.h
Signed-off-by: Dennis Schridde <devurandom@gmx.net>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-19 09:18:08 -04:00
Daniel Lezcano
72280e1cd5 lxc-0.9.0.rc1
Signed-off-by: Daniel Lezcano <daniel.lezcano@free.fr>
2013-03-19 11:20:24 +01:00
Daniel Lezcano
9afe19d634 Change author email address
Signed-off-by: Daniel Lezcano <daniel.lezcano@free.fr>
2013-03-19 11:19:13 +01:00
Daniel Lezcano
7b2b9c7f97 Merge git://github.com/lxc/lxc
Signed-off-by: Daniel Lezcano <daniel.lezcano@free.fr>
2013-03-18 23:17:21 +01:00
Stéphane Graber
f424fa8f3e Add missing config.h includes.
conf.h and start.h weren't explicitly including config.h which meant that
depending on the ordering of the includes in whatever was including conf.h
or start.h, some pieces of the structs defined in those may be missing.

This led amongst other problems to the lxc_conf struct being wrong by 8 bytes
for functions from commands.c, leading to lxc-stop always failing.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Signed-off-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-13 23:26:55 -04:00
Serge Hallyn
2ac9aafca6 commands.c: sanity check to not write too-long cgroup path name
This can't really happen due to current limits in cgroup.c but add it
in case those change in the future.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2013-03-13 21:19:24 -05:00
Serge Hallyn
4f7521b413 lxc_id_mapping: don't try to write mappings if there are none
Otherwise containers fail to start even if they aren't trying to map
ids.

Also don't allocate buf unless we need to.

Reported-by: Alexander Vladimirov <alexander.idkfa.vladimirov@gmail.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2013-03-13 12:30:21 -04:00
Alexander Vladimirov
6139e7e52d Update lxc-archlinux template default config to use new options
Signed-off-by: Alexander Vladimirov <alexander.idkfa.vladimirov@gmail.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-13 11:46:30 -04:00
Serge Hallyn
2f3f41d0d5 default kmsg symlinking to on, and document lxc.kmsg
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2013-03-13 08:55:11 -05:00
Alexander Vladimirov
7e0e1d941d Make /dev/kmsg symlinking optional, add lxc.kmsg option
Had this changeset hanging around for some time, maybe this would be useful
until some better solution come up.

Signed-off-by: Alexander Vladimirov <alexander.idkfa.vladimirov@gmail.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2013-03-13 08:51:39 -05:00
Serge Hallyn
23622a2ac8 cgroups: don't mount under init's cgroup
1. deeper hierarchy has steep performance costs
2. init may be under /init, but containers should be under /lxc
3. in a nested container we like to bind-mount $cgroup_path/$c/$c.real
   into $cgroup_path - but task 1's cgroup is $c/$c.real, so a nested
   container would be in $c/$c.real/lxc, which would become
   /$c/$c.real/$c/$c.real/lxc when expanded
4. this pulls quite a bit of code (of mine) which is always nice

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2013-03-12 21:54:18 -05:00
Serge Hallyn
fc7de5616f cgroup: try to set clone_children
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2013-03-12 20:22:26 -05:00
Dwight Engen
251d0d2a8b uidmap: fix writing multiple ranges
The kernel requires a single atomic write for setting the /proc
idmap files. We were calling write(2) more than once when multiple
ranges were configured so instead build a buffer to pass in one write(2)
call.

Change id types to unsigned long to handle large id mappings gracefully.

Fix max id in example comment.

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-12 17:06:53 -04:00
Alexander Vladimirov
a84b99323a Add lxc.stopsignal config option
I remember discussion about implementing proper way to shutdown
guests using different signals, so here's a patch proposal.
It allows to use specific signal numbers to shutdown guests
gracefully, for example SIGRTMIN+4 starts poweroff.target in
systemd.

Signed-off-by: Alexander Vladimirov <alexander.idkfa.vladimirov@gmail.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-12 17:06:50 -04:00
Dwight Engen
da139233f0 oracle template: fixes for older releases
This fixes some issues found by Oracle QA, including several cosmetic
errors seen during container bootup.

The rpm database needs moving on Debian hosts similar to on Ubuntu.

I took Serge's suggestions: Do the yum install in an unshared
mount namespace so the /proc mount done during OL4 install doesn't
pollute the host. No need to blacklist ipv6 modules.

Make the default release 6.3, unless the host is OL, then default
to the same version as the host (same as Ubuntu template does).

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-12 17:06:47 -04:00
Dwight Engen
ac7725e7bb make [ug]id map ordering consistent with /proc/<nr>/[ug]id_map
The id ordering and case of u,g is also consistent with uidmapshift,
reducing confusion.

doc: Moved example to the the EXAMPLES section, and used values
corresponding to the defaults in the pending shadow-utils subuid patch.

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2013-03-11 16:35:14 -04:00
Stéphane Graber
4e18e95953 lxc-lenny: Remove deprecated template
Debian 5.0 Lenny turned out of support on the 6th of February 2012.

From now on, the only supported Debian template is lxc-debian.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-11 12:19:39 -04:00
Stéphane Graber
b6adc92b5f python: Add get_version to binding
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-11 12:19:35 -04:00
Stéphane Graber
b6b918a1d4 API: export lxc_get_version()
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-11 12:19:33 -04:00
Stéphane Graber
24fcdb395f python: Don't hardcode LXCPATH in python module
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2013-03-11 12:19:30 -04:00
Serge Hallyn
0d03360a77 rootfs pin: fix two bugs
1. if there's no rootfs, return -2, not 0.
2. don't close pinfd unconditionally in do_start().

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: David Ward <david.ward@ll.mit.edu>
2013-03-11 08:42:11 -05:00
Dwight Engen
90341b9e39 include tests in make dist
This should eventually make the source releases available on sourceforge
also contain the tests.

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2013-03-07 17:30:00 -05:00
Serge Hallyn
990d9d7c37 attach: handle apparmor transitions in !NEWNS cases
If we're not attaching to the mount ns , then don't enter the
container's apparmor policy.  Since we're running binaries from the host
and not the container, that actually seems the sane thing to do (besides
also the lazier thing).

If we dont' do this patch, then we will need to move the apparmor attach
past the procfs remount, will need to also mount securityfs if available,
and for the !remount_proc_sys case we'll want to mount those just long
enough to do the apparmor transition.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2013-03-06 18:47:36 -05:00
Serge Hallyn
53a54099bc attach: free result before potentially strduping a second time.
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2013-03-06 14:32:33 -06:00
Christian Seiler
cb3e61fa37 lxc-attach: User namespaces: Use init's user & group id when attaching
When attaching to a container with a user namespace, try to detect the
user and group ids of init via /proc and attach as that same user. Only
if that is unsuccessful, fall back to (0, 0).

Signed-off-by: Christian Seiler <christian@iwakd.de>
2013-03-06 14:30:30 -06:00
Christian Seiler
21da9912d4 lxc-attach: Default to /bin/sh if shell cannot be determined or exec'd
If getpwuid() fails and also the fallback of spawning of a 'getent'
process, and the user specified no command to execute, default to
/bin/sh and only fail if even that is not available. This should ensure
that unless the container is *really* weird, no matter what, the user
should always end up with a shell when calling lxc-attach with no
further arguments.

Signed-off-by: Christian Seiler <christian@iwakd.de>
2013-03-06 14:30:24 -06:00