本机环境: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                #存放生成的源码包

2 撰写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包。

3 构建RPM包

构建RPM包是有命令rpmbuild在SPEC的指导下完成。

开始构建操作,首先进入到当前用户的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 RPM包rpmbuild
SPEC文件深度说明

RPM包制作过程(一)的更多相关文章

  1. RPM包制作教程

    一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...

  2. RPM包制作方法

    一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...

  3. rpm包制作介绍

    RPM(Rpm Package Management)在ReadHat等发行版下被用作软件包管理程序,其将某个软件相关的文件置入一个.rpm包中,用rpm命令,我们可以方便地完成Linux下软件安装. ...

  4. php-7.1.0 rpm包制作

    nginx-1.8.0 rpm包制作见上篇文章:http://www.cnblogs.com/xiaoming279/p/6251149.html spec文件 Name: php Version: ...

  5. rpm包安装过程中依赖问题“libc.so.6 is needed by XXX”解决方法

    rpm包安装过程中依赖问题"libc.so.6 is needed by XXX"解决方法 折腾了几天,终于搞定了CentOS上的Canon LBP2900打印机驱动.中间遇到了一 ...

  6. rpm包制作(待实验)

    作者:firefoxbug 时间:July 18, 2014 rpm包命名规范 对于rpm包的命名符合如下规范. %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm N ...

  7. 实战RPM包制作

    在开发中经常会用到一些rpm包,但是一直没有自己手动制作过.今天在制作的时候意外地还解决了自己以前一直困惑的问题,就是怎么制作rpm debuginfo包,类似CentOS官网那样的debuginfo ...

  8. 【Linux】【Services】【Package】rpm包制作

    1. 概念 1.1. BUILD:源代码解压之后存放的位置 1.2. RPMS:制作完成之后的RPM包的存放位置,包括架构的子目录,比如x86,x86_64 1.3. SOURCES:所有的原材料都应 ...

  9. nginx-1.8.0 rpm包制作

    1.安装rpm-build # yum install rpm-build 2.创建制作RPM包目录 # cat /root/.rpmmacros %_topdir /root/rpmbuild %_ ...

随机推荐

  1. MySQL中lock tables和unlock tables浅析

    MySQL中lock tables和unlock tables浅析   在MySQL中提供了锁定表(lock tables)和解锁表(unlock tables)的语法功能,ORACLE与SQL Se ...

  2. C#发布和调试WebService

    一.编写并发布WebService服务 1.新建空web应用程序

  3. Django + Uwsgi + Nginx 实现生产环境部署

    本节内容 uwsgi 介绍 uwsgi安装使用 nginx安装配置 django with nginx 如何在生产上部署Django? Django的部署可以有很多方式,采用nginx+uwsgi的方 ...

  4. 【转载】ubuntu下/usr/bin和/usr/local/bin的区别

    这篇文章已经无法考证是谁原创的了 首先注意usr 指 Unix System Resource,而不是User 然后通常: /usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变. /u ...

  5. python 时间模块(time ,datetime,calendar)

    Python中提供了时间相关的内置模块,我们主要用的是:time模块.datetime模块和calendar模块 ⽇期格式化的标准: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(00 ...

  6. 【大数据技术】HBase与Solr系统架构设计

    如何在保证存储量的情况下,又能保证数据的检索速度. HBase提供了完善的海量数据存储机制,Solr.SolrCloud提供了一整套的数据检索方案. 使用HBase搭建结构数据存储云,用来存储海量数据 ...

  7. MySQL高级知识(九)——慢查询日志

    前言:慢查询日志是MySQL提供的一种日志记录,它记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的sql语句,该sql语句会被记录到慢查询日志中.慢查询日志 ...

  8. kafka环境搭建测试

    一.安装 1. 下载:去kafka官网下载:https://www.apache.org/dyn/closer.cgi?path=/kafka/0.9.0.1/kafka_2.11-0.9.0.1.t ...

  9. 16.ajax_case02

    # 抓取当当网书评 # http://product.dangdang.com/25340451.html import json import requests from lxml import e ...

  10. (3)Python字符串