spec文件是整个RPM包建立过程的中心,它的作用就如同编译程序时的Makefile文件。

1.Spec文件參数

spec文件包括建立一个RPM包必需的信息,包括哪些文件是包的一部分以及它们安装在哪个文件夹下。这个文件一般分为例如以下的几节:

(1) Preamle(序言)

序言包括用户请求包的信息时所显示的内容。它能够包括包的功能描写叙述、包的软件版本号、版权信息和所属的包组等。Summary
是一行关于该软件包的描写叙述,Name 是该软件包的基名,Version
是该软件的版本号号,Release 是 RPM 本身的版本号号,假设修复了 spec 文件里的一个错误并公布了该软件同一版本号的新 RPM,就应该添加发行版号。License
应该给出一些许可术语(如:"GPL"、"Commercial"、"Shareware"),Group
标识软件类型。那些试图帮助人们管理 RPM 的程序通常依照组列出 RPM。您能够在usr/share/doc/rpm-4.0.4/GROUPS 文件看到一个 Red Hat 使用的组列表(如果您安装的 RPM 版本号是 4.0.4)。可是您还能够使用那些组名以外的名称。Source0、Source1等等给这些源文件命名(通常为 tar.gz 文件)。%{name}
和 %{version} 是 RPM 宏,它们扩展成为头中定义的 rpm 名称和版本号。

要注意的是,你不要在 Source 语句中包括不论什么路径。缺省情况下,RPM 会在 /usr/src/redhat/SOURCES 中寻找文件,请将您的源文件复制或链接到那里。(要使 spec 文件尽量可移植的话,应当尽量避免嵌入自己开发机器上的假想路径。其它开发者就能够指示 RPM 在别的文件夹下查找源文件,而不用改动您的 spec 文件。)

接下来的部分从 %description 行開始。您应该在这里提供该软件很多其它的描写叙述,这样不论什么人使用 rpm -qi 查询您的软件包时都能够看到它。您能够解释这个软件包做什么,描写叙述不论什么警告或附加的配置指令,等等。

(2) Prep节

Prep 节进行实际的打包准备工作,它是使用节前缀%prep表示的。一般而言,这一节的主要工作是检查标签语法是否正确,删除旧的软件源程序,对包括源程序的 tar文件进行解码。假设包括补丁(patch)文件,将补丁文件应用到解开的源代码中。它一般包括%setup与%patch两个命令。%setup用于将软件源代码包解开,运行%patch可将补丁文件增加解开的源程序中。

%setup

-n newdir---------将压缩的软件源程序在newdir文件夹下解开。

-c ---------------在解开源程序之前先创建文件夹。

-b num------------在包括多个源程序时,将第num个源程序解压缩。

-T----------------不使用缺省的解压缩操作。

比如:

%setup -T -b 0

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

%setup -c -n newdir

/*创建文件夹newdir,并在此文件夹之下解开源程序。*/

%patch

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

-p0-----------指定使用第一个补丁文件,-p1指定使用第二个补丁文件。 -s------------在使用补丁时,不显示不论什么信息。

-b name-------在增加补丁文件之前,将源文件名称上增加name。若为指定此參数,则缺省源文件增加.orig。

-T------------将全部打补丁时产生的输出文件删除。

(3) Build节

这一节主要用于编译源代码,它是使用节前缀%build表示的。这一节一般由多个make命令组成。

(4) Install节

这一节主要用于完毕实际安装软件必须运行的命令,它是使用节前缀%install表示的。这一节通常是由make install指令构成,可是有时也会包括cp、mv、install等指令。

这一节还能指定在用户安装的系统上,包安装时执行的脚本。这种脚本称为安装(卸载)脚本。它能够指定包安装前、包安装后、包除去前、包除去后的系统必须执行的外壳程序段。在用户安装的系统上,为了验证一个包是否已经安装成功的验证脚本也可由这一节指定。

(5) Clean节

这一节所描写叙述的内容表示在完毕包建立的工作之后,自己主动运行此节下的脚本进行附加的清除工作,它是使用节前缀%clean表示的。一般而言,这一节的内容是简单地使用rm -rf $RPM_BUILD_ROOT命令,不须要指定此节的其他内容。

