它们是包含文件和元数据的档案文件。当安装或卸载 RPM 时,此元数据告诉 RPM 在哪里创建或删除文件。正如你将在上一篇文章中记住的,元数据还包含有关“依赖项”的信息,它可以是“运行时”或“构建时”的依赖信息。

例如,让我们来看看 fpaste。你可以使用 dnf 下载该 RPM。这将下载 Fedora 存储库中可用的 fpaste 最新版本。在 Fedora 30 上,当前版本为 0.3.9.2:

$ dnf download fpaste

...

fpaste-0.3.9.2-2.fc30.noarch.rpm

由于这是个构建 RPM,因此它仅包含使用 fpaste 所需的文件:

$ rpm -qpl ./fpaste-0.3.9.2-2.fc30.noarch.rpm

/usr/bin/fpaste

/usr/share/doc/fpaste

/usr/share/doc/fpaste/README.rst

/usr/share/doc/fpaste/TODO

/usr/share/licenses/fpaste

/usr/share/licenses/fpaste/COPYING

/usr/share/man/man1/fpaste.1.gz

源 RPM

在此链条中的下一个环节是源 RPM。Fedora 中的所有软件都必须从其源代码构建。我们不包括预构建的二进制文件。因此,要制作一个 RPM 文件,RPM(工具)需要:

给出必须要安装的文件,

例如,如果要编译出这些文件,则告诉它们如何生成这些文件,

告知必须在何处安装这些文件,

该特定软件需要其他哪些依赖才能正常工作。

源 RPM 拥有所有这些信息。源 RPM 与构建 RPM 相似,但顾名思义,它们不包含已构建的二进制文件,而是包含某个软件的源文件。让我们下载 fpaste 的源 RPM:

$ dnf download fpaste --source

...

fpaste-0.3.9.2-2.fc30.src.rpm

注意文件的结尾是 src.rpm。所有的 RPM 都是从源 RPM 构建的。你也可以使用 dnf 轻松检查“二进制” RPM 的源 RPM:

$ dnf repoquery --qf "%{SOURCERPM}" fpaste

fpaste-0.3.9.2-2.fc30.src.rpm

另外,由于这是源 RPM,因此它不包含构建的文件。相反,它包含有关如何从中构建 RPM 的源代码和指令:

$ rpm -qpl ./fpaste-0.3.9.2-2.fc30.src.rpm

fpaste-0.3.9.2.tar.gz

fpaste.spec

这里,第一个文件只是 fpaste 的源代码。第二个是 spec 文件。spec 文件是个配方,可告诉 RPM(工具)如何使用源 RPM 中包含的源代码创建 RPM(档案文件)— 它包含 RPM(工具)构建 RPM(档案文件)所需的所有信息。在 spec 文件中。当我们软件包维护人员添加软件到 Fedora 中时,我们大部分时间都花在编写和完善 spec 文件上。当软件包需要更新时,我们会回过头来调整 spec 文件。你可以在 https://src.fedoraproject.org/browse/projects/ 的源代码存储库中查看 Fedora 中所有软件包的 spec 文件。

请注意,一个源 RPM 可能包含构建多个 RPM 的说明。fpaste 是一款非常简单的软件,一个源 RPM 生成一个“二进制” RPM。而 Python 则更复杂。虽然只有一个源 RPM,但它会生成多个二进制 RPM:

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3

python3-3.7.3-1.fc30.src.rpm

python3-3.7.4-1.fc30.src.rpm

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3-devel

python3-3.7.3-1.fc30.src.rpm

python3-3.7.4-1.fc30.src.rpm

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3-libs

python3-3.7.3-1.fc30.src.rpm

python3-3.7.4-1.fc30.src.rpm

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3-idle

python3-3.7.3-1.fc30.src.rpm

python3-3.7.4-1.fc30.src.rpm

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3-tkinter

python3-3.7.3-1.fc30.src.rpm

python3-3.7.4-1.fc30.src.rpm

用 RPM 行话来讲,“python3” 是“主包”,因此该 spec 文件将称为 python3.spec。所有其他软件包均为“子软件包”。你可以下载 python3 的源 RPM,并查看其中的内容。(提示:补丁也是源代码的一部分):

$ dnf download --source python3

