Commit Graph

2861 Commits

Author SHA1 Message Date
Jonas Eriksson
35f746711b Update license of lsm/selinux.c
Change the license from GPL to LGPL to avoid a tricky license situation
for liblxc.so.

Signed-off-by: Jonas Eriksson <jonas.eriksson@enea.com>
Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-06 09:53:02 -06:00
Miquel van Smoorenburg
d1838f3459 lxc.id_map bug when writing directly to /proc/pid/[ug]id_map [PATCH]
lxc.id_map bug when writing directly to /proc/pid/[ug]id_map

There's some code in src/lxc/conf.c that sets up the UID/GID mapping. It
can use the external newuidmap/newgidmap tools, or it can write to
/proc/pid/[ug]id_map directly. The latter case is broken: lines are written
without a newline (\n) at the end. This patch fixes that. Note that
I did not check if the newuidmap/newgidmap case still works. It should,
but I wasn't able to test it.

Signed-off-by: Miquel van Smoorenburg <mikevs@xs4all.net>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-05 23:34:51 -06:00
Stéphane Graber
ee165ff89d python3: Fix trivial error in clone()
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-05 18:55:40 -05:00
Stéphane Graber
6ea518f64a log: Set log_define properly
This sets lxc_log_define to what should be appropriate values for all
existing binaries that call lxc_log_init.

The name is lxc_<bin name>_ui for anything that's user visible and
lxc_<bin name> for anything that's not.

The parent is set to "lxc" for anything using the API and to the
matching C file name for anything that isn't.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-05 17:16:34 -06:00
Dwight Engen
1d84dd35c6 fix build with cgmanager on Fedora
- configure fails to compile the cgmanager test without -lnih -lnih-dbus

- fix include path from cgmanger commit f1d9bd1a

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-05 17:14:01 -06:00
Serge Hallyn
1ccb73b915 cgmanager: update location of include file
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-05 17:08:59 -06:00
gza
cf261d584e gentoo: fix portage rw problem
Signed-off-by: Guillaume Zitta <github.guillaume@zitta.fr>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-05 13:44:11 -05:00
Stéphane Graber
6edbfc8650 logging: Add lxc_log_options_no_override function
In current LXC, loglevel and logfile are write-once functions.
That behaviour was appropriate when those two were first introduced
(pre-API) but with current API, one would expect to be able to
set_config_item those multiple times.

So instead, introduce lxc_log_options_no_override which when called
turns those two config keys read-only and have all existing binaries
which use log_init call that function once they're done setting the
value requested by the user.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-04 18:01:59 -05:00
Serge Hallyn
2133f58c66 create: pass --mapped-gid to templates next to --mapped-uid
That way templates can fix group ownership alongside uid ownership.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-04 16:31:37 -05:00
Stéphane Graber
8ec981fc8b templates: Refuse to run unprivileged
Only the download and ubuntu-cloud templates work with unprivileged
containers, for all others, detect --mapped-uid and error out as early
as possible, recommending the use of the download template.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-04 14:30:51 -05:00
Harald Dunkel
3a6ef65aa2 support a custom CentOS repository
This change introduces a flag --repo to the lxc-centos template
to allow using a local repository (e.g. a loop mounted installer
iso on your web server).

Signed-off-by: Harald Dunkel <harri@afaics.de>
Acked-by: Michael H. Warfield <mhw@WittsEnd.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-04 07:49:09 -06:00
Serge Hallyn
04cb990db5 cgmanager: have root escape to root cgroup before starting
If a user in cgroup /a/b/c does 'lxc-start -n u1', then u1
should be started under /a/b/c/u1.  However if he does
'sudo lxc-start -n u1', then that cgroup shoudl start under
/lxc/u1.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-03 16:33:08 -05:00
Serge Hallyn
c08a0b7c4e cgmanager: container-base apparmor abstraction: allow mount move
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-03 15:17:43 -06:00
Rafal Wojdyla
16e29c912e Fix error message if nodename is too long
Signed-off-by: Rafal Wojdyla <ravwojdyla@gmail.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-03 11:48:17 -05:00
KATOH Yasufumi
b4c66de1b2 doc: Update Japanese lxc.container.conf(5) for lxc.rootfs.options
update for commit a17b1e65fa

Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-03 11:46:37 -05:00
KATOH Yasufumi
2035b7d919 doc: Update Japanese lxc-info(1) to remove "RUNNING" of -c option
update for commit 5c4734bcfb

Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-03 11:46:35 -05:00
Stéphane Graber
0464b881e6 shutdown: Rework API and lxc-stop
With this change, shutdown() will no longer call stop() after the
timeout, instead it'll just return false and it's up to the caller to
then call stop() if appropriate.

