Commit Graph

6961 Commits

Author SHA1 Message Date
Stéphane Graber
c83280b79e
Merge pull request #1916 from brauner/2017-11-10/fix_console_info_output
console: fix console info message
2017-11-10 13:28:32 -05:00
CC-Hsu
b79628fcfb
Add missing dependency libunistring
Hi,

I try to create a Slackware container in a Slackware64 14.2 current and
find that wget depends on libunistring.

So I add libunistring to the package list.

Closes #1915

Signed-off-by: Chia-Chun Hsu a12321aabb@gmail.com
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
2017-11-10 13:17:02 -05:00
Christian Brauner
6834f80577
console: fix console info message
Now it will be displayed nicely formatted:

a1 login: chb@conventiont|~
> lxc console a1

Connected to tty 0
Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

Ubuntu 17.10 a1 console

a1 login:

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-10 19:07:38 +01:00
Stéphane Graber
c99b8a658f
Merge pull request #1910 from brauner/2017-11-08/attach_without_conf
attach: allow attach with empty conf
2017-11-10 02:16:52 -05:00
Stéphane Graber
04c4ceba61
Merge pull request #1914 from flx42/lxc-oci-fix-url-long-option
lxc-oci: correctly handle --url
2017-11-10 02:16:23 -05:00
Felix Abecassis
960f15bffe lxc-oci: correctly handle --url
Fix: #1898
Signed-off-by: Felix Abecassis <fabecassis@nvidia.com>
2017-11-09 22:49:35 -08:00
Christian Brauner
c3b3643ac7
Merge pull request #1913 from AustinReichert/remove-api-calls
First tools/ refactor for review
2017-11-10 01:19:26 +01:00
Austin Reichert
f0ccfa1371 tools/lxc_attach: removed api logging
Signed-off-by: Austin Reichert <austinskyreichert@utexas.edu>
2017-11-09 17:33:29 -06:00
Christian Brauner
d4624e9497
Merge pull request #1908 from Cypresslin/fix-overlayfs
lxc-test-unpriv: fix the overlayfs mount error
2017-11-09 19:44:10 +01:00
Serge Hallyn
5cc2545c5d
Merge pull request #1871 from brauner/2017-10-21/api_extension_console_ringbuffer
API: add console ringbuffer extension
2017-11-08 16:20:24 -06:00
Christian Brauner
ba773996a5
attach: allow attach with empty conf
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-08 22:31:52 +01:00
Po-Hsu Lin
706f1101ab lxc-test-unpriv: fix the overlayfs mount error
This patch fixes the missing workdir issue for the overlayfs mount command in
the lxc-test-unpriv test.

Bug link: https://bugs.launchpad.net/bugs/1730915

Signed-off-by: Po-Hsu Lin <po-hsu.lin@canonical.com>
2017-11-08 04:14:18 -05:00
Christian Brauner
0e17357c37
cgroups/cgfsng: adapt to new cgroup2 delegation
In order to enable proper unprivileged cgroup delegation on newer kernels we not
just need to delegate the "cgroup.procs" file but also "cgroup.threads". But
don't report an error in case it doesn't exist. Also delegate
"cgroup.subtree_control" to enable delegation of controllers to descendant
cgroups.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-08 01:53:31 +01:00
Serge Hallyn
29e4eb3123
Merge pull request #1891 from brauner/2017-10-31/cgfsng_fixes
cgroups/cgfsng: fixes, features, and improved cgroup2 handling
2017-11-07 13:16:48 -06:00
Serge Hallyn
ce8cab746a
Merge pull request #1903 from brauner/2017-11-06/storage_new_default_fs
storage: switch to ext4 as default fs
2017-11-07 12:23:12 -06:00
Serge Hallyn
562924dc20
Merge pull request #1893 from brauner/2017-11-01/attach_handle_namespace_inheritance
attach: handle namespace inheritance
2017-11-07 12:18:39 -06:00
Christian Brauner
a52c1c68cf
tests: add tests for console_log()
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:54 +01:00
Christian Brauner
33b4b4115f
console: non-functional changes
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:54 +01:00
Christian Brauner
63b74cdaf7
console: add "write_logfile" to console_log struct
If a console log file was specified this flag indicates whether the contents of
the ringbuffer should be written to the logfile when a request is sent to the
ringbuffer.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:54 +01:00
Christian Brauner
40117d0531
console: write ringbuffer to disk
When users request that the container keep a console ringbuffer we will not
continously write to the on-disk logfile as mirroring the contents of the
in-memory ringbuffer on-disk is costly and complicated. Instead, we dump the
ringbuffer contents on-disk when the container stops or fails to start. This
way users can still diagnose problems or retrieve the last contents of the
ringbuffer on-disk.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:53 +01:00
Christian Brauner
3b988b33d9
console: move ringbuffer into lxc_console_create()
This makes the whole setup more flexible.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:53 +01:00
Christian Brauner
69629c8243
console: non-functional changes
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:53 +01:00
Christian Brauner
191d43cca9
lxccontainer: add console_log() API extension
commands: add LXC_CMD_CONSOLE_LOG

