Commit Graph

2861 Commits

Author SHA1 Message Date
Natanael Copa
94863addae lua: respect configure's --prefix
Install lua files under the confiugred --prefix rather than use the
pkg-config's variables LUA_INSTALL_[CL]MOD.

Users will likely want user --prefix while packagers will use DESTDIR.
Set the default to $datadir/lua/$LUA_VERSION for arch independent
lua modules and $libdir/lua/$LUA_VERSION for arch dependant .so module.

This should work for most distros. If it does not, then packagers
can still do:

  make install lualibdir=$(pkg-config lua --variable=INSTALL_CMOD) ...

This fixes #169

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-03-04 10:59:08 -05:00
Serge Hallyn
47c50f7a62 clone: don't set new containers' rootfs to the old
If clone is called from the api, the container object in memory
retains the bad fs.  The line is wrong, being a leftover from a
previous attempt before copy_storage was moved earlier.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-03-03 13:57:14 -06:00
Dwight Engen
7d520afa91 fix systemd unit file location to use prefix for local installs
also remove /usr special case for non-debian distros since systemd
itself sets systemunitdir=$(rootprefix)/lib/systemd/system

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-03-03 13:14:51 -05:00
Stéphane Graber
e27141fa26
Fix typo I introduced in the bdev change.
When adding the missing return value in Caglar's change (as discussed on
the mailing-list), I set err = -1 instead or ret = -1, causing an
obvious build failure...

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-03-03 11:31:03 -05:00
Stéphane Graber
385e8e8caa
Update README to mention pkg-config and current configure
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-03-03 11:14:31 -05:00
Serge Hallyn
b7f954bbdd simpler shared rootfs handling
Only do the funky chroot_into_slave if / is in fact the rootfs.
Rootfs is a special blacklisted case for pivot_root.

If / is not rootfs but is shared, just mount / rslave.  We're
already in our own namespace.

This appears to solve the extra /proc/$$/mount entries in
containers and the host directories in lxc-attach which have
been plagueing at least fedora and arch.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-03-03 11:04:29 -05:00
Serge Hallyn
8d2efe40a3 clone: don't ever mark the clone's rootfs as being the old, on disk
Otherwise an interrupted clone can lead to the original rootfs
being delete.

There is a period during lxcapi_clone during which we have written down
a temporary configuration file on disk, for the new container, using the
old rootfs. Interruption of clone doesn't allow us to do the cleanup we
do in error paths, so a subsequent lxc-destroy removes the old rootfs.

Fix this by doing the copy_storage as early as possible, and not
writing down the rootfs when we write down the temporary configuration
file.

(note - I tested this by putting a series of
'if (strcmp(newname, "u%d") == 0) exit(1)' inline to trigger
interruption between most blocks.  If someone has a good idea
for a generic way to regression-test this henceforth that'd be
great)

See https://bugs.launchpad.net/lxc/+bug/1285850

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-03-03 11:03:20 -05:00
S.Çağlar Onur
65db0e5a25 use btrfs snapshot feature to restore snapshots
fixes #131

changes since v1;
* uses btrfs snapshot feature only if src and dest are on same fs

Signed-off-by: S.Çağlar Onur <caglar@10ur.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-03-03 11:01:22 -05:00
Serge Hallyn
73d28d4295 cgmanager: don't stay connected
There are only a few times when we need to be connected to the
cgroup manager:

* when starting a container, from cgm_init until we've set cgroup limits
* when changing a cgroup setting (while running)
* when cleaning up (when shutting down)
* around the cgroup entering at attach

So only connect/disconnect the cgmanager socket on-demand as
needed.  This should have a few benefits.

1. Reduce the # open fds when many containers are running
2. if cgmanager is stopped and restarted, the container
   doesn't have to deal with the disconnection.

This is currently RFC.  There are a few issues outstanding:

1. the cgm_set and cgm_get may need to be made thread-safe.
2. a non-daemonized start which fails while cgm is connected,
will not disconnected.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-03-03 10:59:42 -05:00
Johannes Kastl
c18d419f7c removed shebang from bash_completion-file
Signed-off-by: Johannes Kastl <git@ojkastl.de>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-03-03 10:57:41 -05:00
Stéphane Graber
9f15e86afa lxc-download: Fix in_userns again
The use of a subshell was causing various failures, re-arrange not to
use one.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-28 19:13:50 -05:00
Serge Hallyn
b707e36849 on_path: use strtok_r consistently
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-27 23:47:36 -06:00
Stéphane Graber
0e6e3a4108 Fix unprivileged containers started by root
This change makes it possible to create unprivileged containers as root.
They will be stored in the usual system wide location, use the usual
system wide cache but will be running using a uid/gid map.

This also updates lxc_usernsexec to use the same function as the rest of
LXC, centralizing all the userns switch in a single function.

That function now detects the presence of newuidmap and newgidmap on the
system, if they are present, they will be used for containers created as
either user or root. If they're not and the user isn't root, an error is
shown. If they're not and the user is root, LXC will directly set the
uid_map and gid_map values.

