RPM打包教程Word文档下载推荐.docx

上传人:b****2 文档编号:1446705 上传时间:2023-04-30 格式:DOCX 页数:16 大小:26.93KB
下载 相关 举报
RPM打包教程Word文档下载推荐.docx_第1页
第1页 / 共16页
RPM打包教程Word文档下载推荐.docx_第2页
第2页 / 共16页
RPM打包教程Word文档下载推荐.docx_第3页
第3页 / 共16页
RPM打包教程Word文档下载推荐.docx_第4页
第4页 / 共16页
RPM打包教程Word文档下载推荐.docx_第5页
第5页 / 共16页
RPM打包教程Word文档下载推荐.docx_第6页
第6页 / 共16页
RPM打包教程Word文档下载推荐.docx_第7页
第7页 / 共16页
RPM打包教程Word文档下载推荐.docx_第8页
第8页 / 共16页
RPM打包教程Word文档下载推荐.docx_第9页
第9页 / 共16页
RPM打包教程Word文档下载推荐.docx_第10页
第10页 / 共16页
RPM打包教程Word文档下载推荐.docx_第11页
第11页 / 共16页
RPM打包教程Word文档下载推荐.docx_第12页
第12页 / 共16页
RPM打包教程Word文档下载推荐.docx_第13页
第13页 / 共16页
RPM打包教程Word文档下载推荐.docx_第14页
第14页 / 共16页
RPM打包教程Word文档下载推荐.docx_第15页
第15页 / 共16页
RPM打包教程Word文档下载推荐.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

RPM打包教程Word文档下载推荐.docx

《RPM打包教程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《RPM打包教程Word文档下载推荐.docx(16页珍藏版)》请在冰点文库上搜索。

RPM打包教程Word文档下载推荐.docx

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

makeinstall

%clean

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

%pre

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

%post

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

%preun

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

%postun

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

%files

打包的文件列表

%changelog

*SunMay312009小强

-修改信息

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

一、文件头

文件头描述软件包的基本信息,它包含若干个域,其中有必选的域,也有可选的域。

一个域占用一行,其描述格式为:

域名 

:

域值

注意:

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

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

1.Name 

此域定义软件名。

2.Version 

此域定义版本号。

仅当软件较以前有较大改变时才增加版本号。

注:

版本号中不能含减号(-)字符。

3.Release 

此域定义释出号。

若软件较以前改变较小,则仅增加释出号,不改变版本号。

释出号中亦不能含减号(-)字符。

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

4.Summary 

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

5.Group 

此域定义软件所属类别很多,如:

Amusements/Games

Applications/System

Development/Tools

SystemEnvironment/Base

UserInterface/XHardwareSupport

6.License 

此域定义软件适用的许可证或版权规则。

该域也可用Copyright(版权)来定义,二者同意。

许可证具体有:

GPL(通用公共许可证,自由软件适用),BSD,MIT,PublicDomain(公共域),Distributable(贡献),Commercial(商业),Share(共享)等。

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

1.基本信息

1.1Vendor 

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

1.2URL 

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

如:

URL 

1.3:

Distribution、Icon、Serial/Epoch等这些不常用的就在此不加说明。

2.依赖相关

依赖是RPM用来描述软件包之间关系的。

一个软件包依赖的东西RPM称作功能,它可以是真实存在的软件包,也可以是虚拟的软件包(虚包)。

虚包没有版本号。

依赖相关的域有:

2.1Provides 

此域定义软件包提供的功能,可重复多行。

其描述格式为:

Provides 

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

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

软件包所提供的功能一般是以虚包形式存在的共享库。

当有多个软件包均提供相同的服务时,常用虚包来表示其服务。

如,一个邮件客户端软件允许用户使用不同的看信方式(文本形式,HTML形式等),可以要求任何一个看信程序必须提供mail-reader虚包。

这样,看信程序的描述文件应有这么一行:

mail-reader

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

2.2Requires 