Closes #1870.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:53 +01:00
Christian Brauner
fe84a562c2
commands: non-functional changes
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:53 +01:00
Christian Brauner
0d8e40c687
config: remove SIGRTMIN+14 as lxc.signal.stop
We want to be able to SIGKILL an Archlinux container.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:28 +01:00
Christian Brauner
49ff395882
cgroupfs/cgfsng: improve cgroup2 handling
This fixes a bunch of bugs.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:28 +01:00
Christian Brauner
e2deb1d83d
cgroups/cgfsng: fix get_controllers() for cgroup2
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:28 +01:00
Christian Brauner
e2695f0e02
cgroups/cgfsng: remove is_lxcfs()
We don't need to parse fuse.lxcfs entries.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:28 +01:00
Christian Brauner
c2712f64d5
cgroupfs/cgfsng: tweak logging
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:28 +01:00
Christian Brauner
be5c06ece4
log: check for i/o error with vsnprintf()
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:27 +01:00
Christian Brauner
a760603e3b
cgroups/cgfsng: support MS_READONLY with cgroup ns
If we lack CAP_SYS_ADMIN this is really useful.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:27 +01:00
Christian Brauner
058c1cb631
cgroups/cgfsng: cgfsns_chown() -> cgfsng_chown()
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:27 +01:00
Christian Brauner
ae5e6c0856
cgroups/cgfsng: make sure pointer is NULL
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:27 +01:00
Christian Brauner
411ac6d854
cgroups/cgfsng: keep mountpoint intact
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:27 +01:00
Christian Brauner
877f3a0452
attach: handle namespace inheritance
We need to have lxc_attach() distinguish between a caller specifying specific
namespaces to attach to and a caller not requesting specific namespaces. The
latter is taken by lxc_attach() to mean that all namespaces will be attached.
This also needs to include all inherited namespaces.

Closes #1890.
Closes #1897.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:54:04 +01:00
Christian Brauner
13bc611359
tools: fix help output of lxc-create
Closes #1899.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:53:34 +01:00
Christian Brauner
eef2ab4475
storage: switch to ext4 as default filesystem
Closes #1899.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-07 00:53:31 +01:00
Stéphane Graber
da3dcce69a
Merge pull request #1906 from brauner/2017-11-06/cgns_check_before_preserve
start: only preserve CLONE_NEWCGROUP when supported
2017-11-06 17:45:07 -05:00
Christian Brauner
baed7c1b58
start: only preserve CLONE_NEWCGROUP when supported
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-06 23:24:01 +01:00
Christian Brauner
eb42a0de98
Merge pull request #1901 from jacmet/fix-no-new-privs-check
lxc/start.c: Fix legacy PR_{G,S}ET_NO_NEW_PRIVS handling
2017-11-06 12:15:40 +01:00
Peter Korsgaard
995accccbb lxc/start.c: Fix legacy PR_{G,S}ET_NO_NEW_PRIVS handling
The configure checks for these use AC_CHECK_DECLS, which define the symbol
to 0 if not available - So adjust the code to match.  From the autoconf
manual:

