RPM构建 - SPEC文件参数解析

48 篇文章 7 订阅
订阅专栏

1. RPM构建 - 介绍
2.  RPM构建 - SPEC文件参数解析
3.  RPM构建 - 简单实例
4.  RPM构建 – 源码编译
 

通常,供Linux使用的源代码包还提供一个名为 { 软件名称 }.spec 的文件,即spec文件。如果提供spec文件,则该源代码还可以直接编译成RPM包。

spec文件只是一个具有特殊语法的文本文件。

spec文件中包含了软件包的诸多信息,如软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作,以及软件包所要包含的文件列表等。

1     文件头

一般的spec文件头包含以下几个域:

1.1   Name

描述:

        软件包的名称,后面可使用%{name}的方式引用

格式:

Name:          <software name>

1.2   Version

描述:

        软件包的名称,后面可使用%{name}的方式引用软件包版本号,后面可使用%{version}引用

格式:

Version:          <software version>

1.3   Release

描述:

        软件包的发行号,后面可使用%{release}引用

格式:

Release:          <software release>

1.4   Packager

描述:

        打包的人(一般喜欢写个人邮箱)

格式:

Summary: helloword #描述信息/软件包简介,最好不超过50字符

1.5   License

描述:

        软件授权方式,通常是GPL(自由软件)或GPLv2,BSD

格式:

License:          GPL

1.6   Summary

描述:

        打包的人(一般喜欢写个人邮箱)

格式:

Packager:          lewiyon@126.com

1.7   Group

描述:

        软件包所属类别

格式:

Group:       Applications/Multimedia

具体类别:

  • Amusements/Games(娱乐/游戏)
  • Amusements/Graphics(娱乐/图形)
  • Applications/Archiving(应用/文档)
  • Applications/Communications(应用/通讯)
  • Applications/Databases(应用/数据库)
  • Applications/Editors(应用/编辑器)
  • Applications/Emulators(应用/仿真器)
  • Applications/Engineering(应用/工程)
  • Applications/File(应用/文件)
  • Applications/Internet(应用/因特网)
  • Applications/Multimedia(应用/多媒体)
  • Applications/Productivity(应用/产品)
  • Applications/Publishing(应用/印刷)
  • Applications/System(应用/系统)
  • Applications/Text(应用/文本)
  • Development/Debuggers(开发/调试器)
  • Development/Languages(开发/语言)
  • Development/Libraries(开发/函数库)
  • Development/System(开发/系统)
  • Development/Tools(开发/工具)
  • Documentation (文档)
  • SystemEnvironment/Base(系统环境/基础)
  • SystemEnvironment/Daemons (系统环境/守护)
  • SystemEnvironment/Kernel (系统环境/内核)
  • SystemEnvironment/Libraries (系统环境/函数库)
  • SystemEnvironment/Shells (系统环境/接口)
  • UserInterface/Desktops(用户界面/桌面)
  • User Interface/X(用户界面/X窗口)
  • User Interface/XHardware Support (用户界面/X硬件支持)

1.8   Source0

描述:

        源代码包的名字

格式:

Source0:       %{name}-%{version}.tar.gz

1.9   BuildRoot

描述:

        编译的路径。是安装或编译时使用的“虚拟目录”,考虑到多用户的环境,一般定义为:

        该参数非常重要,因为在生成rpm的过程中,执行make install时就会把软件安装到上述的路径中,在打包的时候,同样依赖“虚拟目录”为“根目录”进行操作(即%files段)。

        后面可使用$RPM_BUILD_ROOT 方式引用。

格式:

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-buildroot        

1.10     URL

描述:

         软件的主页

格式:

URL: <web-site>

1.11     Vendor

描述:

 发行商或打包组织的信息,例如RedFlagCo,Ltd

格式:

Vendor: <RedFlag Co,Ltd>

1.12     Provides

描述:

 指明本软件一些特定的功能,以便其他rpm识别

格式:

Provides: <features>

 

2     依赖关系

依赖关系定义了一个包正常工作需要依赖的其他包,RPM在升级、安装和删除的时候会确保依赖关系得到满足。rpm支持4种依赖:

Ø  Requirements, 包依赖其他包所提供的功能

