龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

RPM制作宝典(1)

时间:2011-03-20 22:37来源:未知 作者:admin 点击:
分享到:
作者:雨亦奇 ,赵建利 要想制作一个RPM格式的软件包,需要编写软件包描述文件。其标准命名格式为:软件名-版本号-释出号.spec,这个文件,详细描述了有关该软件包的诸多信息,如软件名

  作者:雨亦奇 ,赵建利 

  要想制作一个RPM格式的软件包,需要编写软件包描述文件。其标准命名格式为:软件名-版本号-释出号.spec,这个文件,详细描述了有关该软件包的诸多信息,如软件名,版本,类别,说明摘要,创建时要执行什么指令,安装时要执行什么操作,以及软件包所要包含的文件等等。有了这个文件,RPM就可以制作出相应的包裹文件来。

  下面以我制作小赵编辑器LZE的软件包(lze-6.0-2.i386.rpm)为例,详细说明一下软件包描述文件的书写。其描述文件为lze-6.0-2.spec,该文件内容如下:(用nl -ba命令列出,每行开头的数字为所在行在文件中的行号)

  1 # 文件名称: lze-6.0-2.spec

  2 # 文件功能: lze软件包描述信息

  3 # 文件作者: 纵横软件制作中心雨亦奇 国防大学研究生二队赵建利

  4 # 修改时间: 2001.10.19

  5

  6 Name: lze

  7 Version: 6.0

  8 Release: 2

  9 Summary: 小赵全屏幕中英文多窗口多功能编辑器(LINUX/UNIX系统适用)

  10 Group: Applications/Editors

  11 License: Share

  12 Vendor: 纵横软件制作中心

  13 Packager: 雨亦奇(zhsoft@371.net)

  14 Source: http://zhsoft.myetang.com/lze-6.0-2.src.tgz

  15 Prefix: /usr

  16 Requires: /bin/sh

  17 Provides: lze-edit

  18

  19 %description

  20 小赵编辑器,是为使用SCO UNIX,LINUX多用户系统的广大用户专门设计的全屏幕多窗

  21 口中英文多功能编辑器。

  22 它主要有以下十大特点:1.全屏幕菜单操作。2.显示方式多样。3.块操作丰富。4.十

  23 字制表功能强大。5.多窗口操作灵活自如。6.文件操作功能齐全。7.解释输出功能独具特

  24 色。8.自带中文输入法(增强五笔和增强拼音),实用方便。9.十六进制编辑功能,如虎

  25 添翼。10.即时翻译,按到即译。

  26 总之,小赵编辑器会成为您在UNIX,LINUX系统上编制程序和书写一般性文稿的好帮手。

  27 它将在工作中助您一臂之力,轻松上阵,游刃有余!

  28

  29 %prep

  30 echo "预处理脚本程序(prep)开始执行"

  31 %setup

  32

  33 %build

  34 echo "编译连接脚本程序(build)开始执行"

  35 make

  36

  37 %install

  38 echo "安装脚本程序(install)开始执行"

  39 make install

  40

  41 %clean

  42 echo "建包结束后清理脚本程序(clean)开始执行"

  43

  44 %pre

  45 echo "安装前执行脚本程序(pre)开始执行"

  46

  47 %post

  48 echo "安装后执行脚本程序(post)开始执行"

  49

  50 %preun

  51 echo "卸载前执行脚本程序(preun)开始执行"

  52

  53 %postun

  54 echo "卸载后执行脚本程序(postun)开始执行"

  55

  56 %veryfiscript

  57 echo "软件包校验脚本程序(verifyscript)开始执行"

  58

  59 %triggerin -- xiuwu

  60 echo "软件包安装时触发脚本程序(triggerin)开始执行"

  61

  62 %triggerun -- yuntaishan < 2.0

  63 echo "软件包卸载前触发脚本程序(triggerun)开始执行"

  64

  65 %triggerpostun -- dapubu

  66 echo "软件包卸载后触发脚本程序(triggerpostun)开始执行"

  67

  68 %files

  69 %defattr (-,root,root)

  70 %config /etc/funkey.def

  71 %config /etc/inputme.def

  72 %doc /usr/doc/lze-6.0/README

  73 %doc /usr/doc/lze-6.0/LICENSE

  74 /usr/bin/lze

  75 /usr/bin/lzeime.py

  76 /usr/bin/lzeime.wb

  77 /etc/wbzc.dat

  78

  79 %changelog

  80 * Tue Aug 18 1998 雨亦奇

  81 - 内置拼音,五笔输入法

  82 * Fri May 01 1998 雨亦奇

  83 - 增加多窗口操作

  84 * Mon Mar 24 1997 雨亦奇

  85 - 增加块操作命令

  86

  该描述文件包括以下几方面的内容:

  一、注释行

  见第1-4行。

  它以#号开头,起注解作用,可帮助用户理解所写的内容,但对软件包的生成不起任何作用。此文件中,注释行集中在文件首部。实际上,它可位于描述文件的任何位置。

  二、文件头

  见第6-17行。

  文件头描述软件包的基本信息,它包含若干个域,其中有必选的域,也有可选的域。一个域占用一行,其描述格式为:

  域名 : 域值

  注意: 域名不分大小写,并且域值不能为空。

  文件头必选域有以下六个:

  1. Name :

  此域定义软件名。

  2. Version :

  此域定义版本号。仅当软件较以前有较大改变时才增加版本号。注: 版本号中不能含减号(-)字符。

  3. Release :

  此域定义释出号。若软件较以前改变较小,则仅增加释出号,不改变版本号。注: 释出号中亦不能含减号(-)字符。

  RPM利用上述的Name(软件名),Version(版本号),Release(释出号)及体系号来命名软件包,如本例输出的包裹文件名为lze-6.0-2.i386.rpm。

  4. Summary :

  此域定义软件包简介,为一句话说明。

  5. Group :

  此域定义软件所属类别,详见<>,本例的Applications/Editors表示本软件属"应用/编辑器"类。

  6. License :

  此域定义软件适用的许可证或版权规则。该域也可用Copyright(版权)来定义,二者同意。许可证具体有: GPL(通用公共许可证,自由软件适用),BSD,MIT,Public Domain(公共域),Distributable(贡献),Commercial(商业),Share(共享)等。

  文件头可选的域包括如下几类:

  1. 基本信息

  1.1 Vendor :

  此域定义软件的供应商(销售商)。

  1.2 Distribution :

  此域定义软件所属的发行版,这是软件包制作者自己的分类。通常,一个发行版由若干个软件包构成。如我想做一个名为“熊猫'95”的发行版,则其中每个软件包(如竹叶95)的描述文件都应有这么一行:

  Distribution : 熊猫'95

  1.3 Icon :

  此域指定软件包所用的图标文件名。此文件为GIF或XPM格式,必须存放在RPM的%_sourcedir(源码目录)宏所指示目录下,默认为/usr/src/dist/SOURCES。RPM本身并不使用图标,但它将图标文件内容存贮到包裹文件中,安装时亦存贮到RPM数据库中。此图标可被图形界面的RPM包管理工具使用,用以改善界面效果,增加可视性。如下例指示软件包使用panda.xpm作为图标:

  Icon : panda.xpm

  1.4 Packager :

  此域定义打包者,亦即建立此软件包的人或公司。书写格式是:

  打包者的名字

  请参考描述文件第13行。

  1.5 Serial :

  此域定义软件序列号,也可使用域名Epoch。软件序列号为一整数,由打包者指定,它应随着版本号的增加而不断增加,并且始终保持数值的唯一。软件序列号可被用来说明软件包之间的依赖关系。下例指定软件包序列号为4:

  Serial : 4

  或用:

  Epoch : 4

  1.6 URL :

  此域定义包含打包软件有关信息的网页地址。如:

  URL : http://devplanet.fastethernet.net/gxedit.html

  2. 依赖相关

  依赖是RPM用来描述软件包之间关系的。一个软件包依赖的东西RPM称作功能,它可以是真实存在的软件包,也可以是虚拟的软件包(虚包)。虚包没有版本号。

  依赖相关的域有:

  2.1 Provides :

  此域定义软件包提供的功能,可重复多行。其描述格式为:

  Provides : 功能1 [,功能2] ...

  注: []所括为可选项,多个功能之间以逗号或空格分隔。

  软件包所提供的功能一般是以虚包形式存在的共享库。当有多个软件包均提供相同的服务时,常用虚包来表示其服务。如,一个邮件客户端软件允许用户使用不同的看信方式(文本形式,HTML形式等),可以要求任何一个看信程序必须提供mail-reader虚包。这样,看信程序的描述文件应有这么一行:

  Provides : mail-reader

  如此它才能被邮件客户端使用。

  2.2 Requires :

  此域定义软件包所需的功能,可重复多行。其描述格式为:

  Requires : 功能1 [比较符1 [序列号1:]版本号1[-释出号1]] [,功能2 [比较符2 [序列号2:]版本号2[-释出号2]]] ...

  其中: * []所括为可选项;

  * 比较符可使用(大于),=(等于),>=(大于等于)或= 3.0, ccc < 2:5.0-1

  注: 本例定义生成的包在安装时需要系统有如下功能:

  (1) aaa(系统中已安装aaa包,或者已安装软件包中有软件包提供aaa虚包);

  (2) bbb包已安装且版本要求大于等于3.0;

  (3) ccc包已安装且版本要求小于序列号为2,版本号为5.0且释出号为1。

  RPM在进行版本比较时,执行比较的顺序是; 先版本号,再释出号,最后比较序列号。通过比较,确定哪个版本较新,哪个版本较老。

  2.3 Conflicts :

  此域定义有哪些功能与本软件包相冲突(不能共存)。此域亦可在描述文件中书写多次。其描述格式形同Requires域,为:

  Conflicts : 功能1 [比较符1 [序列号1:]版本号1[-释出号1]] [,功能2 [比较符2 [序列号2:]版本号2[-释出号2]]] ...

  其中: * []所括为可选项;

  * 比较符可使用(大于),=(等于),>=(大于等于)或=3.0

  注: 本例阐明生成的包冲突的功能有:

  (1) 当系统中xxx包版本等于

精彩图集

赞助商链接