RPM 系列文章:
spec 文件
制作 rpm 软件包并不是一件复杂的工作,其中的关键在于编写软件包的 spec 描述文件。
要想制作一个 rpm 软件包就必须写一个软件包描述文件 spec。这个文件中包含了软件包的诸多信息,如:软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。
实际过程中,最关键的地方,是要清楚虚拟路径的位置,以及宏的定义。
文件头
这个区域定义的 Name
、Version
这些字段对应的值可以在后面通过 %{name}
,%{version}
这样的方式来引用,类似于 C 语言中的宏
Summary
:用一句话概括该软件s包尽量多的信息。Name
:软件包的名字,最终 rpm 软件包是用该名字与版本号(Version
)、释出号(Release
)及体系号来命名软件包的,后面可使用%{name}
的方式引用Version
:软件版本号。仅当软件包比以前有较大改变时才增加版本号,后面可使用%{version}
引用Release
:软件包释出号/发行号。一般我们对该软件包做了一些小的补丁的时候就应该把释出号加 1,后面可使用%{release}
引用Packager
:打包的人(一般喜欢写个人邮箱)Vendor
:软件开发者的名字,发行商或打包组织的信息,例如RedFlagCo,Ltd
License
:软件授权方式,通常是GPL(自由软件)或GPLv2,BSDCopyright
:软件包所采用的版权规则。具体有:GPL(自由软件)
,BSD
,MIT
,Public Domain(公共域)
,Distributable(贡献)
,commercial(商业)
,Share(共享)
等,一般的开发都写GPL
。Group
:软件包所属类别- Development/System (开发/系统)
- System Environment/Daemons (系统环境/守护)
Source
:源程序软件包的名字/源代码包的名字,如stardict-2.0.tar.gz
。可以带多个用Source1
、Source2
等源,后面也可以用%{source1}
、%{source2}
引用
Source0: %{name}-boost-%{version}.tar.gz ← 源码包名称(可以使用URL),可以用SourceN指定多个,如配置文件
#Patch0: some-bugs0.patch ← 如果需要打补丁,则依次填写
#Patch1: some-bugs1.patch ← 如果需要打补丁,则依次填写
BuildRequires
: 制作过程中用到的软件包,构建依赖Requires
: 安装时所需软件包Requires(pre)
: 指定不同阶段的依赖
BuildRoot
: 这个是安装或编译时使用的「虚拟目录」,打包时会用到该目录下文件,可查看安装后文件路径,例如:BuildRoot: %_topdir/BUILDROOT
。Prefix: %{_prefix}
这个主要是为了解决今后安装 rpm 包时,并不一定把软件安装到 rpm 中打包的目录的情况。这样,必须在这里定义该标识,并在编写%install
脚本的时候引用,才能实现 rpm 安装时重新指定位置的功能BuildArch
: 指编译的目标处理器架构,noarch
标识不指定,但通常都是以/usr/lib/rpm/marcros
中的内容为默认值%description
:软件包详细说明,可写在多个行上。这样任何人使用rpm -qi
查询您的软件包时都可以看到它。您可以解释这个软件包做什么,描述任何警告或附加的配置指令,等等。URL
:软件的主页
RPM 包信息查看
我通过命令查看了 nginx 包的信息,如下:
# 查看头部信息
$ rpm -qpi ./nginx-1.12.2-2.el7.x86_64.rpm
Name : nginx
Epoch : 1
Version : 1.12.2
Release : 2.el7
Architecture: x86_64
Install Date: (not installed)
Group : System Environment/Daemons
Size : 1574949
License : BSD
Signature : RSA/SHA256, Tue 06 Mar 2018 05:44:06 PM CST, Key ID 6a2faea2352c64e5
Source RPM : nginx-1.12.2-2.el7.src.rpm
Build Date : Tue 06 Mar 2018 05:27:44 PM CST
Build Host : buildhw-02.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager : Fedora Project
Vendor : Fedora Project
URL : http://nginx.org/
Bug URL : https://bugz.fedoraproject.org/nginx
Summary : A high performance web server and reverse proxy server
Description :
Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and
IMAP protocols, with a strong focus on high concurrency, performance and low
memory usage.
# 查看脚本内容
$ rpm --scripts -qp ./nginx-1.12.2-2.el7.x86_64.rpm
postinstall scriptlet (using /bin/sh):
if [ $1 -eq 1 ] ; then