https://www.gnu.org/software/autoconf/manual/autoconf-2.65/html_node/Generic-Declarations.html)

For each of the symbols (comma-separated list), define HAVE_DECL_symbol (in
all capitals) to ‘1’ if symbol is declared, otherwise to ‘0’.

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2017-11-06 09:35:48 +01:00
Serge Hallyn
2ed797da7e
Merge pull request #1884 from brauner/2017-10-28/move_tools_to_api_only
confile: add lxc.namespace.<namespace-key> + add user namespace sharing + rework start logic
2017-11-04 22:27:45 -05:00
Christian Brauner
686dd5d114
conf: reap child in all cases
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-03 08:37:10 +01:00
Christian Brauner
6b9f82a9f5
network: reap child in all cases
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-03 08:37:09 +01:00
Christian Brauner
fa3a5b2205
start: rework ns sharing + add userns sharing
- Implement inheriting user namespaces.
  - When inheriting user namespaces make sure to not try and map ids again. The
    kernel will not allow you to do this.
- Change clone() logic:
  1. If we inherit no namespaces simply call lxc_clone().
  2. If we inherit any namespaces call lxc_fork_attach_clone(). Here's why:
     - Causes one syscall (fork()) instead of two syscalls (setns() to
       inherited namespace and setns() back to parent namespace) to be
       performed.
     - Allows us to get rid of a bunch of variables and helper functions/code.
     - Sharing a user namespaces requires us to setns() to the inherited user
       namespace but the kernel does not allow reattaching to a parent user
       namespace. So the old logic made user namespace inheritance impossible.
       By using the lxc_fork_attach_clone() model we can simply setns() to the
       inherited user namespace in the fork()ed child and be done with it.
       The only thing we need to do is to specify CLONE_PARENT when calling
       clone() in lxc_fork_attach_clone() so that we can wait on the child.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-03 08:37:09 +01:00
Christian Brauner
2469f9b65e
monitor: do not log useless warnings
lxc-monitord is deprecated so this is expected to fail.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-03 08:37:09 +01:00
Christian Brauner
a9e1109e07
start: close data socket in parent
Brings the number of open fds in the monitor process for a standard container
without ttys down to 17.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-03 08:37:09 +01:00
Christian Brauner
28d9e29e18
confile: add lxc.namespace.<namespace-key>
This commit also gets rid of ~10 unnecessarily file descriptors that were kept
open. Before we kept open:

- A set of file descriptors that refer to the monitor's namespaces. These were
  only used to reattach to the monitor's namespace in lxc_spawn() and were
  never used anywhere else. So close them and don't keep them around.
- A list of inherited file descriptors.
- A list of file descriptors referring to the containers's namespaces to pass
  to lxc.hook.stop. This list duplicated inherited file descriptors.

Let's simply use a single list in the handler that has all file descriptors we
need and get rid of all other ones. As an illustration. Starting a container

1. Without this patch and looking at the fds that the monitor keeps open (26):

