⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 153.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 5 页
字号:
    3. 系统相关<br>
    RPM制作软件包时,可以为其指定适用的CPU体系或操作系统,也可为其指定不适用的CPU体系或操作系统,这样,当RPM发现当前的CPU体系或操作系统与软件包要求的不兼容时,将中止软件包的制作。RPM默认的当前CPU体系由宏%_arch定义,一般为i386。RPM默认的当前操作系统由宏%_os定义,一般为linux。读者可以通过查看/usr/lib/rpm/macros宏定义文件得到。<br>
    下面四个域说明软件包的适用范围:<br>
<br>
    3.1 Excludearch :<br>
    此域定义软件包不适用的体系。RPM可选的体系名请参见/usr/lib/rpm/rpmrc文件中的arch_canon项目。<br>
    软件包不适用于某个体系,可能有两方面的原因。一是该软件还没有移植到所定义的体系上;二是该软件含有特定的机器码(汇编语言),它与别的体系不兼容。<br>
    此域描述格式为:<br>
    Excludearch : 体系1 [体系2] ...<br>
<br>
注: []所括为可选项,各体系之间以空格分隔。<br>
如果当前体系在此域值之中,则RPM制作软件包时将报错退出,请看下面的例子。<br>
在lze-6.0-2.spec文件头部分加入一行:<br>
Excludearch : i386<br>
再运行建包命令rpm -bb(&lt;&lt;精通RPM之七--制作篇(下)&gt;&gt;将讲到):<br>
# rpm -bb lze-6.0-2.spec<br>
Architecture is excluded: i386<br>
#<br>
<br>
由上看出,RPM提示了“体系不适用: i386”的错误。<br>
<br>
3.2 Exclusivearch :<br>
此域定义软件包适用的体系。其描述格式与Excludearch类似:<br>
Exclusivearch : 体系1 [体系2] ...<br>
<br>
注: []所括为可选项,各体系之间以空格分隔。<br>
假如在lze-6.0-2.spec文件头加入一行:<br>
Exclusivearch : i386 sparc<br>
再运行建包命令将会怎么样:<br>
# rpm -bb lze-6.0-2.spec<br>
Executing: %prep<br>
预处理脚本程序(prep)开始执行<br>
Executing: %build<br>
编译连接脚本程序(build)开始执行<br>
Executing: %install<br>
安装脚本程序(install)开始执行<br>
Processing files: lze<br>
Finding Provides: (using /usr/lib/rpm/find-provides)...<br>
Finding Requires: (using /usr/lib/rpm/find-requires)...<br>
Provides: lze-edit<br>
PreReq: /bin/sh<br>
Requires: /bin/sh ld-linux.so.2 libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1)<br>
Wrote: /usr/src/dist/RPMS/i386/lze-6.0-2.i386.rpm<br>
#<br>
<br>
看,此次建包(lze-6.0-2.i386.rpm)成功了,因为当前的体系(i386)正好适用。<br>
<br>
3.3 Excludeos :<br>
此域定义软件包不适用的操作系统。RPM可选的操作系统请参考文件/usr/lib/rpm/rpmrc中的os_canon项目。<br>
其描述格式为:<br>
Excludeos : 操作系统1 [操作系统2] ...<br>
<br>
注: []为可选项,操作系统之间以空格分隔。例如:<br>
Excludeos : irix aix solaris<br>
注: 如将此行加入到lze的描述文件中,则它会指示RPM不在irix,aix,solaris这三个操作系统上建立lze软件包。如果当前操作系统是三者之一,则RPM会报错并中止软件包的制作。<br>
如:<br>
# rpm -bb lze-6.0-2.spec<br>
OS is excluded: Solaris<br>
#<br>
<br>
3.4 Exclusiveos :<br>
此域定义软件包适用的操作系统。其描述格式为:<br>
Exclusiveos : 操作系统1 [操作系统2] ...<br>
注: []为可选项,操作系统之间以空格分隔。例如:<br>
Exclusiveos : linux solaris<br>
<br>
    4. 目录相关<br>
    4.1 Prefix :<br>
    此域定义可重定位的目录前缀,可在描述文件中书写多次。其描述格式为:<br>
    Prefix : 目录前缀1 [目录前缀2] ...<br>
    <br>
    注: []为可选项,各目录前缀之间均以空格分隔。例如:<br>
    Prefix : /usr /etc<br>
    它也可写作:<br>
    Prefix : /usr<br>
    Prefix : /etc<br>
    RPM利用可重定位的目录前缀,实现了软件包的重定位安装, 使软件中的文件不必固定在某<br>
    个绝对位置,这种做法很好。LZE软件包描术文件lze-6.0-2.spec中就定义了一个可重定位<br>
    的前缀/usr(见第15行),这样,安装时就可将该包中在/usr目录下的文件重定位到用户指定<br>
    的目录,如:<br>
    # rpm -i --prefix /tmp lze-6.0-2.i386.rpm<br>
    #<br>
    或者:<br>
    # rpm -i --relocate /usr=/tmp lze-6.0-2.i386.rpm<br>
    #<br>
    注: 此命令安装lze包,将其中含/usr重定位目录前缀的文件定位到/tmp目录。如包中<br>
    的/usr/bin/lze文件安装后,因重定位而成了/tmp/bin/lze。(RPM安装命令使用方法请参考&lt;&lt;精通RPM之二--安装篇&gt;&gt;)<br>
