rpm初始源码上直接打patch的方法

通常情况下,我们从网上下载的rpm源码包包含三种文件,patchtar.bz2spec文件。patch是源代码补丁文件;tar.bz2是源代码程序包;spec是控制源代码编译的脚本文件。可能我们需要的仅仅是其打上所有补丁后的源码,但如何从rpm源码包中获取其已打补丁后的源码呢?本文是我在实际操作后总结所得,可供参考。

基础知识。

可以大概了解下RPM软件包的制作和安装方法,这可以为我们后边的工作做个铺垫,知其然也知其所以然。但这部分内容在网上有N多参考资料,在此不在赘述。

推荐资料如下

RPM包制作()     

 http://blog.chinaunix.net/space.php?uid=70565&do=blog&id=2070337

RPM包制作()

http://os.chinaunix.net/a2006/0309/1001/000001001601.shtml

源代码RPM包的安装:

http://familycandy.blog.51cto.com/3382942/781523

linux下源码包制作成rpm包教程:      

  http://www.mysqlops.com/2012/02/22/linux-rpmbuild-rpm.html

下载rpm源码包。

rpm源码包命名为:包名.src.rpm

源码包下载

从网上下载所需rpm源码包,例如,LVM2rpm源码包是lvm2-2.02.95-10.el6.src.rpm。其中有一个基本的压缩源码包,还有36patch

源码包安装

执行如下命令:

rpm -ivhlvm2-2.02.95-10.el6.src.rpm

命令执行之后,会生成rpmbuild目录(本人试验时,总是在当前用户的主目录下),下边有两个文件夹SOURCESSPECS。命令执行时可能会输出N多下面语句,但似乎没什么问题,不用管它。

warning:user mockbuild does not exist - using root

warning:group mockbuild does not exist - using root

warning:user mockbuild does not exist - using root

warning:group mockbuild does not exist - using root


 

执行rpm的预处理

执行如下命令,但会出错

rpmbuild-bp lvm2.spec

error:Failed build dependencies:

corosynclib-devel >= 1.2.0-1 is needed bylvm2-2.02.95-10.el6.x86_64

openaislib-devel >= 1.1.1-1 is needed bylvm2-2.02.95-10.el6.x86_64

clusterlib-devel >= 3.0.6-1 is needed bylvm2-2.02.95-10.el6.x86_64

libudev-devel is needed bylvm2-2.02.95-10.el6.x86_64

在网上查到,需要加参数–nodeps –force

#rpmbuild -bp lvm2.spec --nodeps --force

Executing(%prep):/bin/sh -e /var/tmp/rpm-tmp.QLFBab

+ umask022

+ cd/root/rpmbuild/BUILD

+ LANG=C

+ exportLANG

+ unsetDISPLAY

+ cd/root/rpmbuild/BUILD

+ rm -rfLVM2.2.02.95

+/bin/tar -xf /root/rpmbuild/SOURCES/LVM2.2.02.95.tgz

+ cdLVM2.2.02.95

+/bin/chmod -Rf a+rX,u+w,g-w,o-w .

+ exit 0

命令执行很快,觉得patch好像没有打上,检查发现果然如此。不断查找资料,不断试验,偶然间发现了如下的解决方法。其实很简单,就是去掉–force,即执行命令:

rpmbuild -bp lvm2.spec –nodeps

命令输出提示如下:

Executing(%prep):/bin/sh -e /var/tmp/rpm-tmp.v5zMwH

+ umask022

+ cd/root/rpmbuild/BUILD

。。。

can-be-fixed.patch

+/usr/bin/patch -s -p1 -b --suffix .partial_activation --fuzz=0

+ exit 0

查看结果(目录为rpmbuild/BUILD/源码),patch已经达到初始的源码包上。

也可以发现,rpm打补丁的同时保留了原来的文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值