This document is intended for Podman packagers: those very few individuals responsible for building and shipping Podman on Linux distributions.
Document verified accurate as of Podman 5.2, 2024-10-16.
This document assumes you are able to build executables up to and
including make install
.
See Building from Source
on podman.io for possibly-outdated instructions.
Everything installed by make install
, obviously.
Upstream splits Podman into multiple subpackages and we encourage you
to consider doing likewise: some users may not want podman-remote
or -machine
or the test suite.
The best starting point is the RPM spec file. This illustrates the subpackage breakdown as well as top-level dependencies.
Podman requires a runtime, a runtime monitor, a pause process, and networking tools. In Fedora, some of these requirements are indirectly specified via containers-common; the nested tree looks like this:
Podman
├── Requires: catatonit
├── Requires: conmon
└── Requires: containers-common-extra
├── Requires: crun
├── Requires: netavark
└── Requires: passt
The only runtime supported upstream is crun, but different distros may wish to offer other options to their users. Your package must, directly or indirectly, list a runtime prerequisite.
Heads up: you may end up being responsible for packaging this runtime, or at the very least working closely with the package maintainer. The best starting point for crun is its RPM spec file.
The pause process serves as a container init
, reaping PIDs and handling signals.
As of this writing, Podman uses an external tool, catatonit. This may be subject to change in future Podman versions.
If you need to package catatonit, a good starting point might be its Fedora specfile.
The only working monitor is conmon. There is a Rust implementation in the works, conmon-rs, but efforts to make it work with Podman have stalled for years.
Heads up: you may end up being responsible for packaging conmon. The best starting point is its RPM spec file.
Networking differs between root and rootless: passt (also referred to as "pasta") is only needed for rootless. netavark and aardvark-dns are needed for both root and rootless podman.
Heads up: you will probably end up being responsible for packaging at least some of these. The best starting points are their respective RPM spec files: netavark, aardvark-dns.
Netavark and aardvark-dns must be packaged in lockstep down
to the major-minor level: version X.Y
of either is only
guaranteed to work with X.Y
of the other. If you are responsible
for packaging these, make sure you set up interpackage dependencies
appropriately to prevent version mismatches between them.
This package provides config files, man pages, and (at the
packaging level) dependencies. There are good reasons for
keeping this as a separate package, the most important one
being that buildah
and skopeo
rely on this same content.
Also important is the ability for individual distros to
fine-tune config settings and dependencies.
You will probably be responsible for packaging this. The best starting point is its RPM spec file.