<br>
    4.2 Buildroot :<br>
    此域定义的是软件包所包含的文件共有的根目录,此根目录仅供RPM建立软件包时使用。即当RPM建立软件包时,将设定此目录为根(调用chroot函数),提取所需文件,生成软件包。<br>
    例如: 当Buildroot设定为/tmp时,对于LZE包描述文件中所包含的/usr/bin/lze文件,RPM实际打包的则是/tmp/usr/bin/lze,但对生成的包查询后可以发现:原文件名并未改变,还是/usr/bin/lze。<br>
    如此说来,这就很有意思了。一般用户通过设定Buildroot,也可以象超级用户(root)那样自由地建立各种各样的软件包了,即使包中有那些唯有超级用户才可以操作的目录或文件。安装这样的包与安装由超级用户建立的包,是没有什么分别的。<br>
    此域的描述格式很简单:<br>
    Buildroot : 目录<br>
    如,上例可定义为:<br>
    Buildroot : /tmp<br>
<br>
    5. 源码相关<br>
    下列四个域均是为制作源码包而设计的。源码包里有什么?用户可以通过查询包的文件列表得到,命令是“rpm -qpl 源码包文件”(请参阅&lt;&lt;精通RPM之五--查询篇&gt;&gt;有关内容)。一般情况下,源码包里有这么四类文件: 一是程序源码(SOURCE),二是源码补丁(PATCH),三是软件包描述文件,四是图标文件(ICON)。通过安装源码包,用户可以轻松地实现现场编译、连接和应用,同时更方便了软件开发者与软件包制作者:他们维护程序容易了,并且维护过后可以很快地生成执行代码包与源码包。这,也是所有人钟爱RPM的重要原因之一。<br>
<br>
    5.1 Source :<br>
    此域定义RPM打包时要包含的程序源码文件。这些文件一般先用tar命令打包,然后再用gzip压缩。一个描述文件中可包含多个Source域,当有多个这样的域时,需要进行编号:第1个编为Source0(也可直接用Source),第2个编为Source1,第3个编为Source2等等。此域的描述格式为:<br>
    Source[编号] : 源码文件<br>
<br>
    注: []所括为可选项。具体用法如:<br>
    Source0 : lze-6.0-2.tar.gz<br>
    Source1 : lzeime-wb-6.0-2.tar.gz<br>
    Source2 : lzeime-py-6.0-2.tar.gz<br>
    Source3 : lze-lib-6.0-2.tar.gz<br>
    注: 此域域值可以采用URL(统一资源定位)的形式,如LZE描述文件第14行。采用这种形式,主要是给其它用户提供该源码的位置信息。在RPM制作源包时,它提取的是最后的文件名lze-6.0-2.tar.gz,而不是http://zhsoft.myetang.com/lze-6.0-2.tar.gz(URL前面的内容被RPM忽略了)。<br>
