利用src.rpm包修改源码后重新制作rpm包
1. 下载 .src.rpm包。
例:https://repos.fedorapeople.org/repos/openstack/EOL/openstack-grizzly/epel-6/openstack-quantum-2013.1.4-4.el6.src.rpm
2. 使用" rpm -ivh "解压源码包。
例:rpm -ivh openstack-quantum-2013.1.4-4.el6.src.rpm (--root=xxx 指定路径)
解压的结果放在 /root/rpmbuild/ 下面。
3.(optional) 检查解压文件。
例:cd /root/rpmbuild/SPECS/
ls openstack-quantum.spec
4.(optional) 修改源代码。
5. 使用 rpmbuild 打包。(注:如果没有rpmbuild命令,请从CentOS光盘镜像安装: yum install rpm-build 如果有相关依赖包未安装,一并安装:yum install python2-devel, yum install dos2unix )
例: rpmbuild -ba openstack-quantum.spec (--define "_topdir xxx/root/rpmbuild" 指定buildroot)
------------------------------------------------------------------------------------------------------
附:rpmbuild命令的详解 <转自http://blog.163.com/huv520@126/blog/static/27765239200992110163786/>
Usage: rpmbuild [OPTION...]
*使用命令:rpmbuild ·[OPTION]
Build options with [ <specfile> | <tarball> | <source package> ]:
*建立包的选项有:[ 从文件<specfile>建立 |从 <tarball>包建立 |从 <source package>包建立]
*从文件<specfile>建立
-bp build through %prep (unpack sources and apply patches) from <specfile>
* -bp 从<specfile>文件的%prep段开始建立(解开源码包并打补丁)
-bc build through %build (%prep, then compile) from <specfile>
*-bc 从<specfile>文件的%build
-bi build through %install (%prep, %build, then install) from <specfile>
-bl verify %files section from <specfile>
*检查<specfile>文件的%files段
-ba build source and binary packages from <specfile>
*建立源码和二进制包
-bb build binary package only from <specfile>
*只建立二进制包
-bs build source package only from <specfile>
*只建立源码包
*从 <tarball>包建立
-tp build through %prep (unpack sources and apply patches) from <tarball>
-tc build through %build (%prep, then compile) from <tarball>
-ti build through %install (%prep, %build, then install) from <tarball>
-ta build source and binary packages from <tarball>
*建立源码和二进制包
-tb build binary package only from <tarball>
*只建立二进制包
-ts build source package only from <tarball>
*只建立源码包
*从 <source package>包建立
--rebuild
build binary package from <source package>
*建立二进制包
--recompile
build through %install (%prep, %build, then install) from <source package>
*rpmbuild的其他使用项
--buildroot=DIRECTORY override build root
*确定以root目录建立包
--clean remove build tree when done
*完成打包后清除BUILD下的文件目录
--nobuild do not execute any stages of the build
*不进行BUILD的阶段
--nodeps do not verify build dependencies
*不检查建立包时的关联文件
--nodirtokens
generate package header(s) compatible with (legacy) rpm[23] packaging
--rmsource remove sources when done
*完成打包后清除sources
--rmspec remove specfile when done
*完成打包后清除specfile
--short-circuit skip straight to specified stage (only for c,i)
*跳过
--target=CPU-VENDOR-OS
override target platform
*确定包的最终使用平台
Common options for all rpm modes:
*所有rpm都可使用的选项
-D, --define='MACRO EXPR' define MACRO with value EXPR
*预定义
-E, --eval='EXPR' print macro expansion of EXPR
*显示大量EXPR扩展信息
--macros=<FILE:...> read <FILE:...> instead of default file(s)
*读<FILE:...>文件代替默认文件
--nodigest don't verify package digest(s)
*不检查包的说明信息
--nosignature don't verify package signature(s)
*不检查包的签名信息
--rcfile=<FILE:...> read <FILE:...> instead of default file(s)
*读<FILE:...>文件代替默认文件
-r, --root=ROOT use ROOT as top level directory (default: "/")
*使ROOT为最高级别的路径
--querytags display known query tags
*显示已知的有疑问的地方
--showrc display final rpmrc and macro configuration
*显示最终的配置信息
--quiet provide less detailed output
*提供少量的信息
-v, --verbose provide more detailed output
* 提供大量的详细的信息
--version print the version of rpm being used
*显示rpm包的版本
Options implemented via popt alias/exec:
*附加选项
--dbpath=DIRECTORY use database in DIRECTORY
--with=<option> enable configure <option> for build
*建立时允许配置的选项
--without=<option> disable configure <option> for build
*建立时不允许配置的选项
Help options:
*帮助选项
-?, --help Show this help message
* 显示帮助信息
--usage Display brief usage message
*显示使用方法的信息
打包
如
果想发布rpm格式的源码包或者是二进制包,就要使用rpmbuild工具(rpm最新打包工具)。如果我们已经根据本地源码包的成功编译安装而写了
spec文件(该文件要以.spec结束),那我们就可以建立一个打包环境,也就是目录树的建立,一般是在/usr/src/redhat/目录下建立5
个目录。它门分别是BUILD、SOURCE、SPEC、SRPM、RPM。其中BUILD目录用来存放打包过程中的源文件,SOURCE用来存放打包是
要用到的源文件和patch,SPEC用来存放spec文件,SRPM、RPM分别存放打包生成的rpm格式的源文件和二进制文件。当然我们可以根据需要
来选用不同的参数打包文件,笔者总结如下3条。
1) 只生成二进制格式的rpm包
rpmbuild -bb xxx.spec
用此命令生成软件包,执行后屏幕将显示如下信息:(每行开头为行号)
|
1 |
生成的文件会在刚才建立的RPM目录下存在。
2)只生成src格式的rpm包
rpmbuild -bs xxx.spec
生成的文件会在刚才建立的SRPM目录下存在。
3) 只需要生成完整的源文件
rpmbuild -bp xxx.spec
源文件存在目录BUILD下。
读者朋友可能对这个命令不太明白,这个命令的作用就是把tar包解开然后把所有的补丁文件合并而生成一个完整的具最新功能的源文件。
4) 完全打包
rpmbuild -ba xxx.spec
产生以上3个过程分别生成的包。存放在相应的目录下。
利用src.rpm包修改源码后重新制作rpm包的更多相关文章
- openvswitch2.11.0修改源码后重新编译(2)
一:前提 已经正常安装了SDN环境(mininet和openswitch2.11.0和Ryu) 使用前面教程安装环境SDN实验---使用git安装Mininet (一)测试ovs是否正常使用 1.ry ...
- Appium修改源码后重新编译
按照官方的说明下载源码,安装依赖库,具体可从这来: https://github.com/appium/appium/blob/master/docs/en/contributing-to-appiu ...
- openvswitch2.11.0修改源码后重新编译
一:推文 https://www.jianshu.com/p/923f49c290f5(可以删除运行当中的DataPath内核) https://github.com/ebiken/doc-netwo ...
- RPM包或源码包
安装RPM包或源码包 点击vmware右下角光驱连接. 安装rpm包 -i:表示安装 -v:表示可视化 -h:表示显示安装进度 (同时使用) --force:表示强制安装,即使覆盖属于其他包的文件也要 ...
- Hadoop 修改源码以及将修改后的源码应用到部署好的Hadoop中
我的Hadoop版本是hadoop-2.7.3, 我们可以去hadoop官网下载源码hadoop-2.7.3-src,以及编译好的工程文件hadoop-2.7.3, 后者可以直接部署. 前者hadoo ...
- yum更换国内源、yum下载rpm包、源码包安装 使用介绍
第5周第4次课(4月19日) 课程内容: 7.6 yum更换国内源7.7 yum下载rpm包7.8/7.9 源码包安装 7.6 yum更换国内源 当yum仓库的软件不好用时,例如很多yum源都是国外的 ...
- Sentinel控制台1.8.3修改源码,修改配置后推送到Nacos
目录 1. 接着上一篇 2. 思路 3. 下载Sentinel源码 4. 看Gateway里面读取的配置信息 5. 修改Sentinel控制台源码 6. 熔断规则测试 7. 限流规则测试 8. 打包使 ...
- httpd的rpm包及源码安装配置
httpd的rpm包及源码安装配置 1.rpm包安装 系统环境: [root@zhaochj ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel ...
- 安装RPM包或者源码包
RPM工具 RPM他是以一种数据库记录的方式将我们所需要的套件安装到linux主机的一套管理程序关于RPM各个选项的含义如下-i:表示安装-v:表示可视化-h:表示安装进度在安装RPM包时,常用的附带 ...
随机推荐
- 17.Django表单验证
Django提供了3中方式来验证表单 官网文档:https://docs.djangoproject.com/en/1.9/ref/validators 1.表单字段验证器 a.引入:from dja ...
- (转)ubuntu 12.04搭建Adobe Flash Media Server服务
破解版传送门:http://fms45.cuplayer.com/fms4download.html 福利:1462-5247-1705-7678-8379-5590 下载解压 cd进目录,./ins ...
- PullToRefresh下拉刷新
https://github.com/chrisbanes/Android-PullToRefresh
- 每天一个Linux命令(9)mv命令
mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中. 注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加.而cp对文件进行复制,文件个数增加了. (1) ...
- Java多线程系列 JUC线程池01 线程池框架
转载 http://www.cnblogs.com/skywang12345/p/3509903.html 为什么引入Executor线程池框架 new Thread()的缺点 1. 每次new T ...
- 【八】MongoDB管理之分片集群实践
MongoDB中集群有三种:主从复制.副本集.分片集群.目前副本集已经替代主从复制架构,成为官方建议采用的架构,而分片集群相较于前两种,更加复杂. 下面是生产环境中常用的分片集群架构: 我们知道,分片 ...
- CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇
CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境 CentOS7 + Python3 + D ...
- 大话设计模式--中介者模式 Mediator --C++实现实例
1. 中介者模式: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立改变他们之间的交互. Mediator的出现减少了各个Colleague的耦 ...
- fffmpeg 提取pcm
ffmpeg -i input.aac -codec:a pcm_f32le -ar 48000 -ac 2 -f f32le output.pcm
- Oracle数据库定义语言(DDL)
--使用Create遇见创建表 Create Table table_name ( column_name datatype [null|not null], column_name datatype ...