在 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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何布局马斯克推特上喊的meme币赛道

2024年的牛市正如火如荼的开展,截止当下,比特币已经站上了7.3万美元,远超2021年高点的6.9万美元,比特币的未来是一片大海。 除了比特币的一枝独秀之外,meme板块可以说是市场资金最青睐的。尤其是马斯克在X分享PEPE相关…

【b站咸虾米】2 Vue基础(下) 2021最新Vue从基础到实例高级_vue2_vuecli脚手架博客案例

课程地址:【2021最新Vue从基础到实例高级_vue2_vuecli脚手架博客案例】 https://www.bilibili.com/video/BV1pz4y1S7bC/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2 Vue基础 下 2.8 计算属性 2.8.1 计算属性使用 2.8.2 计算…

【Flutter学习笔记】9.6 动画切换组件(AnimatedSwitcher)

参考资料:《Flutter实战第二版》9.6 动画切换组件(AnimatedSwitcher) 9.6.1 AnimatedSwitcher AnimatedSwitcher 可以同时对其新、旧子元素添加显示、隐藏动画,在需要切换新旧元素的场景广泛使用。也就是说在AnimatedSwitcher的子…

2.MongoDB与关系数据库对比

MongoDB的简单操作与比较 与关系数据库对比 MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库。它们各有各的优点,来看看他们之…

数字排列 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 小明负责公司年会,想出一个趣味游戏: 屏幕给出 1−9 中任意 4 个不重复的数字,大家以最快时间给出这几个数字可拼成的数字从小到大排列位于第 n 位置…

基于Logstash由SQLServer向Elasticsearch同步数据: logstash配置文件

文章目录 I Logstash1.1 Logstash 安装1.2 logstash配置文件参数含义1.3 启动Logstash1.4 Sample Logstash configuration for creating a simpleII 增量数据同步方案2.1 思路2.2 使用LastModifyTime来追踪DB的变更数据2.3 将最大ID 设置为查询条件,获取增量数据2.4 把时间戳设…

Turbo C++ v3.7.8.9的下载和安装(C语言编辑器完整安装步骤详细图文教程)·跟老吕学C语言(C语言必学教程之一)

[TOC](Turbo C v3.7.8.9的下载和安装(C语言编辑器完整安装步骤详细图文教程)) 跟老吕学C语言(C语言必学教程之一) 老吕是通过 Turbo C 编译器开始了 C 编程培训和开发。 本文中,老吕将带你了解如何下载 Turbo C,如何在任何最新 W…

perl 用 XML::LibXML 解析 Freeplane.mm文件,

Perl 官网 www.cpan.org 从 https://strawberryperl.com/ 下载网速太慢了 建议从 https://download.csdn.net/download/qq_36286161/87892419 下载 strawberry-perl-5.32.1.1-64bit.zip 约105MB 解压后安装.msi,装完后有520MB,建议安装在D:盘 在云计算…

二.递归及实例(汉诺塔问题)

目录 5.递归 6-递归实例:汉诺塔问题 思路: 详细过程: 代码: 5.递归 调用自身 结束条件 6-递归实例:汉诺塔问题 思路: 结果: 详细过程: 代码: #n为盘子的个数 a,b,c分别为3个地方. def hannuta(n,a,b,c): ​if n>0:hannuta(n-1,a,c,b) #将n-1个从a经过c移到到b(a…

什么是Java中的多线程?为什么需要使用多线程?请解释Java中的线程同步和线程通信。

什么是Java中的多线程?为什么需要使用多线程? Java中的多线程是指在Java程序中同时执行多个线程。线程是程序执行流的最小单元,是处理器分配资源的基本单位。Java虚拟机允许应用程序并发地运行多个执行线程,每个线程都并行执行不…

23.1 微服务理论基础

23.1 微服务基础 1. 微服务介绍2. 微服务特点3. 微服务优缺点4. 微服务两大门派5. 微服务拆分6. 微服务扩展6.1 服务扩展6.2 按需扩展7. 微服务重要模块******************************************************************************************************************

Qt之格栅布局(QGridLayout)控件填满整个单元格

Qt专栏:http://t.csdnimg.cn/GQN1M 目录 1.现象1 2.解决方案 3.现象2 4.解决方案 5.总结 1.现象1 今天在用QGridLayout布局的时候,添加到布局的QWidget有文本框、标签、组合框和按钮等等,布局两列,通过下面的方式添加进去的&…

气压计LPS25HB开发(1)----轮询获取气压计数据

气压计LPS25HB开发----1.轮询获取气压计数据 概述视频教学样品申请源码下载产品特性通信模式速率生成STM32CUBEMX串口配置IIC配置SA0地址设置串口重定向参考程序SA0设置模块地址获取ID复位操作BDU设置设置速率轮询读取数据演示 概述 本文将介绍如何使用 LPS25HB 传感器来读取数…

Oracle中的commit与rollback

SQL语言分为五大类: DDL(数据定义语言:DataDefinitionLanguage) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。 DQL(数据查询语言:DataQueryLanguage) - Select 查询语句不存在是否提交问题。 DML(数据操纵语言:DataManipulationLangua…

力扣每日练习3.14

103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 解题思路:模仿层序遍历的…

蓝桥杯刷题(七)

[蓝桥杯 2023 省 A] 平方差 题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示【样例说明】【评测用例规模与约定】 代码题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 代码题目描述输入格式输出格式样例 #1样例输入 …

Ansible自动化运维Inventory与Ad-Hoc

前言 自动化运维是指利用自动化工具和技术来简化、自动化和优化IT基础设施的管理和运维过程,从而提高效率、降低成本,并减少人为错误。在当今复杂的IT环境中,自动化运维已经成为许多组织和企业提高生产力和保证系统稳定性的重要手段。Ansibl…

[数据集][目标检测]零售柜零食检测数据集VOC+YOLO格式5422张113类

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5422 标注数量(xml文件个数):5422 标注数量(txt文件个数):5422 标注…

Docker简介与安装

简介 用来快速构建、运行、管理应用的工具简单说,帮助我们部署项目以及项目所依赖的各种组件典型的运维工具 安装 1.卸载旧版 首先如果系统中已经存在旧的Docker,则先卸载: yum remove docker \docker-client \docker-client-latest \dock…

c++面试整理(二)

一、new和malloc的区别 1.属性: new属于c运算符,编译器支持就可以,makkoc是c的标准库函数,需要引用头文件才可以调用。 2.参数和返回值 malloc分配内存时需要指定内存大小,返回值是void*的指针,需要强制转换 new根…