<br>
    5.2 NoSource :<br>
    在上例中,假如在打包时不想包含Source1与Source2定义的文件,那该怎么办?<br>
    办法之一是将其所在行删除掉;<br>
    办法之二是将其所在行注释掉(即所在行前面加#号);<br>
    办法之三就是定义Nosource域,此域可重复。其描述格式为:<br>
    NoSource : 源码域编号<br>
<br>
    本例可写作:<br>
    NoSource : 1<br>
    NoSource : 2<br>
    注: 其中的1与2为编号,表示Source1和Source2。<br>
    注意: 如果软件包描述文件中没有NoSource域,则RPM生成的源码包名字格式为"软件名-版本号-释出号.src.rpm"。如果使用了NoSource域,则RPM生成的源码包名字格式为"软件名-版本号-释出号.nosrc.rpm"(单从名字就可看出源码包包含的文件不完整)。<br>
<br>
    5.3 Patch :<br>
    Patch的本义是补丁,用在这里指的是源程序的补丁,它是用diff命令比较新老源程序所产生的输出(命令为“diff -Nur 旧文件 新文件 &gt;补丁文件”),而系统中的patch命令又可利用此输出将老版本的源程序升级为新版本。<br>
    此域定义RPM制作源码包时所要包含的补丁文件,该文件的命名建议用"软件名-版本号.补丁功能.patch"的格式。一个软件包描述文件中可有多个Patch域,当有多个这样的域时,也需要象Source域那样进行编号(注:第1个域编为Patch0,也可省略0,用Patch)。<br>
    此域的描述格式为:<br>
    Patch[编号] : 源码补丁文件<br>
<br>
    注: []所括为可选项。具体用法如:<br>
    Patch0 : blather-4.5-bugfix.patch<br>
    Patch1 : blather-4.5-config.patch<br>
    Patch2 : blather-4.5-somethingelse.patch<br>
    注: 此域的域值也可以象Source域一样,采用URL的形式,RPM仅提取其中的文件名供其使用。<br>
<br>
    5.4 NoPatch :<br>
    此域的功能类似NoSource,其定义的编号对应的补丁文件RPM不作打包处理。此域在描述文件中可重复出现。如上例,若不想让源码包包含Patch0与Patch2域所指示的补丁文件,则可在描述文件写上这么两行:<br>
    NoPatch : 0<br>
    NoPatch : 2<br>
    注意: 如果软件包描述文件中没有NoPatch域,则RPM生成的源码包名字格式为"软件名-版本号-释出号.src.rpm"。如果使用了NoPatch域,则RPM生成的源码包名字格式为"软件名-版本号-释出号.nosrc.rpm"(单从名字就可看出源码包包含的文件不完整)。<br>
<br>
    三、功能段<br>
    见第19-86(即文件头以下的部分)。<br>
    何谓功能段?可以这么说,功能段是描述软件包的重要数据和操作指令的段落,它包括段名与段内容两部分。没有功能段,RPM便制作不出任何包裹文件。功能段的段名都是以百分号(%)开始的,占用一行。功能段的段内容范围是这样界定的:它从该功能段段名下一行开始到下一个功能段段名的前一行或到描述文件结束。如LZE描述文件,%description段是从第19行到第28行(%prep段从第29行开始),第19行为段名,第20-28行为段内容。而%prep段是从第29行到第32行(第33行%build段开始),其段名在第29行,段内容在第30-32行。另外要注意的是,各个功能段的位置是自由的,可放在文件头以下的任何位置,不必拘泥某一固定位置。<br>
    必选的功能段<br>
    描述文件中,必选的功能段有:<br>
<br>
    1. %description<br>
    本段是描述段,段的内容是对软件包进行较为详细的介绍,不象文件头的Summary域仅用一句话说明。介绍的文本形式自由,可任意换行,不受限制。具体请参见LZE描述文件第20-27行。<br>
    本段段名描述格式是:<br>
    %description [子包选项]<br>
<br>
    其中,子包选项的格式为:[-n] 子包名<br>
    注: []所括为可选项。<br>
<br>
    三种形式的描述段段名:<br>
    (1) 段名格式为“%description”时:<br>
    本功能段描述的内容是关于父包的。父包也可叫作主软件包,它用软件名来命令,其名字格式是:软件名-版本号-释出号.体系.rpm。如:lze-6.0-2.i386.rpm。<br>
    (2) 段名格式为“%description 子包名”时:<br>
    本功能段描述的内容是关于子包的。子包选项中没有-n选项时,子包是用软件名加子包名的形式命名,格式为: 软件名-子包名-版本号-释出号.体系.rpm。如分成两个子包的LZE软件:lze-bin-6.0-2.i386.rpm(执行程序包),lze-config-6.0-2.i386.rpm(配置文件包)。<br>
    (3) 段名格式为“%description -n 子包名”时:<br>
    本功能段描述的内容也是关于子包的。当子包选项中有-n选项时,子包直接采用子包名的形式命名。它不包含软件名,命名格式为: 子包名-版本号-释出号.体系.rpm。如分成两个子包的LZE软件: bin-6.0-2.i386.rpm(执行程序包),config-6.0-2.i386.rpm(配置文件包)。注意:这种类型的子包内容通常是可被其它软件包共用的函数库,如果专用,则尽量不要采用这样形式来定义子包。<br>
<br>
    2. %files<br>
    本段是文件段,它定义的是软件包需要包含哪些文件。本段通常放在描述文件尾部,以便于添加文件名,便于编辑。<br>
    本段段名描述格式为:<br>
    %files [子包选项] [-f 文件名]<br>
    <br>
    注: []所括为可选项。<br>
    当没有任何选项时,本段内容定义的是父包要打包的文件列表;<br>
    当有子包选项时,本段内容定义的则是子包要打包的文件列表;<br>
    当选择-f选项时,RPM除了从文件段读取打包文件列表外,还将从指定的文件中读取要打包的文件列表。指定的文件中,一个文件名占用一行。此选项方便了软件包制作者,他们可以通过程序自动产生有关软件的文件列表,并将其写入到一个特定的文件中,这样制作软件包时,只需引用一下这个文件,RPM就会自动从这个文件中读取文件名并将其加入包中。如果没有此选项,软件包制作者只能在文件段里,将要打包的文件名一个一个写进去,有点麻烦。<br>
    <br>
    文件段的内容格式为:<br>
    [修饰符1 [修饰符2] ...] 文件名<br>
    其中:修饰符是可选的,一个文件可以有多个修饰符,文件名必须以/开头(绝对路径形式)。<br>
    修饰符有以下几类:<br>
    <br>
    (1) 文件相关<br>
    * %doc :<br>
    此修饰符设定文件类型为说明文档(参见LZE描述文件第72,73行);<br>
    * %config :<br>
    此修饰符设定文件类型为配置文件(参见LZE描述文件第70,71行);<br>
    * %config(missingok) :<br>
    此修饰符设定文件类型为配置文件,且此文件可丢失。即使丢失了,RPM在卸载软件包时并不认为这是个错误,并不报错。<br>
    此修饰符通常用于那些软件包安装后建立的符号连接文件,如/etc/rc.d/rc2.d/S55named等。此类文件在软件包卸载后可能需要删除,所以丢失了也不要紧。<br>
    * %config(noreplace) :<br>
    此修饰符设定文件类型为配置文件,且如果安装时系统中有同名的文件,则软件包中的这个文件将换个名字安装,其文件名后缀加个.rpmnew。(如果不用此修饰符,则安装时RPM若发现有同名文件,则RPM会将系统中的这个文件换个名字,其后缀加上.rpmorig,而软件包中的文件则还用原来的名字。)在软件包卸载时,系统中的同名文件被RPM换个名字保存起来,其后缀加上了.rpmsave。<br>
    如描述文件的文件段中定义了这么一行:<br>
    %config(noreplace) /etc/hello<br>
    则制成的包在安装时,若系统中已有此文件/etc/hello,则RPM会提示:<br>
    warning: /etc/hello created as /etc/hello.rpmnew<br>
    这表明包中的/etc/hello文件被创建为/etc/hello.rpmnew文件了。<br>
    如果卸载这个软件包,则系统中的/etc/hello将会改名为/etc/hello.rpmsave。<br>
    * %ghost :<br>
    此修饰符所修饰的文件,其内容不被包含到软件包中。这样的文件一般是日志文件(log file)一类的文件,其文件属性(文件名,属主,属组等)很重要,但是文件内容并不重要。用此修饰符后,RPM仅将其文件属性加入包中。<br>
    * %attr :<br>
    此修饰符设定文件的属性信息,使用格式为:<br>
    %attr(权限,属主,属组)<br>
    注: 权限常用数字形式(八进制),属主和属组可以是数字,也可以是字符串。如果文件的权限,属主和属组想使用系统默认值,则可用减号(-)表示它。<br>
    如下例采用两个修饰符,定义/etc/funkey.def文件的权限为755,属主默认,属组为root,类型为配置文件:<br>
    %attr(755,-,root) %config /etc/funkey.def<br>
    * %verify :<br>
    此修饰符设定文件需要校验的那些属性。这些属性有:owner(属主),group(属组),mode(权限),md5(MD5检查和),size(大小),maj(主设备号),min(从设备号),symlink(符号连接),mtime(最后修改时间)。<br>
    此修饰符使用格式为:<br>
    %verify([not] owner group mode md5 size maj min symlink mtime)<br>
    注: not可选。当选用not时,表明需要校验除选定属性以外的那些属性。<br>
    如下例指示RPM校验/dev/ttyS0文件时,要校验其权限,MD5检查和,大小,主设备号,从设备号,符号连接和最后修改时间共七项属性信息:<br>
    %verify(mode md5 size maj min symlink mtime) /dev/ttyS0<br>
    这也可以采用not选项来实现,因为除去属主owner和属组group两项属性,剩下的就是需要校验的属性了:<br>
    %verify(not owner group) /dev/ttyS0<br>
    <br>
    (2) 目录相关<br>
    * %docdir :<br>
    <br>
    此修饰符定义说明文档前缀,这样,后面所有含指定文件名作为前缀的文件,RPM打包时会将其类型统一设定为说明文档。<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -