参考http://www.worldhello.net/2011/04/02/2405.html

http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part1/

http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part2/

http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part3/

1、创建目录结构

[root@nodea rpmbuild]# rpm --showrc|grep _topdir
-14: _builddir %{_topdir}/BUILD
-14: _buildrootdir %{_topdir}/BUILDROOT
-14: _rpmdir %{_topdir}/RPMS
-14: _sourcedir %{_topdir}/SOURCES
-14: _specdir %{_topdir}/SPECS
-14: _srcrpmdir %{_topdir}/SRPMS
-14: _topdir %{getenv:HOME}/rpmbuild

[root@nodea rpmbuild]# echo $HOME
/root

得知目录结构是/root/rpmbuild/、/root/rpmbuild/BUILD、 /root/rpmbuild/BUILDROOT /root/rpmbuild/RPMS /root/rpmbuild/SOURCES /root/rpmbuild/SPECS /root/rpmbuild/SRPMS

/root/rpmbuild/BUILD是将tar.gz文件解压后,暂时存储的路径,并在这路惊下调用Make

/root/rpmbuild/BUILDROOT是rpm打包前的存储路径

/root/rpmbuild/RPMS 是rpm打包成果的路径

/root/rpmbuild/SOURCES 是源码存放的路径

/root/rpmbuild/SPECS 是打包脚本存放的路径

/root/rpmbuild/SRPMS (暂时没用到过)

2、资源的准备

项目名称为PlaybackService,目录结构为

[root@nodea PlaybackService-0.1]# ls
PlaybackService So config.ini config.mk jw.conf makefile

在So中存放工程中要用到的动态库

[root@nodea So]# ls
config.ini libThreadPool.so libmyodbc5.so
libChannelMgr.so libUnitCommandClient.so libmysqlclient.so.18
libDBPM.so libjrtp-3.7.1.so libodbc.so.1
libPMData.so libjrtp_adp.so libodbcinst.so.1
libPMNEW.so libjthread-1.2.1.so libpcl.so
libSendStream.so libjwrtp.so libxmlformattedoutputc.so
libTcpClient.so liblog4cplus-1.1.so.6

修改原有的makefile文件,在其Install项目中添加

