如何本地构建一个 dpdk l2fwd snap 包?

目标

基于 dpdk-19.11 l2fwd 程序及其依赖库本地构建一个 snap 包,能够在 ubuntu 20.04 桌面环境中安装并测试运行。

编写 snap 包 yaml 描述文件

yaml 文件:

name: test # you probably want to 'snapcraft register <name>'
base: core22 # the base snap is the execution environment for this snap
version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'
summary: Single-line elevator pitch for your amazing snap # 79 char long summary
description: |This is my-snap's description. You have a paragraph or two to tell themost important story about your snap. Keep it under 100 words though,we live in tweetspace and your description wants to look good in the snapstore.grade: devel # must be 'stable' to release into candidate/stable channels
confinement: devmode # use 'strict' once you have the right plugs and slotsapps:l2fwd:command: bin/l2fwdparts:file-copy:plugin: dumpsource: /home/longyu/snap/l2fwdstage:- bin- lib

上述描述文件使用 file-copy 将指定目录的二进制文件内容拷贝到 snap 包中,使用这些文件生成一个 snap 包文件。

原始文件目录结构:

root@ubuntu:/home/longyu/snap/l2fwd# tree ./bin ./lib/
./bin
└── l2fwd
./lib/
└── x86_64-linux-gnu├── libcrypto.so.1.0.0└── libnuma.so.11 directory, 3 files

编译生成 snap 包

编译过程日志如下:

root@ubuntu:/home/longyu/snap/l2fwd/snap# snapcraft --destructive-mode --debug
Executed: pull file-copy                                                                                                                                                           
Executed: build file-copy                                                                                                                                                          
Executed: stage file-copy                                                                                                                                                          
Executed: prime file-copy                                                                                                                                                          
Executed parts lifecycle                                                                                                                                                           
Generated snap metadata                                                                                                                                                            
Running linter: library                                                                                                                                                            /bin/bash: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /snap/core22/current/lib/x86_64-linux-gnu/libtinfo.so.6)
/bin/bash: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /snap/core22/current/lib/x86_64-linux-gnu/libtinfo.so.6)
Unable to determine library dependencies for 'lib/x86_64-linux-gnu/libcrypto.so.1.0.0'                                                                                             /bin/bash: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /snap/core22/current/lib/x86_64-linux-gnu/libtinfo.so.6)Unable to determine library dependencies for 'lib/x86_64-linux-gnu/libnuma.so.1'                                                                                                   
Created snap package test_0.1_amd64.snap

snapcraft 指定了 debug 参数能够输出 snap 包构建中的一些调试信息,出现问题时可以根据调试信息进行排查。

安装运行 l2fwd snap 包

安装命令:

snap install --dangerous ./test_0.1_amd64.snap  --devmode

snap 默认从官方源安装 snap 包,要安装一个本地制作的 snap 包,需要指定 --dangerous,同时 --devmode 指定使用开发模式,在这种模式下 snap 内部的权限控制仅输出日志并不会做实际的阻断,便于测试。

运行日志示例:

root@ubuntu:/home/longyu/snap/l2fwd# /snap/bin/test.l2fwd 
EAL: Detected 4 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: No available hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: PCI device 0000:02:01.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:02:06.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:100f net_e1000_em
EAL:   using IOMMU type 8 (No-IOMMU)
EAL: Ignore mapping IO port bar(4)

dmesg 相关信息:

[518163.136314] kauditd_printk_skb: 712 callbacks suppressed
[518163.136317] audit: type=1326 audit(1693798734.950:73568): auid=1000 uid=0 gid=0 ses=286 subj=snap.test.l2fwd pid=274885 comm="l2fwd" exe="/snap/test/x1/bin/l2fwd" sig=0 arch=c000003e syscall=172 compat=0 ip=0x7f4a886fdb3b code=0x7ffc0000
[518163.138624] audit: type=1400 audit(1693798734.950:73569): apparmor="ALLOWED" operation="open" profile="snap.test.l2fwd" name="/run/dpdk/rte/config" pid=274885 comm="l2fwd" requested_mask="wrc" denied_mask="wrc" fsuid=0 ouid=0
...........................................................................................................................................................
[518496.329159] audit: type=1400 audit(1693799068.140:74046): apparmor="ALLOWED" operation="unlink" profile="snap.test.l2fwd" name="/run/dpdk/rte/mp_socket" pid=275040 comm="l2fwd" requested_mask="d" denied_mask="d" fsuid=0 ouid=0
[518496.329171] audit: type=1326 audit(1693799068.140:74047): auid=1000 uid=0 gid=0 ses=286 subj=snap.test.l2fwd pid=275040 comm="l2fwd" exe="/snap/test/x1/bin/l2fwd" sig=0 arch=c000003e syscall=49 compat=0 ip=0x7fbb4b8ff66b code=0x7ffc0000
[518496.546520] vfio-pci 0000:02:06.0: vfio-noiommu device opened by user (l2fwd:275040)

