Commit Graph

4465 Commits

Author SHA1 Message Date
Tom Sweeney
a082bc9c0c [v5.8] Bump Buildah to v1.43.2
Bump Buildah to v1.43.2 in prepration of the next Podman v5.8 release.

Also includes the changes from 47ab0f1e94

And adjustments to test/buildah-bud/buildah-tests.diff

Signed-off-by: Tom Sweeney <tsweeney@redhat.com>
2026-06-09 17:13:35 -04:00
Kir Kolyshkin
405451792d Remove unused nolint annotations
The interfacer linter was removed a few years ago.

Remove the annotations as well.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit a7886d1fe8)
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-06-04 19:38:16 +02:00
Kir Kolyshkin
a94d273a8f Replace os.Is* error checks with errors.Is
Using os.Is{Exist,NotExist,Permission} checks is not recommended in the
new code (see official documentation). While using it in the existing
code is OK, it may still result in a subtle errors later (for a specific
example of that, see [1]).

Replace those with errors.Is.

Generated by:

	gofmt -r 'os.IsExist(a) -> errors.Is(a, os.ErrExist)' -w .
	gofmt -r 'os.IsNotExist(a) -> errors.Is(a, os.ErrNotExist)' -w .
	gofmt -r 'os.IsPermission(a) -> errors.Is(a, os.ErrPermission)' -w .
	goimports -w .
	git diff vendor test/tools/vendor | patch -p1 -R

[1]: https://github.com/opencontainers/runc/pull/5061
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 7f7b35356f)

[Added extra replacements manually that were only in the 5.8 tree]

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-06-04 19:38:16 +02:00
Miloslav Trmač
e0aec5b3df Fix compilation of tests without CGo
Have the build conditions match the build conditions of the
referenced implementation.

Signed-off-by: Miloslav Trmač <mitr@redhat.com>
(cherry picked from commit cb9df63d63)
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-06-04 19:37:41 +02:00
Paul Holzinger
a49ad4be81 use chrootarchive over plain archive package
Just as additional hardening.

Note chrootarchive does not work on macos/windows, in that case it still
falls back to the regular pkg/archive.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
(cherry picked from commit 25aee24cbd)
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-04-09 14:23:52 +02:00
Paul Holzinger
0fa3043415 add missing O_CLOEXEC to open calls
The go std os package to will always make sure to use O_CLOEXEC, however
in cases where we directly call unix.Open() we need to pass that flag
explicitly.

I looked at this as there was a report of a leaked fd on the pasta list,
though I am not sure this will address it.

But anyway doing this should be rather safe and avoid leaks into other
processes.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
(cherry picked from commit d20933df02)
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-04-09 14:23:52 +02:00
crawfordxx
7250b06e25 libpod: fix data race on deferredErr in attachExecHTTP
ExecContainerHTTP returns attachChan to its caller before attachExecHTTP
finishes. The caller's deferred close(holdConnOpen) can therefore fire
while attachExecHTTP is still running (including its own deferred
cleanups), which races with the goroutine inside attachExecHTTP that
reads deferredErr after <-holdConnOpen unblocks.

Fix this by introducing an errCh channel: deferred functions write
deferredErr into it, and the goroutine reads from it after
<-holdConnOpen unblocks, ensuring the read happens-after all writes to
the named return value.

Fixes: #28277
Signed-off-by: crawfordxx <crawfordxx@users.noreply.github.com>
(cherry picked from commit 497185c14b)
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-04-09 14:23:51 +02:00
Doug Rabson
28a39dd1ba libpod: Don't dereference ctrSpec.Linux if it is nil
This prevents a nil pointer crash when running network=host containers
on a FreeBSD host using podman-remote.

Fixes: #28289
Signed-off-by: Doug Rabson <dfr@rabson.org>
(cherry picked from commit 9a10cefd18)
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-04-09 13:41:53 +02:00
Jan Rodák
fcc6ae217c [v5.8] Fix unless-stopped containers not restarting after ...
`podman-restart.service` stop them

When `podman-restart.service` stops containers, it marks them as "stopped by
user" which breaks the `unless-stopped` restart policy. Add hidden
`--not-stopped-by-user` flag to prevent this, allowing `unless-stopped`
containers to restart on next boot.

