本机环境: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. ORACLE等待事件:SQL*Net message from client & SQL*Net message to client

    在ORACLE当中有两个很常见的等待事件"SQL*Net message from client"与"SQL*Net message to client",两者 ...

  2. SQL SERVER数据库级的触发器

    CREATE TRIGGER [Object_Change_Trigger_DDL] ON database FOR DROP_TABLE AS DECLARE @EventData AS xml; ...

  3. Linux系统修改日期时间

    linux修改时间   服务器时间与网络时间不符: 一.手动修改 1. date命令:查看当前时间 2. date -s  时分秒 :修改时间 还需要把日期改过来 3. date -s  完整日期时间 ...

  4. C# WINFORM 应用程序动态读写xml config文件,获取数

    在实际项目里,我们需要用一个应用程序去连接多个数据库,有的进行测试,有的是数据库基本结构相同,数据不同, 我们不可能总去程序的连接字符串里去修改,更不能让用户去修改,所以需要动态去修改连接数据库配置信 ...

  5. NPOI导入导出Excel工具类

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Ref ...

  6. Linux系统中Redis和Tomcat的PID文件路径设置

    Tomcat: /bin/catalina.sh 文件头注释下面添加一行:CATALINA_PID=/var/run/tomcat.pid Redis: redis.conf配置文件里面搜索pidfi ...

  7. 第八章 计时器(BEEPER1)

    *------------------------------------- BEEPER1.C -- Timer Demo Program No. (c) Charles Petzold, ---- ...

  8. February 24th, 2018 Week 8th Saturday

    Those are my principles, and if you don't like them... well, I have others. 那是我的原则,要是你不喜欢......那我还有其 ...

  9. 为JQuery EasyUI 表单组件加上“清除”功能

    1.背景 在使用 EasyUI 各表单组件时,尤其是使用 ComboBox(下拉列表框).DateBox(日期输入框).DateTimeBox(日期时间输入框)这三个组件时,经常有这样的需求,下拉框或 ...

  10. 安利一波:Adobe 2019全家桶 破解版

    之前发过一篇Photoshop破解的文章,今天把笔记本换了个系统,发现之前那个amtlib.dll替换破解的方式不适用于最新版的Adobe 2019 CC系列了,刚好看到群里有大佬分享了一个全家桶,给 ...