Rpm包制作
目录
参考
How to create a Linux RPM package
一、安装 rpm 工具包
|
|
二、创建 RPM 目录结构
|
|
- BUILD 目录在 RPM 包的构建过程中使用, 存放的是解压后的源码和编译过程中产生的中间文件。宏:
%_builddir
- RPMS 目录用于存放为不同架构构建的 RPM 包,如果在.spec 文件中指定或在构建过程中指定了 noarch 架构,也会存放在此。宏:
%_rpmdir
- SOURCES 目录用于存放源代码和 patch 补丁包。宏:
%_sourcedir
- SPECS 目录包含
.spec
文件。.spec
文件规定了如何构建 rpm 包。宏:%_specdir
- SRPMS 目录存放着
.src.rpm
软件包。源 RPM 软件包不属于任何特定的架构或发行版。实际的.rpm
软件包构建是基于.src.rpm
软件包进行的。宏:%_srcrpmdir
- BUILDROOT 在
%install
阶段安装在此处。宏:%_buildrootdir
三、打包流程
打包的过程主要分为如下步骤:
- 把源代码放到
%_sourcedir
中。 - 进行编译,编译的过程是在
%_builddir
中完成的,一般情况下,源代码是压缩包格式,需要先进行解压。 - 进行
安装
,类似于预先组装软件包,把软件包应该包含的内容(比如二进制文件、配置文件、man文档等)复制到%_buildrootdir
中,并按照实际安装后的目录结构组装,比如二进制命令可能会放在/usr/bin下,那么就在%_buildrootdir下也按照同样的目录结构放置。 - 做一些必要的配置,比如在实际安装前的准备,安装后的清理等等。这些都是通过配置在SPEC文件中来告诉rpmbuild命令。
- 检查软件是否正常运行。
- 生成的RPM包放置到
%_rpmdir
, 源码包放置到%_srcrpmdir下。
阶段 | 读取的目录 | 写入的目录 | 具体动作 |
---|---|---|---|
%prep | %_sourcedir | %_builddir | 读取位于 %_sourcedir 目录的源代码和 patch 之后,解压源代码至 %_builddir 的子目录并应用所有 patch。 |
%build | %_builddir | %_builddir | 编译位于 %_builddir 构建目录下的文件。通过执行类似 ./configure && make 的命令实现。 |
%install | %_builddir | %_buildrootdir | 读取位于 %_builddir 构建目录下的文件并将其安装至 %_buildrootdir 目录。这些文件就是用户安装 RPM 后,最终得到的文件。 |
%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 包通常用于审核和升级软件包。 |
四、打包选项
通过rpmbuild命令构建软件包。rpmbuild构建软件包一般可以通过构建SPEC文件、tar文件、source文件实现。
rpmbuild命令格式为:rpmbuild [option…]
常用的rpmbuild打包选项如下所示。
Option | Description |
---|---|
-bp specfile | 从specfile 文件的%prep 段开始构建(解开源码包并打补丁)。 |
-bc specfile | 从specfile 文件的%build 段开始构建。 |
-bi specfile | 从specfile 文件的%install 段开始构建。 |
-bl specfile | 从specfile 文件的%files 段开始检查。 |
-ba specfile | 通过specfile 文件构建源码包和二进制包。 |
-bb specfile | 通过specfile 文件构建二进制包。 |
-bs specfile | 通过specfile 文件构建源码包。 |
-rp sourcefile | 从sourcefile 文件的%prep 段开始构建(解开源码包并打补丁)。 |
-rc sourcefile | 从sourcefile 文件的%build 段开始构建。 |
-ri sourcefile | 从sourcefile 文件的%install 段开始构建。 |
-rl sourcefile | 从sourcefile 文件的%files 段开始检查。 |
-ra sourcefile | 通过sourcefile 文件构建源码包和二进制包。 |
-rb sourcefile | 通过sourcefile 文件构建二进制包。 |
-rs sourcefile | 通过sourcefile 文件构建源码包。 |
-tp tarfile | 从tarfile 文件的%prep 段开始构建(解开源码包并打补丁)。 |
-tc tarfile | 从tarfile 文件的%build 段开始构建。 |
-ti tarfile | 从tarfile 文件的%install 段开始构建。 |
-ta tarfile | 通过tarfile 文件构建源码包和二进制包。 |
-tb tarfile | 通过tarfile 文件构建二进制包。 |
-ts tarfile | 通过tarfile 文件构建源码包。 |
--buildroot=DIRECTORY | 在构建时,使用DIRECTORY 目录覆盖默认的/root 目录。 |
--clean | 完成打包后清除BUILD 目录下的文件。 |
--nobuild | 不执行任何实际的构建步骤。可用于测试spec 文件。 |
--noclean | 不执行spec 文件的"%clean" 阶段(即使它确实存在)。 |
--nocheck | 不执行spec 文件的"%check" 阶段(即使它确实存在)。 |
--dbpath DIRECTORY | 使用DIRECTORY 中的数据库,而不是默认的 /var/lib/rpm 。 |
--root DIRECTORY | 使DIRECTORY 为最高级别的路径,默认“/”为最高路径。 |
--rebuild sourcefile | 将安装指定的源代码包sourcefile ,然后进行准备、编译、安装。 |
--recompile sourcefile | 在--recompile 的基础上额外构建一个新的二进制包。在构建结束时,构建目录、源代码和 spec 文件都将被删除(就好像用了 --clean )。 |
-? , --help | 打印详细的帮助信息。 |
--version | 打印详细的版本信息。 |
五、开始构建
5.1. 创建目录结构下载源码
|
|
5.2 编辑 spec 文件
|
|
5.3 打包
|
|
请我喝杯水
微信号
微信打赏