制作RPM包的过程,简单的说,就是为制作过程提供一个“工作车间”,即一个目录,里面需要包含以下几个子目录:

BUILD        ————编译相关源码包时的工作目录;

RPMS         ————生成的二进制格式的RPM包存放的位置;

SOURCES ————程序的源码文件及其其他辅助文件的存放位置;

SPCES        ————spec文件的存放位置;

SRPMS      ————生成的SRC格式的RPM包存放位置;

如果用户目录主目录下没有类似目录结构,可以通过一个工具软件来自动配置和生成。

#yum install rpmdevtools –y

#rpmdev-setuptree
rpmdev-setuptree命令默认在当前用户主目录下创建一个RPM构建目录结构。

当“工作车间”准备停当之后,将用到的源码及辅助文件放置于相应的SOURCES目录中,并在SPECS目录中创建一个spec文件,就可以使用rpmbuild命令开始制作过程了。由于root用户的权限没有任何限制,RPM制作过程的不当命令有可能会给系统带去破坏,所以,一定不能使用root用户执行制作过程。切记!

RPM生成要素:

1、  
生成rpm所用的文件列表或者源代码;

2、  
根据文件列表或者源代码生成rpm包的规范,也就是spec文件;

3、  
根据spec文件加工源码/文件的工具rpmbuild;

操作步骤:

一般我们都把源码打包成tar.gz格式然后存放于SOURCES路径下,而在SPECS路径下编写spec文档,通过命令打包后,默认会把打包后的rpm包放在RPMS下,而源码包会被放置在SRPMS下。

先看看rpmbuild命令的用法:

1、  从spec文档建立有以下选项:

-bp              #只执行spec的%pre段(解源代码包并打补丁,只是准备阶段)

-bc              #执行spec的%pre和%build段(准备并编译)

-bi               #执行spec的%pre, %build与%install(准备,编译并安装)

-bl               #检查spec中的%file段(查看文件是否齐全)

-ba              #建立源码与二进制包(常用)

-bb              #只建立二进制包

-bs              #只建立源码包

2、重点介绍spec文件:

Summary: rpm hello world.

Name: hello

Version: 0.1

Source: $RPM_SOURCE_DIR/hello-0.1-1.tar.gz          #源代码的tar包名字,严格一致;

Release: 1

Vendor: lx

License: Share

Group: Application/test

BuildRequires: gcc, make #环境要求

Requires: 
libdnet.1 libpcap.so.1 libsfbpf.so.0 #依赖库要求

%description

print hello

%prep       #编译前的准备部分,一般为删除之前的中间文件(BUILD目录),解压缩源码文件

rm -rf $RPM_BUILD_DIR/hello-0.1-1

zcat $RPM_SOURCE_DIR/hello-0.1-1.tar.gz |
tar xvf -

%build  
#完成make编译部分,如果源码中提供了Makefile文件,就是一条make命令

cd $RPM_BUILD_DIR/hello

./configure  --prefix = /usr/local/

make

%install     #完成安装部分,如果源码中提供了Makefile文件,就是一条make
install命令

cd $RPM_BUILD_DIR/hello

make install

%files         #列出软件被安装后,目标机器上由该文件新建的文件,包括可执行文件、配置文件、man文件等

%doc

%defattr(-,root,root)

