RPM安装包Spec文件参数详解与示例分析

本文发布时间: 2019-Mar-22
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


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2020-Jul-13 01:14am
栏目列表