Ø  Provides, 这个包能提供的功能

Ø  Conflicts, 一个包和其他包冲突的功能

Ø  Obsoletes, 其他包提供的功能已经不推荐使用了,这通常是其他包的功能修改了,老版本不推荐使用了,可以在以后的版本中会被废弃。

2.1   定义依赖关系

定义依赖关系的语法是:

Requires: capability
Provides: capability
Obsoletes: capability
Conflicts: capability

大部分时候,capability应该是所依赖的包的名称。一行中也可以定义多个依赖,比如:

Requires: tbsys tbnet

2.2   指定依赖的版本号

在指定依赖关系的时候还可以指定版本号,比如:

Requires: tbsys >= 2.0

rpm支持的比较.

2.3   Requires

描述:

所依赖的软件包名称, 可以用>=或<=表示大于或小于某一特定版本。 “>=”号两边需用空格隔开,而不同软件名称也用空格分开。

格式:

Requires:       libpng-devel >= 1.0.20 zlib

其它写法例如:

Requires: bzip2 = %{version}, bzip2-libs =%{version}

Requires: perl(Carp)>=3.2       #需要perl模块Carp

还有例如PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都是针对不同阶段的依赖指定。

例如:

     PreReq: capability>=version      #capability包必须先安装
     Conflicts:bash>=2.0                 #该包和所有不小于2.0的bash包有冲突

2.4   BuildRequires

描述:

编译时的包依赖

格式:

BuildRequires: zlib-devel

依赖包格式: 

 

3     说明%description

软件包详细说明,可写在多个行上。

%description
Consul feature - Service Discovery, HealthChecking, KV, Multi Datacenter

4     预处理%prep

预处理通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。%prep和下面的%build,%install段一样,除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令。功能上类似于./configure。

作用:

用来准备要编译的软件。通常,这一段落将归档中的源代码解压,并应用补丁。这些可以用标准的 shell 命令完成,但是更多地使用预定义的宏。

检查标签语法是否正确,删除旧的软件源程序,对包含源程序的tar文件进行解码。如果包含补丁(patch)文件,将补丁文件应用到解开的源码中。它一般包含%setup与%patch两个命令。%setup用于将软件包打开,执行%patch可将补丁文件加入解开的源程序中。

4.1   宏%setup

这个宏解压源代码,将当前目录改为源代码解压之后产生的目录。这个宏还有一些选项可以用。例如,在解压后,%setup 宏假设产生的目录是%{name}-%{version}

 如果 tar 打包中的目录不是这样命名的,可以用 -n 选项来指定要切换到的目录。例如:

%setup -n%{name}-April2003Rel
%setup-q---------将 tar 命令的繁复输出关闭。

%setup -nnewdir---------将压缩的软件源程序在newdir目录下解开。
%setup -c---------------在解开源程序之前先创建目录。
%setup -bnum------------在包含多个源程序时,将第num个源程序解压缩。
%setup -T----------------不使用缺省的解压缩操作。

例如:

%setup -T -b 0

//解开第一个源程序文件。

%setup -c -nnewdir

//创建目录newdir,并在此目录之下解开源程序。

4.2   宏%patch

这个宏将头部定义的补丁应用于源代码。如果定义了多个补丁,它可以用一个数字的参数来指示应用哪个补丁文件。它也接受 -b extension 参数,指示 RPM 在打补丁之前,将文件备份为扩展名是 extension 的文件。

%patchN----------这里N是数字,表示使用第N个补丁文件,等价于%patch-P N

-p0--------------指定使用第一个补丁文件,-p1指定使用第二个补丁文件。

-s---------------在使用补丁时,不显示任何信息。

-bname----------在加入补丁文件之前,将源文件名上加入name。若为指定此参数,则缺省源文件加入.orig。

-T---------------将所有打补丁时产生的输出文件删除

5     编译%build

定义编译软件包所要执行的命令, 这一节一般由多个make命令组成。

作用:

在这个段落中,包含用来配置和编译已配置的软件的命令。与 Prep 段落一样,这些命令可以是 shell 命令,也可以是宏。

如果要编译的宏使用了 autoconf,那么应当用 %configure 宏来配置软件。这个宏自动为 autoconf 指定了安装软件的正确选项,编译优化的软件。

