756 Commits

Author SHA1 Message Date
690c52a113 Allow users to expose ports from the pod to the host
we need to allow users to expose ports to the host for the purposes
of networking, like a webserver.  the port exposure must be done at
the time the pod is created.

strictly speaking, the port exposure occurs on the infra container.

Signed-off-by: baude <bbaude@redhat.com>
2018-11-20 09:49:34 -06:00
39ef6d43d0 Merge pull request #1756 from isimluk/update-dependent-metalinter
Update metalinter dependency
2018-11-16 05:02:03 -08:00
c3d8328150 Increase pidWaitTimeout to 60s
At scale, it appears that we sometimes hit the 1000ms timeout to create
the PID file when a container is created or executed.
Increasing the value to 60s should help when running a lot of containers
in heavy-loaded environment.

Related #1495
Fixes #1816
Signed-off-by: Emilien Macchi <emilien@redhat.com>
2018-11-15 10:58:27 -05:00
7457815ba9 Lint: Extract constant unknownPackage
Addressing goconst warning: 3 other occurrence(s) of "Unknown" found

Signed-off-by: Šimon Lukašík <slukasik@redhat.com>
2018-11-10 10:52:24 +01:00
4e75551530 Lint: Tests: add missing assertions
Addressing:
ineffectual assignment to err (ineffassign)

Signed-off-by: Šimon Lukašík <slukasik@redhat.com>
2018-11-10 10:52:24 +01:00
223d102ec7 Lint: Do not ignore errors from docker run command when selinux enabled
Redefining err by := operator within block makes this err variable block local.

Addressing lint:
libpod/oci.go:368:3⚠️ ineffectual assignment to err (ineffassign)

Signed-off-by: Šimon Lukašík <slukasik@redhat.com>
2018-11-10 10:52:24 +01:00
78e6d8e7d7 Merge pull request #1772 from baude/rmdelpaused
rm -f now removes a paused container
2018-11-09 10:28:14 -08:00
7813f90ce6 Merge pull request #1789 from mheon/fix_add_hosts_test
Accurately update state if prepare() partially fails
2018-11-09 09:41:26 -08:00
615df2ecd7 info: add rootless field
Add a rootless field to the info data (e.g., `podman info`) to indicate
if the executing user is root or not.  In most cases, this can be
guessed but now it is clear and may aid in debugging, reporting and
understanding certain issues.

Signed-off-by: Valentin Rothberg <vrothberg@suse.com>
2018-11-09 09:41:57 +01:00
c611db2bc0 Merge pull request #1787 from baude/netstatusrework
correct assignment of networkStatus
2018-11-08 15:08:17 -08:00
3a4c4bad67 Merge pull request #1790 from isimluk/beware-of-goroutine-locals
Do not hide errors when creating container with UserNSRoot
2018-11-08 14:06:02 -08:00
7e15084d19 Accurately update state if prepare() partially fails
We are seeing some issues where, when part of prepare() fails
(originally noticed due to a bad static IP), the other half does
not successfully clean up, and the state can be left in a bad
place (not knowing about an active SHM mount for example).

Signed-off-by: Matthew Heon <mheon@redhat.com>
2018-11-08 16:51:57 -05:00
2fb6ef9f40 Do not hide errors when creating container with UserNSRoot
This one is tricky. By using `:=` operator we have made err variable to be local
in the gorutine and different from `err` variable in the surrounding function.
And thus `createContainer` function returned always nil, even in cases when
some error occurred in the gorutine.

Signed-off-by: Šimon Lukašík <slukasik@redhat.com>
2018-11-08 22:27:51 +01:00
2dd9cae37c rm -f now removes a paused container
We now can remove a paused container by sending it a kill signal while it
is paused.  We then unpause the container and it is immediately killed.

Also, reworked how the parallelWorker results are handled to provide a
more consistent approach to how each subcommand implements it. It also
fixes a bug where if one container errors, the error message is duplicated
when printed out.

Signed-off-by: baude <bbaude@redhat.com>
2018-11-08 15:18:11 -06:00
46e672bad6 correct assignment of networkStatus
once we changed configureNetNS to return a result beyond an error,
we need to make sure that we used locals instead of ctr attributes
when determining networks.

Resolves #1752

Signed-off-by: baude <bbaude@redhat.com>
2018-11-08 14:22:10 -06:00
e9f8aed407 Merge pull request #1764 from rhatdan/nopasswd
Don't fail if /etc/passwd or /etc/group does not exists
2018-11-07 11:24:57 -08:00
1370c311f5 Merge pull request #1771 from baude/prepare
move defer'd function declaration ahead of prepare error return
2018-11-07 10:55:51 -08:00
ae03137861 Merge pull request #1689 from mheon/add_runc_timeout
Do not call out to runc for sync
2018-11-07 09:36:03 -08:00
1e1aaac97d Merge pull request #1767 from mheon/remove_conmon_cgroup_first
Remove conmon cgroup before pod cgroup for cgroupfs
2018-11-07 09:19:28 -08:00
1e4e33b41f Merge pull request #1761 from giuseppe/rootless-systemd
rootless: don't bind mount /sys/fs/cgroup/systemd in systemd mode
2018-11-07 08:58:33 -08:00
e022efa0f8 move defer'd function declaration ahead of prepare error return
Signed-off-by: baude <bbaude@redhat.com>
2018-11-07 10:44:33 -06:00
ae68bec75c Don't fail if /etc/passwd or /etc/group does not exists
Container images can be created without passwd or group file, currently
if one of these containers gets run with a --user flag the container blows
up complaining about t a missing /etc/passwd file.