python3-3.7.4-1.fc30.src.rpm

$ rpm -qpl ./python3-3.7.4-1.fc30.src.rpm

00001-rpath.patch

00102-lib64.patch

00111-no-static-lib.patch

00155-avoid-ctypes-thunks.patch

00170-gc-assertions.patch

00178-dont-duplicate-flags-in-sysconfig.patch

00189-use-rpm-wheels.patch

00205-make-libpl-respect-lib64.patch

00251-change-user-install-location.patch

00274-fix-arch-names.patch

00316-mark-bdist_wininst-unsupported.patch

Python-3.7.4.tar.xz

check-pyc-timestamps.py

idle3.appdata.xml

idle3.desktop

python3.spec

从源 RPM 构建 RPM

现在我们有了源 RPM,并且其中有什么内容,我们可以从中重建 RPM。但是,在执行此操作之前,我们应该设置系统以构建 RPM。首先,我们安装必需的工具:

$ sudo dnf install fedora-packager

这将安装 rpmbuild 工具。rpmbuild 需要一个默认布局,以便它知道源 RPM 中每个必需组件的位置。让我们看看它们是什么:

$ rpm -E %{_specdir}

/home/asinha/rpmbuild/SPECS

$ rpm -E %{_sourcedir}

/home/asinha/rpmbuild/SOURCES

$ rpm -E %{_builddir}

/home/asinha/rpmbuild/BUILD

$ rpm -E %{_buildrootdir}

/home/asinha/rpmbuild/BUILDROOT

$ rpm -E %{_srcrpmdir}

/home/asinha/rpmbuild/SRPMS

$ rpm -E %{_rpmdir}

/home/asinha/rpmbuild/RPMS

我已经在系统上设置了所有这些目录:

$ cd

$ tree -L 1 rpmbuild/

rpmbuild/

├── BUILD

├── BUILDROOT

├── RPMS

├── SOURCES

├── SPECS

└── SRPMS

6 directories, 0 files

RPM 还提供了一个为你全部设置好的工具:

$ rpmdev-setuptree

然后,确保已安装 fpaste 的所有构建依赖项:

sudo dnf builddep fpaste-0.3.9.2-3.fc30.src.rpm

对于 fpaste,你只需要 Python,并且它肯定已经安装在你的系统上(dnf 也使用 Python)。还可以给 builddep 命令一个 spec 文件,而不是源 RPM。在手册页中了解更多信息:

$ man dnf.plugin.builddep

现在我们有了所需的一切,从源 RPM 构建一个 RPM 就像这样简单:

$ rpmbuild --rebuild fpaste-0.3.9.2-3.fc30.src.rpm

..

..

$ tree ~/rpmbuild/RPMS/noarch/

/home/asinha/rpmbuild/RPMS/noarch/

└── fpaste-0.3.9.2-3.fc30.noarch.rpm

0 directories, 1 file

rpmbuild 将安装源 RPM 并从中构建你的 RPM。现在,你可以使用 dnf 安装 RPM 以使用它。当然,如前所述,如果你想在 RPM 中进行任何更改,则必须修改 spec 文件,我们将在下一篇文章中介绍 spec 文件。

总结

总结一下这篇文章有两点:

我们通常安装使用的 RPM 是包含软件的构建版本的 “二进制” RPM

构建 RPM 来自于源 RPM,源 RPM 包括用于生成二进制 RPM 所需的源代码和规范文件。

