Linux 用户和打包者需要了解 Fedora 上的 Podman 4.0 的哪些信息
新的 Podman 功能为容器提供了更好的支持并提高了性能。
新发布的 Podman 4.0 基于 Netavark 和 Aardvark 完全重写了网络堆栈,它将与现有的容器网络接口 (CNI) 堆栈一起运行。
Netavark 是一个基于 Rust 的工具,用于为 Linux 容器配置网络,可替代 CNI 插件(Fedora 上的 containernetworking-plugins
)。 Aardvark-dns 现在是容器记录的权威 DNS 服务器。随着新堆栈的出现,发行版包装也发生了变化,Fedora 35 的存储库可用性也发生了变化。
对于 Fedora 用户
Podman v4 作为 Fedora 36 和 Rawhide 上的官方 Fedora 软件包提供。 Netavark 和 Aardvark-dns 都可以作为 Fedora 35 及更高版本上的官方 Fedora 软件包提供,并构成新安装的 Podman 4.0 的默认网络堆栈。
在 Fedora 36 及更高版本上,全新安装的 Podman v4 将自动安装 Aardvark-dns 和 Netavark。
安装 Podman v4:
$ sudo dnf install podman
要将 Podman 从旧版本更新到 v4:
$ sudo dnf update podman
由于 Podman v4 相对于 Podman v3 进行了一些重大更改,因此 Fedora 35 用户无法使用默认存储库安装 Podman v4。但是,如果您渴望尝试一下,可以使用 Copr 存储库:
$ sudo dnf copr enable rhcontainerbot/podman4
# install or update per your needs
$ sudo dnf install podman
安装后,如果您想迁移所有容器以使用 Netavark,则必须在 容器的
,通常位于 [network]
部分下设置 network_backend="netavark"
.conf/usr/share/containers/containers.conf
。
测试最新开发版本
如果您想测试最新的未发布的上游代码,请尝试 podman-next
Copr:
$ sudo dnf copr enable rhcontainerbot/podman-next
$ sudo dnf install podman
注意:podman-next
Copr 提供 Podman、Netavark 和 Aardvark-dns 的最新未发布源作为 RPM 包管理器 (RPM)。这些将覆盖官方软件包提供的版本。
对于 Fedora 打包者
Podman 的 Fedora 软件包源可在 Fedora 的存储库中找到,以进行软件包维护。主 Podman 包不再显式依赖 containernetworking-plugins
。网络堆栈依赖项现在在 containers-common
包中处理,这允许对 Podman 和 Buildah 进行单点依赖项维护。
- containers-common
Requires: container-network-stack
Recommends: netavark
- netavark
Provides: container-network-stack = 2
- containernetworking-plugins
Provides: container-network-stack = 1
此配置可确保:
- 新安装的 Podman 将始终默认安装 Netavark。
containernetworking-plugins
包不会与Netavark冲突,用户可以一起安装。
列出捆绑的依赖项
如果您需要列出打包源中的捆绑依赖项,您可以处理上游源中的 go.mod
文件。例如Fedora的打包源码使用:
$ awk '{print "Provides: bundled(golang("$1")) = "$2}' go.mod | \
sort | uniq | sed -e 's/-/_/g' -e '/bundled(golang())/d' -e '/bundled(golang(go\
|module\|replace\|require))/d'
Netavark 和 Aardvark-dns
Netavark 和 Aardvark-dns 的 .tar 供应源将作为上游版本工件附加。然后您可以创建一个 Cargo 配置文件以将其指向供应商目录:
tar xvf %{SOURCE}
mkdir -p .cargo
cat >.cargo/config << EOF
[source.crates-io]
replace-with = "vendored-sources"
[source.vendored-sources]
directory = "vendor"
EOF
Netavark 和 Aardvark-dns 的 Fedora 打包源也可以在 Fedora 项目的存储库中找到。
Netavark 和 Aardvark-dns 所依赖的 Rust 包的 Fedora 打包版本在初始包创建时经常已过时(例如 rtnetlink、sha2、zbus 和 zvariant)。因此,Netavark 和 Aardvark-dns 是使用上游供应商的依赖项构建的,可以在 vendor
子目录中找到。
netavark 二进制文件安装到 /usr/libexec/podman/netavark
,而 aardvark-dns 二进制文件安装到 /usr/libexec/podman/aardvark-dns
。
netavark
软件包在 aardvark-dns
软件包上有一个Recommends
。默认情况下,aardvark-dns
软件包将随 Netavark 一起安装,但如果没有它,Netavark 也能正常工作。
列出捆绑的依赖项
如果您需要列出打包源中的捆绑依赖项,可以在上游源中运行 cargo tree
命令。例如Fedora的打包源码使用:
$ cargo tree --prefix none | \
awk '{print "Provides: bundled(crate("$1")) = "$2}' | \
sort | uniq
了解更多
我希望这些更新对您有所帮助。如果您有任何疑问,请随时在 GitHub 上展开讨论,或通过 Slack、IRC、Matrx 或 Discord 联系我或其他 Podman 维护者。更好的是,我们希望您作为贡献者加入我们的社区!