如果软件不是用 autoconf 配置的,那么使用合适的 shell 命令来配置它。

软件配置之后,必须编译它。由于各个应用程序的编译方法都各自不同,没有用来编译的宏。只要写出要用来编译的 shell 命令就可以了。

环境变量 $RPM_OPT_FLAGS 在编译软件时很常用。这个 shell 变量包含针对 gcc 编译器套件的正确的优化选项,使用这样的语法:

makeCC="gcc $RPM_OPT_FLAGS"

或者

makeCFLAGS="$RPM_OPT_FLAGS"

就可以保证总是使用合适的优化选项。也可以使用其他编译器标志和选项。默认的 $RPM_OPT_FLAGS 是:

-O2 -g-march=i386 -mcpu=i686

6     安装%install

定义在安装软件包时将执行命令,类似于make install命令。有些spec文件还有%post-install段,用于定义在软件安装完成后的所需执行的配置工作。

作用:

这个段落用于将已编译的软件安装到虚拟的目录结构中,从而可以打包成一个 RPM。

在 Header 段落,可以定义 Buildroot,它定义了虚拟目录树的位置,软件将安装到那里。通常,它是这样的:

Buildroot:%{_tmppath}/%{name}-buildroot

使用 RPM 内建的宏来指定 /var/tmp 目录中一个私用的目录。

在 spec 文件的其余部分可以用 shell 变量 $RPM_BUILD_ROOT 获取 Buildroot 的值。

mkdir -p$RPM_BUILD_ROOT/usr/share/icons/

cp %{SOURCE3}$RPM_BUILD_ROOT/usr/share/icons/

Install 段落通常列出要将已编译的软件安装到 Buildroot 中的命令

宏 %makeinstall 可以用于安装支持 autoconf 的软件。这个软件自动地将软件安装到 $RPM_BUILD_ROOT 下的正确的子目录中。

有时,软件包必须被构建多次,由于打包错误或其他原因。每次构建时,Install 段落将复制文件到 Buildroot 中。要防止由于 Buildroot 中的旧文件而导致错误的打包,必须在安装新文件之前将 Buildroot 中任何现有的文件删除。为此,可以使用一个 clean 脚本。这个脚本通常以 %clean 标记表示,通常仅仅包含这样一句:

rm -rf$RPM_BUILD_ROOT

如果有的话,在制作了在 Install 段落中安装的文件的打包之后,将运行 %clean,保证下次构建之前 Buildroot 被清空。

7     清理%clean

%clean

rm-rf $RPM_BUILD_ROOT

8     文件%files

定义软件包所包含的文件,分为三类:说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别。

这里会在虚拟根目录下进行,千万不要写绝对路径,而应用宏或变量表示相对路径。 如果描述为目录,表示目录中除%exclude外的所有文件。
%defattr (-,root,root) 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755

9     更新日志%changelog

每次软件的更新内容可以记录在此到这里,保存到发布的软件包中,以便查询之用。

