Press "Enter" to skip to content

Linux Kernel 更新 Patch 方法

在《Linux的patch原理》一文中,本博客讲述了使用patch命令来更新Patch的方法。今天写写正常情况下向Linux Kernel加入Patch的过程。本文实验环境基于CentOS 6.4 64bit。

1,准备工作

安装rpmbuild及相关依赖包,并准备好一个kernel源码

yum install rpm-build
yum install make gcc redhat-rpm-config patchutils xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel perl-ExtUtils-Embed bison flex hmaccalc
wget http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/kernel-2.6.32-431.el6.src.rpm

2,更新Patch

useradd mockbuild   #rpmbuild默认使用mockbuild用户来执行
rpm -ivh kernel-2.6.32-431.el6.src.rpm
cp zhukun.net.patch rpmbuild/SOURCES  #将写好的patch文件放入SOURCES目录中,重要!
cd rpmbuild/SPECS
vi kernel.spec

将patch文件写入spec文件中

……
Patch999999: linux-kernel-test.patch  #这一行默认存在
Patch1000000: zhukun.net.patch  #手动添加
……
ApplyOptionalPatch linux-kernel-test.patch    #这一行默认存在
ApplyOptionalPatch zhukun.net.patch  #手动添加
……

然后进行rpmbuild编译工作即可

[root@os1 SPECS]# rpmbuild -ba kernel.spec

如果不是Linux Kernel,而是向某些软件包加入Patch的话,情况可能略有不同,因为有些软件包的spec文件写法可能不一样,比如以下是某软件包的写法:

……
Version: 4.1.4.2
Release: 14%{?dist}     #这里的dist指el6等
……
Source0: http://pkg-shadow.alioth.debian.org/releases/shadow-%{version}.tar.bz2
Source1: shadow-utils.login.defs
Source2: shadow-utils.useradd
Patch0: shadow-4.1.4.2-redhat.patch     #在Source后面写上patch
Patch1: shadow-4.1.4.1-goodname.patch
Patch2: shadow-4.1.4.2-leak.patch
Patch3: shadow-4.1.4.2-fixes.patch
Patch4: shadow-4.1.4.2-infoParentDir.patch
Patch5: shadow-4.1.4.2-semange.patch
……
%prep                                     #在prep段内应用patch
%setup -q -n shadow-%{version}
%patch0 -p1 -b .redhat
%patch1 -p1 -b .goodname
%patch0 -p1 -b .redhat
%patch1 -p1 -b .goodname
%patch2 -p1 -b .leak
%patch3 -p1 (后面这一部分可以省略)
%patch4 -p1 (后面这一部分可以省略)
%patch5 -p1 (后面这一部分可以省略)
……
Leave a Reply

Your email address will not be published. Required fields are marked *