Fixes: https://github.com/containers/podman/issues/28152
Fixes: https://issues.redhat.com/browse/RUN-4357

Cherry pick fixes: https://redhat.atlassian.net/browse/RHEL-157746, https://redhat.atlassian.net/browse/RHEL-157747

Signed-off-by: Jan Rodák <hony.com@seznam.cz>
(cherry picked from commit 7326b862e3)
Signed-off-by: Tom Sweeney <tsweeney@redhat.com>
2026-03-19 19:40:30 -04:00
Paul Holzinger
5dcc24d01d update boltdb migrating warning
Mention the reboot which should be safer and that in order for the
command the user has to ensure they are no parallel commands.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-03-10 13:54:57 +01:00
Paul Holzinger
13deb46d81 libpod: prefer sqlite in getDBState()
If the sqlite file exists make sure we always use that db and no longer
botldb. There are known race conditions in the db migration logic that
might make it so that both database files exists at once.

In order to ensure we use the correctly migrated one we must prefer
sqlite here.

see https://github.com/containers/podman/issues/28216

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-03-09 20:55:53 +01:00
Paul Holzinger
0c473eb570 libpod: fix parallel migration issue
Once we have the alive lock and do not refresh check again if another
process migrated the state after we opened the db initially.

This is required to ensure parallel commands notice the migration and
correctly only use sqlite.

see https://github.com/containers/podman/issues/28219

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-03-09 20:55:53 +01:00
Paul Holzinger
9b810aed3a libpod: return full path in sqliteStatePath()
It makes more sense for the callers.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-03-09 17:59:15 +01:00
Ashley Cui
649c074bf5 Merge pull request #28042 from mheon/backports_580_rc1
Backports and release notes for v5.8.0-RC1
2026-02-09 20:10:48 -05:00
Matt Heon
63ea75a599 Deterministically order pod inspect fields
There are two fields I'm worried about: shared namespaces and pod
containers. Both are generated via loops over maps and are thus
non-deterministic in ordering. Throw a sort on each to fix the
order so we can actually diff `podman pod inspect` output.

Signed-off-by: Matt Heon <mheon@redhat.com>
2026-02-06 15:36:47 -05:00
Jan Rodák
86b6c75cef Fix unless-stopped restart policy to match Docker behavior
- Update documentation: Differentiate `unless-stopped` from `always` - containers stopped by the user before a reboot will not restart.
- Add `should-start-on-boot` filter: Identify containers that require a restart after a system reboot.
- Update command documentation: Add `restart-policy` and `label!` filters to the documentation for container commands (rm, ps, start, stop, pause, unpause, restart).
- Add `restart-policy` and `shoud-start-on-boot` to completions.
- Update service: Update `podman-restart.service` to use the `needs-restart=true` filter.
- Preserve state: Preserve the `StoppedByUser` state across reboots.
- Update API: Add a `ShouldStartOnBoot()` method to the Container API.
- Update documentation: Add descriptions for the `should-start-on-boot` filter.

Fixes: https://issues.redhat.com/browse/RHEL-129405
Fixes: https://github.com/containers/podman/issues/20418

Signed-off-by: Jan Rodák <hony.com@seznam.cz>

<MH: Fixed cherry-pick conflicts>

Signed-off-by: Matt Heon <matthew.heon@pm.me>
2026-02-06 15:36:47 -05:00
Aaron Ang
58a15f1500 Add ulimits to podman update API
Signed-off-by: Aaron Ang <aaron.angyd@gmail.com>

<MH: Fixed cherry-pick conflicts>

Signed-off-by: Matt Heon <matthew.heon@pm.me>
2026-02-06 15:36:47 -05:00
ryanmccann1024
484858710c feat(exec): Add --no-session flag for improved performance
Fixes: #26588

For use cases like HPC, where `podman exec` is called in rapid succession, the standard exec process can become a bottleneck due to container locking and database I/O for session tracking.

This commit introduces a new `--no-session` flag to `podman exec`. When used, this flag invokes a new, lightweight backend implementation that:

- Skips container locking, reducing lock contention
- Bypasses the creation, tracking, and removal of exec sessions in the database
- Executes the command directly and retrieves the exit code without persisting session state
- Maintains consistency with regular exec for container lookup, TTY handling, and environment setup
- Shares implementation with health check execution to avoid code duplication