This also updates the bindings, tests and other scripts.

lxc-stop is then updated to do proper option checking and use shutdown,
stop or reboot as appropriate.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-31 18:08:33 +00:00
Serge Hallyn
509c077284 cgmanager: chmod the container's base directory 775
In order for attach to work, the container owner must be able to
write to the tasks file.  Therefore we make the container's cgroup
owned by the container root group, but the container owner uid.
So for the container root to be allowed to create new cgroups, it
needs group write perms.

With this patch, an unprivileged container with an
lxc.mount.auto = cgroup entry entry can run the cgproxy and pass
all cgmanager tests.

Acls would have been another way to do this, but are not yet being
used/exported by cgmanager.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 13:57:46 +00:00
Robert Vogelgesang
a52e315d12 Fix the timeout == 0 case in lxcapi_shutdown()
The timeout argument should be handled as follows:
   -1 => Wait forever
    0 => Don't wait
  > 0 => Wait for timeout seconds

Without this patch, the 0 case is mapped to -1.

Signed-off-by: Robert Vogelgesang <vogel@users.sourceforge.net>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 12:03:12 +00:00
Stéphane Graber
a17b1e65fa Implement lxc.rootfs.options
This introduces a new lxc.rootfs.options which lets you pass new
mountflags/mountdata when mounting the root filesystem.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-31 11:47:19 +00:00
Stéphane Graber
44fa8e7e91 lxc_info: Fix -H with -c
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-31 10:34:43 +00:00
Serge Hallyn
58ab99ae4b specify mode whenever mounting tmpfs
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 10:34:14 +00:00
Serge Hallyn
ecfcb3f00a cgroup: change unfreeze_fromhandler to return bool
To be more consistent with other cgroup_ops methods, in the hopes
of having less return-value-related mixups.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 10:34:11 +00:00
Serge Hallyn
c476bdce46 cgmanager: support lxc.mount.auto = cgroup
If it (or any variation thereof) is in the container configuration,
then mount /sys/fs/cgroup/cgmanager.lower (if it exists) or
/sys/fs/cgroup/cgmanager into the container so it can run a
cgproxy.

Also make sure to clear our groups when we start or attach to a
container.  Else with unprivileged containers we end up with
lots of nogroups listed in /proc/1/status.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 10:34:08 +00:00
Serge Hallyn
5d89765574 cgmanager: implement attach
The cgroupfs-specific code is moved from attach.c to cgroup.c.

lxc-cgmanager now only chgrps the container's cgroup, so that the
unprivileged user still owns the tasks file allowing him to enter
the container cgroup (for attach).

Some other changes rolled into the cgmanager update:

Make the list of subsystems not per-handler, as it will not change.  As
a result, the only state we need to keep in the per-handler cgroup data
is the char *cgroup_path, so we can drop the cgm_data struct altogether.

Catch nih errors (as not doing so causes later crashes).

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 10:34:05 +00:00
Stéphane Graber
d46417540f lxc-ubuntu-cloud: Update arm* cross
| host arch | arm64 | armhf | armel |
-------------------------------------
| arm64     |   X   |   X   |   X   |
| armhf     |       |   X   |   X   |
| armel     |       |   X   |   X   |
-------------------------------------

Although optional, all existing arm64 silicon supports 32bit instructions.
armel/armhf is only a userspace change, so they are interchangeable.
However armhf isn't supported on all armel platforms (e.g. armv6) but
all those we support have hard-float.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 09:38:32 +00:00
Scott Moser
ad3f14ab58 lxc-ubuntu-cloud: various small changes
* ppc64el images now exist and generally function.
   Instead of failing because an arch isnt in the list,
   let that check happen by ability to download something.
 * update the hard coded ubuntu releases to know about 'trusty'
   and drop no longer supported releases (consistent with behavior
   when distro-info is available)
 * shorten the logic that decides if host and container arch
   are supported.
 * support skipping "invalid arch" check entirely via undocumented
   variable UCTEMPLATE_SKIP_ARCH_CHECK.
 * update usage to reference 'tryreleased' as the default 'stream'
 * give good error message if user tries 'released' and there
   is no released version available.

Signed-off-by: Scott Moser <smoser@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 09:38:29 +00:00
Robert Vogelgesang
6ee257941c Fix lxc-stop's argument parsing
Change lxc-stop's argument parsing so that it matches what the help option
and the man page both describe.

