zoukankan      html  css  js  c++  java
  • RPM安装包-Spec文件參数具体解释与演示样例分析

    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
    


     

  • 相关阅读:
    javascript超过容器后显示省略号效果(兼容一行或者多行)
    javascript仿新浪微博图片放大缩小及旋转效果
    javascript瀑布流效果
    javascript日历插件
    JS图片Switchable切换大集合
    JS简单的倒计时(代码优化)
    JS全选功能代码优化
    JS日期格式化转换方法
    Jquery简单的placeholder效果
    jQuery封装自定义事件--valuechange(动态的监听input,textarea)之前值,之后值的变化
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4175219.html
Copyright © 2011-2022 走看看