The implementation addresses all performance bottlenecks while preserving compatibility with existing exec functionality including --latest flag support and proper exit code handling.

Changes include:
- Add --no-session flag to cmd/podman/containers/exec.go
- Implement lightweight execution path in libpod/container_exec.go
- Ensure consistent container validation and environment setup
- Add comprehensive exit code testing including signal handling (exit 137)
- Optimize configuration to skip unnecessary exit command setup

Signed-off-by: Ryan McCann <ryan_mccann@student.uml.edu>
Signed-off-by: ryanmccann1024 <ryan_mccann@student.uml.edu>
2026-02-06 15:36:47 -05:00
Jason Oh
10187a23af Fixes #27651 - Fix health inspect/ps for rootfs containers with empty healthcheck
Signed-off-by: Jason Oh <jasonoh@utexas.edu>
2026-02-06 15:36:47 -05:00
Alessio Attilio
dc97c9af7e libpod: fix Volume.Mount() returning empty path for plugin volumes
Fixes: #27858
Signed-off-by: Alessio Attilio <attilio.alessio@protonmail.com>

<MH: Change an import back to v5 from v6>

Signed-off-by: Matt Heon <matthew.heon@pm.me>
2026-02-06 15:36:19 -05:00
SanjayReddy91
3d02daa261 fix: prevent race condition during database initialization by using INSERT OR IGNORE.
Signed-off-by: SanjayReddy91 <gamerzdamnyt1234@gmail.com>

test: add test to check if SQLite DB config change will mitigate race condition when multiple podman process start at once.

Signed-off-by: SanjayReddy91 <gamerzdamnyt1234@gmail.com>

test: Check to ensure only one row was created in DBConfig table.

Signed-off-by: SanjayReddy91 <gamerzdamnyt1234@gmail.com>

test: Changed no of processes started at once to 20.

Signed-off-by: SanjayReddy91 <gamerzdamnyt1234@gmail.com>

test: rc reset to 0 to not affect second part of the test, db path is no longer hardcoded in test case.

Signed-off-by: SanjayReddy91 <gamerzdamnyt1234@gmail.com>

test: Reverted test case.

Signed-off-by: SanjayReddy91 <gamerzdamnyt1234@gmail.com>

lint: removed trailing whitespaces.

Signed-off-by: SanjayReddy91 <gamerzdamnyt1234@gmail.com>
2026-02-06 13:46:37 -05:00
Caleb Xu
7477ffa9c6 libpod: simplify unnecessary loops
Signed-off-by: Caleb Xu <caxu@redhat.com>
2026-02-06 13:46:36 -05:00
shiavm006
e1408e5a35 Fix container export emitting incorrect event type.
Signed-off-by: shiavm006 <shivammittal42006@gmail.com>
2026-02-06 13:46:36 -05:00
Winter M
ac22866156 libpod: fix healthchecks not executing every interval on linux
By default, systemd sets a limit of how many times a service can start,
which means that if you have a healthcheck that runs more often than the
limits, systemd will refuse to start it with a message like "Start request
repeated too quickly." emitted to the journal.

Signed-off-by: Winter M <winter@antithesis.com>
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2026-02-06 13:46:36 -05:00
Vasileios Anagnostopoulos
fcaf1300d7 fix: skip execution of probes when initialDelaySeconds is not elapsed
According to the [Kubernetes docs](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes)
the probes should be executed after the `initialDelaySeconds`. So to be
consistent with the kubernetes specs, skip the execution of the probes until
the `initialDelaySeconds` is elapsed.

Closes #27678

Signed-off-by: Vasileios Anagnostopoulos <anagnwstopoulos@hotmail.com>
2026-02-06 13:46:36 -05:00
Matt Heon
b320fbcaff Add migration code for BoltDB to SQLite
This is gated behind a new option in `podman system migrate`,
`--migrate-db`.

The basic logic is simple:
* Podman is already configured to use BoltDB
* Open a new, fresh SQLite database to write into
* Migrate all database contents as they exist in BoltDB, to
  SQLite.
** Do this as simply as possible: grab the object from the old DB
   and write it into the new DB using the standard Add and Save
   functions.
* Set the new database in the Runtime, close the old one.
* Move the old database file so it won't be reused
* Show a warning if the user explicitly configured BoltDB in
  containers.conf

