Commit graph

713 commits

Author SHA1 Message Date
OpenShift Merge Robot
3efa068528
Merge pull request #1699 from baude/rund
run performance improvements
2018-10-25 05:59:31 -07:00
baude
6246942d37 Increase security and performance when looking up groups
We implement the securejoin method to make sure the paths to /etc/passwd and
/etc/group are not symlinks to something naughty or outside the container
image. And then instead of actually chrooting, we use the runc functions to
get information about a user.  The net result is increased security and
a a performance gain from 41ms to 100us.

Signed-off-by: baude <bbaude@redhat.com>
2018-10-25 06:42:43 -05:00
baude
e2aef6341d run prepare in parallel
run prepare() -- which consists of creating a network namespace and
mounting the container image is now run in parallel.   This saves 25-40ms.

Signed-off-by: baude <bbaude@redhat.com>
2018-10-25 06:34:23 -05:00
Giuseppe Scrivano
dfc689efc9
create: fix writing cidfile when using rootless
prevent opening the same file twice, since we re-exec podman in
rootless mode.  While at it, also solve a possible race between the
check for the file and writing to it.  Another process could have
created the file in the meanwhile and we would just end up overwriting
it.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-23 22:13:17 +02:00
baude
318e33ce2c read conmon output and convert to json in two steps
when reading the output from conmon using the JSON methods, it appears that
JSON marshalling is higher in pprof than it really is because the pipe is
"waiting" for a response. this gives us a clearer look at the real CPU/time
consumers.

Signed-off-by: baude <bbaude@redhat.com>
2018-10-23 13:21:33 -05:00
OpenShift Merge Robot
8ff9742480
Merge pull request #1687 from rhatdan/vendor
Move selinux label reservations to containers storage.
2018-10-23 09:22:12 -07:00
OpenShift Merge Robot
41a4827f84
Merge pull request #1638 from baude/fastps
Make podman ps fast
2018-10-23 09:05:20 -07:00
OpenShift Merge Robot
02a76a82b6
Merge pull request #1686 from mheon/rootless_firewall
Use more reliable check for rootless for firewall init
2018-10-23 08:17:47 -07:00
Daniel J Walsh
a95d71f113
Allow containers/storage to handle on SELinux labeling
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-10-23 10:57:23 -04:00
OpenShift Merge Robot
2e6bc3c7af
Merge pull request #1627 from adrianreber/criu
Add CRIU version check for checkpoint and restore
2018-10-23 07:53:11 -07:00
Matthew Heon
fba494de8e Use more reliable check for rootless for firewall init
We probably won't be able to initialize a firewall plugin when we
are not running as root, so we shouldn't even try. Replace the
less-effect EUID check with the rootless package's better check
to make sure we don't accidentally set up the firewall in these
cases.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-23 10:33:38 -04:00
baude
ee8f19e7be Make podman ps fast
Like Ricky Bobby, we want to go fast.

Signed-off-by: baude <bbaude@redhat.com>
2018-10-23 08:26:21 -05:00
Adrian Reber
8f6fb79ba8
Use the CRIU version check in checkpoint/restore
The newly introduced CRIU version check is now used to make sure
checkpointing and restoring is only used if the CRIU version is new
enough.

Signed-off-by: Adrian Reber <areber@redhat.com>
2018-10-23 12:52:03 +02:00
Giuseppe Scrivano
fc89065a80
oci: cleanup process status
I've seen a runc zombie process hanging around, it is caused by not
cleaning up the "$OCI status" process.  Also adjust another location
that has the same issue.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-23 09:32:44 +02:00
Daniel J Walsh
2444ac9926
Move rootless directory handling to the libpod/pkg/util directory
This should allow us to share this code with buildah.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-10-22 09:43:59 -04:00
baude
bfc473f982 Vendor in new new buildah/ci
libpod requires new buildah and container image versions to resolve
bug #1640298

Signed-off-by: baude <bbaude@redhat.com>
2018-10-17 17:04:19 -05:00
Matthew Heon
4a60656dbb Fix CGroup paths used for systemd CGroup mount
We already have functions for retrieving the container's CGroup
path, so use them instead of manually generating a path.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-17 10:45:58 -04:00
Matthew Heon
a2266c63b4
Merge pull request #1650 from rhatdan/systemd
Mount proper cgroup for systemd to manage inside of the container.
2018-10-16 13:26:20 -04:00
Matthew Heon
81e63ac309
Merge pull request #1609 from giuseppe/fix-volume-rootless
volume: resolve symlink paths in volumes
2018-10-16 13:25:27 -04:00
Daniel J Walsh
57a8c2e5e8
Mount proper cgroup for systemd to manage inside of the container.
We are still requiring oci-systemd-hook to be installed in order to run
systemd within a container.  This patch properly mounts