(6) 文件列表

这一节指定构成包的文件的列表,它是使用节前缀%files表示的。此外,它还包括一系列宏控制安装后的文件属性和配置信息。

%files 列出应该捆绑到 RPM 中的文件,并可以可选地设置许可权和其他信息。在 %files 中,您可以使用
%defattr 来定义缺省的许可权、全部者和组;%defattr(-,root,root) 会安装 root 用户拥有的全部文件,使用当 RPM 从构建系统捆绑它们时它们所具有的不论什么许可权。

能够用 %attr(permissions,user,group) 覆盖个别文件的全部者和许可权。能够在 %files 中用一行包含多个文件。能够通过在行中加入
%doc 或 %config
来标记文件。%doc 告诉 RPM 这是一个文档文件,因此假设用户安装软件包时使用 --excludedocs,将不安装该文件。您也能够在 %doc 下不带路径列出文件名称,RPM 会在构建文件夹下查找这些文件并在 RPM 文件里包含它们,并把它们安装到 /usr/share/doc/%{name}-%{version}。以 %doc 的形式包含 README 和 ChangeLog 这种文件是个好主意。

%config 告诉 RPM 这是一个配置文件。在升级时,RPM 将会试图避免用 RPM 打包的缺省配置文件覆盖用户细致改动过的配置。

注意:假设在 %files 下列出一个文件夹名,RPM 会包含该文件夹下的全部文件。通常这不是您想要的,特别对于 /bin 这种文件夹。

(7) 修改日志

这一节主要描写叙述软件的开发记录,它是使用节前缀%changlog表示的。这个段的内容是为了开发者能具体的了解该软件的开发过程,对于包的维护极有优点。

2.Spec文件演示样例与解说

