利用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/[email protected]/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包

时间: 2024-10-11 11:17:24

利用src.rpm包修改源码后重新制作rpm包的相关文章

java进阶(六)------源码学习---myeclipse如何查看jar包的源码

查看源码的思路和代码规范是我们学习完善代码编写能力的重要手段. 有时候我们会遇到想看某个jar包中的类和方法的实现,但是无法查看. 这是因为未加载jar包的源码.只要找到jar包的源码并把路径设置好 就可以查看了. 源码下载 源码的下载 需要自己按照版本找好,可以是zip也可以是jar包. 这里有几个找源码的网站,也可以去jar包的官网查找. github https://github.com/openjdk-mirror/jdk7u-jdk sourceforge https://source

Linux-什么是二进制包,源码包,RPM包,软件仓库

博文说明[前言]: 本文将通过个人口吻介绍什么是二进制包,RPM包,源码RPM包(SRPM包),源码包,以及RPM常用命令,源码rpm的安装(*.src.rpm),源码包的安装步骤知识(./configure,make,make install)相关知识. 在目前时间点[2017年6月12号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 本文参考文献引用链接: 1.http://m

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

我的Hadoop版本是hadoop-2.7.3, 我们可以去hadoop官网下载源码hadoop-2.7.3-src,以及编译好的工程文件hadoop-2.7.3, 后者可以直接部署. 前者hadoop-2.7.3-src必须mvn之后才能部署. 我们修改代码必须是在hadoop-2.7.3-src源码中进行, 而源码mvn之后才能部署或使用. 所以我们要先了解Maven.     mvn hadoop-2.7.3-src的时候会出现各种问题. 其中hadoop-2.7.3-src源码文件中有个

yum更换国内源、下载rmp包,源码包安装

yum 本身自带的yum源是国外的地址. 自定义yum源,需要先删除默认yum源,然后使用wget命令建立新yum源. 执行完curl命令后,生成了新的yum源文件CentOS7-Base-163.repo. 查看CentOS7-Base-163.repo文件,发现其中的镜像地址更改为baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/ yum下载rpm包 安装扩展源epel(epel在光驱中没有) 使用命令yum ins

实例详解:反编译Android APK,修改字节码后再回编译成APK

本文详细介绍了如何反编译一个未被混淆过的Android APK,修改smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk无论输入什么样的用户名和密码都可以成功进入到第二个Activity. 有时难免要反编译一个APK,修改其中的若干关键判断点,然后再回编译成一个全新的可用的apk,这完全是可实现的.若要完成上述工作,需要以下工具,杂家后面会把下载链接也附上.这些软件截止本文发布时,经过杂家确认都是最新的版本. 1.APK-Multi-Toolv1.0.11.zip 用它

源码阅读与分析一:利用eclipse查看ssh等源码

要阅读开源框架代码,阅读class文件,我们一般有两种方法 1.利用maven进行相关操作 2.下载jar包的源码包进行导入阅读 这里我采用的是第二种 具体步骤如下: 一:这里如果我们要阅读struts源码,首先到官方下载,这里推荐下载all包,就是包含docs,src,lib的包,当然你也可以只下载lib和src包,lib包为我们的jar包,就是平常需要导入项目的,src包为jar包的源码包,里面包含所有jar包的.java源文件,docs则是我们的文档,里面包含struts的使用说明文档 首

flume修改源码实现source文件名前后缀的更改

业务场景: 需求:通过flume进行数据采集,将本地(windows服务器)不断产生的csv文件采集到hdfs上. 问题:本地文件在生成的过程中,会出现文件名重复的现象.也就是说,在前一秒生成文件名为aaa.csv,该文件经过flume进行处理之后会进行文件名的更改,默认情况下文件名会更改为aaa.csv.COMPLATED,但是在第二秒的时候,接着又生成了aaa.csv文件,此时flume将该文件处理完进行更名的过程中,就会报错,例如: 解决:为了避免文件名重复导致flume程序挂的问题,此时

2apt-get命令,deb包安装,源码安装

1 安装卸载软件 更新源服务器列表 sudovi /etc/apt/sources.list 更新完服务器列表后需要更新下源 sudoapt-get update 更新源 sudoapt-get install package 安装包 sudoapt-get remove package 删除包 sudoapt-cache search package 搜索软件包 sudoapt-cache show package 获取包的相关信息,如说明.大小.版本等 sudoapt-get install

关于关联javaee源码(tomcat源码)后还是无法显示源码的问题

今天想看HttpServlet的源码,关联了tomcat版本的javaee源码后,按F3依然无法看到源码,后来查资料发现原来还需要下载编译tomcat源码的jar包,地址如下http://download.csdn.net/download/come_on_ha/9555502 里面总共4个jar包,好像里面随便一个jar包放入项目lib目录然后build path后 关联的tomcat源码就起作用了.