/sys/fs/cgroup/systemd/libpod_parent/libpod-UUID on /sys/fs/cgroup/systemd inside of container.

Since we need the UUID of the container, we needed to move Systemd to be a config option of the
container.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-10-15 16:19:11 -04:00
TomSweeneyRedHat
d8d4c0f0e1 Touchup fileo typo
Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com>
2018-10-15 08:13:42 -04:00
Giuseppe Scrivano
6dd6ce1ebc
volume: resolve symlinks in paths
ensure the volume paths are resolved in the mountpoint scope.

Otherwise we might end up using host paths.

Closes: https://github.com/containers/libpod/issues/1608

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-14 16:57:30 +02:00
Giuseppe Scrivano
2ad6012ea1
volume: write the correct ID of the container in error messages
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-14 16:57:29 +02:00
Daniel J Walsh
04a537756d
Generate a passwd file for users not in container
If someone runs podman as a user (uid) that is not defined in the container
we want generate a passwd file so that getpwuid() will work inside of container.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-10-12 07:08:13 -04:00
OpenShift Merge Robot
6983e00a28
Merge pull request #1623 from mheon/static_ip
Add ability to specify static IPs with --ip flag
2018-10-11 10:40:37 -07:00
Matthew Heon
a7318781c6 Log an otherwise ignored error from joining a net ns
Signed-off-by: Matthew Heon <mheon@redhat.com>
2018-10-11 11:29:42 -04:00
Matthew Heon
112e1402c9 Fix gofmt
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-11 11:24:08 -04:00
Matthew Heon
4882a6dd9d Add --ip flag and plumbing into libpod
Add the --ip flag back with bash completions. Manpages still
missing.

Add plumbing to pass appropriate the appropriate option down to
libpod to connect the flag to backend logic added in the previous
commits.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-11 11:24:08 -04:00
Matthew Heon
5c5163107c Temporary commit to swap branches
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-11 11:10:23 -04:00
Matthew Heon
e9ab8583d0 Ensure resolv.conf has the right label and path
Adds a few missing things from writeStringToRundir() to the new
resolv.conf function, specifically relabelling and returning a
path compatible with rootless podman

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-04 17:38:09 -04:00
Matthew Heon
52de75501c Drop libnetwork vendor and move the code into pkg/
The vendoring issues with libnetwork were significant (it was
dragging in massive amounts of code) and were just not worth
spending the time to work through. Highly unlikely we'll ever end
up needing to update this code, so move it directly into pkg/ so
we don't need to vendor libnetwork. Make a few small changes to
remove the need for the remainder of libnetwork.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-04 17:34:59 -04:00
Matthew Heon
e4ded6ce7f Switch to using libnetwork's resolvconf package
Libnetwork provides a well-tested package for generating
resolv.conf from the host's that has some features our current
implementation does not. Swap to using their code and remove our
built-in implementation.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-04 17:34:59 -04:00
OpenShift Merge Robot
094b8b7350
Merge pull request #1570 from giuseppe/fix-gvisor
podman: allow usage of gVisor as OCI runtime
2018-10-04 13:24:57 -07:00
Adrian Reber
f7c8fd8a3d
Add support to checkpoint/restore containers
runc uses CRIU to support checkpoint and restore of containers. This
brings an initial checkpoint/restore implementation to podman.

None of the additional runc flags are yet supported and container
migration optimization (pre-copy/post-copy) is also left for the future.

The current status is that it is possible to checkpoint and restore a
container. I am testing on RHEL-7.x and as the combination of RHEL-7 and
CRIU has seccomp troubles I have to create the container without
seccomp.

With the following steps I am able to checkpoint and restore a
container:

 # podman run --security-opt="seccomp=unconfined" -d registry.fedoraproject.org/f27/httpd
 # curl -I 10.22.0.78:8080
 HTTP/1.1 403 Forbidden # <-- this is actually a good answer
 # podman container checkpoint <container>
 # curl -I 10.22.0.78:8080
 curl: (7) Failed connect to 10.22.0.78:8080; No route to host
 # podman container restore <container>
 # curl -I 10.22.0.78:8080
 HTTP/1.1 403 Forbidden

I am using CRIU, runc and conmon from git. All required changes for
checkpoint/restore support in podman have been merged in the
corresponding projects.

To have the same IP address in the restored container as before
checkpointing, CNI is told which IP address to use.

If the saved network configuration cannot be found during restore, the
container is restored with a new IP address.

For CRIU to restore established TCP connections the IP address of the
network namespace used for restore needs to be the same. For TCP
connections in the listening state the IP address can change.