linux私房菜 rpm src,如何制作一个 RPM 文件相关推荐

  1. (鸟哥linux私房菜)windos7+centos7.6+U盘安装+安装电脑一个硬盘上。

    出发点:鸟哥的linux私房菜中第三章,安装linux用VM.很多是仿真环境,实际中双系统安装比较好.按照鸟哥的书安装双系统会失败,不要迷信哈. 我的电脑配置:1.windows7 64位 2.电脑一 ...

  2. 鸟哥的Linux私房菜(服务器)- 第一章、架设服务器前的准备工作

    第一章.架设服务器前的准备工作 最近更新日期:2011/07/14 很多朋友因为自身或服务单位的需求,总是有架设各种网络服务器的时刻,这个时候大多数的前辈都会推荐他们使用 Linux 做为服务器架设的 ...

  3. 鸟哥的Linux私房菜-第一、二、三章

    鸟哥的Linux私房菜-第一.二.三章 前言 第一章.Linux是什么与如何学习 第二章.主机规划与磁盘分区 第三章.安装 CentOS7.x 前言   这本书很有意思,但是有作者提到很多题外话,看起 ...

  4. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

    目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...

  5. 鸟哥的Linux私房菜(基础篇)-第二章、 Linux 如何学习(二.3. 有心朝Linux作业系统学习者的学习态度)

    第二章. Linux 如何学习 最近更新日期:2009/08/06 3. 有心朝Linux作业系统学习者的学习态度 3.1 从头学习Linux基础 3.2 选择一本易读的工具书 3.3 实作再实作 3 ...

  6. 鸟哥的linux私房菜有乌班图,折腾Ubuntu的一些summary--初装Ubuntu18和重装Ubuntu18

    1. 初次安装Ubuntu18 关于linux安装,之前一直遇到的问题都是安装了,并重启之后之后进入到了grub界面,然后我自己对于grub指令不熟悉,加上没有足够的时间来研究,在多次重装之后,仍然没 ...

  7. 鸟哥的linux私房菜-基础学习篇 读书笔记

    从事linux工作一年多,算是能够熟练运用linux服务器,但仍觉得自己对Linux的原理,理论缺乏空洞,潜下心来认真阅读尘封的鸟哥经典,知识点很全,收获颇多,实践与知识结合,知行合一,对linux开 ...

  8. 鸟哥的Linux 私房菜 (1-12) + my

    <<Linux 鸟哥的私房菜>>  心得 : 实践与观察才是王道 第0章 : 计算机概论  计算机 : 接受用户输入的指令与数据,经过中央处理器的数据与逻辑单元运算处理后,以产 ...

  9. 鸟叔的linux私房菜:第0章 计算机概论学习笔记(Learning Notes for Basic Computer Theory)

    本博客是针对<鸟叔的Linux私房菜 基础学习篇 第四版>的第0章 计算机概论的学习笔记. 1 电脑辅助人脑的好工具 11 计算机硬件的五大单元 12 一切设计的起点CPU的架构 其它单元 ...

最新文章

  1. 达特茅斯计算机专业师资力量如何,达特茅斯学院计算机科学computer science专业排名第126~150名(2020THE泰晤士高等教育世界大学排名)...
  2. HL7 Figure 2-1. Delimiter values(分隔符值)
  3. 微信浏览器打开网页被拦截了?Mindjump快速解决微信屏蔽网址用户打不开的难题...
  4. SUSE中LVM的使用心得
  5. Spring框架----Spring的IOC
  6. 编程语言对比 标准io
  7. JUnit 5 Alpha版本简化了单元测试
  8. Spring Cloud Sleuth 使用教程
  9. Ubuntu 命令技巧
  10. Vue TodoList案例
  11. Scratch案例——放烟花
  12. python删除word表格中的某一行_python-docx添加和删除表格行、列
  13. Ryzen平台下内存超频与内存时序
  14. 网银汇款提示服务器无响应,为什么我的网上银行支付页面总是未响应
  15. 贴心 | GXF Fix 修复 / 优化基因结构注释信息文件 - GTF/GFF3
  16. 【​观察】做好数据到介质的连接者 新数据时代浪潮存储的行与思
  17. Lists.newArrayList
  18. 小i机器人在2018硬科技年会上夺双料大奖
  19. python中的turtle库中引用_python turtle库学习笔记
  20. 微信多开生成器PC端源码

热门文章

  1. 虞美人(纳兰性德)凄凉别后两应同,最是不胜清怨月明中
  2. 索尼爱立信在华打造全球制造中心
  3. Relying upon circular references is discouraged and they are prohibited by default 循环依赖bug解决
  4. 关于linux下ftok创建key的问题
  5. 生物医学工程领域 生物医学图像处理 SCI期刊
  6. 2016届蓝桥杯 Java C组 省赛试题及答案
  7. iphone如何防root,iphone如何防止骚扰电话
  8. Oracle批量插入有日期类型数据
  9. 前端:你要懂的单页面应用和多页面应用
  10. 转载:丫鬟的新衣——劳动合同法的寓言