RPM 包的构建 - SPEC 基础知识
MichaelHH
03-06 624
RPM 系列文章: Tag/RPM spec 文件 制作 rpm 软件包并不是一件复杂的工作,其中的关键在于编写软件包的 spec 描述文件。 要想制作一个 rpm 软件包就必须写一个软件包描述文件 spec。这个文件中包含了软件包的诸多信息,如:软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。 实际过程中,最关键的地...
python-pbr:RPMRPM SPEC文件源-python source file
03-25
它提供了自动化处理版本信息、依赖关系解析、设置元数据等功能,使得创建RPM SPEC文件变得更加方便。RPM SPEC文件RPM包管理系统中用于定义软件包构建和安装规则的配置文件。 在Python-PBR中,RPM SPEC文件的源...
linux rpm 包制作
whyhonest的专栏
12-04 1030
========================================================================== Summary:   the package for ums Name:      hjbfile Version:   1.0.1 Release:   1 License:   GPL Group:     System Sou
RPM打包全过程SPEC详解
02-23
描述了将java项目根据SPEC文件配置打包成RPM包,安装,卸载全过程
开源项目 SPEC 使用教程
最新发布
gitblog_00801的博客
08-31 347
开源项目 SPEC 使用教程 specA specification for javascript tasks.项目地址:https://gitcode.com/gh_mirrors/spec20/spec 项目介绍 SPEC(Standard Performance Evaluation Corporation)是一个用于评估计算机系统性能的标准化组织。该项目在 GitHub 上的链接为:ht...
RPMrpmbuild SPEC文件深度说明
铁锹在手,天下我有
03-05 336
上一篇日志写到,为什么要制作rpm包,以及如何使用.src.rpm文件生成rpm包。最后部分还看到.src.rpm的内容,实际上 就是由.tar.gz源码、补丁软件和.spec脚本组成的。由此知道,使用.spec生成rpm包是比较简单的,因为.src.rpm通常都是由软件开 发者或者第三方的专业制作人根据源码调试好的,所以,只要处理好平台兼容性和相关的版本,不会遇到太大的问题。 但我觉得...
SPEC文件
04-27 700
SPEC文件spec文件是整个RPM包建立过程的中心,它的作用就如同编译程序时的Makefile文件spec文件包含建立一个RPM包必需的信息,包括哪些文件是包的一部分以及它们安装在哪个目录下。这个文件一般分为如下的几节:(1) Preamle(序言)序 言包含用户请求包的信息时所显示的内容。它可以包含包的功能描述、包的软件版本、版权信息和所属的包组等。Summary 是一行关于该软
rpm spec
WolfMan_SunnyWolf的专栏
11-13 550
t_dp_dw-service-alarm-impl.spec Name: t_dp_dw-service-alarm-impl Version:0.1.1 Release: %(echo $RELEASE) Summary: this is web ui of alarm Group: t_dp License: Commercial %define _jboss_dir
rpmbuild之spec文件说明
01-02 5201
FAQ: 1.如何定义变量? %define author zuosi #定义了一个变量author,值为zuosi 2.编译rpm包需要使用到的目录? 目录名 说明 macros中的宏名 BUILD 编译rpm包的临时目录 %_builddir BUILDROOT 编译后生成的软件临时安装目录 %_buildrootdir RPMS 最终生成的可安装rpm包的所在目录 %
python-rpm-spec:用于解析RPM规范文件的Python模块
05-10
python-rpm-spec是用于解析RPM规范文件的Python库。 tl; dr如果要在命令行上快速解析规范文件,则可能需要给rpmspec --parse一个尝试。 $ rpmspec --parse file.spec | awk ' /Source/ {print $2} ' 如果您编写...
RPM打包详解与SPEC文件解析
RPM打包涉及创建SPEC文件,这是一个文本文件,包含了构建RPM包的详细指令。SPEC文件的结构和语法是RPM打包的关键。它定义了软件的元数据,如版本、作者、许可证,以及构建、安装和清理步骤。例如,`%setup`用于解压...
RPM打包技术与典型SPEC文件分析
07-18
RPM打包过程中,`SPEC`文件扮演着核心角色,它包含了构建RPM软件包的所有必要信息。 `SPEC`文件是一种文本文件,遵循特定的语法和结构,用于定义软件包的元数据、构建步骤以及安装时的行为。一个基本的`SPEC`文件...
如何制作rpm文件
派的无理性
09-08 2087
如何制作rpm文件        内容:一 、rpm 介绍二.典型spec文件分析杨爱林Linux 研发工程师2005 年 7 月    本文分为两部分,第一部分阐述了 rpm 工具的功能以及 rpmbuild 工具,详细的介绍了 spec文件的书写规则以及关键部分,第二部分对一个典型的 spec 文件做了详细的分析。 一 、rpm 介绍1. 概述RPM全称是 Red Hat Package Ma
LINUX学习笔记之RPM打包
上善若水的博客
05-21 837
整理日期:2016年7月11日 http://rpmfind.net/ http://rpm.pbone.net linux-rpm 打包之helloworld http://www.worldhello.net/2011/04/02/2405.html :此处致敬~ 一、rpm打包准备工作 rpm打包需要一个独立的打包目录 目录结构: BUILD, BUILDROOT, RPMS, SOURCES, SPECS, SRPMS 创建该目录命令: mkdir -pv ~/rpmbuild/{BUILD,BUI
spec文件
热门推荐
SundayO的博客
09-29 1万+
spec文件 spec文件是配置规范文件,是RPM软件包编译过程的核心,它说明了软件包如何被配置、打那些补丁、安装哪些文件、安装到哪里、安装过程需要哪些系统级别活动。 参数说明 相关链接: https://zh.opensuse.org/openSUSE:Specfile_guidelines ...
写文章

