2022年RPM制作教程 .pdf

上传人:C****o 文档编号:39895321 上传时间:2022-09-08 格式:PDF 页数:27 大小:260.93KB
返回 下载 相关 举报
2022年RPM制作教程 .pdf_第1页
第1页 / 共27页
2022年RPM制作教程 .pdf_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《2022年RPM制作教程 .pdf》由会员分享,可在线阅读,更多相关《2022年RPM制作教程 .pdf(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、要想制作一个 RPM 格式的软件包,需要编写软件包描述文件。其标准命名格式为:软件名-版本号-释出号.spec,这个文件,周详描述了有关该软件包的诸多信息,如软件名,版本,类别,说明摘要,创建时要执行什么指令,安装时要执行什么操作,及软件包所要包含的文件等等。有了这个文件,RPM 就能制作出相应的包裹文件来。下面以我制作小赵编辑器LZE 的软件包(lze-6.0-2.i386.rpm)为例,周详说明一下软件包描述文件的书写。其描述文件为 lze-6.0-2.spec,该文件内容如下:(用 nl-ba命令列出,每行开头的数字为所在行在文件中的行号)1#文件名称:lze-6.0-2.spec 2#

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:雨亦奇()14 Source:http:/ 15 Prefix:/usr 16 Requires:/bin/sh 17 Provides:lze-edi

3、t 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 他将在工作中助你一臂之力,轻松上

4、阵,游刃有余!28 29%prep 30 echo 预处理脚本程式(prep)开始执行 31%setup 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 27 页 -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 安装后执行

5、脚本程式(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 81-内置拼音,五笔输入法82*Fri May 01 1998 雨亦奇83-增加多窗口操作84*Mon Mar 24 19

6、97 雨亦奇85-增加块操作命令86 该描述文件包括以下几方面的内容:一、注释行见第 1-4 行。他以#号开头,起注解作用,可帮助用户理解所写的内容,但对软件包的生成不起所有作用。此文件中,注释行集中在文件首部。实际上,他可位于描述文件的所有位置。二、文件头名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 27 页 -见第 6-17 行。文件头描述软件包的基本信息,他包含若干个域,其中有必选的域,也有可选的域。一个域占用一行,其描述格式为:域名:域值注意:域名不分大小写,并且域值不能为空。文件头必选域有以下六个:1.Name:此域定义软件名。2.Version:此域定义版本号。仅当

7、软件较以前有较大改动时才增加版本号。注:版本号中不能含减号(-)字符。3.Release:此域定义释出号。若软件较以前改动较小,则仅增加释出号,不改动版本号。注:释出号中亦不能含减号(-)字符。RPM 利用上述的Name(软件名),Version(版本号),Release(释出号)及体系号来命名软件包,如本例输出的包裹文件名为lze-6.0-2.i386.rpm。4.Summary:此域定义软件包简介,为一句话说明。5.Group:此域定义软件所属类别,详见,本例的 Applications/Editors表示本软件属 应用/编辑器 类。6.License:此域定义软件适用的许可证或版权规则。

8、该域也可用Copyright(版权)来定义,二者同意。许可证具体有:GPL(通用公共许可证,免费软件适用),BSD,MIT,Public Domain(公共域),Distributable(贡献),Commercial(商业),Share(共享)等。文件头可选的域包括如下几类:1.基本信息1.1 Vendor:此域定义软件的供给商(销售商)。1.2 Distribution:此域定义软件所属的发行版,这是软件包制作者自己的分类。通常,一个发行版由若干个软件包构成。如我想做一个名为“熊猫95”的发行版,则其中每个软件包(如竹叶 95)的描述文件都应有这么一行:Distribution:熊猫951

9、.3 Icon:此域指定软件包所用的图标文件名。此文件为 GIF 或 XPM 格式,必须存放在 RPM的%_sourcedir(源码目录)宏所指示目录下,默认为/usr/src/dist/SOURCES。RPM本身并不使用图标,但他将图标文件内容存贮到包裹文件中,安装时亦存贮到RPM 数据库中。此图标可被图像界面的RPM 包管理工具使用,用以改善界面效果,增加可视性。如下例指示软件包使用panda.xpm 作为图标:Icon:panda.xpm 1.4 Packager:此域定义打包者,亦即建立此软件包的人或公司。书写格式是:打包者的名字名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页

10、,共 27 页 -请参考描述文件第13 行。1.5 Serial:此域定义软件序列号,也可使用 域名 Epoch。软件序列号为一整数,由打包者指定,他应随着版本号的增加而不断增加,并且始终保持数值的唯一。软件序列号可被用来说明软件包之间的依赖关系。下例指定软件包序列号为4:Serial:4 或用:Epoch:4 1.6 URL:此域定义包含打包软件有关信息的网页地址。如:URL:http:/ 2.依赖相关依赖是 RPM 用来描述软件包之间关系的。一个软件包依赖的东西RPM 称作功能,他能是真实存在的软件包,也能是虚拟的软件包(虚包)。虚包没有版本号。依赖相关的域有:2.1 Provides:此

11、域定义软件包提供的功能,可重复多行。其描述格式为:Provides:功能 1,功能 2.注:所括为可选项,多个功能之间以逗号或空格分隔。软件包所提供的功能一般是以虚包形式存在的共享库。当有多个软件包均提供相同的服务时,常用虚包来表示其服务。如,一个邮件客户端软件允许用户使用不同的看信方式(文本形式,HTML形式等),能需求所有一个看信程式必须提供mail-reader 虚包。这样,看信程式的描述文件应有这么一行:Provides:mail-reader 如此他才能被邮件客户端使用。2.2 Requires:此域定义软件包所需的功能,可重复多行。其描述格式为:Requires:功能 1 比较符

12、1 序列号 1:版本号 1-释出号 1,功能 2 比较符 2 序列号 2:版本号 2-释出号 2.其中:*所括为可选项;*比较符可使用(大于),=(等于),=(大于等于)或=3.0,ccc Conflicts:功能 1 比较符 1 序列号 1:版本号 1-释出号 1,功能 2 比较符 2 序列号 2:版本号 2-释出号 2.其中:*所括为可选项;*比较符可使用(大于),=(等于),=(大于等于)或=3.0 注:本例阐明生成的包冲突的功能有:(1)当系统中 xxx 包版本等于序列号为1 且版本号为 2.0 时;(2)当系统中 yyy 包版本大于等于 3.0 时。*依赖关系的自动实现*一般情况下,

13、当 RPM 建立一个软件包时,他要执行/usr/lib/rpm 目录下的两个小程式。一个是find-requires,用于查找软件包所需的共享库,这些库将以虚包的形式加入到该软件包所需的功能(Requires)之中。另一个是 find-provides,他用于查找软件包所提供的共享库,这些库将以虚包的形式加入到该软件包所提供的功能(Provides)之中。这两个程式都是 SHELL 程式,代码量虽小,但确实帮了软件包制名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 27 页 -作者一个大忙-不必劳心费神地自己写这样的依赖关系了,因为程式均自动完成了。下面三个域用于指示RPM 是否

14、执行这两个程式。2.4 Autoreq:此域用于指示RPM 是否自动查找软件所需的共享库。仅当域值为no 或 0时,RPM 不执行 find-requires 程式,否则均执行该程式。2.5 Autoprov:此域用于指示RPM 是否自动查找软件提供的共享库。仅当域值为no 或 0时,RPM 不执行 find-provides 程式,否则均执行该程式。2.6 Autoreqprov:此域用于指示 RPM 是否自动查找软件所需的共享库和其提供的共享库。仅当域值为 no 或 0 时,RPM 不执行 find-requires 和 find-provides 两个程式。此域相当于同时设定 Autor

15、eq 和 Autoprov 域值为指定之值。注:上述三个域在描述文件中,他们之间因为顺序的不同而结果会有所不同,一般以最后一个为准。如:Autoreq:yes Autoreqprov:no Autoprov:yes 注:本例虽然第一行允许执行find-requires,但第二行又不允许find-requires和find-provides 两个程式运行,而第三行允许 find-provides 运行,所以依照执行顺序,结果为不允许执行find-requires,而允许执行 find-provides。又如:Autoreq:no Autoreqprov:yes Autoprov:no 注:本例的

16、结果为允许执行find-requires,而不允许执行 find-provides。3.系统相关RPM 制作软件包时,能为其指定适用的CPU 体系或操作系统,也可为其指定不适用的 CPU 体系或操作系统,这样,当 RPM 发现当前的 CPU 体系或操作系统和软件包需求的不兼容时,将中止软件包的制作。RPM 默认的当前CPU 体系由宏%_arch 定义,一般为 i386。RPM 默认的当前操作系统由宏%_os 定义,一般为linux。读者能通过查看/usr/lib/rpm/macros宏定义文件得到。下面四个域说明软件包的适用范围:3.1 Excludearch:此域定义软件包不适用的体系。RP

17、M 可选的体系名请参见/usr/lib/rpm/rpmrc文件中的 arch_canon 项目。软件包不适用于某个体系,可能有两方面的原因。一是该软件还没有移植到所定义的体系上;二是该软件含有特定的机器码(汇编语言),他和别的体系不兼容。此域描述格式为:Excludearch:体系 1 体系 2.注:所括为可选项,各体系之间以空格分隔。如果当前体系在此域值之中,则 RPM 制作软件包时将报错退出,请看下面的例子。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 27 页 -在 lze-6.0-2.spec 文件头部分加入一行:Excludearch:i386 再运行建包命令 rpm

18、-bb(将讲到):#rpm-bb lze-6.0-2.spec Architecture is excluded:i386#由上看出,RPM 提示了“体系不适用:i386”的错误。3.2 Exclusivearch:此域定义软件包适用的体系。其描述格式和Excludearch 类似:Exclusivearch:体系 1 体系 2.注:所括为可选项,各体系之间以空格分隔。如果在 lze-6.0-2.spec 文件头加入一行:Exclusivearch:i386 sparc 再运行建包命令将会怎么样:#rpm-bb lze-6.0-2.spec Executing:%prep 预处理脚本程式(pr

19、ep)开始执行Executing:%build 编译连接脚本程式(build)开始执行Executing:%install 安装脚本程式(install)开始执行Processing files:lze Finding Provides:(using/usr/lib/rpm/find-provides).Finding Requires:(using/usr/lib/rpm/find-requires).Provides:lze-edit PreReq:/bin/sh Requires:/bin/sh ld-linux.so.2 libc.so.6 libc.so.6(GLIBC_2.0)li

20、bc.so.6(GLIBC_2.1)Wrote:/usr/src/dist/RPMS/i386/lze-6.0-2.i386.rpm#看,此次建包(lze-6.0-2.i386.rpm)成功了,因为当前的体系(i386)正好适用。3.3 Excludeos:此 域 定 义 软 件 包 不 适 用 的 操 作 系 统。RPM可 选 的 操 作 系 统请 参考 文件/usr/lib/rpm/rpmrc中的 os_canon 项目。其描述格式为:Excludeos:操作系统 1 操作系统 2.注:为可选项,操作系统之间以空格分隔。例如:Excludeos:irix aix solaris 注:如将此

21、行加入到 lze 的描述文件中,则他会指示 RPM 不在 irix,aix,solaris 这三个操作系统上建立lze 软件包。如果当前操作系统是三者之一,则 RPM 会报错并中止软件包的制作。如:#rpm-bb lze-6.0-2.spec OS is excluded:Solaris 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 27 页 -#3.4 Exclusiveos:此域定义软件包适用的操作系统。其描述格式为:Exclusiveos:操作系统 1 操作系统 2.注:为可选项,操作系统之间以空格分隔。例如:Exclusiveos:linux solaris 4.目录相

22、关4.1 Prefix:此域定义可重定位的目录前缀,可在描述文件中书写多次。其描述格式为:Prefix:目录前缀 1 目录前缀 2.注:为可选项,各目录前缀之间均以空格分隔。例如:Prefix:/usr/etc 他也可写作:Prefix:/usr Prefix:/etc RPM 利用可重定位的目录前缀,实现了软件包的重定位安装,使软件中的文件不必固定在某个绝对位置,这种做法非常好。LZE 软件包描术文件lze-6.0-2.spec中就定义了一个可重定位的前缀/usr(见第 15 行),这样,安装时就可将该包中在/usr 目录下的文件重定位到用户指定的目录,如:#rpm-i-prefix/tmp

23、 lze-6.0-2.i386.rpm#或:#rpm-i-relocate/usr=/tmp lze-6.0-2.i386.rpm#注:此命令安装 lze 包,将其中含/usr 重定位目录前缀的文件定位到/tmp 目录。如包中的/usr/bin/lze 文件安装后,因重定位而成了/tmp/bin/lze。(RPM 安装命令使用方法请参考)4.2 Buildroot:此域定义的是软件包所包含的文件共有的根目录,此根目录仅供RPM 建立软件包时使用。即当RPM 建立软件包时,将设定此目录为根(调用 chroot 函数),提取所需文件,生成软件包。例如:当 Buildroot 设定为/tmp 时,对

24、于 LZE 包描述文件中所包含的/usr/bin/lze文件,RPM 实际打包的则是/tmp/usr/bin/lze,但对生成的包查询后能发现:原文件名并未改动,还是/usr/bin/lze。如此说来,这就非常有意思了。一般用户通过设定Buildroot,也能象终极用户(root)那样自由地建立各种各样的软件包了,即使包中有那些唯有终极用户才能操作的目录或文件。安装这样的包和安装由终极用户建立的包,是没有什么分别的。此域的描述格式非常简单:Buildroot:目录如,上例可定义为:Buildroot:/tmp 5.源码相关下列四个域均是为制作源码包而设计的。源码包里有什么?用户能通过查询包的名

25、师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 27 页 -文件列表得到,命令是“rpm-qpl 源码包文件”(请参阅 有关内容)。一般情况下,源码包里有这么四类文件:一是程式源码(SOURCE),二是源码补丁(PATCH),三是软件包描述文件,四是图标文件(ICON)。通过安装源码包,用户能轻松地实现现场编译、连接和应用,同时更方便了软件研发者和软件包制作者:他们维护程式容易了,并且维护过后能非常快地生成执行代码包和源码包。这,也是所有人钟爱RPM的重要原因之一。5.1 Source:此域定义 RPM 打包时要包含的程式源码文件。这些文件一般先用tar 命令打包,然后再用 gzi

26、p 压缩。一个描述文件中可包含多个Source 域,当有多个这样的域时,需要进行编号:第 1个编为 Source0(也可直接用 Source),第 2 个编为 Source1,第 3 个编为 Source2 等等。此域的描述格式为:Source 编号:源码文件注:所括为可选项。具体用法如:Source0:lze-6.0-2.tar.gz Source1:lzeime-wb-6.0-2.tar.gz Source2:lzeime-py-6.0-2.tar.gz Source3:lze-lib-6.0-2.tar.gz 注:此域域值能采用 URL(统一资源定位)的形式,如 LZE 描述文件第 14

27、 行。采用这种形式,主要是给其他用户提供该源码的位置信息。在RPM 制作源包时,他提取的是最后的文件名lze-6.0-2.tar.gz,而不是http:/ RPM 忽略了)。5.2 NoSource:在上例中,如果在打包时不想包含Source1 和 Source2 定义的文件,那该怎么办?办法之一是将其所在行删除掉;办法之二是将其所在行注释掉(即所在行前面加#号);办法之三就是定义Nosource 域,此域可重复。其描述格式为:NoSource:源码域编号本例可写作:NoSource:1 NoSource:2 注:其中的 1 和 2 为编号,表示 Source1 和 Source2。注意:如果

28、软件包描述文件中没有NoSource 域,则 RPM 生成的源码包名字格式为软件名-版本号-释出号.src.rpm。如果使用了 NoSource 域,则 RPM 生成的源码包名字格式为 软件名-版本号-释出号.nosrc.rpm(单从名字就可看出源码包包含的文件不完整)。5.3 Patch:Patch 的本义是补丁,用在这里指的是源程式的补丁,他是用 diff 命令比较新老源程式所产生的输出(命令为“diff-Nur 旧文件新文件补丁文件”),而系统中的patch 命令又可利用此输出将老版本的源程式升级为新版本。此域定义 RPM 制作源码包时所要包含的补丁文件,该文件的命名建议用 软件名-版本

29、号.补丁功能.patch的格式。一个软件包描述文件中可有多个Patch 域,当有多个这样的域时,也需要象 Source 域那样进行编号(注:第 1 个域编为 Patch0,也可省略 0,用 Patch)。此域的描述格式为:名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 27 页 -Patch 编号:源码补丁文件注:所括为可选项。具体用法如:Patch0:blather-4.5-bugfix.patch Patch1:blather-4.5-config.patch Patch2:blather-4.5-somethingelse.patch 注:此域的域值也能象 Source 域

30、相同,采用 URL 的形式,RPM 仅提取其中的文件名供其使用。5.4 NoPatch:此域的功能类似 NoSource,其定义的编号对应的补丁文件RPM 不作打包处理。此域在描述文件中可重复出现。如上例,若不想让源码包包含Patch0 和 Patch2域所指示的补丁文件,则可在描述文件写上这么两行:NoPatch:0 NoPatch:2 注意:如果软件包描述文件中没有NoPatch 域,则 RPM 生成的源码包名字格式为软件名-版本号-释出号.src.rpm。如果使用了 NoPatch 域,则 RPM 生成的源码包名字格式为 软件名-版本号-释出号.nosrc.rpm(单从名字就可看出源码包

31、包含的文件不完整)。三、功能段见第 19-86(即文件头以下的部分)。何谓功能段?能这么说,功能段是描述软件包的重要数据和操作指令的段落,他包括段名和段内容两部分。没有功能段,RPM 便制作不出所有包裹文件。功能段的段名都是以百分号(%)开始的,占用一行。功能段的段内容范围是这样界定的:他从该功能段段名下一行开始到下一个功能段段名的前一行或到描述文件结束。如LZE 描述文件,%description 段是从第 19 行到第 28 行(%prep 段从第 29 行开始),第 19 行为段名,第 20-28 行为段内容。而%prep 段是从第 29 行到第 32 行(第 33行%build 段开始

32、),其段名在第 29 行,段内容在第 30-32 行。另外要注意的是,各个功能段的位置是自由的,可放在文件头以下的所有位置,不必拘泥某一固定位置。必选的功能段描述文件中,必选的功能段有:1.%description 本 段是 描述 段,段的 内容 是对 软 件 包进行 较为 周详 的 介 绍,不象 文件 头 的Summary 域仅用一句话说明。介绍的文本形式自由,可任意换行,不受限制。具体请参见 LZE 描述文件第 20-27 行。本段段名描述格式是:%description 子包选项 其中,子包选项的格式为:-n 子包名注:所括为可选项。三种形式的描述段段名:(1)段名格式为“%descri

33、ption”时:本功能段描述的内容是关于父包的。父包也可叫作主软件包,他用软件名来命令,其名字格式是:软件名-版本号-释出号.体系.rpm。如:lze-6.0-2.i386.rpm。(2)段名格式为“%description 子包名”时:本功能段描述的内容是关于子包的。子包选项中没有-n 选项时,子包是用软件名加子包名的形式命名,格式为:软件名-子包名-版本号-释出号.体系.rpm。如分成名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 27 页 -两个子包的LZE软件:lze-bin-6.0-2.i386.rpm(执行程式包),lze-config-6.0-2.i386.rpm(

34、设置文件包)。(3)段名格式为“%description-n 子包名”时:本功能段描述的内容也是关于子包的。当子包选项中有-n 选项时,子包直接采用子包名的形式命名。他不包含软件名,命名格式为:子包名-版本号-释出号.体系.rpm。如 分 成 两 个 子 包 的LZE软 件:bin-6.0-2.i386.rpm(执 行 程 式包),config-6.0-2.i386.rpm(设置文件包)。注意:这种类型的子包内容通常是可被其他软件包共用的函数库,如果专用,则尽量不要采用这样形式来定义子包。2.%files 本段是文件段,他定义的是软件包需要包含哪些文件。本段通常放在描述文件尾部,以便于添加文件

35、名,便于编辑。本段段名描述格式为:%files 子包选项 -f 文件名 注:所括为可选项。当没有所有选项时,本段内容定义的是父包要打包的文件列表;当有子包选项时,本段内容定义的则是子包要打包的文件列表;当选择-f 选项时,RPM 除了从文件段读取打包文件列表外,还将从指定的文件中读取要打包的文件列表。指定的文件中,一个文件名占用一行。此选项方便了软件包制作者,他们能通过程式自动产生有关软件的文件列表,并将其写入到一个特定的文件中,这样制作软件包时,只需引用一下这个文件,RPM 就会自动从这个文件中读取文件名并将其加入包中。如果没有此选项,软件包制作者只能在文件段里,将要打包的文件名一个一个写进

36、去,有点麻烦。文件段的内容格式为:修饰符 1 修饰符 2.文件名其中:修饰符是可选的,一个文件能有多个修饰符,文件名必须以/开头(绝对路径形式)。修饰符有以下几类:(1)文件相关*%doc:此修饰符设定文件类型为说明文件(参见 LZE 描述文件第 72,73 行);*%config:此修饰符设定文件类型为设置文件(参见 LZE 描述文件第 70,71 行);*%config(missingok):此修饰符设定文件类型为设置文件,且此文件可丢失。即使丢失了,RPM 在卸载软件包时并不认为这是个错误,并不报错。此 修 饰 符 通 常 用 于 那 些 软 件 包 安 装 后 建 立 的 符 号 连

37、接 文 件,如/etc/rc.d/rc2.d/S55named等。此类文件在软件包卸载后可能需要删除,所以丢失了也不要紧。*%config(noreplace):此修饰符设定文件类型为设置文件,且如果安装时系统中有同名的文件,则软件包中的这个文件将换个名字安装,其文件名后缀加个.rpmnew。(如果不用此修饰符,则安装时 RPM 若发现有同名文件,则 RPM 会将系统中的这个文件换个名字,其后缀加上.rpmorig,而软件包中的文件则还用原来的名字。)在软件包卸载时,系统中的同名文件被 RPM 换个名字保存起来,其后缀加上了.rpmsave。名师资料总结-精品资料欢迎下载-名师精心整理-第 1

38、0 页,共 27 页 -如描述文件的文件段中定义了这么一行:%config(noreplace)/etc/hello 则制成的包在安装时,若系统中已有此文件/etc/hello,则 RPM 会提示:warning:/etc/hello created as/etc/hello.rpmnew 这表明包中的/etc/hello 文件被创建为/etc/hello.rpmnew文件了。如果卸载这个软件包,则系统中的/etc/hello 将会改名为/etc/hello.rpmsave。*%ghost:此修饰符所修饰的文件,其内容不被包含到软件包中。这样的文件一般是日志文件(log file)一类的文件,

39、其文件属性(文件名,属主,属组等)非常重要,不过文件内容并不重要。用此修饰符后,RPM 仅将其文件属性加入包中。*%attr:此修饰符设定文件的属性信息,使用格式为:%attr(权限,属主,属组)注:权限常用数字形式(八进制),属主和属组能是数字,也能是字符串。如果文件的权限,属主和属组想使用系统默认值,则可用减号(-)表示他。如下例采用两个修饰符,定义/etc/funkey.def 文件的权限为755,属主默认,属组为root,类型为设置文件:%attr(755,-,root)%config/etc/funkey.def*%verify:此修饰符设定文件需要校验的那些属性。这些属性有:own

40、er(属主),group(属组),mode(权 限),md5(MD5检 查 和),size(大 小),maj(主 设 备 号),min(从 设 备号),symlink(符号连接),mtime(最后修改时间)。此修饰符使用格式为:%verify(not owner group mode md5 size maj min symlink mtime)注:not 可选。当选用 not 时,表明需要校验除选定属性以外的那些属性。如下例指示 RPM 校验/dev/ttyS0 文件时,要校验其权限,MD5 检查和,大小,主设备号,从设备号,符号连接和最后修改时间共七项属性信息:%verify(mode m

41、d5 size maj min symlink mtime)/dev/ttyS0 这也能采用 not 选项来实现,因为除去属主 owner 和属组 group 两项属性,剩下的就是需要校验的属性了:%verify(not owner group)/dev/ttyS0(2)目录相关*%docdir:此修饰符定义说明文件前缀,这样,后面所有含指定文件名作为前缀的文件,RPM打包时会将其类型统一设定为说明文件。例如某描述文件的文件段中有这么三行:/root/readme%docdir/root/root/mydoc.txt 此例指明/root 为说明文件的前缀,因为/root/mydoc.txt 在

42、%docdir 的下一行,所以RPM 打包时会设定此文件的类型为说明文件。而/root/readme文件则不做此设定,因为他在%docdir 定义之前。通过此修饰符,用户能非常方便地设定说明文件一类的文件,因为他们通常固定在某个目录下面,有着一起的前缀。名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 27 页 -*%dir:RPM 在制作软件包时,如果要打包的文件是个目录,那么 RPM 会将该目录下面的所有文件包含到软件包中。(注意:如果要打包的文件是个符号连接,此符号连接又指向一个目录,则 RPM 并不会将其视作目录,只会把他当为普通文件处理。)如果仅想将这个目录名包含到软件

43、包中,制作者用此修饰符修饰一下这个目录名就行了。如:/etc 是个系统目录,其下有多个文件,如果想将其均加入包中,描述文件的文件段里可写上这么一行:/etc 如果仅想包含此目录,则可用:%dir/etc(3)另类修饰符此类只有一个%defattr。说他是另类修饰符,是由于他设定的是默认的文件属性,而非特定的某个文件。他一般放在文件段内容的第一行。其使用格式为:%defattr(权限,属主,属组)其中:权限,属主和属组都能使用减号(-)。使用减号的属性将由系统设定。例如:%defattr(022,zzz,zhsoft)设定其后的所有文件权限为022,属主为 zzz,属组为 zhsoft;又如:%

44、defattr(-,zzz,-)则是设定其后的所有文件属主为zzz,权限和属组由系统设置。可选的功能段描述文件中,可选功能段的内容都是些脚本程式。(LZE 描述文件中多个脚本程式中仅含一个 echo 命令)可选的功能段的描述格式为:功能段名子包选项 注:子包选项为-n 子包名。当无子包选项时,段内容描述的是父包的脚本程式。当有子包选项时,段内容则是描述子包的脚本程式。可选的功能段可分为如下三类:1.建包用功能段:RPM 通过源程式来建立一个软件包时,要执行预处理,编译,安装和清理四项操作,分别对应于%prep,%build,%install和%clean 四个段。下面按其执行顺序逐段进行说明:

45、1.1%prep:此为预处理段,其内容为预处理脚本程式。该程式完成以下任务:*建立软件编译用目录;*将源程式解压缩;*通过打补丁,升级源程式;*执行其他一些操作,使源程式随时可进行编译。在此脚本程式中,可使用如下两个宏命令:1.1.1%setup 这个宏利用系统中的gzip 和 tar 等命令,来解压源程式包。RPM 会自动探测源程式包是否压缩,如果压缩,他会用 gzip 将其解压缩,否则直接用 tar 命令展开包中文件。其使用格式为:%setup-n name-c-D-T-b N-a N 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 27 页 -注:所括为可选项。(1)当没

46、有所有选项时:这个宏用来解压默认的源程式包(由文件头 Source 或 Source0 域指定)。注意:源程式包中的文件应用软件名-版本号作为其上层目录,这样%setup宏就能正常工作。如果不以 软件名-版本号 作为其上层目录,则%setup 宏工作时有一个指令cd 软件名-版本号(转目录)会因为系统中没有此目录而出错退出(除非在此宏上面加上建立此目录的命令)。如 LZE 软件源程式所在的目录为lze-6.0,我需要用命令 tar cvzf lze-6.0-2.src.tgz lze-6.0 将源程式打包并压缩,这样的包就能被%setup 宏正确使用了。下面是%setup 宏命令所执行的一系列

47、命令:(指令前面为行号)1 cd/usr/src/dist/BUILD 2 echo 预处理脚本程式(prep)开始执行 3 cd/usr/src/dist/BUILD 4 rm-rf lze-6.0 5/bin/gzip-dc/usr/src/dist/SOURCES/lze-6.0-2.src.tgz|tar-xvvf-6 STATUS=$?7 if$STATUS-ne 0;then 8exit$STATUS 9 fi 10 cd lze-6.0 11 /usr/bin/id-u=0&/bin/chown-Rhf root.12 /usr/bin/id-u=0&/bin/chgrp-Rhf

48、 root.13/bin/chmod-Rf a+rX,g-w,o-w.14 exit 1 看,第 10 行就有一个转到 lze-6.0 目录的命令,如果没有这个目录,程式就会出错退出了。也许你要问:这些指令你是怎么知道的?其实这非常简单,只要在%setup 宏下面加上一句 exit 1命令,让预处理脚本程式非正常退出即可。这样 RPM 所执行的预处理脚本程式作为临时文件在其退出时并未删除,只要看一下这个文件(在/var/tmp 目录下以 rpm-tmp 开头)就知道%setup 宏命令做什么了。(2)-n name:上面已谈到,源程式包中的文件应采用软件名-版本号 作为上层目录。如果用了别的什

49、么目录(如 name),%setup 宏无法正常工作,那该怎么办?没关系,能用-n 选项,引用一下这个目录(name)就行了。如果我的LZE 源程式包中的文件是以lze为上层目录,那么我就能用%setup-n lze 宏命令来解压缩该包。(3)-c:此选项的作用是创建上层目录(软件名-版本号 目录)并转到这个目录。对于 LZE软件,其效果相当于在上例的第4 行和第 5 行之间加上这么两行命令:mkdir-p lze-6.0 cd lze-6.0 他适用的情况是:有的源程式包是在源程式所在目录下打的包,所以其中的文件都没有上层目录。这样的话,要想正确解压,必须创建上层目录。(4)-D:本选项的作

50、用是在解压源程式包之前不要删除软件的上层目录(软件名-版本号)。在上例中,其效果是不执行第4 行的命令(rm-rf lze-6.0)。名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 27 页 -(5)-T:本选项的作用是不解压默认的源程式包(由文件头的 Source 或 Source0 域所定义)。在上例中,其效果是不执行第5-9 行的命令:第 5 行是解压源程式包(用 gzip-dc 将包的内容解压缩到管道中,再由 tar-xvvf-从管道中读取数据并展开),第 6-9行是检查解压命令的返回值,非 0 时执行非正常退出。(6)-b N:本选项指示 RPM 在转到上层目录前解压

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