zoukankan      html  css  js  c++  java
  • RPM包制作过程(一)

    本机环境:centos7,64位

    1. 首先安装工具,rpmbuild可能在rpmdevtools里已经包含

    #yum install rpm-devel.x86_64

    #yum install rpmdevtools

    2. 执行如下rpmdev-setuptree生成rpmbuild的工作目录(会在当前用户的根目录下生成rpmbuild目录)

    #rpmdev-setuptree

    3. 查看生成的rpmbuid工作目录

    #cd ~/rpmbuild/

    #ls

    结果如下图所示

    [ump@localhost rpmbuild]$ ls
    BUILD  RPMS  SOURCES  SPECS  SRPMS

    目录含义解释如下:

    SOURCES      #放置打包资源,包括源码打包文件和补丁文件

    SPECS                  #放置SPEC文档

    BUILD                #打包过程中的工作目录

    RPMS                 #存放生成的二进制包

    RPMS/i386            #存放生成的i386结构包

    SRPMS                #存放生成的源码包

    撰写SPEC文档

    SPEC撰写是打包RPM的核心,也算是最难的一步,好在我们可以从参照一个简单的模板文件开始,在可以实现基本功能的基础上再一步一步的扩充文档内容,直至完全达到要求。下面是一个简单的SPEC文档,其中包括了一些说明信息(注:#后面的内容为说明信息),该SPEC文档是对一个测试的软件项目hellorpm写的,hellorpm软件包编译后仅有一个执行文件、一个手册文件和一个项目说文件。

    hellorpm.spec文档的内容如下:
    ----------------------------------------------------------

    #软件包简要介绍

    Summary: hellorpm is a test program。

    #软件包的名字

    Name: hellorpm        

    #软件包的主版本号           
    Version: 2.2.6          

    #软件包的次版本号             
    Release: 1   

    #源代码包,默认将在上面提到的SOURCES目录中寻找                        
    Source0: %{name}-%{version}.tar.gz   

    #授权协议

    License: GPL     

                      

    #定义临时构建目录,这个地址将作为临时安装目录在后面引用

    BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root

    #软件分类

    Group: Development/Tools  

    #软件包的内容介绍               
    %description                         
    The hellorpm program is a test.

    #表示预操作字段,后面的命令将在源码代码BUILD前执行

    %prep                     

    #构建BUILD环境,将解压源码压缩包到BUILD目录 

    %setup -q       

    #BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作         
    %build       

    #调用源码目录中的configure命令            
    ./configure        

    #在源码目录中执行自动构建命令make     
    make            

    #安装字段         
    %install     

    #调用源码中安装执行脚本             
    make DESTDIR=$RPM_BUILD_ROOT install 

    #文件说明字段,声明多余或者缺少都将可能出错

    %files              

    #设置文件权限属性       
    %defattr(-,root,root)      

    #声明/usr/local/bin/hellorpm将出现在软件包中      
    /usr/local/bin/hellorpm      

    #声明并设置文件属性   
    %doc %attr(0444,root,root) /usr/local/man/man1/hellorpm.1  

    #同上,声明文档文件 

    %doc README  


    -----------------------------------------------------------------------------------

    这个文档需要说明的一点:

    BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root

    上面BuildRoot变量表示的是源码的临时按照目录,rpmbuild就是通过次目录 获得将要按照到系统中的所有文件,而在SPEC文档后面make install 命令中的参数DESTDIR=$RPM_BUILD_ROOT即是对该参数的引用,这个参数将传给Makefile文件一告诉自动构建工具应该安装文件那 里(实际上我再前文提到过的Makefile需要作一些改造以适应RPM的构建就包括此操作,你的Makefile文件中至少要知道在RPM构建过程中引 用此参数的值去控制安装操作的目标)。

    如上一个简单的SPEC文档撰写完成,下面把一个名为hellorpm-2.2.6.tar.gz的源码压缩文件放到
    rpmbuild根目录下的SOURCES目录下(注,确保此归档文件解压后的目录为hellorpm-2.2.6
    否则会有问题)。 到此一个完整的rpm打包环境已经构建完成,下面我们就可以开始构建二进制和源代码RPM包。


    构建RPM

    构建RPM包是有命令rpmbuildSPEC的指导下完成。

    开始构建操作,首先进入到当前用户的rpmbuild根目录(即上面提到的目录环境)。

    #cd ~/rpmbuild/

    执行如何命令,-ba表示build all,即生成包括二进制包和源代码包的所有RPM包,下来如果正常的话,rpmbuild将正常退出,同时在RPMS目录和SRPMS目录中将生成对应的RPM包。

    #rpmbuild -ba SPECS/hellorpm.spec

    这里仅仅介绍了一个最简单软件的最简单的RPM的打包操作过程,诸如带有共享文件的需要进行复杂配置的具有复杂依赖关系的等等的项目的打包以及后期的维护,包括补丁的制作我将在下来的时间完成补充更新,今天时间不早了,该休息了!

    注:费了大半夜的功夫,搞出这么个令人不满意的文档,我思考着,这样做有多少意义呢?不敢重复发明轮子的,站到巨人的肩膀你才能看得更远,是这样吗?
    是不是下周开始立个计划,每周至少翻译三篇fedora官网的文档给自己练练手。那糟糕的英语,唉!


    参考资料:

    http://www.linuxsir.org/main/?q=node/50 RPM 的介绍和应用(北南兄)

    http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part3/ 用 RPM 打包软件

    http://hlee.javaeye.com/blog/343499 RPMrpmbuild SPEC文件深度说明

  • 相关阅读:
    负数求余数 C 和 Matlab&Python 处理不一样
    [Matlab] 线性卷积&圆周卷积代码实现
    [Arduino] 驱动RC522 读取 UID例程
    [C++] Nested Radical Constant
    [Arduino] 学习总结小合集(更新ING)
    谐振电路的品质因素总结
    142. Linked List Cycle II
    664. Strange Printer
    188. Best Time to Buy and Sell Stock IV
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/dyh004/p/10369359.html
Copyright © 2011-2022 走看看