从 dmesg 的日志看,apparmor 监控到了 l2fwd 运行过程中的许多资源访问过程,仅仅输出了日志,并没有阻断,程序能够正常运行。

strict 模式运行 l2fwd

dmesg 中的 audit 信息:

[612862.262407] audit: type=1400 audit(1693893435.219:74550): apparmor="STATUS" operation="profile_load" profile="unconfined" name="snap-update-ns.test-user-core" pid=285736 comm="apparmor_parser"
[612862.343653] audit: type=1400 audit(1693893435.303:74551): apparmor="STATUS" operation="profile_load" profile="unconfined" name="snap.test-user-core.l2fwd" pid=285737 comm="apparmor_parser"
[612884.622773] audit: type=1326 audit(1693893457.551:74552): auid=1000 uid=0 gid=0 ses=339 subj=snap.test-user-core.l2fwd pid=285770 comm="l2fwd" exe="/snap/test-user-core/x1/bin/l2fwd" sig=0 arch=c000003e syscall=172 compat=0 ip=0x7fdf39e16b3b code=0x50000
[612884.766348] audit: type=1400 audit(1693893457.719:74553): apparmor="DENIED" operation="open" profile="snap.test-user-core.l2fwd" name="/run/dpdk/rte/config" pid=285770 comm="l2fwd" requested_mask="wrc" denied_mask="wrc" fsuid=0 ouid=0

上述日志是以 strict 模式运行时内核输出的部分信息,在这种模式下, l2fwd 会按照默认的 apparmor 规则严格执行,apparmor 阻断了 l2fwd 打开 /run/dpdk/rte/config 文件的过程,l2fwd 无法正常运行。

要让 l2fwd 正常运行,需要修改 l2fwd 的 apparmor 规则,这里已经达成了目标,暂时跳过。

参考链接

https://askubuntu.com/questions/822765/snap-install-failure-error-cannot-find-signatures-with-metadata-for-snap

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

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

相关文章

常用芯片学习——YC688语音芯片

YC688 广州语创公司语音芯片 使用说明 YC688是一款工业级的MP3语音芯片 &#xff0c;完美的集成了MP3、WAV的硬解码。支持SPI-Flash、TF卡、U盘三种存储设备。可通过电脑直接更新SPI-Flash的内容&#xff0c;无需上位机软件。通过简单的串口指令即可完成三种存储设备的音频插…

C/C++文件操作

一、文本文件操作 1、写文件操作 代码 #include<fstream> #include<iostream>int main() {ofstream outfile("Student.txt", ios::out);if (!outfile) {cout << "文件写入失败" << endl;exit(0); //程序终止}cout << &qu…

R绘图 | 单列数据的分布图,对A变量分bin求B变量的平均值

问题1&#xff1a;单个向量的 density 分布图&#xff1f; (1) 模拟数据 set.seed(202402) datdiamonds[sample(nrow(diamonds), 1000),]> head(dat) # A tibble: 6 10carat cut color clarity depth table price x y z<dbl> <ord> &l…

物资管理新篇章:Java+SpringBoot实战

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

微信小程序本地开发

微信小程序本地开发时不需要在小程序后台配置服务器域名直接在小程序项目中填写后端在本机的IP地址和端口号 如图&#xff08;第一步&#xff09; 填写地址后发现报错&#xff0c;url不是合法域名&#xff0c;则在详情设置不校验合法域名 如图&#xff08;第二歩&#xff09;…

什么时候用ref和reactive

在Vue 3中&#xff0c;ref和reactive都是用于创建响应式数据的工具&#xff0c;但它们的使用场景有所不同。 使用ref的情况&#xff1a; 基本数据类型&#xff1a;当你需要响应式地处理基本数据类型&#xff08;如数字、字符串、布尔值&#xff09;时&#xff0c;应该使用ref…

算法训练营day35, 复习二叉树3

package main type TreeNode struct { Val int Left *TreeNode Right *TreeNode } // 2476. 二叉搜索树最近节点查询 //思路先用中序遍历 左中右获取有序数组&#xff0c;在用二分法寻找最大&#xff0c;最小值 func closestNodes(root *TreeNode, queries []int) [][]i…

Flink代码单词统计 ---批处理

flatMap&#xff1a;一对多转换操作&#xff0c;输入句子&#xff0c;输出分词后的每个词groupBy&#xff1a;按Key分组&#xff0c;0代表选择第1列作为Keysum&#xff1a;求和&#xff0c;1代表按照第2列进行累加print&#xff1a;打印最终结果 1.WordCount代码编写 需求&am…

