打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PATCH制作方法
最简单的PATCH制作方法
Subject:
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
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,则在文件的“Source:”行后增加“Patch:”行.
将您的Patch名写在Patch: 后面,例如: Patch: OpenOffice-hhj-20030715.patch

如果原 SPEC 文件有PATCH,则在旧的“Patch:”行后新增“PatchN:”行.
如果原来只有一个“Patch:”,您则增加“Patch1:”,并将您的Patch名写在Patch1: 后面,例如: Patch1: OpenOffice-hhj-20030715.patch,依此类推.

2. 如果原 SPEC 文件没有PATCH,则在 SPEC 文件%setup行后面
增加一行%patch -p1 ,其中 -p1 是参数
如果原来只有一个“Patch:”,您增加“Patch1:”,则在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目录中的源代码目录中,
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
rpm建包原理
RPM包rpmbuild SPEC文件深度说明 - 夜鸣猪的RubyOnRails空间 -...
微头条
rpm 打包整理
PowerPC平台Linux的移植
Linux的补丁知识
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服