此域定义软件包所需的功能,可重复多行。

Requires 

功能1[比较符1[序列号1:

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

]版本号2[-释出号2]]]...

其中:

*[]所括为可选项;

*比较符可使用<

(小于),>

(大于),=(等于),>

=(大于等于)或<

=(小于等于);

*序列号不选时,RPM默认为0;

*功能之间的逗号可选,也可使用空格进行分隔。

例子:

aaa,bbb>

=3.0,ccc<

2:

5.0-1

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

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

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

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

RPM在进行版本比较时,执行比较的顺序是;

先版本号,再释出号,最后比较序列号。

通过比较,确定哪个版本较新,哪个版本较老。

2.3Conflicts 

此域定义有哪些功能与本软件包相冲突(不能共存)。

此域亦可在描述文件中书写多次。

其描述格式形同Requires域,为:

Conflicts 

举个例子:

xxx=1:

2.0yyy>

=3.0

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

(1)当系统中xxx包版本等于序列号为1且版本号为2.0时;

(2)当系统中yyy包版本大于等于3.0时。

***依赖关系的自动实现***

一般情况下,当RPM建立一个软件包时,它要执行/usr/lib/rpm目录下的两个小程序。

一个是find-requires,用于查找软件包所需的共享库,这些库将以虚包的形式加入到该软件包所需的功能(Requires)之中。

另一个是find-provides,它用于查找软件包所提供的共享库,这些库将以虚包的形式加入到该软件包所提供的功能(Provides)之中。

这两个程序都是SHELL程序,代码量虽小,但确实帮了软件包制作者一个大忙--不必劳心费神地自己写这样的依赖关系了,因为程序均自动完成了。

下面三个域用于指示RPM是否执行这两个程序。

3.源码相关

下列四个域均是为制作源码包而设计的。

源码包里有什么?

用户可以通过查询包的文件列表得到,命令是“rpm-qpl源码包文件”。

一般情况下,源码包里有这么四类文件:

一是程序源码(SOURCE),二是源码补丁(PATCH),三是软件包描述文件,四是图标文件(ICON)。

通过安装源码包,用户可以轻松地实现现场编译、连接和应用,同时更方便了软件开发者与软件包制作者:

他们维护程序容易了,并且维护过后可以很快地生成执行代码包与源码包。

这,也是所有人钟爱RPM的重要原因之一。

3.1Source 

此域定义RPM打包时要包含的程序源码文件。

这些文件一般先用tar命令打包,然后再用gzip压缩。

一个描述文件中可包含多个Source域,当有多个这样的域时,需要进行编号:

第1个编为Source0(也可直接用Source),第2个编为Source1,第3个编为Source2等等。

此域的描述格式为:

Source[编号] 

源码文件

[]所括为可选项。

具体用法如:

Source0 

3.2Patch 

Patch的本义是补丁,用在这里指的是源程序的补丁,它是用diff命令比较新老源程序所产生的输出(命令为“diff-Nur旧文件新文件>

补丁文件”),而系统中的patch命令又可利用此输出将老版本的源程序升级为新版本。

此域定义RPM制作源码包时所要包含的补丁文件,该文件的命名建议用"

软件名-版本号.补丁功能.patch"

的格式。

一个软件包描述文件中可有多个Patch域,当有多个这样的域时,也需要象Source域那样进行编号(注:

第1个域编为Patch0,也可省略0,用Patch)。

Patch[编号] 

源码补丁文件

Patch0 

RealPlayer-11.0.0-bugfix.patch

Patch1 

RealPlayer-11.0.0-config.patch

Patch2 

RealPlayer-11.0.0-somethingelse.patch

此域的域值也可以象Source域一样,采用URL的形式,RPM仅提取其中的文件名供其使用。

三、功能段

1. 

本段是描述段,段的内容是对软件包进行较为详细的介绍,不象文件头的Summary域仅用一句话说明。

介绍的文本形式自由,可任意换行,不受限制。

