PATCH制作方法

 MINI RPM PATCH HOWTO 最简单的PATCH制作方法 V 0.1 版本

 Author: wangxg
MINI RPM PATCH HOWTO
最简单的PATCH制作方法
V 0.1 版本
目的:
您目的是希望修改了RPM源码包中的源代码后,将自己修改的代码制作成PATCH的形式编译到原RPM包中,从而方便RPM包的制作,
以及保证代码的一致性和可维护性.常规操作:
1. 在系统中建立三个目录:
1.1 源代码调式和编译目录 (定义为 “ 工作目录” )
1.2 修改目标代码目录 (定义为 “ 目标目录” )
1.3 原始源代码目录 (定义为 “ 源目录” )
注释:1.1“ 工作目录” 即是我们直接修改和调式源代码的目录,一般情况下我们会解开
RPM源代码包,然后进行 rpmbuild ,在/usr/src/redhat/Build/目录下会产生系统
的源代码目录,建议将该目录作为工作目录.
1.2 “ 目标目录” 是存放最终代码(修改过的源代码)的目标目录,一般我们将“ 工作目录”
中修改好的源代码复制到该“ 目标目录” 中,覆盖该目录中的旧文件,如果是新增的文件,
则将新增文件直接复制到相应的目录结构中.为工作方便,目标目录一般情况下在系统/usr/src/redhat/SOURCE/目录
下.该目录是解压在SOURCE目录下的源代码包压缩包( 包名.tar.bz2)产生的.
注: SOURCE目录下的tar.bz2包是在安装源代码包(执行rpm -ivh )时
自动生成的.
1.3 “ 源目录” 是制作patch时对比用的目录,方法是在SOURCE目录制作“ 目标目录” 时复制一
个目录更名为 包名.orig (后最只是用来和“ 目标目录” 做区分)
1.4 注意:解压tar.bz2包生成“ 目标目录” 和“ 源目录” 后要恢复一个 tar.bz2包,否则在执行rpmbuild时,系统会提示在SOURCE目录下找不到包名.tar.bz2文件.
2. 在“ 工作目录” 中调式和修改源代码;
2.1 记录修改的文件名
2.2 记录新增的文件名
2.3 记录删除的文件名
注释:2.1 这里指的修改过的文件是没有编译前存在的文件
2.2 这里新增的文件是指用户额外编写的程序代码,也可以是二进制模块
2.3 这里删除的文件是指用户手动删除的编译和调式前存在的文件
3. 当调式“ 工作目录” 中代码无误时,将“ 工作目录” 目录中修改过的文件,用户新增加的
文件,将“ 目标目录” 对应于“ 工作目录” 中用户删除的文件删除.
注意:3.1 修改过的文件会覆盖“ 目标目录” 相应的文件
3.2 将新增的文件拷贝到“ 目标目录” 相应的目录结构中
3.3 删除“ 目标目录” 中对应于“ 工作目录” 中用户删除的文件
4. 制作PATCH文件
4.1 在SOURCE目录下用如下命令:
# diff -uNr “ 源目录” “ 目标目录” > 包名.作者.日期.patch
注:a. “ 包名.作者.日期.patch ” 是用户自己取的.作者可以根据自己的规范命名;
b. patch文件一定在SOURCE目录下;
5. 修改SPECS文件
5.1 在SPECS下有包的SPEC文件,名为 “ 包名.SPEC”
5.2 修改该SPEC文件,这里我们举一个小型的 spec 文件为例 (vim-3.0-1.spec):
*****************************************************
Summary: ejects ejectable media and controls auto ejection
Name: eject
Version: 1.4
Release: 3
Copyright: GPL
Group: Utilities/System
Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
Patch: eject-1.4-make.patch
Patch1: eject-1.4-jaz.patch
%description
This program allows the user to eject media that is autoejecting like
CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.
%prep

%setup
%patch -p1
%patch1 -p1
%build
make RPM_OPT_FLAGS=/"$RPM_OPT_FLAGS/"
%install<br >install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
install -m 644 -o 0 -g 0 eject.1 /usr/man/man1
%files %doc README COPYING ChangeLog
/usr/bin/eject
*****************************************************
注意:从上面示例中我们看到,修改SPEC文件只有两个地方,一是在Source后面,
二是在%setup后面.
修改方法:
1. 如果原 SPEC 文件没有PATCH,则在文件的&#8220; Source:&#8221; 行后增加&#8220; Patch:&#8221; 行.
将您的Patch名写在Patch: 后面,例如: Patch: OpenOffice-hhj-20030715.patch
如果原 SPEC 文件有PATCH,则在旧的&#8220; Patch:&#8221; 行后新增&#8220; PatchN:&#8221; 行.
如果原来只有一个&#8220; Patch:&#8221; ,您则增加&#8220; Patch1:&#8221; ,并将您的Patch名写在Patch1:
 后面,例如: Patch1: OpenOffice-hhj-20030715.patch,依此类推.
2. 如果原 SPEC 文件没有PATCH,则在 SPEC 文件%setup行后面
增加一行%patch -p1 ,其中 -p1 是参数
如果原来只有一个&#8220; Patch:&#8221; ,您增加&#8220; Patch1:&#8221; ,则在SPEC文件%setup行后面,的
%patch -p1后面新增一行: %patch1 -p1 依此类推.
注释:
Source行后面的Patch项在%setup行后面肯定有对应项.
6. 执行rpmbuild -ba 命令,这时打出来的二进制RPM包就是修改过的包了,源代码包则包含
了您的PATCH.
(列举修改 anaconda源代码):
1.在RedHat9.0中安装anaconda-9.0.src.rpm
# rpm -ivh anaconda-9.0.src.com
1.1 在系统中会出现如下文件:
/usr/src/redhat/SOURCE/anaconda-9.0.tar.bz2
2. 解压上面目录中的压缩包--anaconda-9.0.tar.bz2
# bunzip2 anaconda-9.0.tar.bz2
2.2 在系统中会出现如下文件 :
/usr/src/redhat/SOURCE/anaconda-9.0.tar
2.3 解压上面2.2 tar 包
# tar -xvf anaconda-9.0.tar
在系统中产生如下目录
/usr/src/redhat/SOURCE/anaconda-9.0
2.4 复制anaconda-9.0 目录
# cp -rf anaconda-9.0 anaconda-9.0.orig
现在系统SOURCE目录下存在两个没有编译过的源代码目录
一个是源目录: anaconda-9.0.orig
一个是修改目录: anaconda-9.0
注意:千万不要在SOURCE中的修改目录中编译和调式源代码.该目录只是用来存放修改过的源代码(将其他编译和
调式环境中的源代码文件直接覆该目录中的原文件).
一般我们修改的代码都是直接在源代码目录中进行编译,最常用的是在BUILD目录中的源代码目录中,
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值