Our ability to test complex migration scenarios is limited, but
this should handle simple migrations easily.

Fixes #27628

Signed-off-by: Matt Heon <matthew.heon@pm.me>
2026-02-05 20:09:37 -05:00
Matt Heon
4fdb90e02c Deterministically order pod inspect fields
There are two fields I'm worried about: shared namespaces and pod
containers. Both are generated via loops over maps and are thus
non-deterministic in ordering. Throw a sort on each to fix the
order so we can actually diff `podman pod inspect` output.

Signed-off-by: Matt Heon <mheon@redhat.com>
2026-02-05 14:15:29 -05:00
Nicola Sella
bae88e1e5e Add GET /quadlets/{name}/exists
Fixes: https://issues.redhat.com/browse/RUN-4068

Signed-off-by: Nicola Sella <nsella@redhat.com>
2026-02-05 14:56:03 +01:00
Nicola Sella
d6023e431f Add DELETE /libpod/quadlets
Fixes: https://issues.redhat.com/browse/RUN-3742

Signed-off-by: Nicola Sella <nsella@redhat.com>
2026-02-05 14:55:46 +01:00
Paul Holzinger
7ce2e00ab1 libpod: simplify resolveWorkDir()
The code checks for isPathOnVolume and isPathOnMount so we can just use
the SecureJoin here directly to check for path existance.

Then instead of walking symlinks and trying to guess if they are on a
mount just assume if it is a link (path is different from the normal
joined one) then don't error out early and let the OCI runtime deal with
it. The runtime does produce a less readable error but it still fails
and we have much less fragile code.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2025-12-04 16:09:56 +00:00
Paul Holzinger
e576e002e9 libpod: fix workdir MkdirAll() all check
MkdirAll can fail with EEXIST when the path is a symlink and the target
doesn't exist. As such we should ignore the error.

Note there is something fundemantal wrong here with the path access as
it is following the symlink to the host, however it is only for a
stat() so it is not an security issue here.

Fixes: 637c264e2e ("fix issues found by nilness")

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2025-12-04 16:09:55 +00:00
Paul Holzinger
97ad660c0c [v5.7] fix lint issues with github.com/cyphar/filepath-securejoin
The old location is deprecated and has been removed in v0.6.0 even. I
did this as extra commit to make cherry-picking easier.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
Signed-off-by: tomsweeneyredhat <tsweeney@redhat.com>
2025-11-07 10:58:16 -05:00
Matt Heon
9ea18b78fa Warn on boltdb use
We started logging this in 5.6. In 5.7, we up to a warning. The
upcoming 5.8 will up the warnings further to errors.

Required as we're removing BoltDB support in 6.0 next Spring.

Signed-off-by: Matt Heon <matthew.heon@pm.me>
2025-10-22 09:24:43 -04:00
openshift-merge-bot[bot]
1a8eb18b2b Merge pull request #27310 from mheon/default-runtime-flags
Add support for runtime flags in containers.conf
2025-10-20 10:57:46 +00:00
Lokesh Mandvekar
74788a3fe1 fileperms: newer Go 1.13+ octal literal format
Problem: While removing cgroupsv1 code, I noticed my neovim Go config
automatically changed fileperms to the new octal format and I didn't
want that polluting my diffs.

Decision: I thought it best to switch to the new octal format in a dedicated PR.

Action:
- Cursor switched to new octal format for all fileperm ocurrences in Go
 source and test files.
- vendor/, docs/ and non-Go files were ignored.
- Reviewed manually.

Ref: https://go.dev/ref/spec#Go_1.13

Signed-off-by: Lokesh Mandvekar <lsm5@redhat.com>
2025-10-16 14:11:29 -04:00
Rosvaldas Atstupėnas
0a20e22384 Add default runtime flags in config
Added a way to define default runtime flags in config.

Fixes: https://github.com/containers/common/issues/715

Default runtime flags should be defined as shown below:

[engine.runtimes_flags]
runsc = [
  "net-raw",
]

crun = [
  "debug",
]

Signed-off-by: Rosvaldas Atstupėnas <atstupenas.rosvaldas@gmail.com>
2025-10-16 13:51:46 -04:00
Brent Baude
cfd4cc0932 remove libartifact from podman
pkg/libartifact has been moved to common and as such needs to be removed
from podman and the new common vendored in along with required deps.