Name: ao_redpacket(CPM名称)
Version: 1(CPM版本号)
Release: 5(RPM 本身的版本号号)
License: Commercial(授权)
Group: commodity(软件类型)
Summary: the main AO module of commodity on basic platform(描写叙述)
Vendor: Tencent(公司)
Packager: timmyye(公布人)
Prefix: /usr/local(前缀路径)
Provides: ao_redpacket(提供)
Requires: platform.framework public_scripts(需求)
Buildroot: /data/htdocs/rpm.paipaioa.com/rpm/data_32/rpm_build/commodity/ao_redpacket_1/build_directory(编译路径) %description(描写叙述)
the main AO module of commodity on basic platform %files(安装后的文件属性和配置信息)
%defattr (-,appadmin,users)(缺省的许可权、全部者和组)
%config /usr/local/c2csvc/svc/ao_redpacket/etc/*
%dir /usr/local/c2csvc/svc/ao_redpacket
%dir /usr/local/c2csvc/svc/ao_redpacket/etc
/usr/local/c2csvc/svc/ao_redpacket/bin
/usr/local/c2csvc/svc/ao_redpacket/no_itil
/usr/local/c2csvc/svc/ao_redpacket/so
/usr/local/c2csvc/so/ao_redpacket.so
/data/applog/ao_redpacket
/usr/local/c2csvc/svc/ao_redpacket/restart_itilid %pre

RPM安装包-Spec文件參数具体解释与演示样例分析的更多相关文章

  1. JSP中文件的上传于下载演示样例

    一.文件上传的原理     1.文件上传的前提:         a.form表单的method必须是post         b.form表单的enctype必须是multipart/form-da ...

  2. 制作MySQL RPM安装包Spec

    适用环境: 数据库版本:MySQL 操作系统:CentOS 7 制作思路: 将数据库初始化和配置工作放到安装脚本中方便定制: 1.打包MySQL应用目录 2.不自动生成配置文件 3.不自动生成数据目录 ...

  3. yum,rpm等失效,使用系统安装包ISO文件降级程序恢复系统

    linux平台:REHL6.7 故障原因:由于不小心使用命令yum update nss误升级了工作平台中nss系列工具包导致系统中yum 和 rpm命令执行都报错. 由于yum rpm命令都不好用使 ...

  4. linux rpm问题:怎样查看rpm安装包的安装路径

      x rpm问题:怎样查看rpm安装包的安装路径 2010-07-12 21:19:15 标签:rpm linux 路径 休闲 职场 rpm -qpl xxxxxx.rpm 1.如何安装rpm软件包 ...

  5. rpm 安装包制作

    rpm 安装包制作 思路 参照系统自带 etcd 解压->替换掉执行文件->打包 1 预备安装工具 下载工具 yumloader #yum install -y yum-utils 解压工 ...

  6. CentOS 6 RPM安装包下载地址

    32位系统的RPM安装包的下载地址 http://mirrors.163.com/centos/6/os/i386/Packages/ 64位系统的RPM安装包的下载地址 http://mirrors ...

  7. 下载谷歌浏览器(Chrome)扩展离线安装包crx文件最简单的方法

    转:http://alyzq.com/?p=627 如果不会使用,请看下面的操作步骤 引言(可以不看): 下面介绍一下,下载谷歌浏览器(Google Chrome)扩展的离线安装包crx文件最简单的方 ...

  8. JMeter 压力測试使用函数和 CSV 文件參数化 json 数据

            在 http Load Testing 中.json 数据的提交是个让人头疼的问题.本文具体介绍怎样进行 JMeter 的 json 測试提交,以及怎样将其參数化.        St ...

  9. Linux定时器工具-crontab 各參数具体解释及怎样查看日志记录

    要使用crontab定时器工具,必需要启动cron服务: service cron start crontab的语法,以备日后救急.先上张超给力的图: crontab各參数说明: -e : 运行文字编 ...

随机推荐

  1. Scripting Java #3:Groovy与invokedynamic

    只需看看今天Groovy语言实现机制.在此之前,是第一个推倒静态类型与动态类型语言在实现上面的一些差异. 静态类型 vs. 动态类型 看以下这个简单的栗子. def addtwo(a, b) { re ...

  2. ibatis实战之OR映射

    相对Hibernate等ORM实现而言,ibatis的映射配置更为简洁直接,以下是一个典型的配置文件. <?xml version="1.0" encoding=" ...

  3. 无法识别的属性“targetFramework”。请注意,属性名是大写和小写。错误的解决方案

    "/CRM"应用server错. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查以下的特定错误具体信息并适当地改动配置文件. 分析器错误消息: 无法识别的属性 ...

  4. java反射机制性能优化

    import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.uti ...

  5. Redis源代码分析(23)--- CRC循环冗余算法RAND随机数的算法

    他今天就开始学习Redis源代码的一些工具来实现,在任何一种语言工具.算法实现的原理应该是相同的,一些比較经典的算法.比方说我今天看的Crc循环冗余校验算法和rand随机数产生算法. CRC算法全称循 ...

  6. 由<a href = "#" > 引发的思考

    原文:由<a href = "#" > 引发的思考 前阵子在一个移动项目中,通过 <a href = "#" >  的方式 绑定clic ...

  7. 在Linux终端下使用代理访问网络(转)

    最近,需要在linux环境下使用脚本进行一些网络访问(主要是HTTP请求与文件下载),于是查阅了一些关于代理的资料. 以下是尝试的几种代理设置方法,以供参考: 一.使用wget命令进行代理访问 wge ...

  8. yate.conf

    但档案.粘贴下面的例子.不解释!除去非常灵活!只保留sip电话! [general] ; General settings for the operation of Yate ; modload: b ...

  9. Bombing HDU, 4022(QQ糖的消法)

    Bombing From:HDU, 4022 Submit Time Limit: 4000/2000 MS (Java/Others)      Memory Limit: 65768/65768 ...

  10. 大约session_cached_cursors在不同的db在默认不同的版本号

    大约session_cached_cursors的值,不同db版本号具有不同的默认值: 9i是 0 10.1 0 10.2 是20 11.1 是50 11.2 是50 12.1 是50 值值得注意的是 ...