在 Ubuntu 22.04 上源码安装 Podman 4

本文讲述了作者如何在Ubuntu22.04上遇到Podman版本不足的问题,从而通过源码编译的方式升级到4.9.3,以满足GitLabRunner对Podman版本的要求,涉及conmon、runc和CNI插件的编译安装过程。
摘要由CSDN通过智能技术生成

最近在研究用 Podman 当作极狐GitLab 的 Runner,来跑 CI/CD,根据 Podman 官网安装指南,在 Ubuntu 上安装使用如下命令即可:

# Ubuntu 20.10 and newer
sudo apt-get update
sudo apt-get -y install podman

安装完毕,查看了一下版本

podman version
Version:      3.4.4
API Version:  3.4.4
Go Version:   go1.18.1
Built:        Thu Jan  1 08:00:00 1970
OS/Arch:      linux/amd64

版本是 3.4.4。但是在创建 Runner 的过程中,发现极狐GitLab 官方要求,在使用 Podman 的时候,版本必须高于 4.2。然后想用 apt 的方式来升级一下,未果。然后看到了 Podman GitHub 上的一个 Discussion——How to install podman 4.4 on Ubuntu 22.04。大概意思就是在 Ubuntu 22.04 上默认安装的就是 3.4.x 版本,要想安装就只能源码编译安装了。无奈,开启了源码编译安装的旅程。

编译前的准备

首先搞了一台 Ubuntu 22.04 版本的服务器,安装上了 go, 并且确保 go 安装成功:

go version
go version go1.22.1 linux/amd64

接着安装依赖,这个可以直接查看源码编译的官方指南

apt-get install \  
btrfs-progs \  
crun \  
git \  
golang-go \  
go-md2man \  
iptables \  
libassuan-dev \  
libbtrfs-dev \  
libc6-dev \  
libdevmapper-dev \  
libglib2.0-dev \  
libgpgme-dev \  
libgpg-error-dev \  
libprotobuf-dev \  
libprotobuf-c-dev \  
libseccomp-dev \  
libselinux1-dev \  
libsystemd-dev \  
netavark \  
pkg-config \  
uidmap

这时候可能会出现下面的错误:

E: Unable to locate package netavark

这个原因是因为老旧版本的 Ubuntu/Debian 不支持 netavark 这个包,用 containernetworking-plugins 这个包来代替。重新执行上面的命令即可完成所需依赖的安装。

最后要确保用户命名空间参数 kernel.unprivileged_userns_clone 的值为 1。

sysctl kernel.unprivileged_userns_clone=1

开始编译

Podman 的运行依赖几个组件 conmoncrun/runc

conmon 是一个 OCI 容器运行时监控。主要是在容器管理器(诸如 Podman 和 CRI-O)和 OCI 运行时(诸如 runc 或 crun)之间做一个监控及通信。

conmon 的编译安装

使用如下命令即可完成 conmon 的编译安装:

git clone https://github.com/containers/conmon
cd conmon
export GOCACHE="$(mktemp -d)"
make
make podman
runc 的编译安装

runc 或者 crun 就是运行时了,选择哪个都可以,使用如下命令完成 runc 的编译安装:

git clone https://github.com/opencontainers/runc.git $GOPATH/src/github.com/opencontainers/runc  
cd $GOPATH/src/github.com/opencontainers/runc  
make BUILDTAGS="selinux seccomp"  
cp runc /usr/bin/runc
CNI 插件的安装

Podman 源码编译安装需要安装 CNI 插件。使用如下命令完成安装:

mkdir -p /etc/containers
curl -L -o /etc/containers/registries.conf https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
curl -L -o /etc/containers/policy.json https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json

对于 Ubuntu/Debian 还要安装下面这个依赖:

apt-get install -y \
  libapparmor-dev
Podman 的编译安装

下面进入最后的重要环节,进行 Podman 的编译安装。使用如下命令即可:

git clone https://github.com/containers/podman/
cd podman
make BUILDTAGS="selinux seccomp" PREFIX=/usr
make install PREFIX=/usr

安装完毕,即可查看 Podman 的版本了:

podman version
Client:       Podman Engine
Version:      4.9.3
API Version:  4.9.3
Go Version:   go1.22.1
Built:        Tue Mar 12 23:06:45 2024
OS/Arch:      linux/amd64

可以看到安装了最新的正式版本 4.9.3

下面就可以愉快的玩耍了。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值