RPM包设计/架构
每个RPM包由三个基本组件组成:
元数据metadata - 关于包的数据:包的名称,版本,发布,构建器,日期,依赖 ,等等。
文件files - 包提供的文件的存档(包括文件属性)
脚本scripts - 这些脚本在包被安装、更新和/或删除时执行
在构建RPM包时,需要指定关于包的元数据,需要提供归档文件,需要嵌入安装或卸载包时应该运行的脚本。
以下rpm查询对于研究rpm包的结构是很有用的:
rpm -qd - 列出文档文件(%doc)
rpm -qc - list配置文件(%config)
rpm -q --scripts – 列出 %pre, %post, %preun, %poststun脚本。
对于未安装的软件包,使用rpm -qp,多个-p参数
要构建RPM包,您需要一个构建规范文件或规范文件。spec文件只是一个文本文件,其中包含关于如何构建可安装的RPM包的信息。你可以把它大致分为五个部分:
介绍- introduction或前言preamble,列出包的元数据(名称,版本,许可证等)
构建-build指令,它指定了如何编译和准备软件
scriptlets,它指定在安装、卸载或升级时运行的命令
清单- manifest,一个要打包的文件列表,以及它们在包安装时的权限
更新日志- changelog,跟踪对这个RPM包的更改
SPEC文件指令和节
重要的序言指令
name - 包的名称,通常由开发人员选择。
version - 包的版本(通常为数字),通常由开发人员选择。
release - 由打包者选择的包的发布版本。如果您仍然使用相同的软件版本,那么每次您发布新的软件包时,这种情况都会增加。
Group - 包所属的组。请参阅/usr/share/doc/rpm-*/GROUPS查看默认的组集,或者使用你自己的组。这个字段是半废弃的,与yum包组无关。
URL - 开源软件的网页
License - 软件使用的许可证的“短许可证标识符”。
Summary - 对软件的简短的单字描述。(不要超过50个字符。)
Source - 要用作源代码的文件。如果有多个文件用作源文件,则添加一个数字。例如: Source0,Source1、Source2等等。
BuildArch - 构建包时使用的架构。默认为系统架构。一个常见的参数是noarch,这意味着包是独立于体系结构的(通常这些包由脚本或数据文件组成)。
Requires - 此包所依赖的明确要求列表。这可能是文件或其他包的列表,rpmbuild通常可以自动检测大多数库的依赖关系,但在某些情况下,您可能需要列出一个显式的依赖关系。
build requirements - 构建这个包所需的需求列表。这是一个与require语法相似的列表,例如BuildRequires: /usr/bin/gcc, gimp-libs >= 2.6.11。
Spec File Sections
%description部分 - 对软件的详细描述。每行不能超过80个字符,但是可以有多行。
%prep 部分 - 解压和解压缩BUILD目录下的文件。为构建build阶段做好准备。
%build部分 - 构建软件(可选)。如果需要,编译软件。
%install部分-将文件安装在正确的位置。make命令通常使用DESTDIR= R P M B U I L D R O O T 。如果您复制或安装文件,目标文件前通常会有 RPM_BUILD_ROOT。如果您复制或安装文件,目标文件前通常会有 RPMBUILDROOT。如果您复制或安装文件,目标文件前通常会有RPM_BUILD_ROOT,这样软件就会被放置在chroot环境中,为打包做好准备。
%clean部分 - Post建立清理。本节通常包括:rm -rf $RPM_BUILD_ROOT清理chroot环境。
%files部分 - 这里应该包括所有的文件。您可以将rpm -qc和rpm -qd分别显示的文件标记为%config或%doc。
%changelog部分 - 对软件所做的更改的日志。如果使用,包括错误跟踪号码。这些信息可以通过rpm -q --changelog显示。
构建RPM包的五个步骤
构建RPM包的五个步骤:
- Tarball
获取包含源的tar文件。默认的rpmbuild假定存档的顶层目录被命名为%{name}-%{version}。在~/ rpmbuild/SOURCES/目录中放置该文件
- Spec file
创建spec文件并填充所需的字段。将该文件放在/rpmbuild/SPECS/目录中
- rpmbuild
安装rpm-build包,使用rpmbuild命令来构建包(s)。例如,
[user@host BUILD]$ rpmbuild-ba …/SPECS/demo.spec
- Sign
使用GPG密钥对RPM包进行签名。构建包之后,使用rpm --resign demo-1.0-1.x86_64.rpm添加(或更改)GPG签名
- Test
通过在开发系统上安装它来测试包,以确保正确的负载、脚本等。