由于直接基于源码进行编译安装dpdk20.11比较麻烦,为了在不同设备上直接安装,使用rpm包直接安装比较方便,这里自己记录下本小白给dpdk20.11新增spec文件编译dpdk rpm包的流程。

基于上一篇dpdk的基础编译,也是在搭建meson ninjia编译环境基础上进行适配,在网上搜索过许多spec相关的语法,都比较基础,不怎么涉及高级用法,这里也仅记录自己摸索能成功安装到系统的rpm包构建过程。

第一步:安装rpmbuild工具,包括rpm-build和rpmdevtools。其中rpmdevtools可以选装,因为目前仅用于创建rpmbuild路径,也可以手动mkdir,实际rpm-build工具即可完成整个流程。这两个工具在centos上可以直接使用yum install来安装。

第二步:源码处理。这里将之前的20.11源码的文件夹改名为dpdk-20.11,为后面做铺垫。另外使用tar -czvf dpdk-20.11.tar.gz dpdk-20.11/命令进行打包,因为rpmbuild对于源码的处理不支持直接处理文件夹的形式。

第三步:创建rpmbuild编译路径,这里使用rpmdevtools工具的rpmdev-setuptree命令进行初始化,得到结果如下。

[root@localhost ~]# ls rpmbuild/
BUILD  RPMS  SOURCES  SPECS  SRPMS

这里创建了5个文件夹,从左到右的作用是:编译路径、rpm包输出路径、源码放置、spec文件放置、src rpm包输出路径。

第四步:创建spec文件。值得一提的是,在系统中直接创建后缀为.spec的文件,打开会直接有基础的框架,比较yin性。下面随意添加了下内容,分别是包名、版本、小版本、总结、平台类型、证书、URL、源码(这个需要和自己的tar包名一样)等等,可以自行查阅,目前只是做简单使用,没有太多要求,后续有需要再进行语法深入研究。

由于当前不需要准备工作,直接跳过prep,主要内容在build以及之后部分。build就是构建步骤,这里需要上一篇的meson build名,不同的是为了指定ninjia的安装路径,加了一个prefix参数,指定到/root/rpmbuild/BUILDROOT/dpdk-20.11-1.el7.x86_64(这个dpdk文件夹会自动生成)。后面两个命令就是基础的编译,与手动编译时一样。install 安装步骤,这里会直接把编译好的文件安装到前面指定的路径,效果如下:

[root@localhost SPECS]# ls /root/rpmbuild/BUILDROOT/dpdk-20.11-1.el7.x86_64/
bin  include  lib64  share  usr
一共有5个文件夹,分别是执行文件、头文件、库文件、一些原码、debug文件。

files 指定打包文件,需要再此处指定需要打包的文件路径,改路径是相对于[root@localhost SPECS]# ls /root/rpmbuild/BUILDROOT/dpdk-20.11-1.el7.x86_64/的,不会识别为绝对路径。这里仅打包了我们运行需要的两个文件夹。

第五步:构建。这里把spec文件放入 /root/rpmbuild/SPECS, 直接在SPECS下使用rpmbuild -ba dpdk-20.11.spec即可进行构建。在构建过程中有几个比较坑的问题,均是一些文件检查导致打包不成功。提供以下规避思路,目前测试对安装使用rpm包无影响。

打开/root/.rpmmacros和/lib/rpm/macros,分别注释掉下面的代码(可以根据实际需要进行按需注释。另外如果是在files标签下把所有文件打包是没有问题的,此问题盲猜应该可以从ninjia入手控制输出文件路径)。

第六步:操作rpm包。使用rpm -ivh dpdk-20.11-1.el7.x86_64.rpm 即可安装成功,删除可以直接使用rpm -e dpdk命令删除,查询信息则可以使用rpm -qi dpdk查询,信息里面包括了spec中添加的标签字段。另外想看安装包安装的文件可以使用rpm -ql dpdk,直接看安装包文件可以加上-p选项指定rpm包文件。