/usr/lib/*

/usr/include/*

/usr/sbin/*

Rpm包制作注意点:

1、%file段  文件的添加;

2、安装时,对依赖库的需求;

手动制作rpm包的更多相关文章

  1. 一步步制作RPM包

    一步步制作RPM包 来源 http://blog.51cto.com/laoguang/1103628 一.RPM制作步骤 我们在企业中有的软件基本都是编译的,我们每次安装都得编译,那怎么办呢?那就根 ...

  2. 制作rpm包步骤

    由于项目需要,需要自行制作rpm包.比较全面的可以参考如下链接: http://blog.chinaunix.net/uid-23069658-id-3944462.html 大致框架如下: 1,安装 ...

  3. 烂泥:Linux源码包制作RPM包之Apache

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 公司服务器比较多,需要把apache源码包制作成rpm包,然后放到公司内网yum源上进行下载安装.apache的rpm包安装方式比源码安装方式比较快,这能 ...

  4. Linux系统手动安装rpm包依赖关系分析(以Kernel升级为例)

    有在Linux系统中安装软件的经历的人都知道,在Linux系统中手动安装软件不想在Windows下安装软件那么方便,直接双击,然后下一步下一步就可以把软件成功的装入到系统中,而在Linux系统中,安装 ...

  5. 速成制作rpm包

    FPM 由于很多软件在安装时需要编译,这会浪费不少的时间,为了提升部署效率,于是就想到制作rpm包.通常rpm包的制作是使用rpmbuild命令来制作,但是你需要知道它的语法,比较繁琐.这就用到了FP ...

  6. 利用fpm制作rpm包

    使用fpm制作rpm包 安装如下 [root@web01 ~]# yum install -y gcc zlib zlib-devel wget http://ruby.taobao.org/mirr ...

  7. fpm制作rpm包

    一.前言 在企业中我们有事安装软件包.部分都是源码安装,如nginx安装路径都已经固化了,但实际业务中,我们都是把软件包安装到固定目录下,不满足需要,这是其一.其二,编译安装很耗时,比如mysql,特 ...

  8. fpm 制作rpm包

    使用fpm命令制作rpm包并安装 工作中有如下情况需要将文件打包rpm: 避免重复工作,将源码程序打包为rpm 使用yum发布项目,项目打包为rpm 将自己写好的程序打包为rpm,提供给用户下载 其他 ...

  9. linux制作RPM包

    制作rpm包 1.制作流程1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好制 ...

随机推荐

  1. Android 全屏方法

    我大概不想赘述什么其他方法,我就说一下我已知在用的方法QAQ requestWindowFeature(Window.FEATURE_NO_TITLE); 设置程序无标题栏 getWindow().s ...

  2. TEX Quotes(字符串,水)

    TEX Quotes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9674   Accepted: 5073 Descri ...

  3. c++实现精确计时

    //获取比較准确是程序执行时间 #include<iostream> #include<windows.h> using namespace std; int main(voi ...

  4. Ext JS学习第八天 Ext基础之 认识Ext.js 和Ext-more.js

    此文来记录学习笔记: •认识Ext.js 和Ext-more.js •首先,我们要知道这2个js文件的作用,这俩个文件包含了Ext的一些基础定义.基本的属性和方法,我们要重点学习和深入底层代码进行研究 ...

  5. [译]MDX 介绍

    关于MDX MDX (Multi Dimensional eXpression language) 是非常强大的工具,可以将你的多维数据库/cube 发挥到极致. 本文会覆盖MDX基础,并且希望能使你 ...

  6. 伪静态 apache重写

    mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面 下面我详细说说它的使用方法 A.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查 ...

  7. 如何去掉Protel99se汉化菜单

    说明: 安装Protel99se汉化包后,卸载后重新安装也无法去掉汉化菜单.本文介绍解决办法. 问题: 网上一些Protel99se的安装包内,在介绍Protel安装时,采用3大步的方法.第一步安装P ...

  8. QT学习 之 对话框 (四) 字体对话框、消息对话框、文件对话框、进程对话框(超详细中文注释)

    QMessageBox类: 含有Question消息框.Information消息框.Warning消息框和Critical消息框等 通常有两种方式可以来创建标准消息对话框: 一种是采用“基于属性”的 ...

  9. python测试框架--nose

      最近再浏览Python自动化测试框架,之前接触过unittest,看了篇文章,发现nose貌似更牛逼一些,于是安装试了试,分享一下心得.     nose 项目是于 2005 年发布的,也就是 p ...

  10. IT第二天 - JAVA环境的配置、Hello的编写

    IT第二天 上午 HTML的一些讲解 下午 JDK的安配置 JAVA语法的注意事项 Hello的编写 晚上 作业 对println的应用 笔记 1.Classpath环境变量的配置:因为DOS对于文件 ...