【rpm】rpm打包说明

 

参数 参数意义
Summary 本软件的主要说明,例如上表中说明了本软件是针对 NTP 的软件功能与工具等啦!
Name 本软件的软件名称 (最终会是 RPM 文件的文件名构成之一)
Version 本软件的版本 (也会是 RPM 文件名的构成之一)
Release 这个是该版本打包的次数说明 (也会是 RPM 文件名的构成之一)。由于我们想要动点手脚,所以请将『 19%{?dist}.1 』 修改为『 20.vbird 』 看看
License 这个软件的授权模式,看起来涵盖了所有知名的 Open source 授权啊!!
Group 这个软件在安装的时候,主要是放置于哪一个软件群组当中 (yum grouplist 的特点!);
URL 这个原代码的主要官方网站;
SourceN 这个软件的来源,如果是网络上下载的软件,通常一定会有这个信息来告诉大家这个源文件的来源! 此外,如果有多个软件来源,就会以 Source0, Source1... 来处理原代码喔!
PatchN 就是作为补丁的 patch file 啰!也是可以有好多个!
BuildRoot 设置作为编译时,该使用哪个目录来暂存中间文件 (如编译过程的目标文件/链接文件等档)。
上述为必须要存在的项目,底下为可使用的额外设置值
Requires 如果你这个软件还需要其他的软件的支持,那么这里就必需写上来,则当你制作成 RPM 之后,系统就会自动的去检查啦!这就是『相依属性』的主要来源啰!
BuildRequires 编译过程中所需要的软件。Requires 指的是『安装时需要检查』的,因为与实际运作有关,这个 BuildRequires 指的是『编译时』所需要的软件,只有在 SRPM 编译成为 RPM 时才会检查的项目。

上面几个数据通常都必需要写啦!但是如果你的软件没有相依属性的关系时,那么就可以不需要那个 Requires 啰! 根据上面的设置,最终的文件名就会是『{Name}-{Version}-{Release}.{Arch}.rpm』的样式, 以我们上面的设置来说,文件名应该会是『ntp-4.2.6p5-20.vbird.x86_64.rpm』的样子啰!

Name

软件包的名称,后面可使用%{name}的方式引用

Name:          <software name>

 

 Version

软件包的名称,后面可使用%{name}的方式引用软件包版本号,后面可使用%{version}引用。

Version:          <software version>

 

  %build阶段

 

 宏%setup

 这个宏解压源代码,将当前目录改为源代码解压之后产生的目录。这个宏还有一些选项可以用。例如,在解压后,%setup 宏假设产生的目录是%{name}-%{version}, 如果 tar 打包中的目录不是这样命名的,可以用 -n 选项来指定要切换到的目录。例如:%setup -n%{name}-April2003Rel 

  • %setup-q---------将 tar 命令的繁复输出关闭
  • %setup -nnewdir---------将压缩的软件源程序在newdir目录下解开。
  • %setup -c---------------在解开源程序之前先创建目录。
  • %setup -bnum------------在包含多个源程序时,将第num个源程序解压缩。
  • %setup -T----------------不使用缺省的解压缩操作。

文件%files

定义软件包所包含的文件,分为三类:说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别。这里会在虚拟根目录下进行,千万不要写绝对路径,而应用宏或变量表示相对路径。 如果描述为目录,表示目录中除%exclude外的所有文件。%defattr (-,root,root) 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755

 概括

1. rpmbuild目录

默认位置  宏代码 名称 用途
~/rpmbuild/SPECS %_specdir Spec 文件目录 保存 RPM 包配置(.spec)文件
~/rpmbuild/SOURCES %_sourcedir 源代码目录 保存源码包(如 .tar 包)和所有 patch 补丁
~/rpmbuild/BUILD %_builddir 构建目录 源码包被解压至此,并在该目录的子目录完成编译
~/rpmbuild/BUILDROOT %_buildrootdir 最终安装目录 保存 %install 阶段安装的文件
~/rpmbuild/RPMS %_rpmdir 标准 RPM 包目录 生成/保存二进制 RPM 包
~/rpmbuild/SRPMS %_srcrpmdir 源代码 RPM 包目录 生成/保存源码 RPM 包(SRPM)

2. spec文件阶段

阶段 读取的目录 写入的目录 具体动作
%prep %_sourcedir %_builddir 读取位于 %_sourcedir 目录的源代码和 patch 。之后,解压源代码至 %_builddir 的子目录并应用所有 patch。
%build %_builddir %_builddir 编译位于 %_builddir 构建目录下的文件。通过执行类似 ./configure && make 的命令实现。
%install %_builddir %_buildrootdir 读取位于 %_builddir 构建目录下的文件并将其安装至 %_buildrootdir 目录。这些文件就是用户安装 RPM 后,最终得到的文件。注意一个奇怪的地方: 最终安装目录 不是 构建目录。通过执行类似 make install 的命令实现。
%check %_builddir %_builddir 检查软件是否正常运行。通过执行类似 make test 的命令实现。很多软件包都不需要此步。
bin %_buildrootdir %_rpmdir 读取位于 %_buildrootdir 最终安装目录下的文件,以便最终在 %_rpmdir 目录下创建 RPM 包。在该目录下,不同架构的 RPM 包会分别保存至不同子目录, noarch 目录保存适用于所有架构的 RPM 包。这些 RPM 文件就是用户最终安装的 RPM 包。
src %_sourcedir %_srcrpmdir 创建源码 RPM 包(简称 SRPM,以.src.rpm 作为后缀名),并保存至 %_srcrpmdir 目录。SRPM 包通常用于审核和升级软件包。

 

 参考资料

1. 如何制作一个标准的 RPM 包

2. RPM打包原理、示例、详解及备查

4. 第二十二章、软件安装 RPM, SRPM 与 YUM

5. Linux二进制包(RPM包)制作教程(教程+资料+案例)

6. RPM 包的构建 - SPEC 基础知识

posted @ 2021-04-05 20:41  苏格拉底的落泪  阅读(96)  评论(0编辑  收藏  举报