热门文章

  • 【NAS】NFS客户端挂载目录后无写入权限的解决方案 61996
  • 访问远程共享文件时“连到系统上的设备没有发挥作用”错误解决方法 61773
  • 什么是云原生 53065
  • phpmyadmin的初始账号密码是多少 51378
  • python中os.system()的返回值 35931

分类专栏

  • 数据湖 65篇
  • 人工智能 21篇
  • 向量数据库 4篇
  • 数据存储 121篇
  • 存储行业趋势研究 42篇
  • 深入理解CEPH 50篇
  • NAS笔记 22篇
  • 深入理解ext4 39篇
  • 存储工具 11篇
  • DAOS系列 6篇
  • 论文导读 6篇
  • 研究报告白皮书 5篇
  • Linux运维入门教程 30篇
  • 算法编程 30篇
  • C编程百分百 12篇
  • Python 12篇
  • 进程间通信编程 16篇
  • 内核驱动 69篇
  • Consul笔记 21篇
  • 云原生 6篇
  • 维护与工具 48篇
  • Git教程 10篇
  • 智能计算 33篇
  • Alluxio 1篇
  • 研发管理 22篇
  • Aha! Info-Tech. 17篇

最新评论

  • Goland无法使用debug的修复

    CSDN-Ada助手: Go 技能树或许可以帮到你:https://edu.csdn.net/skill/go?utm_source=AI_act_go

  • 存算一体:架构创新,打破算力极限

    奋斗的小王同学a: 您好,请问PPT可以分享一下吗,谢谢

  • 【NAS】NFS中的fsid如何理解

    - -439: 说了等于没说

  • Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_P

    qq_54917699: 没用。。输入openssl version 返回还是OpenSSL 1.1.1k 25 Mar 2021

  • 内存计算研究进展-针对机器学习的近数据计算架构

    白话机器学习: 通过文章可以看出,博主很有耐心,技术文章不仅是对技术的坚守,更是对知识的热忱和热爱,感谢您的优质分享和坚持更文。期待着博主更加深入的剖析,为大家带来更多的技术好文。

最新文章

  • Goland无法使用debug的修复
  • 是否可以跟随POD的回收而回收PV PVC资源
  • 跨域数据分布式传输关键技术研究
2024
09月 1篇
08月 1篇
07月 6篇
06月 7篇
05月 1篇
04月 2篇
03月 20篇
02月 29篇
2023年74篇
2022年109篇
2021年2篇
2020年9篇
2019年6篇
2018年19篇
2017年65篇
2016年101篇
2014年46篇
2013年96篇
2012年26篇
2011年16篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoungerChina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢卡通公仔雕塑厂五一家电商场美陈布置西藏玻璃钢仿真水果雕塑订购玻璃钢雕塑石家庄大型玻璃钢雕塑焦作专业玻璃钢彩绘雕塑商场中庭美陈吊顶造型简单好看厦门玻璃钢雕塑厂家福建超市商场美陈哪家好玻璃钢蘑菇雕塑报价洛阳铜玻璃钢雕塑四川超市商场美陈市场报价郑州小区玻璃钢雕塑价格湖北玻璃钢雕塑多少钱北京玻璃钢动物雕塑厂家五华区玻璃钢雕塑设计公司贵不贵通化动物玻璃钢雕塑生产厂家主题玻璃钢雕塑手工制作清镇玻璃钢雕塑厂有哪些嘉兴玻璃钢海豚雕塑贵州玻璃钢景观雕塑定制广州气球玻璃钢雕塑工艺品抚州户外玻璃钢雕塑哪家便宜立山玻璃钢花盆花器玻璃钢花盆组合定制户外装饰玻璃钢卡通形象雕塑精巧的玻璃钢花盆怀柔玻璃钢花盆花器临沧市玻璃钢雕塑批发厂家上虞玻璃钢造型雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化