51 mkdir -p $(RPM_INSTALL_ROOT)/usr/local/bin/JW/
52 mkdir -p $(RPM_INSTALL_ROOT)/usr/local/bin/JW/lib/
53 cp ./So/* $(RPM_INSTALL_ROOT)/usr/local/bin/JW/lib/
54 cp ./config.ini $(RPM_INSTALL_ROOT)/usr/local/bin/JW/
55 cp ./jw.conf $(RPM_INSTALL_ROOT)/usr/local/bin/JW/
56 install -m 755 ../Bin/debug/PlaybackService $(RPM_INSTALL_ROOT)/usr /local/bin/JW/

此处代码将被rpm的脚本调用,主要任务是将需要打包的资源拷贝到/root/rpmbuild/BUILDROOT相应的目录中,准备用于封装rpm包。

3、在/root/rpmbuild/SPECS存放打包的脚本:PlaybackService.spce

其代码为:

1 Summary: hello world rpm package
2 Name: PlaybackService
3 Version: 0.1
4 Release: 1
5 Source: PlaybackService-0.1.tar.gz
6 License: GPL
7 Packager: amoblin
8 Group: Application
9 URL: http://www.gzjpg.com/
10
11 %description
12 This is a software for making your city more beautiful!
13
14 %pre
15 echo This is PlaybackService Install
16 echo -----------------Welcome------------------
17
18
19 %prep
20 %setup -q
21
22 %post
23 export LD_LIBRARY_PATH=/usr/local/bin/JW/lib
24 cd /usr/local/bin/JW
25 mv /usr/local/bin/JW/jw.conf /etc/ld.so.conf.d/
26 sleep 1
27 ldconfig
28 echo Install Success
29
30 %build
31 make
32
33 %install
34 RPM_INSTALL_ROOT=$RPM_BUILD_ROOT make install
35
36 %clean
37 rm -rf $RPM_BUILD_ROOT
38
39 %files
40 %defattr(-,root,root)
41 /usr/local/bin/JW/

3、操作过程

去到/root/rpmbuild/SOURCES

tar zcvf PlaybackService-0.1.tar.gz  PlaybackService/

去到/root/rpmbuild/SPECS

rpmbuild -bb PlaybackService.spec

4、验证

将/root/rpmbuild/RPMS下的PlaybackService-0.1-1.x86_64.rpm拷贝到其他机器上

运行rpm -i PlaybackService-0.1-1.x86_64.rpm

rpm封装包,只用于记录自己过程,不适合初学者看,请看参考链接的更多相关文章

  1. linux rpm问题:怎样查看rpm安装包的安装路径

      x rpm问题:怎样查看rpm安装包的安装路径 2010-07-12 21:19:15 标签:rpm linux 路径 休闲 职场 rpm -qpl xxxxxx.rpm 1.如何安装rpm软件包 ...

  2. rpm 安装包制作

    rpm 安装包制作 思路 参照系统自带 etcd 解压->替换掉执行文件->打包 1 预备安装工具 下载工具 yumloader #yum install -y yum-utils 解压工 ...

  3. CentOS 6 RPM安装包下载地址

    32位系统的RPM安装包的下载地址 http://mirrors.163.com/centos/6/os/i386/Packages/ 64位系统的RPM安装包的下载地址 http://mirrors ...

  4. SQLite C++ Wrapper 是一个 C++ 语言对 SQLite 的最小封装包。

    SQLite C++ Wrapper 是一个 C++ 语言对 SQLite 的最小封装包. 示例代码1:   #include <string> #include <iostream ...

  5. 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

    题目描述 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出. 输入描述: 先输入键值对的个数然后输入成对的index和value值 ...

  6. 本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考)

    本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考) 本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考) 本人亲测-SSM环境搭建(使用eclip ...

  7. RPM安装包-Spec文件參数具体解释与演示样例分析

    spec文件是整个RPM包建立过程的中心,它的作用就如同编译程序时的Makefile文件. 1.Spec文件參数 spec文件包括建立一个RPM包必需的信息,包括哪些文件是包的一部分以及它们安装在哪个 ...

  8. Android安装包相关知识汇总 (编译过程图给力)

    转自: https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=208008519&idx=1&sn=278b7793699 ...

  9. 将java的jar包,打包为rpm 安装包

    一.rpm包 介绍 RPM Package Manager (RPM) 是一个强大的命令行驱动的软件包管理工具,用来安装.卸载.校验.查询和更新 Linux 系统上的软件包 二.环境安装 一台cent ...

随机推荐

  1. Windows安装Node.Js

    1.下载https://nodejs.org/ 2.安装 3.修改环境变量,添加安装的Node.js的目录(此处似乎可以不用配置) 4.查看npm指令 关于npm介绍“Nodejs自身提供了基本的模块 ...

  2. 《所用到的AJAX技术基础》

    来自百度网页,w3cshool网页:AJAX = Asychronous JavaScript and XML,翻译成中文为:异步的JavaScript XML. 异步的意思就是不重新加载整个页面,后 ...

  3. get_list_or_404(klass, *args, **kwargs)和get_object_or_404(klass, *args, **kwargs)区别

    get_object_or_404() 是通过调用get()方法从model管理器上获取数据, 如果对象不存在,它会报Http404的异常,而不是model的 DoseNotExist异常. get_ ...

  4. Windows消息过滤

    在C#编程中,经常会遇到一些场景,如禁止鼠标拖动窗体,启用某些快捷键,禁止鼠标移动等.遇到这些需求,可以通过窗体的MouseMove事件,OnDragDrop,OnMove等事件来解决问题, 但是该方 ...

  5. Linux中exit与_exit的区别

    在exit,_exit的区别 - exit()与_exit()函数的区别(Linux系统中)2012-03-20 15:19:53 分类: LINUX 注:exit()就是退出,传入的参数是程序退出时 ...

  6. 如何在centos 6.7 上安装oracle 11gR2

    1.软件准备: centos6.7(64位); oracle11gR2((Linux x86-64)) 2.执行如下命令安装好相关的包: yum -y install \ binutils \ com ...

  7. Android的各种Drawable 讲解 大全

    Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型.Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接 ...

  8. 单例设计模式全局缓存accessToken

    使用微信JS-SDK开发的小伙伴们,看文档经常会看到这样一句话:(下面是微信开发文档的一部分原话截图) 这句话就是:开发者必须在自己的服务全局缓存access_token,jsapi_ticket 下 ...

  9. web开发过程中经常用到的一些公共方法及操作

    进化成为程序猿也有段岁月了,所谓的经验,广度还是依旧,只不过是对于某种功能有了多种实现方式的想法.每天依旧不厌其烦的敲打着代码,每一行代码的回车似乎都有一种似曾相识的感觉.于是乎:粘贴复制,再粘贴再复 ...

  10. c#查找string数组的某一个值的索引

    string[] array = { "A","B","C","D","H"};   var ind ...