All that should allow for a consistent experience as well as supporting
distributions that don't yet ship newuidmap/newgidmap.

To make things simpler in the future, an helper function "on_path" is
also introduced and used to detect the presence of newuidmap and
newgidmap.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-27 17:47:31 -05:00
Stéphane Graber
99b7182434 start: Fix print_top_failing_dir for /var/lib/lxc
In the case where /var/lib/lxc itself was not accessible,
print_top_failing_dir would fail to print the error message.

This fixes it and also change the initial access check for X_OK instead
of R_OK (to match what we actually need and print_top_failing_dir's own
check).

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2014-02-27 17:47:25 -05:00
Stéphane Graber
fda03e44e6
lxc-download: Ignore return code from subshell
The previous change fixed parsing of multiple uid/gid ranges by using a
while loop, however a failure in that loop will cause the script to exit
(due to -e), so we need to ignore the return value of the commands
inside that loop.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-27 15:46:23 -05:00
S.Çağlar Onur
5292adfd22 bdev: do not crash if specs is NULL
Signed-off-by: S.Çağlar Onur <caglar@10ur.org>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-27 15:09:07 -05:00
Vitaly Lavrov
0cf455013d fix realloc() error on reboot container
The container with "lxc.network.type=phys" halted with error on reboot.

Error message:
*** glibc detected *** lxc-start: realloc(): invalid pointer: 0x0948eed0 ***

We have a sequence:

1) conf->saved_nic = relloc(NULL) on start start.c:container save_phys_nics()
2) free(conf->saved_nics) after stop container
   conf.c:lxc_rename_phys_nics_on_shutdown()
3) conf->saved_nic = relloc(conf->saved_nics) on restart container
   start.c:save_phys_nics() -> error relloc()

free(conf->saved_nics) in lxc_rename_phys_nics_on_shutdown()
unnecessary, it will be called later in lxc_clear_saved_nics().

Signed-off-by: Vitaly Lavrov <vel21ripn@gmail.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-27 15:07:34 -05:00
Dwight Engen
c661b0a8fe fix attach when cgroups mounted after container start
When booting an OL7 container on OL6, systemd in the OL7 container mounted
some extra cgroup controllers, which are then present in /proc/self/cgroups
of every task on the host. This is the list used by attach to determine
which cgroups to move the attached task into, but when it asks the container
over the command interface for the path to the subsystem this will fail
since the controller didn't exist when the container was first started.

Instead of failing, this change allows the attach to continue, warning that
those cgroups that could not be found won't be attached to.

The problem can be more simply reproduced by starting a busybox container,
mounting a cgroup that was not previously mounted, and then attempting
to attach to to the busybox container.

The problem will likely not manifest with cgmanager since it only requests
the path for the first controller, which is likely to always be mounted.

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-26 14:54:04 -05:00
Stéphane Graber
a1b6244eb5 lxc-download: Detect unpriv created by real root
This adds yet another case in the in_userns function detecting the case
where an unprivileged container is created by the real uid 0, in which
case we want to share the system wide cache but still use the
unprivileged templates and unpack method.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-26 14:53:54 -05:00
Stéphane Graber
d4b621a52e
upstart: Don't forward requests for LXC_DOMAIN
Without this change, a request to *.LXC_DOMAIN that doesn't get a local
result from dnsmasq will be forwarded to its upstream server with the
potential of a loop.

