• 在 Ubuntu 22.04 上源码安装 Podman 4


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

    # Ubuntu 20.10 and newer
    sudo apt-get update
    sudo apt-get -y install podman
    
    • 1
    • 2
    • 3

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    版本是 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
    
    • 1
    • 2

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

    E: Unable to locate package netavark
    
    • 1

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

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

    sysctl kernel.unprivileged_userns_clone=1
    
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    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
    
    • 1
    • 2
    • 3
    • 4
    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
    
    • 1
    • 2
    • 3

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

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

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

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

    安装完毕,即可查看 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

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

  • 相关阅读:
    C规范编辑笔记(四)
    数据治理-基本概念
    基于Web的美食分享平台的设计与实现——HTML+CSS+JavaScript水果介绍网页设计(橙子之家)
    信息与编码(补码的作用)
    java计算机毕业设计-食材采购平台-源程序+mysql+系统+lw文档+远程调试
    Vue框架(二)------quasar简介及初始化
    Windowns编译OpenSSL
    安装Java (JDK16)
    Hive UDF、UDAF和UDTF函数详解
    Pytorch数据集读出到transform全过程
  • 原文地址:https://blog.csdn.net/DevOps008/article/details/136724218