2620 Commits

Author SHA1 Message Date
0f7d54b026 migrate Podman to containers/common/libimage
Migrate the Podman code base over to `common/libimage` which replaces
`libpod/image` and a lot of glue code entirely.

Note that I tried to leave bread crumbs for changed tests.

Miscellaneous changes:

 * Some errors yield different messages which required to alter some
   tests.

 * I fixed some pre-existing issues in the code.  Others were marked as
   `//TODO`s to prevent the PR from exploding.

 * The `NamesHistory` of an image is returned as is from the storage.
   Previously, we did some filtering which I think is undesirable.
   Instead we should return the data as stored in the storage.

 * Touched handlers use the ABI interfaces where possible.

 * Local image resolution: previously Podman would match "foo" on
   "myfoo".  This behaviour has been changed and Podman will now
   only match on repository boundaries such that "foo" would match
   "my/foo" but not "myfoo".  I consider the old behaviour to be a
   bug, at the very least an exotic corner case.

 * Futhermore, "foo:none" does *not* resolve to a local image "foo"
   without tag anymore.  It's a hill I am (almost) willing to die on.

 * `image prune` prints the IDs of pruned images.  Previously, in some
   cases, the names were printed instead.  The API clearly states ID,
   so we should stick to it.

 * Compat endpoint image removal with _force_ deletes the entire not
   only the specified tag.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2021-05-05 11:30:12 +02:00
24156f95fb Merge pull request #10177 from giuseppe/always-honor-cgroup-parent
cgroup: always honor --cgroup-parent
2021-05-03 21:12:30 +02:00
17ce567c68 cgroup: always honor --cgroup-parent with cgroupfs
if --cgroup-parent is specified, always honor it without doing any
detection whether cgroups are supported or not.

Closes: https://github.com/containers/podman/issues/10173

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2021-05-03 12:36:03 +02:00
d21c1aafe2 Detect if in podman machine virtual vm
When in podman machine virtual machines, podman needs to be able to
detect as such.  One implementation for this is when creating networks,
the podman-machine cni plugin needs to be added to the configuration.

This PR also includes the latest containers-common.

[NO TESTS NEEDED]

Signed-off-by: Brent Baude <bbaude@redhat.com>
2021-04-30 13:11:05 -05:00
18cb17ffeb Use seccomp_profile as default profile if defined in containers.conf
Edits `podman info` to provide the default seccomp profile
detected in the output

Signed-off-by: Pablo Correa Gómez <ablocorrea@hotmail.com>
2021-04-28 15:19:48 +02:00
f613a2a8d5 Merge pull request #10119 from rhatdan/timeout
Add podman run --timeout option
2021-04-27 16:47:32 -04:00
5baa0ae85e Merge pull request #10136 from zhangguanzhang/generate-kube-volume
Fixes generate kube incorrect when bind-mounting "/" and "/root"
2021-04-27 06:08:22 -04:00
e6fc34b71a Merge pull request #9941 from Luap99/fix-9828
Fix rootlesskit port forwarder with custom slirp cidr
2021-04-27 05:44:22 -04:00
bdcfdadb2f Merge pull request #10144 from jmguzik/fix-prune-until-filter-images
Fix images prune filter until
2021-04-26 20:05:56 -04:00
8edadd4c7e Fix images prune filter until
This commits fixes until filter. It is now checking if the created
timestamp is before until filter value as expected in the docs.

Signed-off-by: Jakub Guzik <jakubmguzik@gmail.com>
2021-04-26 22:51:33 +02:00
3bf0fbf6f6 Fixes generate kube incorrect when bind-mounting "/" and "/root"
Signed-off-by: zhangguanzhang <zhangguanzhang@qq.com>
2021-04-26 23:47:39 +08:00
3886524d53 libpod/image: unit tests: don't use system's registries.conf.d
This should make the unit tests pass on updated CI images.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2021-04-26 17:46:36 +02:00
fef3ea80aa Merge pull request #10081 from sjug/cdi_device_lib
Add support for CDI device configuration
2021-04-26 09:31:06 -04:00
722ea2f1f8 runtime: create userns when CAP_SYS_ADMIN is not present
when deciding to create a user namespace, check for CAP_SYS_ADMIN
instead of looking at the euid.

[NO TESTS NEEDED] Needs nested Podman

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2021-04-26 08:58:55 +02:00
3538815c5b Add podman run --timeout option
This option allows users to specify the maximum amount of time to run
before conmon sends the kill signal to the container.

Fixes: https://github.com/containers/podman/issues/6412

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-04-23 11:18:05 -04:00
f99b7a314b Fix rootlesskit port forwarder with custom slirp cidr
The source ip for the rootlesskit port forwarder was hardcoded to the
standard slirp4netns ip. This is incorrect since users can change the
subnet used by slirp4netns with `--network slirp4netns:cidr=10.5.0.0/24`.
The container interface ip is always the .100 in the subnet. Only when
the rootlesskit port forwarder child ip matches the container interface
ip the port forwarding will work.