dpdk-20.11 rpm包编译相关推荐

  1. dpdk 20.11编译kni和igb_uio

    第一步:需要修改meson_option.txt打开kmod编译开关 第二步:从20.11开始,igb_uio不再包含在dpdk源码中,需要下载源码 git clone http://dpdk.org ...

  2. DPDK 20.11 Dynamic mbuf

    目录 背景 解决方法 申请外部结构 增大mbuf的空间 多种布局 Dynamic mbuf 原理 使用/API 更大的额外空间的需求怎么办? 参考 背景 需要metadata的场景 通用的metada ...

  3. dpdk 20.02 igb_uio.ko 编译

    dpdk从20.02版本以后默认不编译igb_uio.ko 更改config/common_base的 CONFIG_RTE_EAL_IGB_UIO=y 可以实现编译.

  4. 11.20 yum:自动化RPM包管理工具

    yum(Yellow dog Updater Modified)是多个Linux发行版的软件包管理器,例如Redhat RHEL.CentOS和Fedora.yum主要用于自动安装.升级rpm软件包, ...

  5. 通过RPM包离线安装Clickhouse 20.3(LTS版本)

    1.原因 由于公司内网服务器环境是不能联网的,没法通过在线方式安装.这里记录一下通过RPM包离线安装Clickhouse 20.3(LTS版本)的过程. 2.下载RPM包 (1)官方安装文档 http ...

  6. Linux安装和管理程序(包括rpm包安装、卸载、升级以及源码包的手工编译安装)

    点击蓝色目录查找相应内容 Linux应用程序简介 应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包封装类型 RPM包管理工具 查询RPM软件包信息 查询已安装的RPM软件信息 查询未安装 ...

  7. 编译httpd-2.4.46的RPM包

    目录 一.下载源码 二.编译&排错 2.1.第一次编译,解决依赖包问题. 2.2.第二次编译,解决anaconda导致的环境变量问题 2.3.第三次编译,解决apr版本过低问题 提供 apr- ...

  8. suse linux 软件包安装,SUSE Linux 11系统rpm包离线安装GCC

    SUSE Linux 11系统rpm包离线安装GCC 1.问题显示 编译失败 python2.6环境下编译pycrypto-2.6.1 src/hash_template.c:360: warning ...

  9. linux环境怎么更新离线rpm包,SUSE Linux 11系统rpm包离线安装GCC

    SUSE Linux 11系统rpm包离线安装GCC 1.问题显示 编译失败 python2.6环境下编译pycrypto-2.6.1 src/hash_template.c:360: warning ...

最新文章

  1. CB Insights发布最新AI 100排名,包含100家最有前景的AI初创公司
  2. 1D target tensor expected, multi-target not supported
  3. java类注入service为null_解决webservice(Java)中dao层注入为null问题
  4. 更新网盘(云存储)功能需求,免费网盘需求,手机数据备份
  5. Jboss4集群配置【转】
  6. asc码转换 linux_Linux终端下将图片转换ASCII Art代码图案
  7. SharePoint【学习笔记】-- SPWeb.EnsureUser()注意AllowUnsafeUpdates=true
  8. html5中布局命名,HTML5 发展中的命名约定和微格式
  9. 热烈庆祝《大数据》成功入选中国科技核心期刊目录~
  10. 如何去除word文档目录前面的黑点和目录后有一页空白页
  11. STM32-红外遥控
  12. 不浪费原料的汉堡制作方案--贪心算法
  13. 如何写好科研论文(笔记)
  14. 钟汉良日记:百善孝为先,其它都靠边
  15. jQuery 入门教程
  16. 【LeetCode-SQL】1527. 患某种疾病的患者
  17. Python小记 正则
  18. UNITY OCULUS QUEST开发入门教程 1 - 准备篇
  19. 【Python面向对象编程】第18篇 属性装饰器
  20. c++ error:C2504 提示未定义基类

热门文章

  1. 李宏毅2022年机器学习(一)
  2. Secure Thingz携手河洛半导体共同打造以网络安全为中心的编程
  3. Centos安装Python3,yum4, dnf, neofetch
  4. IDEA插件系列(65):NeckProtector插件——定时提醒休息
  5. 听呆了,看到了《诗经》中的古风!
  6. 冻结表格(tablefix)
  7. packagesToScan
  8. iOS内购二:购买和恢复
  9. 注册CSDN之后的第一条PIAO客
  10. Calendar.DAY_OF_MONTH存放什么数据