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,LtdLicense:软件授权方式,通常是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
# Initial installation
systemctl preset nginx.service >/dev/null 2>&1 || :
fi
p

本文详细介绍了RPM软件包的构建过程,重点讲解了SPEC文件的各个部分,包括文件头、RPM包信息查看、包依赖、%prep、%build、%install、%files阶段以及%clean和%changelog。文中还提到了BuildRequires和Requires的区别,以及BuildRoot的重要性。此外,讨论了宏和变量的使用,如%{?dist}的含义。
最低0.47元/天 解锁文章
220

被折叠的 条评论
为什么被折叠?



