2. 构建rpm内核包
这一小节介绍如何构建内核, 最终你可以得到一个rpm包, 这样可以方便安装或与他人分享.
2.1 创建你的rpmbuild目录
按下面创建你的rpmbuild目录:
cd ~
cp -a /usr/src/RedHat/ rpmbuild
echo '%_topdir %(echo $HOME)/rpmbuild' >> .rpmmacros
然后安装构建rpm包需要的应用软件包
yum install Fedora-rpmdevtools unifdef
然后运行
fedora-buildrpmtree
2.2 下载和安装Fedora内核src.rpm包
接下来为我们的Fedora版本下载最新的内核 src.rpm包. 针对Fedora Core 6, 你可以从接下来的网址获得src.rpm包: , 针对Fedora Core 5, 你可以从下面的网址获得src.rpm包: , 等等.
最新的Fedora Core 6内核src.rpm包是kernel-2.6.18-1.2798.fc6.src.rpm, 所以我们现在下载和安装它:
cd /usr/src
wget
rpm -ivh kernel-2.6.18-1.2798.fc6.src.rpm
如果你看到这些警告:
warning: user brewbuilder does not exist - using root
warning: group brewbuilder does not exist - using root
你可以忽略它们.
我们已经成功安装了最新的2.6.18.1内核源代码包. 如果我们继续构建内核源代码包的话, 我们的内核版本将是2.6.18.1.
2.3 给内核打补丁
我想安装新内核2.6.18.2来替代2.6.18.1. 系统已经安装的src.rpm包是给2.6.18打过补丁的2.6.18.1. 而我们现在将使用打补丁的方式升级内核到2.6.18.2
cd ~/rpmbuild/SOURCES/
wget
如果你想内核的名字结尾为2.6.19-rc5, 你也可以使用prepatch包 -2.6.19-rc5.bz2. 请注意这项工作仅对prepaches有效. 比如. 内核补丁仅对最终发行的内核版本有效, 比如2.6.19内核. 你可以给2.6.18内核源代码打补丁, 但不能是2.6.18.1或2.6.18.2, 等. 这个规则在接下来的网页中注明:
prepatches等同于linux中的测试发行; 他们位于存档的测试目录中, 我们可以使用patch(1)工具对上一个完整发行版(版本号分三部分)打补丁(例如, 2.6.13-rc4 prepatch只可以给2.6.11内核源代码打补丁, 而不是2.6.11.10.)
现在我们必须修改kernel-2.6.spec文件, 让它知道我们使用了新的内核补丁:
cd ~/rpmbuild/SPECS/
vi kernel-2.6.spec
搜寻下面行
Patch1: patch-2.6.18.1.bz2
替换为下面的内容:
Patch1: patch-2.6.18.2.bz2
(或者其它你已下载的版本)
然后运行
rpmbuild -bp kernel-2.6.spec
(如果你想构建其它平台如i386, i586, i686或者x86_64的内核, 你可以通过运行下面的命令来实现:
rpmbuild -bp --target=i686 kernel-2.6.spec
我没有在上面例子中指定为i386, 你的系统可能是其它的平台类型, 请记得填写你的平台类型.)
现在我们进入到关键的部分. src.rpm有很多fedora专门的补丁, 其中一些不能与我们的2.6.18.2补丁很好的工作, 所以如果你在rpmbuild输出看到下面状况:
+ echo 'Patch #300 (linux-2.6-ppc-dac960-ipr-clash.patch):'
Patch #300 (linux-2.6-ppc-dac960-ipr-clash.patch):
+ patch -p1 -s
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
1 out of 1 hunk ignored -- saving rejects to file drivers/block/DAC960.c.rej
error: Bad exit status from /var/tmp/rpm-tmp.46287 (%prep)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.46287 (%prep)
这时候你必须再次编辑kernel-2.6.spec文件, 注解掉patch #300一行:
vi kernel-2.6.spec
[...]
#Patch300: linux-2.6-ppc-dac960-ipr-clash.patch
[...]
#%patch300 -p1
[...]
然后再运行rpmbuild命令, 比如:
rpmbuild -bp kernel-2.6.spec
注意: 你必须不断重复上面过程直到不出现任何错误.