本段段名描述格式是:

%description[子包选项]

其中,子包选项的格式为:

[-n]子包名

2. 

本段是文件段,它定义的是软件包需要包含哪些文件。

本段通常放在描述文件尾部,以便于添加文件名,便于编辑。

本段段名描述格式为:

%files[子包选项][-f文件名]

当没有任何选项时,本段内容定义的是父包要打包的文件列表;

当有子包选项时,本段内容定义的则是子包要打包的文件列表;

当选择-f选项时,RPM除了从文件段读取打包文件列表外,还将从指定的文件中读取要打包的文件列表。

指定的文件中,一个文件名占用一行。

此选项方便了软件包制作者,他们可以通过程序自动产生有关软件的文件列表,并将其写入到一个特定的文件中,这样制作软件包时,只需引用一下这个文件,RPM就会自动从这个文件中读取文件名并将其加入包中。

如果没有此选项,软件包制作者只能在文件段里,将要打包的文件名一个一个写进去,有点麻烦。

文件段的内容格式为:

[修饰符1[修饰符2]...]文件名

修饰符是可选的,一个文件可以有多个修饰符,文件名必须以/开头(绝对路径形式)。

修饰符有以下几类:

(1)文件相关

%doc 

此修饰符设定文件类型为说明文档

%config 

此修饰符设定文件类型为配置文件

%attr 

此修饰符设定文件的属性信息,使用格式为:

%attr(文件权限,属主,属组,文件夹权限)

权限常用数字形式(八进制),属主和属组可以是数字,也可以是字符串。

如果文件的权限,属主和属组想使用系统默认值,则可用减号(-)表示它。

文件夹权限基本不会用到,默认权限就行。

如下例采用两个修饰符,定义/etc/funkey.def文件的权限为755,属主默认,属组为root,类型为配置文件:

%attr(755,-,root,-) 

%config/etc/funkey.def

(2)目录相关

%docdir 

此修饰符定义说明文档前缀,这样,后面所有含指定文件名作为前缀的文件,RPM打包时会将其类型统一设定为说明文档。

例如某描述文件的文件段中有这么三行:

/root/readme

%docdir/root

/root/mydoc.txt

此例指明/root为说明文档的前缀,因为/root/mydoc.txt在%docdir的下一行,所以RPM打包时会设定此文件的类型为说明文档。

而/root/readme文件则不做此设定,因为它在%docdir定义之前。

通过此修饰符,用户可以很方便地设定说明文档一类的文件,因为它们通常固定在某个目录下面,有着共同的前缀。

∙ 

%dir 

RPM在制作软件包时,如果要打包的文件是个目录,那么RPM会将该目录下面的所有文件包含到软件包中。

(注意:

如果要打包的文件是个符号连接,此符号连接又指向一个目录,则RPM并不会将其视作目录,只会把它当为普通文件处理。

)如果仅想将这个目录名包含到软件包中,制作者用此修饰符修饰一下这个目录名就行了。

/etc是个系统目录,其下有多个文件,如果想将其均加入包中,描述文件的文件段里可写上这么一行:

/etc

如果仅想包含此目录,则可用:

%dir/etc

可选的功能段可分为如下三类:

1.建包用功能段:

RPM通过源程序来建立一个软件包时,要执行预处理,编译,安装和清理四项操作,分别对应于%prep,%build,%install和%clean四个段。

下面按其执行顺序逐段进行说明:

1.1 

%prep 

此为预处理段,其内容为预处理脚本程序。

该程序完成以下任务:

*建立软件编译用目录;

*将源程序解压缩;

*通过打补丁,升级源程序;

*执行其它一些操作,使源程序随时可进行编译。

在此脚本程序中,可使用如下两个宏命令:

1.1.1 

这个宏利用系统中的gzip与tar等命令,来解压源程序包。

RPM会自动探测源程序包是否压缩,如果压缩,它会用gzip将其解压缩,否则直接用tar命令展开包中文件。

其使用格式为:

%setup[-nname][-c][-D][-T][-bN][-aN]

(1)当没有任何选项时:

这个宏用来解压默认的源程序包(由文件头Source或Source0域指定)。

源程序包中的文件应用"

软件名-版本号"

作为其上层目录,这样%setup宏就可以正常工作。

如果不以"

作为其上层目录,则%setup宏工作时有一个指令"

cd软件名-版本号"

(转目录)会因为系统中没有此目录而出错退出(除非在此宏上面加上建立此目录的命令)。

(2)-nname 

上面已经谈到,源程序包中的文件应采用"

作为上层目录。

如果用了别的什么目录(如name),%setup宏无法正常工作,那该怎么办?

没关系,可以用-n选项,引用一下这个目录(name)就行了。

假如我的LZE源程序包中的文件是以lze为上层目录,那么我就可以用"

%setup-nlze"

宏命令来解压缩该包。

(3)-c 

此选项的作用是创建上层目录("

目录)并转到这个目录。

对于LZE软件,其效果相当于在上例的第4行与第5行之间加上这么两行命令:

mkdir-plze-6.0

cdlze-6.0

它适用的情况是:

有的源程序包是在源程序所在目录下打的包,所以其中的文件都没有上层目录。

这样的话,要想正确解压,必须创建上层目录。

(4)-D 

本选项的作用是在解压源程序包之前不要删除软件的上层目录(软件名-版本号)。

在上例中,其效果是不执行第4行的命令(rm-rflze-6.0)。

(5)-T 

本选项的作用是不解压默认的源程序包(由文件头的Source或Source0域所定义)。

在上例中,其效果是不执行第5-9行的命令:

第5行是解压源程序包(用gzip-dc将包的内容解压缩到管道中,再由tar-xvvf-从管道中读取数据并展开),第6-9行是检查解压命令的返回值,非0时执行非正常退出。

(6)-bN 

本选项指示RPM在转到上层目录前解压第N个源程序包(由文件头SourceN域定义)。

这适用于含上层目录的源程序包。

如果使用此选项时不同时使用-T选项,则RPM解压的是两个源程序包,一个是默认的包(由Source或Source0域定义),一个是-b选项指定的包(由SourceN域定义)。

这样,当N等于0时,默认的源程序包将被解压两次。

所以,如果想仅解压指定源程序包,请同时使用-T选项,以禁止解压默认的源程序包。

下面的宏命令仅解压第1个源程序包,然后转到上层目录:

%setup-b1-T

(7)-aN 

本选项指示RPM在转到上层目录后再解压第N个源程序包(由文件头SourceN域定义)。

这适用于不含上层目录的源程序包。

使用本选项时,一般加上-c选项,以创建上层目录并转到此目录。

如果使用此选项时不同时使用-T选项,则RPM解压的是两个源程序包,一个是默认的包(由Source或Source0域定义),一个是-a选项指定的包(由SourceN域定义)。

所以,如果想仅解压指定源程序包,请同时使用-T选项,以禁止解压默认的源程序包。

下面的宏命令让RPM先转到上层目录,再仅解压第2个源程序包:

%setup-T-a2

1.1.2 

%patch

此宏利用系统中的patch命令,来给指定的源程序包打补丁,从而将程序升级。

%patch[-PN][-pN][-bname][-E]

为了说明下列选项的作用,我们为LZE软件包描述文件中定义三个补丁文件:

Patch0:

realplayer-patch.zero

Patch1:

realplayer-patch.one

Patch2:

realplayer-patch.three

没有任何选项时,该宏使用的是默认的补丁文件(第0个补丁文件),即由文件头Patch或Patch0域所定义的文件。

该宏在执行时,扩展为以下指令:

Patch#0:

"

patch-p0-s<

/usr/src/dist/SOURCES/lze-patch.zero

第一行指令是利用echo命令向屏幕输出字符串“Patch#0:

”。