https://issues.redhat.com/browse/RUN-3618

Signed-off-by: Brent Baude <bbaude@redhat.com>
2025-10-16 09:55:59 -05:00
Matt Souza
090304a054 lint: reenable revive unused-parameter check
Signed-off-by: Matt Souza <medsouz99@gmail.com>
2025-10-01 10:42:08 -04:00
Mark Johnston
602ba415c6 libpod: Implement getOnlineCPUs() on FreeBSD
Include an explicit container state check.  Otherwise the
containers/stats endpoint will return all-zero stats for a stopped
container even when in non-streaming mode, which breaks some consumers
of the API, particularly nomad's podman driver.

Implement the interface by just returning the number of host CPUs.  A
bit more sophisticated would be to fetch the jail's cpuset, but it's not
very important for now.

Signed-off-by: Mark Johnston <mark.johnston@klarasystems.com>
2025-09-18 14:24:35 +00:00
Paul Holzinger
4417e6269c use maps.Clone() over Copy() when possible
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2025-09-10 16:17:05 +02:00
Paul Holzinger
637de6022f libpod/oci_conmon_linux.go: fix false postive in linter
staticcheck claims the var value is not used but we use it for the
mount.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2025-09-10 16:17:05 +02:00
Paul Holzinger
78e5a521b0 inline some conditionals
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2025-09-10 16:17:04 +02:00
Paul Holzinger
8631032556 run modernize -fix ./...
Using golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize

+ some manual cleanup in libpod/lock/shm/shm_lock_test.go as it
  generated an unused variable
+ restored one removed comment

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2025-09-10 16:17:04 +02:00
Paul Holzinger
dc5a791f58 use bytes.SplitSeq where possible
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2025-09-10 16:17:04 +02:00
Paul Holzinger
b97525a78d use strings.SplitSeq where possible
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2025-09-10 16:17:04 +02:00
openshift-merge-bot[bot]
2745c9e50e Merge pull request #26912 from markjdb/main
Fix several FreeBSD integration problems
2025-09-05 09:44:01 +00:00
Matthew Heon
2c6dadd724 Fix a locking bug in that could cause a double-unlock
The `cleanupExecBundle` function was only meant to be called on a
locked container, as it does some state mutation operations. It
also has a timed wait (if the directory is busy and can't be
removed yet, give it a few milliseconds) in which it deliberately
yields the lock to not block the container for that time.

The `healthCheckExec()` function calls `cleanupExecBundle` out of
a `defer` block. This is after the `defer c.lock.Unlock()` so it
fires afterwards when the function returns, so we're normally
fine - the container is still locked when our defer runs. The
problem is that `healthCheckExec()` also unlocks the container
during the expensive exec operation, and can actually fail and
return while not holding the lock - meaning our `defer` can fire
on an unlocked container, leading to a potential double unlock
in `cleanupExecBundle`.

We could, potentially, re-lock the container after the exec
occurs, but we're actually waiting for a `select` to trigger to
end the function, so that's not a good solution. Instead, just
re-lock (if necessary) in the defer, before invoking
`cleanupExecBundle()`. The `defer c.lock.Unlock()` will fire
right after and unlock after us.

Fixes #26968

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2025-09-03 10:19:37 -04:00
Mark Johnston
2acf5c0119 libpod: Fix the jailName helper
At one point, we created multiple jails per container in order to enable
network configuration from outside the container jail.  On FreeBSD 14.x
and later this is not necessary and there is only one jail per
container.  In this case, return the correct jail name.

Signed-off-by: Mark Johnston <mark.johnston@klarasystems.com>
2025-09-02 16:17:18 +00:00
Mark Johnston
a250fee0ec libpod: Fix "top" support on FreeBSD
FreeBSD's ps ignores -J if -a is specified, so "podman top" would
effectively just run ps -a, not terribly useful.  But there's no need to
specify -a when specifying a selector such as -J (or -G or -U, etc.).

Signed-off-by: Mark Johnston <mark.johnston@klarasystems.com>
2025-09-02 16:17:18 +00:00
openshift-merge-bot[bot]
9d7a24e654 Merge pull request #26945 from Luap99/vol-opts
do not pass volume options as bind mounts options to runtime
2025-09-02 14:18:15 +00:00