Fixes #9828

Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
2021-04-23 11:12:49 +02:00
9c8277247d Fixes from make codespell
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-04-21 13:16:33 -04:00
41677b192a Merge pull request #8979 from haircommander/full-attach-path
Use full attach path, rather than a symlink
2021-04-21 05:25:19 -04:00
fd9dd7065d rmi: don't break when the image is missing a manifest
In libpod/image.Image.Remove(), if the attempt to find the image's
parent fails for any reason, log a warning and proceed as though it
didn't have one instead of failing, which would leave us unable to
remove the image without resetting everything.

In libpod/Runtime.RemoveImage(), if we can't determine if an image has
children, log a warning, and assume that it doesn't have any instead of
failing, which would leave us unable to remove the image without
resetting everything.

In pkg/domain/infra/abi.ImageEngine.Remove(), when attempting to remove
all images, if we encounter an error checking if a given image has
children, log a warning, and assume that it doesn't have any instead of
failing, which would leave us unable to remove the image without
resetting everything.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-04-20 15:44:39 -04:00
db7cff8c86 Add support for CDI device configuration
- Persist CDIDevices in container config
- Add e2e test
- Log HasDevice error and add additional condition for safety

Signed-off-by: Sebastian Jug <seb@stianj.ug>
2021-04-20 09:18:52 -04:00
a94360a3f7 Merge pull request #10041 from chenk008/add_pidfile_flag
Add flag "--pidfile" for podman create/run
2021-04-19 16:22:05 -04:00
b5e0b292bf Merge pull request #10056 from mheon/misc_cleanup
[NO TESTS NEEDED] Make an advanced layer diff function private
2021-04-19 10:51:58 -04:00
db21c1c0ea Remove an advanced layer diff function
Noticed this while I was poking around in the runtime doing DB
work. The signature of this function makes me a bit uncomfortable
(why should we let people apply arbitrary diffs to layers? Seems
like a good way to break things...) and it's completely unused,
so let's just remove it.

[NO TESTS NEEDED] since this is a pure removal.

Signed-off-by: Matthew Heon <mheon@redhat.com>
2021-04-19 09:17:04 -04:00
a35e16c234 support pidfile on container restore
Signed-off-by: chenkang <kongchen28@gmail.com>
2021-04-18 00:02:50 +08:00
a1002beb78 fix start it
Signed-off-by: chenkang <kongchen28@gmail.com>
2021-04-17 23:35:27 +08:00
728b73d7c4 set pidfile default value int containerconfig
Signed-off-by: chenkang <kongchen28@gmail.com>
2021-04-17 21:15:23 +08:00
b963a5eb4a add pidfile in inspection
Signed-off-by: chenkang <kongchen28@gmail.com>
2021-04-17 20:56:08 +08:00
90d7f67138 runtime: bump required conmon version
2.0.24 introduced the new behavior with --full-attach, allowing podman to no longer use the socketDir

Signed-off-by: Peter Hunt <pehunt@redhat.com>
2021-04-16 17:45:52 -04:00
b2c6663a9f runtime: return findConmon to libpod
I believe moving the conmon probing code to c/common wasn't the best strategy.
Different container engines have different requrements of which conmon version is required
(based on what flags they use).

Signed-off-by: Peter Hunt <pehunt@redhat.com>
2021-04-16 17:45:52 -04:00
452b9e204f oci: drop ExecContainerCleanup
without the socketsDir, we no longer need to worry about cleaning up after an exec.

Signed-off-by: Peter Hunt <pehunt@redhat.com>
2021-04-16 17:45:52 -04:00
fdfff1dab2 oci: use --full-path option for conmon
and stop relying on socket path

Signed-off-by: Peter Hunt <pehunt@redhat.com>
2021-04-16 17:45:52 -04:00
6708bc235f use AttachSocketPath when removing conmon files
Signed-off-by: Peter Hunt <pehunt@redhat.com>
2021-04-16 17:45:52 -04:00
12bcfa360d Fix possible panic in libpod/image/prune.go
podman image prune paniced locally for me. The error handling was not
done correctly and we could end up with a nil pointer dereference.

[NO TESTS NEEDED] I have no idea how I could force an error in img.Size().

Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
2021-04-16 11:21:47 +02:00
8fbe06b8cb add flag "--pidfile" for podman create/run
Signed-off-by: chenkang <kongchen28@gmail.com>
2021-04-16 13:43:14 +08:00
b5e9b30212 Merge pull request #9995 from rhatdan/debug
Fix message about runtime to show only the actual runtime
2021-04-14 09:16:50 -04:00
40e5ae30d5 Remove in-memory state implementation
We originally added this in the *very early* days of Podman,
before a proper persistent state was written, so we had something
to test with. It was retained after the original SQLite state
(and current BoltDB state) were written so it could be used for
testing Libpod in unit tests with no requirement for on-disk
storage. Well, such unit tests never materialized, and if we were
to write some now the requirement to have a temporary directory
for storing data on disk is not that bad. I can basically
guarantee there are no users of this in the wild because, even if
you managed to figure out how to configure it when we don't
document it, it's completely unusable with Podman since all your
containers and pods will disappear every time Podman exits.