第二行指令则是利用patch命令读取补丁文件lze-patch.zero升级源程序。

patch命令用了两个选项:

(有关patch命令用法,详见其用户手册)

*-p 

这个选项用于确定patch所要操作的文件。

它针对补丁文件头部的文件名,删除名字中指定数目个斜杠(/)前面的所有字符,从而得到要操作的文件名。

如补丁文件里有个文件名/usr/zzz/src/lze.c,则用-p0时patch操作的文件名不变,用-p1时则变为usr/zzz/src/lze.c,用-p2时则变为zzz/src/lze.c,如用-p4则操作的文件名变为lze.c。

*-s 

这个选项指示patch在打补丁过程中不输出任何信息,即使有错误发生。

(2)-PN 

使用此选项以指示RPM使用第N个补丁文件(由文件头PatchN域定义)。

如想让RPM使用LZE的第2个补丁文件Patch2(lze-patch.three)时,可使用"

-P2"

来指定。

(3)-pN 

此选项与其参数是由%patch宏直接传给patch命令的。

请参见上面patch命令所用的-p选项的介绍。

(4)-bname 

当有多个patch命令操作同一个文件时,patch会将原文件换名保存(其后缀变作.orig),如lze.c会变作lze.orig。

如果想用别的名字作后缀,则可用-b设置一下,这样原文件会换名为"

原文件名+后缀"

如用-bZZZ时,lze.c会换名保存为lze.cZZZ。

此选项在执行时,实际上是给patch命令传递了一个选项及参数,即--suffixname。

(5)-E 

此选项直接传给patch命令,其作用是:

如果一个文件打完补丁后内容为空(字节数为0),则删除这个文件。

1.2 

%build 

此为编译段,其内容为编译脚本程序。

该程序完成源程序的编译和连接。

一个最简单的例子就是程序中仅有一个make命令。

这适用于大部分情况,因为多数软件均有自己的makefile,这样通过make命令就可实现编译与连接。

如果没有makefile的话,需要软件包制作者自己在编译段书写上一系列的编译连接命令。

1.3 

%install 

此为安装段,其内容是安装脚本程序。

该程序将已编译连接好的执行程序或其它文件存放到指定目录下,这些程序或文件供RPM打包时使用。

一个最简单的例子就是程序中仅用一个makeinstall命令,从而完成安装。

这也需要相应的软件有makefile维护文件。

没有的话,软件包制作者也得自己写指令。

1.4 

%clean 

此为清理段,其内容是清理脚本程序。

此程序在RPM制作好软件包后才执行,它通常是删除那些编译连接时产生的临时文件或目录,完成缮后工作。

2.管理用功能段:

此类段用于软件包自身的管理(安装,卸载和校验),包括%pre,%post,%preun,%postun,和%verifyscript五个功能段。

2.1 

%pre 

该段内容为安装前脚本程序。

它在软件包安装之前执行,通常是检测操作环境,建立有关目录,清理多余文件等等,为软件包的顺利安装做准备。

本段很少使用。

其段名格式为:

%pre[子包选项]

2.2 

%post 

该段内容为安装后脚本程序。

它在软件包安装完成之后执行,常用来建立符号连接,修改系统配置文件,运行ldconfig程序等,以利软件的正常运行。

%post[子包选项]

2.3 

%preun 

该段内容为卸载前脚本程序。

它在软件包卸载之前执行,主要为卸载做准备。

具体如,要卸载的软件包中某个程序当前正在运行时,此脚本程序必须杀掉它,否则无法正确卸载。

%preun[子包选项]

2.4 

%postun 

该段内容为卸载后脚本程序。

它在软件包卸载后执行,完成卸载的缮后工作,如将系统配置文件inetd.conf改回原来的样子,重新运行一下ldconfig命令,将已卸载的共享库从缓冲文件ld.so.cache中删除等等。

%postun[子包选项]

4.其它功能段

其它功能段只有一个,即%changelog。

这个

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2