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. Bootstrap导航栏头部错位问题

    代码: <section class="header"> <div class="container"> <div class=& ...

  2. POJ3094 Sky Code(莫比乌斯反演)

    POJ3094 Sky Code(莫比乌斯反演) Sky Code 题意 给你\(n\le 10^5\)个数,这些数\(\le 10^5\),问这些这些数组成的互不相同的无序四元组(a,b,c,d)使 ...

  3. Docker dubbo 服务注册

    vim run.sh #!/bin/baship=`ifconfig eth0 |grep "inet"|awk '{print $2}'`hn=dubbo-service-pro ...

  4. 淘宝开放平台php-sdk测试 获取淘宝商品信息(转)

    今天想使用淘宝开放平台的API获取商品详情,可是以前一直没使用过,看起来有点高深莫测,后然看开发入门,一步一步,还真有点感觉了,然后看示例,还真行了,记下来以后参考.其中遇到问题,后然解决了.因为我已 ...

  5. C#聚合运算方法

    Aggregate 对集合值执行自定义聚合运算 Average 计算集合平均值 Count 对集合的元素惊醒计数,还可以仅对满足某一谓词函数的元素进行计数 LongCount 对大型集合中的元素进行计 ...

  6. mysql复制表结构和内容

    许多时候我们想复制一张表部分或者全部内容,或者只复制一张表的框架,这种需求应该说我们很常见. 其实想要实现这种需求十分简单. 表一: mysql> select * from student_i ...

  7. Data Structure Linked List: Write a function to get the intersection point of two Linked Lists.

    http://www.geeksforgeeks.org/write-a-function-to-get-the-intersection-point-of-two-linked-lists/ 第一第 ...

  8. maven setting.xml 中文配置详解(全配置)

    春节假期在家养病,乘有时间整理了下之前的知识——知识贵在归纳总结. 参照了官方文档,针对其中的一些未描述详尽的内容翻查了不少资料,补充到了配置文件中,同时再加上一些说明.例子,方便查阅. 内容虽然比较 ...

  9. Java多线程系列 JUC锁06 Condition条件

    Condition介绍 Condition中提供了一组类似于Object中的监视器方法.与Lock配合可以完成等待通知模式. Lock lock = new ReentrantLock(); Cond ...

  10. python 3 并发编程多进程 paramiko 模块

    python 3 paramiko模块 paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的pa ...