更新时间:2023-01-27 10:10:34浏览次数:493+次
本文介绍如何在CentOS 7/RHEL 7系统上安装Podman 4.x的方法。
前言
如果您在CentOS 7/RHEL 7上从OS默认存储库安装Podman,则会安装较旧版本的软件。以下是CentOS 7虚拟机的输出:
$ podman version
Version: 1.6.4
RemoteAPI Version: 1
Go Version: go1.12.12
OS/Arch: linux/amd64
在本文中,我们将介绍在CentOS 7/RHEL 7上安装Podman 4.x。在CentOS 7/RHEL 7系统上获取Podman 4.x的途径是从源代码构建应用程序。
在继续之前,请卸载系统中任何旧版本的Podman:
sudo yum -y remove podman
具体操作步骤
步骤1、安装Podman 4.x构建工具
因为我们是从源代码构建软件,所以必须安装所需的所有工具。确保EPEL存储库已安装并在系统中启用:
sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
更新系统上的所有软件包并重新启动:
sudo yum -y update
sudo reboot
在CentOS 7/RHEL 7上安装开发工具:
sudo yum -y install "@Development Tools"
通过运行以下命令安装其他依赖项:
sudo yum install -y curl \
gcc \
make \
device-mapper-devel \
git \
btrfs-progs-devel \
conmon \
containernetworking-plugins \
containers-common \
git \
glib2-devel \
glibc-devel \
glibc-static \
golang-github-cpuguy83-md2man \
gpgme-devel \
iptables \
libassuan-devel \
libgpg-error-devel \
libseccomp-devel \
libselinux-devel \
pkgconfig \
systemd-devel \
autoconf \
python3 \
python3-devel \
python3-pip \
yajl-devel \
libcap-devel
等待这些依赖项的安装完成,然后继续执行步骤2。
步骤2、在CentOS 7/RHEL 7上安装Golang的说明
使用以下共享的链接在CentOS 7/RHEL 7上安装Go:
在CentOS 7/RHEL 7系统上安装Go(Golang)的方法:https://www.hmxthome.com/linux/5012.html
成功安装后检查Go版本:
$ go version
go version go1.19 linux/amd64
步骤3、安装runc和conmon
Conmon用于监视OCI运行时间,并且该包预期安装在系统上。可以使用下面共享的命令完成安装:
cd ~
git clone https://github.com/containers/conmon
cd conmon
export GOCACHE="$(mktemp -d)"
make
sudo make podman
cd ..
安装后检查版本:
$ conmon --version
conmon version 2.0.8
commit: f85c8b1ce77b73bcd48b2d802396321217008762
对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"
sudo cp runc /usr/bin/runc
cd ~/
使用–version命令选项检查版本:
$ runc --version
runc version 1.1.0+dev
commit: v1.1.0-276-gbc13e33
spec: 1.0.2-dev
go: go1.19
libseccomp: 2.3.1
步骤4、为Podman设置CNI网络
创建用于存储CNI网络配置文件的/etc/containers目录:
sudo mkdir -p /etc/containers
下载配置示例并放置创建的目录:
sudo curl -L -o /etc/containers/registries.conf https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
sudo curl -L -o /etc/containers/policy.json https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json
步骤5、在CentOS 7/RHEL 7上安装Podman 4.x
安装wget命令行实用程序包:
sudo yum -y install wget
从Github存储库下载最新或所要安装的目标版本Podman源代码,地址在https://github.com/containers/podman/releases,比如截止至发稿时候,可安装v4.3.1或是v4.4.0-RC3版本,本文以安装目标版本4.1.1为例:
TAG=4.1.1
rm -rf podman*
wget https://github.com/containers/podman/archive/refs/tags/v${TAG}.tar.gz
使用tar命令提取下载的文件:
tar xvf v${TAG}.tar.gz
导航到podman目录并开始构建过程:
cd podman*/
make BUILDTAGS="selinux seccomp"
sudo make install PREFIX=/usr
如果在生成过程中遇到以下错误:
gcc errors for preamble:
In file included from vendor/github.com/proglottis/gpgme/data.go:6:0:
./go_gpgme.h:15:1: error: unknown type name 'gpgme_off_t'
extern gpgme_off_t gogpgme_data_seek(gpgme_data_t dh, gpgme_off_t offset, int whence);
./go_gpgme.h:15:55: error: unknown type name 'gpgme_off_t'
extern gpgme_off_t gogpgme_data_seek(gpgme_data_t dh, gpgme_off_t offset, int whence);
make: *** [bin/podman] Error 2
该问题在Podman 4 bug问题页面中捕获,地址在https://github.com/containers/podman/issues/13281。建议快速修复是更新pgpme包:
sudo yum remove gpgme-devel -y
sudo yum -y install https://cbs.centos.org/kojifiles/packages/gpgme/1.7.1/0.el7.centos.1/x86_64/gpgme-1.7.1-0.el7.centos.1.x86_64.rpm
sudo yum -y install https://cbs.centos.org/kojifiles/packages/gpgme/1.7.1/0.el7.centos.1/x86_64/gpgme-devel-1.7.1-0.el7.centos.1.x86_64.rpm
更新后重试生成:
make BUILDTAGS="selinux seccomp"
sudo make install PREFIX=/usr
可用生成标记、功能和依赖项列表如下截图:
向override_kernel_check配置行添加注释:
sudo sed -ie 's/override_kernel_check/#override_kernel_check/g' /etc/containers/storage.conf
您可以在构建后检查CentOS 7/RHEL 7上安装的Podman 4版本:
$ podman version
Client: Podman Engine
Version: 4.1.1
API Version: 4.1.1
Go Version: go1.19
OS/Arch: linux/amd64
让我们使用podman pull命令测试image下载:
$ podman pull docker.io/library/alpine:latest
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob 2408cc74d12b done
Copying config e66264b987 done
Writing manifest to image destination
Storing signatures
e66264b98777e12192600bf9b4d663655c98a090072e1bab49e233d7531d1294
您也可以运行Docker Hello World容器来确认这一点:
$ podman run docker.io/library/hello-world
至此,在CentOS 7/RHEL 7系统上安装Podman 4版本成功。