podman 源码 5.3.1编译
1. 构建环境
在麒麟V10服务器操作系统上构建:Kylin-Server-V10-GFB-Release-2204-Build03-ARM64.iso。
由于只是编译 podman 源码,没必要特地在物理机或服务上安装一个这样的操作系统,故采用在虚拟机里验证。
2. 安装依赖
参考资料: (https://podman.io/docs/installation#building-missing-dependencies) podman安装
2.1 安装基础包
yum install python3-pip pkg-config ninja-build cmake
pip3 install meson -i https://pypi.tuna.tsinghua.edu.cn/simple
2.2. 安装高版本的 go
系统自带的 go 版本不满足编译要求,需要安装高版本的go
wget https://go.dev/dl/go1.23.3.linux-arm64.tar.gz
tar -zxvf go1.23.3.linux-arm64.tar.gz -C /opt/
echo "export PATH=$PATH:/opt/go/bin" >> ~/.bashrc
source ~/.bashrc
卸载系统自带的低版本的go, yum remove go -y,这会卸载git,所以再安装一次git安装git , yum install -y git
2.3. 安装conmon
git clone https://github.com/containers/conmon
cd conmon
export GOCACHE="$(mktemp -d)"
make
sudo make podman
2.4. 安装runc
git clone https://github.com/opencontainers/runc.git
cd runc
make BUILDTAGS="selinux seccomp" #报错,解决方法在错误1
sudo cp runc /usr/bin/runc
2.5. 安装slirp4netns
wget https://github.com/rootless-containers/slirp4netns/archive/refs/tags/v1.3.1.zipunzip v1.3.1.zipcd slirp4netns-1.3.1./autogen.sh./configure # 报错,解决方法在错误2make make install
2.6. 安装netavark
netavark 依赖 rust, protoc, go
wget https://github.com/containers/netavark/archive/refs/tags/v1.13.0.zip
unzip v1.13.0.zip
cd netavark-1.13.0
make # 报错,解决方法在错误3
make install
3. 编译安装podman
从git下载源代码:
wget https://github.com/containers/podman/archive/refs/tags/v5.3.1.zip
unzip v5.3.1.zip
cd podman-5.3.1
make BUILDTAGS="selinux seccomp" PREFIX=/usr
make install PREFIX=/usr
4. 添加配置
sudo mkdir -p /etc/containers
sudo curl -L -o /etc/containers/registries.conf https://raw.githubusercontent.com/containers/image/main/registries.conf
sudo curl -L -o /etc/containers/policy.json https://raw.githubusercontent.com/containers/image/main/default-policy.json
参考 https://podman.io/docs/installation#building-missing-dependencies 中 Configuration files章节:
4.1 修改配置 registries.conf
添加:
unqualified-search-registries = ["docker.io"]
[[registry]]
location="localhost:5000" # 自己私有镜像仓库地址或国内镜像仓库地址
insecure=true
4.2 修改policy.json
添加:
{"default": [{"type": "insecureAcceptAnything"}],"transports":{"docker-daemon":{"": [{"type":"insecureAcceptAnything"}]}}
}
4.3 修改网络配置
参考 设置网络模式
为了在启动容器时保证使用的是slirp4netns网络模式,添加配置文件:
mkdir -p /etc/containers/containers.conf
添加:
[network]
default_rootless_network_cmd = "slirp4netns"
5. 验证
podman 基本命令执行正常
podman version
Client: Podman Engine
Version: 5.3.1
API Version: 5.3.1
Go Version: go1.23.3
Built: Sun Nov 24 20:13:35 2024
OS/Arch: linux/arm64
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@localhost ~]# podman info
.....
设置环境变量消除警告:
echo "export PODMAN_IGNORE_CGROUPSV1_WARNING=1" >> ~/.bashrc
source ~/.bashrc
新建一个Dockerfile文件:
FROM centos:7RUN <<EOF
#!/bin/bash -exyum makecache
yum install -y wget curl tar tree vim git python3-pip ninja-build gcc gcc-c++
yum clean all
EOFWORKDIR /root
CMD ["/bin/bash"]
执行 podman build -t test .
新建一个镜像报错
STEP 4/6: RUN <<EOF (#!/bin/bash -ex...)
error running container: from /usr/bin/runc creating container for [/bin/sh -c /bin/bash -ex /dev/pipes/buildahheredoc3982280730]: time="2024-11-26T14:59:37+08:00" level=error msg="runc create failed: invalid mount &{Source:/var/tmp/buildah2198621294/mnt/buildah-bind-target-10 Destination:/dev/pipes/buildahheredoc3982280730 Device:bind Flags:20480 ClearedFlags:1 PropagationFlags:[278528] Data:z,Z Relabel: RecAttr:<nil> Extensions:0 IDMapping:<nil>}: bind mounts cannot have any filesystem-specific options applied"
: exit status 1ERRO[0015] did not get container create message from subprocess: EOF
Error: building at STEP "RUN <<EOF": while running runtime: exit status 1
从报错看是容器运行时 runc 执行出了问题,查看 https://podman.io/docs/installation#building-missing-dependencies 的 Install runtime dependencies
, 让安装的 容器运行时是 crun,但后面的步骤又是安装 runc,podman info 看到的 ociRuntime 是 runc, 这里不纠结了,直接从 git 下载crun 源码编译安装:
git clone https://github.com/containers/crun.git
cd crun
./autogen.sh
./configure --prefix=/usr/ # 这里报错,需要安装yajl-devel, systemd-devel
make -j4 && make install
再次执行 podman build -t test .
成功, 这里没去深究了,猜测是 runc不支持 EOF语法
新建镜像和容器:
[root@localhost crun]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/test latest ef1c61187ffc 7 minutes ago 1.1 GB
[root@localhost crun]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost crun]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83c018b47440 localhost/test:latest /bin/bash 22 seconds ago Exited (127) 10 seconds ago test
至此完成 !!!
6. buildah 工具
参考 buildah工具
Buildah 是一个用于构建 OCI 和 Docker 容器镜像的工具,旨在提供一种灵活且高效的方式来创建和管理容器镜像, 不依赖于守护进程。
Buildah run 相当执行containerfile文件中的 RUN,是更底层的。
从git 源码下载:
git clone https://github.com/containers/buildah.git
cd buildah
make && make install
错误
错误1:
编译runc报错:
找不到libseccomp.pc
安装 libseccomp-devel, yum install -y libseccomp-devel
错误2:
编译slirp4netns报错: 缺少slirp
依赖slirp,但是官方源上没有,自己从git下载编译
git clone -b v4.8.0 https://gitlab.freedesktop.org/slirp/libslirp.git
meson setup build -Dprefix=/usr/
meson compile -C build
meson install -C build
缺少:libcap
安装libcap-devel, yum install -y libcap-devel
错误3:
编译netavark报错,报当前系统自带的 cargo 1.29.0 版本不支持edition特性,版本太低导致
由于cargo 是同 rust一起安装的,rustc --version 是1.29.0
安装 rust有两种方式:
1. 在线安装:
使用中科大源:
echo "export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static" >> ~/.bashrc
echo "export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup" >> ~/.bashrc
source .bashrc
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
查看cargo 版本和安装位置
which cargo
/root/.cargo/bin/cargocargo --version
cargo 1.82.0 (8f40fc59f 2024-08-21)
2. 从git 上拉取rust源代码,自己编译高版本的rust
参考 rust源码编译安装
git clone https://github.com/rust-lang/rust.git
cd rust
git checkout 1.82.0
python x.py build #这里经常会失败,可以手动先下载包
python x.py install可以在科学上网的情况下先手动下载包:
wget https://static.rust-lang.org/dist/2024-09-05/rust-std-1.81.0-aarch64-unknown-linux-gnu.tar.xz
wget https://static.rust-lang.org/dist/2024-09-05/rustc-1.81.0-aarch64-unknown-linux-gnu.tar.xz
wget https://static.rust-lang.org/dist/2024-09-05/rust-std-1.81.0-aarch64-unknown-linux-gnu.tar.xz
放到: rust-1.82.0/build/cache/2024-09-05/下
如果是下载的v1.82.0.zip解压编译,不是zip包解压的可以忽略,编译会报错,另外zip包缺少.git文件夹,导致 无法下载子模块,我的解决办法是把git上这个项目的.git目录复制到解压目录下:
thread 'main' panicked at src/core/config/config.rs:2803:10:
called `Result::unwrap()` on an `Err` value: "command did not execute successfully: cd \"/root/xqs/rust-1.82.0\" && env -u GIT_ALTERNATE_OBJECT_DIRECTORIES -u GIT_DIR -u GIT_INDEX_FILE -u GIT_OBJECT_DIRECTORY -u GIT_WORK_TREE \"git\" \"rev-list\" \"--author=bors@rust-lang.org\" \"-n1\" \"--first-parent\" \"HEAD\"\nexpected success, got: exit status: 128\n"
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Build completed unsuccessfully in 0:09:25
更换国内源, 新建/root/.cargo.config
,添加如下内容
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"
再次python x.py build
git clone 的直接看这后面
报错:
CMake Error at CMakeLists.txt:3 (cmake_minimum_required):CMake 3.20.0 or higher is required. You are running version 3.12.1
需要安装更高版本的CMake
从git 上下载源码编译安装:
先安装依赖 openssl-devel, yum install -y openssl-devel
wget https://github.com/Kitware/CMake/archive/refs/tags/v3.31.1.zip
unzip v3.31.1.zip
cd CMake-3.31.1
./configure --prefix=/usr/
make && make install
继续报错,gcc 版本太低,需要自己编译安装高版本的gcc, 网上资料很多,这里不在说明。
CMake Error at cmake/modules/CheckCompilerVersion.cmake:37 (message):Host GCC version must be at least 7.4, your version is 7.3.0.
Call Stack (most recent call first):cmake/modules/CheckCompilerVersion.cmake:47 (check_compiler_version)cmake/config-ix.cmake:16 (include)CMakeLists.txt:949 (include)
protoc 编译安装
系统自带的protoc 版本为 3.9.0,如果系统不自带也需要自己安装, 针对比 2204 更高的版本
protoc --version
libprotoc 3.9.0
可以下载高版本的protoc 安装
wget https://github.com/protocolbuffers/protobuf/releases/download/v28.3/protoc-28.3-linux-aarch_64.zip
unzip protoc-28.3-linux-aarch_64.zip
cp -af ./bin/protoc /usr/bin/
相关文章:
podman 源码 5.3.1编译
1. 构建环境 在麒麟V10服务器操作系统上构建:Kylin-Server-V10-GFB-Release-2204-Build03-ARM64.iso。由于只是编译 podman 源码,没必要特地在物理机或服务上安装一个这样的操作系统,故采用在虚拟机里验证。 2. 安装依赖 参考资料…...
矩阵重新排列——rot90函数
通过 r o t 90 rot90 rot90函数可以将矩阵进行旋转 用法: r o t 90 ( a , k ) rot90(a,k) rot90(a,k)将矩阵 a a a按逆时针方向旋转 k 9 0 ∘ k\times90^\circ k90∘...
Leetcode 51 N Queens Leetcode N Queens II
题意 给定一个数字 n n n,形成n*n的棋盘,棋盘上放n个皇后,确保皇后之间不会相互吃(皇后可以直线吃,斜线吃) 链接 https://leetcode.com/problems/n-queens/description/ 思考 这道题只能暴力枚举所有的…...
0.查找命令
目录 🍉 find - 查找文件 🍇 grep 🍓 which 🍈locate 总结: 🍉 find - 查找文件 # 语法 # find [搜索范围] [选项] # 选项 # -name<查询方式> 按照指定的文件名查找模式查找文件 # …...
HarmonyOS-初级(一)
文章目录 初级核心技术理念函数的声明和使用类的声明和使用接口声明和使用声明式UI的特征 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年11月28日12点50分 初级 HAP可以分为静…...
Oracle 11gR2 坏块修复实例一则
背景 前段时间在 Oracle 11gR2 数据库中发现了坏块问题。环境是 64 位 Linux 平台。本文将详细介绍如何使用 DBMS_REPAIR 进行在线修复,当然也可以基于备份和 RMAN 的修复方法这里暂时不做介绍。 发现坏块 1. 从 alert.log 中发现错误 在 alert.log 文件中发现了…...
解决FinalShell 连接virtual box安装的Linux centos/7系统 一直让输入密码,输入什么密码都没用
问题描述: virtual box安装的Linux centos/7系统默认只允许ssh登录方式,需要配置允许账号密码登录 先登录root账号(一定要是root):初始密码为vagrant su 修改ssh配置文件: vi /etc/ssh/sshd_config 修改…...
华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读
随着数据中心规模的不断扩大,服务器的稳定性和可靠性变得尤为重要。华为E9000刀箱(HWE9000V2)作为一款高性能的服务器设备,其硬件状态的实时监控对于保障业务的连续性和系统的稳定运行至关重要。 监控易作为一款专业的IT基础设施监…...
Python基础学习-12匿名函数lambda和map、filter
目录 1、匿名函数: lambda 2、Lambda的参数类型 3、map、 filter 4、本节总结 1、匿名函数: lambda 1)语法: lambda arg1, arg2, …, argN : expression using arg 2) lambda是一个表达式,而不是一个语…...
民安:助力提升城市安全水平
随着城市化进程的加速,平安城市的创建成为了社会治理的重要议题。为了解公众对平安城市创建的看法和评价,为提升城市安全水平提供参考,近期某市委托民安智库专业市场调查公司开展了一次安全感满意度调查。 本次调查围绕公共安全、个人安全、…...
Apache Zeppelin:一个基于Web的大数据可视化分析平台
今天给大家推荐一下 Apache Zeppelin,它是一个基于 Web 的交互式数据接入、数据分析、数据可视化以及协作文档 Notebook,类似于 Jupyter Notebook。 Apache Zeppelin 支持使用 SQL、Java、Scala、Python、R 等编程语言进行数据处理和分析,同时…...
「Qt Widget中文示例指南」如何为窗口实现流程布局?(二)
Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文将展示如何为不…...
【C语言篇】探索 C 语言结构体:从基础语法到数据组织的初体验
我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 什么是结构体结构体的定义与使用结构体内存布局嵌套结构体与指针结构体数组的操作结构体与函数结构体内存对齐机制位域与结构体的结合动态内存分…...
linux下USB设备状态查询
linux下USB设备状态查询 linux下USB设备状态查询 在buildroot RK3568平台上调试USB视频采集时发现,USB设备经常性断开,为发现其断开的规律,编写脚本记录其断开的时间 linux下USB设备状态查询 #周期性查询 USB设备 cat > /usr/bin/usbenq…...
鼠标前进后退键改双击,键盘映射(AutoHotkey)
初衷: 1.大部分鼠标为不可自定义按键,可以自定义的又很贵。 鼠标左键是双击是很频类很高的操作,鼠标前进/后退按键个人感觉使用频率很低,因此把鼠标前进/后退改为双击还是很合适的。 2.有些短款的键盘没有Home或End键,…...
ubuntu服务器睡眠命令
在 Ubuntu 服务器中,通常不会启用系统睡眠(即 suspend)模式,因为服务器通常需要保持持续运行以提供服务。但如果你希望让 Ubuntu 服务器进入睡眠状态,你可以使用以下命令: 1. 让系统进入休眠(S…...
尚硅谷学习笔记——Java设计模式(一)设计模式七大原则
一、介绍 在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,提出的解决方案。我们希望我们的软件能够实现复用性、高稳定性、扩展性、维护性、代码重用性,所以…...
Flink——进行数据转换时,报:Recovery is suppressed by NoRestartBackoffTimeStrategy
热词统计案例: 用flink中的窗口函数(apply)读取kafka中数据,并对热词进行统计。 apply:全量聚合函数,指在窗口触发的时候才会对窗口内的所有数据进行一次计算(等窗口的数据到齐,才开始进行聚合…...
技能之发布自己的依赖到npm上
目录 开始 解决 步骤一: 步骤二: 步骤三: 运用 一直以为自己的项目在github上有了(之传了github)就可以进行npm install下载,有没有和我一样萌萌的同学。没事,萌萌乎乎的不犯罪。 偶然的机…...
COMSOL工作站:配置指南与性能优化
COMSOL Multiphysics 求解的问题类型相当广泛,提供了仿真单一物理场以及灵活耦合多个物理场的功能,供工程师和科研人员来精确分析各个工程领域的设备、工艺和流程。 软件内置的#模型开发器#包含完整的建模工作流程,可实现从几何建模、材料参数…...
Qt导出Excel图表
目的 就是利用Qt导出Excel图表,如果直接画Excel 图表,比较麻烦些,代码写得也复杂了;而直接利用Excel模块就简单了,图表在模块当中已经是现成的了,Qt程序只更改数据就可以了,这篇文章就是记录一下利用模块上…...
分布式协同 - 分布式系统的特性与互斥问题
文章目录 导图概述分布式系统的特性与挑战分布式互斥算法的目标分布式互斥算法集中互斥算法集中互斥算法示意图集中互斥算法流程 基于许可的互斥算法Lamport 算法示意图Lamport 流程 令牌环互斥算法令牌环互斥算法示意图 1. 集中互斥算法(Centralized Mutual Exclus…...
windows安装itop
本文介绍 win10 安装 itop 安装WAMP集成环境前 先安装visual c 安装itop前需要安装WAMP集成环境(windowsApacheMysqlPHP) 所需文件百度云盘 通过网盘分享的文件:itop.zip 链接: https://pan.baidu.com/s/1D5HrKdbyEaYBZ8_IebDQxQ 提取码: m9fh 步骤一࿱…...
LAMP环境的部署
一、软件安装介绍 在Linux系统中安装软件有rpm安装、yum安装、源码安装等方法,在这里主要给大家介绍 yum 安装,这是一种最简单方便的一种安装方法。 YUM(Yellow dog Upadate Modifie)是改进版的 RPM 管理器,很好地解…...
Go语言压缩文件处理
目录 Go 语言压缩文件处理1. 压缩文件:Zip函数2. 解压文件:UnZip 函数3. 小结 Go 语言压缩文件处理 在现代的应用开发中,处理压缩文件(如 .zip 格式)是常见的需求。Go 语言提供了内置的 archive/zip 包来处理 .zip 文…...
rocylinux9.4安装prometheus监控
一.上传软件包 具体的软件包如下,其中kubernetes-mixin是下载的监控kubernetes的一些监控规则、dashbaordd等。 二.Prometheus配置 1.promethes软件安装 #解压上传后的软件包 [rootlocalhost ] cd /opt [rootlocalhost opt]# tar xf prometheus-2.35.3.linux-amd…...
屏幕分辨率|尺寸|颜色深度指纹
一、前端通过window.screen接口获取屏幕分辨率 尺寸 颜色深度,横屏竖屏信息。 二、window.screen c接口实现: 1、third_party\blink\renderer\core\frame\screen.idl // https://drafts.csswg.org/cssom-view/#the-screen-interface[ExposedWindow ] …...
docker-elasticsearch-kibana-logstash
一、安装 Elasticsearch 尝试直接拉取 Elasticsearch 镜像: 执行 docker pull docker.elastic.co/elasticsearch/elasticsearch,拉取失败,错误提示为 “Error response from daemon: manifest for docker.elastic.co/elasticsearch/elasticse…...
C#设计模式——抽象工厂模式(重点)
文章目录 项目地址一、抽象工厂模式1.1 特性1.2 使用反射获取特性标记的类1.3 完整代码 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、抽象工厂模式 工厂方法模式依然存在一个问题就是&…...
全新AI模型家族登场:完全可复现的开源语言模型OLMo 2
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
wordpress视频缩略图插件/简述什么是百度竞价排名
AO2008系统采集用友GRP-R9导出的ASD文件全过程海城市审计局祁兆威一、准备工作(一)采集到的软件导出的文件列表为:GL_CZRZ.asd,GL_Kmye.asd,GL_Wlkm.asd,PubBmxx.asd,GL_Czy.asd,GL_Pzflmx.asd,GL_Xmkm.asd,PubDQZL.asd,GL_Fzsmx.asd,GL_Pzlx.asd &#…...
怀柔做网站的吗/查询网
Linus Torvalds在新西兰奥克兰举办的开源会议Linux.conf.au Conference上称,“某些人以为我是好人,在发现不是之后感到震惊。我不是一个好人。我也不在乎你们。我在乎的是技术和内核——那才是对我重要的 东西。”Torvalds随后写了二封邮件进一步阐述他对…...
有了源码怎么做网站/松原头条新闻今日新闻最新
第036个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载GPX文件, 显示图形。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共83行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https:/…...
如何自学网站后台/360搜索引擎入口
> Photo by comfreak on Pixabay Pioneers Bill Inmon,被称为“数据仓库之父”和RALPH Kimball,一个思想的维度数据仓库领导者,具有持续的辩论。根据Kimball的说法:“数据仓库只不过是所有数据集市的联盟”,Inmon 回…...
温州做网站建设多少钱/购买链接平台
呼如林楼主,刚敲了一下代码,executemany执行时最好对应个数。#!/usr/bin/envpython#--coding:utf-8--importloggingimportMySQLdbclass_MySQL(object):def__init__(self,host,port,user,passwd,db,charsetutf8):self.connMySQLdb.connect(hosthost,portp…...
企业做网站用dedeCMS免费吗/广州网站seo
http://www.runoob.com/design-pattern/factory-pattern.html 菜鸟教程 1.工厂模式: 个人感觉就是利用 多态(例如动物,叫声那个例子)工厂(创建各个类的实列的自定义工厂)测试类(给定一种动物&am…...