We just need to check if the error on read is ENOEXIST then allow the
read to return, not fail.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-11-07 11:41:51 -05:00
536af1f689 Print error status code if we fail to parse it
When we read the conmon error status file, if Atoi fails to parse
the string we read from the file as an int, print the string as
part of the error message so we know what might have gone wrong.

Signed-off-by: Matthew Heon <mheon@redhat.com>
2018-11-07 11:36:01 -05:00
c9e9ca5671 Properly set Running state when starting containers
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-11-07 11:36:01 -05:00
0f45403c9b Fix misspelling
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-11-07 11:36:01 -05:00
3286b0185d Retrieve container PID from conmon
Instead of running a full sync after starting a container to pick
up its PID, grab it from Conmon instead.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-11-07 11:36:01 -05:00
94763a47a6 If a container ceases to exist in runc, set exit status
When we scan a container in runc and see that it no longer
exists, we already set ContainerStatusExited to indicate that it
no longer exists in runc. Now, also set an exit code and exit
time, so PS output will make some sense.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-11-07 11:36:01 -05:00
140f87c474 EXPERIMENTAL: Do not call out to runc for sync
When syncing container state, we normally call out to runc to see
the container's status. This does have significant performance
implications, though, and we've seen issues with large amounts of
runc processes being spawned.

This patch attempts to use stat calls on the container exit file
created by Conmon instead to sync state. This massively decreases
the cost of calling updateContainer (it has gone from an
almost-unconditional fork/exec of runc to a single stat call that
can be avoided in most states).

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-11-07 11:36:01 -05:00
f714ee4fb1 Actually save changes from post-stop sync
After stopping containers, we run updateContainerStatus to sync
our state with runc (pick up exit code, for example). Then we
proceed to not save this to the database, requiring us to grab it
again on the next sync. This should remove the need to read the
exit file more than once.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-11-07 11:36:01 -05:00
f813881b81 rootless: mount /sys/fs/cgroup/systemd from the host
systemd requires /sys/fs/cgroup/systemd to be writeable.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-11-07 16:10:34 +01:00
11c5b0237b rootless: don't bind mount /sys/fs/cgroup/systemd in systemd mode
it is not writeable by non-root users so there is no point in having
access to it from a container.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-11-07 16:10:33 +01:00
879f9116de Add hostname to /etc/hosts
Signed-off-by: Qi Wang <qiwan@redhat.com>
2018-11-07 09:55:59 -05:00
3bacacce94 Remove conmon cgroup before pod cgroup for cgroupfs
For pods using cgroupfs, we were seeing some error messages in CI
from an inability to remove the pod CGroup, which was traced down
to the conmon cgroup still being present as a child. Try to
remove these error messages and ensure successful CGroup deletion
by removing the conmon CGroup first, then the pod cgroup.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-11-07 09:45:34 -05:00
9c1985fc4e Merge pull request #1731 from afbjorklund/version
Fix setting of version information
2018-10-31 06:48:12 -07:00
ea50ce6a59 rootless: avoid hang on failed slirp4netns
If for any reason slirp4netns fails at startup, podman waits
indefinitely.  Check every second if the process is still running so
that we avoid to hang.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-31 13:08:23 +01:00
b2fef1a8ba Fix setting of version information
It was setting the wrong variable (CamelCase)
in the wrong module ("main", not "libpod")...

Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2018-10-31 00:27:08 +01:00
ee513cca86 Merge pull request #1704 from giuseppe/attach-cuid-too-long
attach: fix attach when cuid is too long
2018-10-30 14:22:01 -07:00
319a7a7043 Merge pull request #1715 from baude/getusergroup
get user and group information using securejoin and runc's user library
2018-10-30 11:49:15 -07:00
f77d846536 attach: fix attach when cuid is too long
conmon creates a symlink to avoid using a too long UNIX path.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1641800

There is still one issue when the path length of the symlink has the
same length of the attach socket parent directory since conmon fails
to create the symlink, but that must be addressed in conmon first.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-30 15:35:24 +01:00
d5b600171d Merge pull request #1721 from vrothberg/fix-1695
unmount: fix error logic
2018-10-29 15:29:32 -07:00
1c4880d3ef Sync default config with libpod.conf
Only changed libpod.conf file, which might not even be in use.

Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2018-10-29 19:11:47 +01:00
079208cdbc unmount: fix error logic
Only return `ErrCtrStateInvalid` errors when the mount counter is equal
to 1.  Also fix the "can't unmount [...] last mount[..]" error which
hasn't been returned when the error passed to `errors.Errorf()` is nil.

Fixes: #1695
Signed-off-by: Valentin Rothberg <vrothberg@suse.com>
2018-10-29 15:46:54 +01:00
1dd7f13dfb get user and group information using securejoin and runc's user library
for the purposes of performance and security, we use securejoin to contstruct
the root fs's path so that symlinks are what they appear to be and no pointing
to something naughty.

then instead of chrooting to parse /etc/passwd|/etc/group, we now use the runc user/group
methods which saves us quite a bit of performance.

Signed-off-by: baude <bbaude@redhat.com>
2018-10-29 08:59:46 -05:00
3efa068528 Merge pull request #1699 from baude/rund
run performance improvements
2018-10-25 05:59:31 -07:00
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
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
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
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
8ff9742480 Merge pull request #1687 from rhatdan/vendor
Move selinux label reservations to containers storage.
2018-10-23 09:22:12 -07:00
41a4827f84 Merge pull request #1638 from baude/fastps
Make podman ps fast
2018-10-23 09:05:20 -07:00