Given all this, and since it's an ongoing maintenance burden I no
longer wish to deal with, let's just remove it.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2021-04-13 14:00:38 -04:00
21d6b12689 Merge pull request #10000 from rhatdan/cleanup
Do not delete container twice
2021-04-13 16:33:12 +02:00
e29fee7329 Fix message about runtime to show only the actual runtime
Currently the debug line shows every runtime up until it finds
the correct one, confusing users on which runtime it is using.

Also move missing OCI runtime from containers/conf down to Debug level
and improved the debug message, to not report error.

[NO TESTS NEEDED] Since this is just debug.

Triggered by https://github.com/containers/podman/issues/4854

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-04-13 09:42:29 -04:00
801acb01e2 Do not delete container twice
10 lines above we had

	// Set ContainerStateRemoving
	c.state.State = define.ContainerStateRemoving

Which causes the state to not be the two checked states.  Since the
c.cleanup call already deleted the OCI state, this meant that we were
calling cleanup, and hence the postHook hook twice.

Fixes: https://github.com/containers/podman/issues/9983

[NO TESTS NEEDED] Since it would be difficult to tests this.  Main tests
should handle that the container is being deleted successfully.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-04-12 14:54:37 -04:00
2fad29ccb2 cgroup: do not set cgroup parent when rootless and cgroupfs
do not set the cgroup parent when running as rootless with cgroupfs,
even if cgroup v2 is used.

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

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2021-04-12 16:55:55 +02:00
9d3e310710 Merge pull request #9935 from EduardoVega/5788-kube-volume
Add support for play/generate kube PersistentVolumeClaims and Podman volumes
2021-04-12 12:36:20 +02:00
61cb6d61dd Add support for play/generate kube volumes
Signed-off-by: Eduardo Vega <edvegavalerio@gmail.com>
2021-04-09 14:01:13 -06:00
0a39ad196c podman unshare: add --rootless-cni to join the ns
Add a new --rootless-cni option to podman unshare to also join the
rootless-cni network namespace. This is useful if you want to connect
to a rootless container via IP address. This is only possible from the
rootless-cni namespace and not from the host namespace. This option also
helps to debug problems in the rootless-cni namespace.

Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
2021-04-07 15:54:12 +02:00
f230214db1 rootless cni add /usr/sbin to PATH if not present
The CNI plugins need access to iptables in $PATH. On debian /usr/sbin
is not added to $PATH for rootless users. This will break rootless
cni completely. To prevent breaking existing users add /usr/sbin to
$PATH in podman if needed.

Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
2021-04-06 23:55:05 +02:00
d83f49ef6b Merge pull request #9754 from mheon/add_dep
Add --requires flag to podman run/create
2021-04-06 16:16:49 -04:00
6acd265306 Add --requires flag to podman run/create
Podman has, for a long time, had an internal concept of
dependency management, used mainly to ensure that pod infra
containers are started before any other container in the pod. We
also have the ability to recursively start these dependencies,
which we use to ensure that `podman start` on a container in a
pod will not fail because the infra container is stopped. We have
not, however, exposed these via the command line until now.

Add a `--requires` flag to `podman run` and `podman create` to
allow users to manually specify dependency containers. These
containers must be running before the container will start. Also,
make recursive starting with `podman start` default so we can
start these containers and their dependencies easily.

Fixes #9250

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2021-04-06 14:01:31 -04:00
382b5b81d2 Merge pull request #9942 from mheon/fix_9919
Ensure that `--userns=keep-id` sets user in config
2021-04-06 17:04:50 +02:00
541252afa7 Ensure that --userns=keep-id sets user in config
One of the side-effects of the `--userns=keep-id` command is
switching the default user of the container to the UID of the
user running Podman (though this can still be overridden by the
`--user` flag). However, it did this by setting the UID and GID
in the OCI spec, and not by informing Libpod of its intention to
switch users via the `WithUser()` option. Because of this, a lot
of the code that should have triggered when the container ran
with a non-root user was not triggering. In the case of the issue
that this fixed, the code to remove capabilities from non-root
users was not triggering. Adjust the keep-id code to properly
inform Libpod of our intention to use a non-root user to fix
this.

Also, fix an annoying race around short-running exec sessions
where Podman would always print a warning that the exec session
had already stopped.

Fixes #9919

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2021-04-06 09:18:46 -04:00
6b23fece73 Merge pull request #9911 from rhatdan/storage
Allow users to override default storage opts with --storage-opt
2021-04-05 20:55:15 +02:00
6831c72f6a Don't relabel volumes if running in a privileged container
Docker does not relabel this content, and openstack is running
containers in this manner.  There is a penalty for doing this
on each container, that is not worth taking on a disable SELinux
container.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-04-05 13:07:36 -04:00