Thanks to Ed for the patch on Launchpad (LP: #1246094).

Reported-by: Ed Swierk
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-25 19:15:28 -05:00
Stéphane Graber
7e60c3f0c1 confile: Don't crash on invalid id_map
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-25 17:09:49 -05:00
Stéphane Graber
ff10044007 python3: Add support for wlan device add
With this change it's now possible to add wlan devices to the container.
This will track down the right phy device, move it to the right
namespace (we don't care about its name), then if the user asked for a
new device name for the actual interface, we attach to the container and
rename the interface in there using attach.

I have tested this to work with both Intel and Atheros NICs.

This patch is based on the one provided to lxc-devel by Gregor Beck and
has then been updated to do the device renaming as well as minor code
style changes. Thanks!

Reported-by: Gregor Beck <gbeck@sernet.de>
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-25 16:11:51 -05:00
Stéphane Graber
d6a3c91743 attach: Defined MS_REC and MS_SLAVE if not set
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-25 15:22:26 -05:00
Serge Hallyn
2c6f3fc932 always check whether rootfs is shared
(this expands on Dwight's recent patch, commit c597baa8f9)

After unshare(CLONE_NEWNS) and before doing any mounting, always
check whether rootfs is shared.  Otherwise template runs or clone
scripts can bleed mount activity to the host.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-25 11:16:08 -05:00
Serge Hallyn
c2b9bd9e81 Catch seccomp violations by init
Note that if a task other than init violates the seccomp policy,
we cannot catch that.  Init will catch it and (if it feels like
it) log it.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-24 12:33:04 -05:00
Stéphane Graber
642d1ccd98 lxc-start-ephemeral: Set tmpfs mode to 0755
The tmpfs was mounted with its default mode (1777) which was then picked
up by overlayfs/aufs as the target's mode.

This led to a world writable / in ephemeral containers.

I have confirmed that this issue doesn't impact lxc-clone.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-24 09:51:27 -05:00
Serge Hallyn
7bb878863c add dir support
It used to be supported with the lxc-create.in script, and
the manpage says it's supported...  So let's just support it.

Now

sudo lxc-create -t download --dir /opt/ab -n ab

works, creating the container rootfs under /opt/ab.  This
generally isn't something I'd recommend, however telling users
to use a different lxc-path isn't as friendly as I'd like,
because each lxcpath requires separate lxc-ls and lxc-autostart
runs.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-22 18:33:59 -05:00
Serge Hallyn
b2fe91c7d4 apparmor: don't do on-exec profile changes
always change profile immediately.  Otherwise there are weird
corner cases where the profile change may not happen.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-22 18:33:29 -05:00
Stéphane Graber
223b1e0c87 change version to 1.0.0 in configure.ac
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-20 13:51:38 -05:00
Stéphane Graber
da289b2c34 apparmor: Drop unused profile
This profile was never meant to get into git...

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-20 13:51:21 -05:00
Stéphane Graber
76e6c9d3fe coverity: Fix two memory leaks
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-20 13:51:17 -05:00
Stéphane Graber
d1c6b3b51e bdev: Fix aufs mounts when /run/lxc doesn't exist
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-20 10:22:29 -05:00
Natanael Copa
0e18cacab5 lxc-alpine: add support for architecture arm
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-20 10:22:25 -05:00
Natanael Copa
a91365ee5e lua: Do not link Lua module to the Lua core library
Modules should not link to the Lua core library.

See http://lua-users.org/wiki/BuildingModules under
"Do Not Link Modules to the Lua Core Libraries"

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-20 10:22:20 -05:00
Stéphane Graber
cd80249bbd lxc-start-ephemeral: Also set xino path
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-20 10:22:16 -05:00
S.Çağlar Onur
9009a72899 fix aufs mount for some fs types via adding the xino parameter
Signed-off-by: S.Çağlar Onur <caglar@10ur.org>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-20 10:22:12 -05:00
Dwight Engen
c597baa8f9 fix mounts not propagating back to root mntns during create and clone
Systems based on systemd mount the root shared by default. We don't want
mounts done during creation by templates nor those done internally by
bdev during rsync based clones to propagate to the root mntns.

The create case already had the right check, but the mount call was
missing "/", so it was failing.

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-19 18:52:29 -05:00
Stéphane Graber
f88bfaa3f8
change version to 1.0.0.rc4 in configure.ac
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-19 14:53:25 -05:00
Stéphane Graber
6b3ec35ed9
upstart; Enable lxc-net by default
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-19 13:46:46 -05:00
Stéphane Graber
c580b8d207 rundir: Fix crash with privileged containers
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-19 11:52:01 -05:00
Stéphane Graber
a891614341
Fix typo in error message
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-19 10:48:39 -05:00
Stéphane Graber
96283b5460
templates: Fix bashisms in common code
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-19 10:45:14 -05:00
KATOH Yasufumi
95ab9daa02 doc: Update Japanese lxc.container.conf(5)
Update for commit 3a5ec236b7

Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-19 10:39:56 -05:00
Natanael Copa
6460d3c5f0 lxc-alpine: add checksums for musl libc build server pubkeys
We have added 3 new build servers for Alpine Linux musl libc x86, x86_64
and arm. Add the sha256sum for those keys.

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-19 10:39:30 -05:00
Natanael Copa
d2b2911c55 lxc-alpine: fixes for checkbashism
Fix the issues reported by checkbashisms and change back to #!/bin/sh

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-19 10:39:26 -05:00
Stéphane Graber
fd8c277753 coverity: rundir: Fix memory leaks
Since we're no longer always returning a getenv result or some defined
string, the callers should cleanup the variable after use.

As a result, change from const char* to char*, add the needed free()
everywhere and use strdup() on strings coming from getenv.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-19 10:38:38 -05:00
Stéphane Graber
44b9ae4b8a
rundir: Fix memory leaks
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-19 00:40:21 -05:00
Serge Hallyn
0130df5471 network: set mtu of unpriv veth to the bridge's mtu
That's to make sure that if the bridge has a higher than 1500
mtu, the new veth (defaulting to 1500) doesn't lower it.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-18 23:16:27 -06:00
Stéphane Graber
d6470e7163
rundir: Fix the uid == 0 case
This makes get_rundir actually do what I meant it to do... for some
reason I missed that one in testing...

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2014-02-18 23:56:31 -05:00
Stéphane Graber
97a696c6e5 Set a reasonable fallback for get_rundir
If get_rundir can't find XDG_RUNTIME_DIR in the environment, it'll
attempt to build a path using ~/.cache/lxc/run/. Should that fail
because of missing $HOME in the environment, it'll then return NULL an
all callers will fail in that case.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
2014-02-18 18:45:22 -05:00