Signed-off-by: Robert Vogelgesang <vogel@users.sourceforge.net>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 09:38:26 +00:00
Bogdan Purcareata
1d1774b1ac use susv3 head arguments
Without enabling INCLUDE_SUSv2 in busybox, we need to use head's -n argument,
rather than -#.

Signed-off-by: Christopher Larson <kergoth@gmail.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 09:38:23 +00:00
Stéphane Graber
5c4734bcfb
doc: lxc-info -c doesn't require RUNNING
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-31 09:16:04 +00:00
Stéphane Graber
8ddf877b3d bdev: Rename mount_unknow_fs to mount_unknown_fs
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-31 09:15:02 +00:00
Stéphane Graber
b2a3f33ec1 upstart: Make sure FORWARD is allowed for containers
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-31 09:14:35 +00:00
Serge Hallyn
5c8a9fc62d cgmanager chown: close socketpair on error paths
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-29 19:24:22 +00:00
Serge Hallyn
beebf12bbf [PATCH cgmanager chown: don't do a gratuitous fork
userns_exec_1() clones a new task to manipulate.  We don't
need to fork before calling that.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-29 16:22:23 +00:00
Natanael Copa
7a435f9abc Include config.h early for _GNU_SOURCE with uClibc
This fixes the following compile errors with uClibc:

lxc_snapshot.c: In function 'print_file':
lxc_snapshot.c:71:2: error: implicit declaration of function 'getline' [-Werror=implicit-function-declaration]
  while (getline(&line, &sz, f) != -1) {
  ^
cc1: all warnings being treated as errors

lxc_usernsexec.c: In function 'read_default_map':
lxc_usernsexec.c:181:2: error: implicit declaration of function 'getline' [-Werror=implicit-function-declaration]
  while (getline(&line, &sz, fin) != -1) {
  ^
cc1: all warnings being treated as errors

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 16:15:52 +00:00
Natanael Copa
d06245b81b Include config.h early for _GNU_SOURCE with musl libc
This fixes various compile errors when building with musl libc. For
example:

In file included from start.c:66:0:
monitor.h:38:12: error: 'NAME_MAX' undeclared here (not in a function)
  char name[NAME_MAX+1];
            ^
start.c: In function 'setup_signal_fd':
start.c:202:2: error: implicit declaration of function 'sigfillset' [-Werror=implicit-function-declaration]
  if (sigfillset(&mask) ||
  ^

...

In file included from freezer.c:36:0:
monitor.h:39:12: error: 'NAME_MAX' undeclared here (not in a function)
  char name[NAME_MAX+1];
            ^
...

In file included from cgroup.c:45:0:
conf.h:87:13: error: 'IFNAMSIZ' undeclared here (not in a function)
  char veth1[IFNAMSIZ]; /* needed for deconf */
             ^
cgroup.c: In function 'find_cgroup_subsystems':
cgroup.c:230:3: error: implicit declaration of function 'strdup' [-Werror=implicit-function-declaration]
   (*kernel_subsystems)[kernel_subsystems_count] = strdup(line);
   ^
...

In file included from conf.c:65:0:
conf.h:87:13: error: 'IFNAMSIZ' undeclared here (not in a function)
  char veth1[IFNAMSIZ]; /* needed for deconf */
             ^
In file included from conf.c:66:0:
conf.c: In function 'run_buffer':
log.h:263:9: error: implicit declaration of function 'strsignal' [-Werror=implicit-function-declaration]
  struct lxc_log_locinfo locinfo = LXC_LOG_LOCINFO_INIT;  \
         ^
...

af_unix.c: In function 'lxc_abstract_unix_send_credential':
af_unix.c:208:9: error: variable 'cred' has initializer but incomplete type
  struct ucred cred = {
         ^
af_unix.c:209:3: error: unknown field 'pid' specified in initializer
   .pid = getpid(),
   ^
af_unix.c:209:3: error: excess elements in struct initializer [-Werror]
af_unix.c:209:3: error: (near initialization for 'cred') [-Werror]
af_unix.c:210:3: error: unknown field 'uid' specified in initializer
   .uid = getuid(),
   ^
af_unix.c:210:3: error: excess elements in struct initializer [-Werror]
af_unix.c:210:3: error: (near initialization for 'cred') [-Werror]
af_unix.c:211:3: error: unknown field 'gid' specified in initializer
   .gid = getgid(),
   ^

and more...

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 16:15:52 +00:00
Natanael Copa
8b6d8b712b Check for non-posix utmpxname in configure
utmpx.h is specified in POSIX but utmpxname is not so we check for
utmpxname in configure script.

This fixes the following compile error with musl libc:
lxcutmp.c: In function 'utmp_get_runlevel':
lxcutmp.c:249:2: error: implicit declaration of function 'utmpxname' [-Werror=implicit-function-declaration]
  if (!access(path, F_OK) && !utmpxname(path))
    ^

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 16:15:52 +00:00
Natanael Copa
47add7e5b6 Don't include linux/if_bridge.h
Instead rely on struct ethhdr from net/ethernet.h

This fixes build error with musl libc:
In file included from /usr/include/linux/if_bridge.h:17:0,
                 from network.c:47:
/usr/include/linux/if_ether.h:133:8: error: redefinition of 'struct ethhdr'
 struct ethhdr {
        ^
In file included from /usr/include/net/ethernet.h:10:0,
                 from network.c:42:
/usr/include/netinet/if_ether.h:93:8: note: originally defined here
 struct ethhdr {
        ^

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 16:15:52 +00:00
Natanael Copa
f9870943ec Include limits.h for NAME_MAX
This fixes compile error with musl libc:
In file included from start.c:66:0:
monitor.h:38:12: error: 'NAME_MAX' undeclared here (not in a function)
  char name[NAME_MAX+1];
            ^

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 16:15:52 +00:00
Natanael Copa
65441ac9e5 Include strings.h for strcasecmp
This fixes the following error with musl libc:
In file included from start.c:59:0:
log.h: In function 'lxc_log_priority_to_int':
log.h:136:2: error: implicit declaration of function 'strcasecmp' [-Werror=implicit-function-declaration]

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 16:15:50 +00:00
Natanael Copa
85dce4a543 Use the standard 'unsigned int' instead or non-standard 'uint'
This fixes compile error when build with musl libc:
conf.h:92:2: error: unknown type name 'uint'
  uint   fmask;
  ^

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 16:15:46 +00:00
Natanael Copa
37515ebdf0 Include poll.h instead of sys/poll.h
poll.h is defined in POSIX:
http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html

This fixes a compile warning when building with musl libc:
In file included from start.c:46:0:
/usr/include/sys/poll.h:1:2: error: #warning redirecting incorrect #include <sys
/poll.h> to <poll.h> [-Werror=cpp]
 #warning redirecting incorrect #include <sys/poll.h> to <poll.h>
  ^

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 16:15:42 +00:00
Serge Hallyn
565e571c8f userns_exec_1: catch errors in the spawned process.
lxc_map_ids can call system(3), which on error from the
spawned process returns > 0.  No path should return > 0
when it meant success.  So check the lxc_map_ids() value
to be != rather than just < 0.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-29 15:56:54 +00:00
Robert Vogelgesang
b1dad6f60d Two further cgroup cleanups:
Move the test of mp->need_cpuset_init to a logically better place.
Avoid misleading error messages.

Signed-off-by: Robert Vogelgesang <vogel@users.sourceforge.net>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 15:10:59 +00:00
Natanael Copa
6ff9f8ec1c lxc-alpine: disable sys_admin by default
It is normally not needed.

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-29 13:43:52 +00:00
Stéphane Graber
8a3c76b24d ubuntu/ubuntu-cloud: Add support for arm64 and ppc64el
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 11:43:22 +00:00
Robert Vogelgesang
a27ed52b34 lxc-monitord.log should not be created with mode 0666
lxc_monitord_spawn() in src/lxc/monitor.c contained "umask(0);", and
because of this, lxc-monitord created lxc-monitord.log with mode 0666.
World-writeable log files are bad, so remove this umask(0).

Signed-off-by: Robert Vogelgesang <vogel@users.sourceforge.net>
Acked-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-29 11:43:03 +00:00
Kaarle Ritvanen
1bdedfacc2 lxc-alpine: mount tmpfs on /dev/shm
Signed-off-by: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-01-29 11:42:43 +00:00
Serge Hallyn
bac806d1a1 lxc_container_new: fail on config file parse error
If we have a bad config file entry, fail.  Otherwise lxc-start
will proceed with a partial configuration.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 09:57:29 +00:00
Serge Hallyn
934b1673cd cgroups: adjust previous commit
Remove a memory leak on error path.

Only try to initialize cpuset if cgroup.clonechildren does not exist.

Bump the max value we read from cpuset.{cpus,mems} to 1024.

If cpuset.cpus or .mems is already initialized but is too long, don't fail.

If parent's cpuset.cpus or .mems is too long, record an error and fail.
If anyone actually runs into this, we can simply allocate the required
length as needed, but we don't expect anyone to run into this.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-01-29 09:56:28 +00:00