During restore only one network interface with one IP address is handled
correctly. Support to restore containers with more advanced network
configuration will be implemented later.

v2:
 * comment typo
 * print debug messages during cleanup of restore files
 * use createContainer() instead of createOCIContainer()
 * introduce helper CheckpointPath()
 * do not try to restore a container that is paused
 * use existing helper functions for cleanup
 * restructure code flow for better readability
 * do not try to restore if checkpoint/inventory.img is missing
 * git add checkpoint.go restore.go

v3:
 * move checkpoint/restore under 'podman container'

v4:
 * incorporated changes from latest reviews

Signed-off-by: Adrian Reber <areber@redhat.com>
2018-10-03 21:41:39 +02:00
Giuseppe Scrivano
c5546729b8
oci: split the stdout and stderr pipes
read the OCI status from stdout, not the combined stdout+stderr
stream.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-03 21:39:35 +02:00
Giuseppe Scrivano
c21e85e5f4
oci: always set XDG_RUNTIME_DIR
Fix an issue when using gVisor that couldn't start the container since
the XDG_RUNTIME_DIR env variable used for the "create" and "start"
commands is different.  Set the environment variable for each command
so that the OCI runtime gets always the same value.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-03 21:39:34 +02:00
OpenShift Merge Robot
3750b35ae2
Merge pull request #1578 from baude/addubuntuci
Add Ubuntu-18.04 to CI testing
2018-10-03 11:35:13 -07:00
baude
14473270d7 Add ability for ubuntu to be tested
unfortunately the papr CI system cannot test ubuntu as a VM; therefore,
this PR still keeps travis.  but it does include fixes that will be required
for running on modern versions of ubuntu.

Signed-off-by: baude <bbaude@redhat.com>
2018-10-03 12:45:37 -05:00
Giuseppe Scrivano
7abf46d15e
selinux: drop superflous relabel
The same relabel is already done in writeStringToRundir so we don't
need to do it twice.  The version in writeStringToRundir takes into
account the correct file path when using user namespaces.

Closes: https://github.com/containers/libpod/pull/1584

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-03 16:54:28 +02:00
OpenShift Merge Robot
230edff521
Merge pull request #1580 from giuseppe/rootless-always-set-XDG_RUNTIME_DIR
rootless: always set XDG_RUNTIME_DIR
2018-10-03 07:03:16 -07:00
OpenShift Merge Robot
a3c4ce6717
Merge pull request #1531 from mheon/add_exited_state
Add ContainerStateExited and OCI delete() in cleanup()
2018-10-03 06:06:14 -07:00
Giuseppe Scrivano
2f73a9b0f6
rootless: always set XDG_RUNTIME_DIR
it is used internally by containers/image to locate the auth file.

Closes: https://github.com/containers/libpod/issues/1457

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-03 10:41:47 +02:00
OpenShift Merge Robot
d5687946f6
Merge pull request #1528 from baude/runlabel
Add container runlabel command
2018-10-02 17:16:43 -07:00
Matthew Heon
b7c5fa70ab Fix Wait() to allow Exited state as well as Stopped
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-02 14:26:19 -04:00
Matthew Heon
7e23fb6c5d Fix cleanupRuntime to only save if container is valid
We call cleanup() (which calls cleanupRuntime()) as part of
removing containers, after the container has already been removed
from the database. cleanupRuntime() tries to update and save the
state, which obviously fails if the container no longer exists.
Make the save() conditional on the container not being in the
process of being removed.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-02 13:47:53 -04:00
OpenShift Merge Robot
b63b1f9cb6
Merge pull request #1562 from mheon/update_install_instructions
Update docs to build a runc that works with systemd
2018-10-02 10:34:32 -07:00
Matthew Heon
39d7c869ea Fix bug with exited state and container remove
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-02 12:07:23 -04:00
Matthew Heon
29dbab6440 Address review comments and fix ps output
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-02 12:05:22 -04:00
Matthew Heon
2c7f97d5a7 Add ContainerStateExited and OCI delete() in cleanup()
To work better with Kata containers, we need to delete() from the
OCI runtime as a part of cleanup, to ensure resources aren't
retained longer than they need to be.

To enable this, we need to add a new state to containers,
ContainerStateExited. Containers transition from
ContainerStateStopped to ContainerStateExited via cleanupRuntime
which is invoked as part of cleanup(). A container in the Exited
state is identical to Stopped, except it has been removed from
the OCI runtime and thus will be handled differently when
initializing the container.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-02 12:05:22 -04:00
Daniel J Walsh
4fe1979b9c
Need to allocate memory for hook struct
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-10-02 05:47:29 -04:00