RPM 包的构建 - SPEC 基础知识

本文详细介绍了RPM软件包的构建过程,重点讲解了SPEC文件的各个部分,包括文件头、RPM包信息查看、包依赖、%prep、%build、%install、%files阶段以及%clean和%changelog。文中还提到了BuildRequires和Requires的区别,以及BuildRoot的重要性。此外,讨论了宏和变量的使用,如%{?dist}的含义。
摘要由CSDN通过智能技术生成

RPM 系列文章:

spec 文件

制作 rpm 软件包并不是一件复杂的工作,其中的关键在于编写软件包的 spec 描述文件。

要想制作一个 rpm 软件包就必须写一个软件包描述文件 spec。这个文件中包含了软件包的诸多信息,如:软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。

实际过程中,最关键的地方,是要清楚虚拟路径的位置,以及宏的定义。

文件头

这个区域定义的 NameVersion 这些字段对应的值可以在后面通过 %{name},%{version} 这样的方式来引用,类似于 C 语言中的宏

  • Summary:用一句话概括该软件s包尽量多的信息。
  • Name:软件包的名字,最终 rpm 软件包是用该名字与版本号(Version)、释出号(Release)及体系号来命名软件包的,后面可使用 %{name} 的方式引用
  • Version:软件版本号。仅当软件包比以前有较大改变时才增加版本号,后面可使用%{version}引用
  • Release:软件包释出号/发行号。一般我们对该软件包做了一些小的补丁的时候就应该把释出号加 1,后面可使用 %{release} 引用
  • Packager:打包的人(一般喜欢写个人邮箱)
  • Vendor:软件开发者的名字,发行商或打包组织的信息,例如RedFlagCo,Ltd
  • License:软件授权方式,通常是GPL(自由软件)或GPLv2,BSD
  • Copyright:软件包所采用的版权规则。具体有:GPL(自由软件)BSDMITPublic Domain(公共域)Distributable(贡献)commercial(商业)Share(共享)等,一般的开发都写 GPL
  • Group:软件包所属类别
    • Development/System (开发/系统)
    • System Environment/Daemons (系统环境/守护)
  • Source:源程序软件包的名字/源代码包的名字,如 stardict-2.0.tar.gz。可以带多个用 Source1Source2 等源,后面也可以用 %{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
       
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值