制作RPM包

什么是RPM包

RPM包源自于Red Hat Linux 分发版,是Linux下常见的软件包格式之一,RPM包有两种包格式:

  • 扩展名为 .rpm 封装完成的RPM二进制安装包
  • 扩展名为 .src.rpm 包含编译控制文件的SRPM源码包

准备工作环境

构建 RPM 软件包需要做如下准备工作:

  • 一是系统中安装好 rpmbuild 打包工具, 执行命令:yum install rpm-build -y
  • 二是编写一个扩展名为 .spec 文件,该文件指导 rpmbuild 命令如何构建和打包软件。这个文件可以任意地给它命名并把它放到任何地方,RPM对此没有限制。

修改上游源码包

本文作为基础篇,不深入讲解如何编写spec文件,我们可以通过获取上游SRPM包重新编译构建来体会rpm的过程。执行命令:rpm -ivh http://mirrors.ustc.edu.cn/fedora/releases/22/Server/source/SRPMS/b/bc-1.06.95-13.fc22.src.rpm

rpm会把srpm包解压到 ~/rpmbuild/ 目录,其中:

  • spec文件 解压到 ~/rpmbuild/SPECS/ 目录中
  • 补丁和源码解压到 ~/rpmbuild/SOURCES/ 目录中

重新编译源码包

rpmbuild -ba ~/rpmbuild/SPECS/bc.spec

编译完成后,结果会存放在 ~/rpmbuild/SRPM/ ~/rpmbuild/RPM/ 目录中,在这里需要了解一下rpm的环境变量,查看rpm的环境变量 rpm --showrc ,其中 _topdir 定义了工作目录位置,默认是 $HOME/rpmbuild/,该目录下有五个目录:

  • SPECS 放置 .spec 文件
  • SOURCES 放置套件的源码及补丁等
  • BUILD 用于存放解后压合并布补丁的源码目录
  • BUILDROOT 用于存放封装生成的 RPM 安装包的文件
  • RPMS 放置二进制 RPM 安装包 (.rpm)
  • SRPMS 放置源码格式的 RPM包 (.src.rpm)

rpmbuild 工作流程

下面总结了在您运行 rpm -ba filename.spec 时,RPM 都做些什么:

  • 读取并解析 filename.spec 文件
  • 运行 %prep 部分来将源代码解包一个临时目录 (~/rpmbuild/BUILD/XXXX),并应用所有的补丁程序
  • 运行 %build 部分来编译代码
  • 运行 %install 部分将代码安装到一个临时目录(~/rpmbuild/BUILDROOT/XXXX)
  • 读取 %files 部分的文件列表,收集文件并创建二进制和源 RPM 文件。
  • 运行 %clean 部分清楚临时构建目录

results matching ""

    No results matching ""