PATCH制作方法

来源:互联网 发布:qt gui 编程 源码 编辑:程序博客网 时间:2024/06/10 04:10

 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目录中的源代码目录中,
原创粉丝点击