chb@conventiont|~
> ls -al /proc/27219/fd
total 0
dr-x------ 2 root root  0 Oct 29 14:30 .
dr-xr-xr-x 9 root root  0 Oct 29 14:30 ..
lrwx------ 1 root root 64 Oct 29 14:30 0 -> /dev/null
lrwx------ 1 root root 64 Oct 29 14:30 1 -> /dev/null
lrwx------ 1 root root 64 Oct 29 14:30 10 -> anon_inode:[signalfd]
lrwx------ 1 root root 64 Oct 29 14:30 11 -> /dev/ptmx
lrwx------ 1 root root 64 Oct 29 14:30 12 -> /dev/pts/10
lr-x------ 1 root root 64 Oct 29 14:30 13 -> net:[4026532553]
lrwx------ 1 root root 64 Oct 29 14:30 15 -> socket:[7909181]
lrwx------ 1 root root 64 Oct 29 14:30 16 -> socket:[7909182]
lr-x------ 1 root root 64 Oct 29 14:30 17 -> uts:[4026531838]
lr-x------ 1 root root 64 Oct 29 14:30 18 -> ipc:[4026531839]
lr-x------ 1 root root 64 Oct 29 14:30 19 -> net:[4026532009]
lrwx------ 1 root root 64 Oct 29 14:30 2 -> /dev/null
lr-x------ 1 root root 64 Oct 29 14:30 20 -> mnt:[4026532611]
lr-x------ 1 root root 64 Oct 29 14:30 21 -> pid:[4026532612]
lr-x------ 1 root root 64 Oct 29 14:30 22 -> uts:[4026532548]
lr-x------ 1 root root 64 Oct 29 14:30 23 -> ipc:[4026532549]
lr-x------ 1 root root 64 Oct 29 14:30 24 -> net:[4026532553]
l-wx------ 1 root root 64 Oct 29 14:30 3 -> /var/log/lxc/a1.log
lr-x------ 1 root root 64 Oct 29 14:30 4 -> uts:[4026532548]
lr-x------ 1 root root 64 Oct 29 14:30 5 -> ipc:[4026532549]
lr-x------ 1 root root 64 Oct 29 14:30 6 -> net:[4026532553]
lrwx------ 1 root root 64 Oct 29 14:30 7 -> anon_inode:[eventpoll]
lrwx------ 1 root root 64 Oct 29 14:30 9 -> socket:[7911594]

2. With this patch and looking at the fds that the monitor keeps open (19):

chb@conventiont|~
> ls -al /proc/28465/fd
total 0
dr-x------ 2 root root  0 Oct 29 14:31 .
dr-xr-xr-x 9 root root  0 Oct 29 14:31 ..
lrwx------ 1 root root 64 Oct 29 14:31 0 -> /dev/null
lrwx------ 1 root root 64 Oct 29 14:31 1 -> /dev/null
lr-x------ 1 root root 64 Oct 29 14:31 10 -> net:[4026532820]
lrwx------ 1 root root 64 Oct 29 14:31 12 -> socket:[7912349]
lrwx------ 1 root root 64 Oct 29 14:31 13 -> socket:[7912350]
lr-x------ 1 root root 64 Oct 29 14:31 14 -> mnt:[4026532611]
lr-x------ 1 root root 64 Oct 29 14:31 15 -> pid:[4026532813]
lr-x------ 1 root root 64 Oct 29 14:31 16 -> uts:[4026532612]
lr-x------ 1 root root 64 Oct 29 14:31 17 -> ipc:[4026532613]
lr-x------ 1 root root 64 Oct 29 14:31 18 -> net:[4026532820]
lrwx------ 1 root root 64 Oct 29 14:31 2 -> /dev/null
l-wx------ 1 root root 64 Oct 29 14:31 3 -> /var/log/lxc/a1.log
lrwx------ 1 root root 64 Oct 29 14:31 4 -> anon_inode:[signalfd]
lrwx------ 1 root root 64 Oct 29 14:31 5 -> /dev/ptmx
lrwx------ 1 root root 64 Oct 29 14:31 6 -> /dev/pts/10
lrwx------ 1 root root 64 Oct 29 14:31 7 -> anon_inode:[eventpoll]
lrwx------ 1 root root 64 Oct 29 14:31 9 -> socket:[7913041]

Relates to #1881.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-03 08:37:09 +01:00
Christian Brauner
f0ecc19d8f
handler: make name argument const
There's no obvious need to strdup() the name of the container in the handler.
We can simply make this a pointer to the memory allocated in
lxc_container_new().

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-03 08:37:08 +01:00
Christian Brauner
6e5fc7a5c7
start: close non-needed file descriptors
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-03 08:37:08 +01:00