• 在 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

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

  • 相关阅读:
    Day11.2:标签的使用
    JavaWeb搭建学生管理系统(手把手)
    linux网络协议栈源码分析 - 网络层IP网际协议
    5.最长回文子串(马拉车怨种版)
    LeetCode排序链表C++解法(详解)
    ionic android app打包和发布
    Peptide C105Y, H2N-CSIPPEVKFNKPFVYLI-OH
    人工智能现在可以从文本中生成具有CD音质的音乐,而且只会越来越好
    lenovo联想笔记本ThinkPad系列T15p或P15v Gen3(21DA,21DB,21D8,21D9)原厂Win11系统镜像
    通过5个概念 一文弄明白DAO
  • 原文地址:https://blog.csdn.net/DevOps008/article/details/136724218