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
Executing: %prep 2 + umask 022 3 + cd /usr/src/dist/BUILD 4 + exit 0 5
Executing: %build 6 + umask 022 7 + cd /usr/src/dist/BUILD

生成的文件会在刚才建立的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包的更多相关文章

  1. openvswitch2.11.0修改源码后重新编译(2)

    一:前提 已经正常安装了SDN环境(mininet和openswitch2.11.0和Ryu) 使用前面教程安装环境SDN实验---使用git安装Mininet (一)测试ovs是否正常使用 1.ry ...

  2. Appium修改源码后重新编译

    按照官方的说明下载源码,安装依赖库,具体可从这来: https://github.com/appium/appium/blob/master/docs/en/contributing-to-appiu ...

  3. openvswitch2.11.0修改源码后重新编译

    一:推文 https://www.jianshu.com/p/923f49c290f5(可以删除运行当中的DataPath内核) https://github.com/ebiken/doc-netwo ...

  4. RPM包或源码包

    安装RPM包或源码包 点击vmware右下角光驱连接. 安装rpm包 -i:表示安装 -v:表示可视化 -h:表示显示安装进度 (同时使用) --force:表示强制安装,即使覆盖属于其他包的文件也要 ...

  5. Hadoop 修改源码以及将修改后的源码应用到部署好的Hadoop中

    我的Hadoop版本是hadoop-2.7.3, 我们可以去hadoop官网下载源码hadoop-2.7.3-src,以及编译好的工程文件hadoop-2.7.3, 后者可以直接部署. 前者hadoo ...

  6. yum更换国内源、yum下载rpm包、源码包安装 使用介绍

    第5周第4次课(4月19日) 课程内容: 7.6 yum更换国内源7.7 yum下载rpm包7.8/7.9 源码包安装 7.6 yum更换国内源 当yum仓库的软件不好用时,例如很多yum源都是国外的 ...

  7. Sentinel控制台1.8.3修改源码,修改配置后推送到Nacos

    目录 1. 接着上一篇 2. 思路 3. 下载Sentinel源码 4. 看Gateway里面读取的配置信息 5. 修改Sentinel控制台源码 6. 熔断规则测试 7. 限流规则测试 8. 打包使 ...

  8. httpd的rpm包及源码安装配置

    httpd的rpm包及源码安装配置 1.rpm包安装 系统环境: [root@zhaochj ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel ...

  9. 安装RPM包或者源码包

    RPM工具 RPM他是以一种数据库记录的方式将我们所需要的套件安装到linux主机的一套管理程序关于RPM各个选项的含义如下-i:表示安装-v:表示可视化-h:表示安装进度在安装RPM包时,常用的附带 ...

随机推荐

  1. CSS 布局实例系列(三)如何实现一个左右宽度固定,中间自适应的三列布局——也聊聊双飞翼

    今天聊聊一个经典的布局实例: 实现一个三列布局,其中左侧和右侧的部分宽度固定,中间部分宽度随浏览器宽度的变化而自适应变化 可能很多朋友已经笑了,这玩意儿通过双飞翼布局就能轻松实现.不过,还请容我在双飞 ...

  2. docker swarm部署spring cloud服务

    一.准备docker swarm的集群环境 ip 是否主节点   192.168.91.13 是   192.168.91.43 否   二.准备微服务 ①eureka服务 application.y ...

  3. 事务的四大特性ACID

    ACID是指数据库事务的四大特性,是由Jim Gray在19世纪70年代后期提出的概念,1983年Andreas Reuter and Theo Härder创造了ACID这个缩略语用来描述这四大特性 ...

  4. Spark Structured Streaming框架(4)之窗口管理详解

    1. 结构 1.1 概述 Structured Streaming组件滑动窗口功能由三个参数决定其功能:窗口时间.滑动步长和触发时间. 窗口时间:是指确定数据操作的长度: 滑动步长:是指窗口每次向前移 ...

  5. jQuery水平滑动菜单

    在线演示 本地下载

  6. uitableview 刷新一行

    ios UITableview 刷新某一行 或 section   //一个section刷新     NSIndexSet *indexSet=[[NSIndexSet alloc]initWith ...

  7. Delphi程序的自动升级功能的实现(AutoUpdate使用指南)

    在UtiMnid组件下,利用auAutoUpgrader实现自动升级(已经测试通过) 第一步:下载AutoUpgrader.Pro.v4.6.4. 第二步:打开AutoUpgrader.Pro.v4. ...

  8. 算法(Algorithms)第4版 练习 1.5.5

    对于quick-find,对每个输入数据对,其最少的循环次数为N(sites) 故对于109 sites和106 input pairs,其总的指令次数为:sum = 10^9 * 10^6 * 10 ...

  9. html5新特性contenteditable 属性更容易实现动态表单

    介绍html5新特性的一个属性:contenteditable 作用域全局.所有的块标签都可以,例如:span.p.div.td等标签.但是,不可以作用域<br/>类型的标签. conte ...

  10. CSS控制表格嵌套

    网页设计应用中,当我们不能完全放弃表格的使用时,为了达到预期的效果,不免要用到表格嵌套(特别是多层嵌套)方式来进行布局.可能很多同仁都遇到过这样的问题,为了达到显示效果要为每一个(每一层)的表格写不同 ...