统一管理项目的线程池

一、问题描述 频繁的创建、销毁线程和线程池,会给系统带来额外的开销,也有可能导致系统内线程数上限不可控。例如以下代码,每次发送邮件都会创建一个新的线程池,并且业务结束之后线程池也未随之销毁。 public static boolean sendMail(MailInfo mailInfo, MailServerInfo…

如何从零实现一个词云效果

词云是一种文本数据的可视化形式&#xff0c;它富有表现力&#xff0c;通过大小不一&#xff0c;五颜六色&#xff0c;随机紧挨在一起的文本形式&#xff0c;可以在众多文本中直观地突出出现频率较高的关键词&#xff0c;给予视觉上的突出&#xff0c;从而过滤掉大量的文本信息…

Segment Routing IPv6介绍

定义 SRv6&#xff08;Segment Routing IPv6&#xff0c;基于IPv6转发平面的段路由&#xff09;是基于源路由理念而设计的在网络上转发IPv6数据包的一种协议。SRv6通过在IPv6报文中插入一个路由扩展头SRH&#xff08;Segment Routing Header&#xff09;&#xff0c;在SRH中压…

matlab 线性四分之一车体模型

1、内容简介 略 57-可以交流、咨询、答疑 路面采用公式积分来获得&#xff0c;计算了车体位移、非悬架位移、动载荷等参数 2、内容说明 略 3、仿真分析 略 线性四分之一车体模型_哔哩哔哩_bilibili 4、参考论文 略

Mysql查询或导出结果添加序号字段方法

在MySQL中查询数据或者导出Excel时&#xff0c;通常都需要给结果集中的每一行来添加一个序号&#xff0c;方便给查询出或者导出的数据进行排序并且方便查看和处理数据&#xff0c;常见的方法是通过定义用户变量&#xff0c;在MySQL中直接给查询结果集添加序号。 通过定义用户变…

十一、Qt自定义Widget组件、静态库与动态库

一、自定义Widget组件 1、自定义Widget组件 使用步骤采用提升法&#xff08;promotion&#xff09;重新定义paintEvent事件 2、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QWidget &#xff08;2&#xff09;添加类&#xff0c;为Widget组件提升类 #inclu…

思科认证 | Cisco认证有哪些级别?国内怎么考CCIE?

Cisco作为全球领先的网络解决方案供应商&#xff0c;其认证体系广受行业认可。 下面将详细介绍Cisco认证的各级别&#xff0c;并指导国内考生如何顺利通过CCIE认证考试。 01 Cisco认证有哪些级别&#xff1f; Cisco认证体系共分为三个级别&#xff1a;CCNA、CCNP和CCIE。 CCN…

探索C语言位段的秘密

位段 1. 什么是位段2. 位段的内存分配3. 位段的跨平台问题4. 位段的应用4. 使用位段的注意事项 1. 什么是位段 我们使用结构体实现位段&#xff0c;位段的声明和结构体是类似的&#xff0c;有两个不同&#xff1a; 位段的成员必须是int&#xff0c;unsigned int&#xff0c;或…

【随笔记】Tina 移植 Mosquitto v2.0.18 版本

移植过程 从官方源码库里面找到最新的版本 v2.0.18 并下载下来计算 md5 值 https://mosquitto.org/files/source/mosquitto-2.0.18.tar.gz 修改顶层 Makefie&#xff1a;package\network\mosquitto\Makefile PKG_NAME:mosquitto -PKG_VERSION:1.4.8 PKG_VERSION:2.0.18PKG_RE…

python学习笔记 - 标准库函数

概述 为了方便程序员快速编写Python脚本程序&#xff0c;Python提供了很多好用的功能模块&#xff0c;它们内置于Python系统&#xff0c;也称为内置函数(Built-in Functions&#xff0c;BlF)&#xff0c;Python 内置函数是 Python 解释器提供的一组函数&#xff0c;无需额外导…

人工智能在环境保护中的作用与价值

人工智能在环境保护中的作用与价值 人工智能技术在环境保护领域发挥着越来越重要的作用&#xff0c;其应用不仅可以提高环境监测和管理的效率&#xff0c;还能够帮助解决一些环境问题。以下是人工智能在环境保护中的作用与价值的几个方面&#xff1a; 1. 环境监测 人工智能技…

前端架构: 脚手架之使用Ora在终端中实现输出Loading

ora ora 它主要做的一件事情啊&#xff0c;就是去在命令行当中去输出loading的状态loading在web中容易实现&#xff0c;但是在终端中实现起来是非常复杂的安装 $ npm i -S ora可以看到其源码与chalk不同的是, 有很多第三方依赖库 1 &#xff09;基础用法 import ora from or…