RHEL升级内核版本

 

拿升级RHEL5.1默认xen-2.6.18-53内核至xen-2.6.18-92(RHEL5.2默认内核版本)来说事。

下载对应内核源码包:
http://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/kernel-2.6.18-92.el5.src.rpm

先解决依赖问题:
libgomp-4.1.2-14.el5.i386.rpm
kernel-headers-2.6.18-53.el5.i386.rpm
glibc-headers-2.5-18.i386.rpm
glibc-devel-2.5-18.i386.rpm
gcc-4.1.2-14.el5.i386.rpm
elfutils-libs-0.125-3.el5.i386.rpm
elfutils-0.125-3.el5.i386.rpm
rpm-build-4.4.2-47.el5.i386.rpm
unifdef-1.171-5.fc6.i386.rpm
redhat-rpm-config-8.0.45-22.el5.noarch.rpm
ncurses-devel-5.5-24.20060715.i386.rpm

# rpm -ivh libgomp-4.1.2-14.el5.i386.rpm&&rpm -ivh kernel-headers-2.6.18-53.el5.i386.rpm&&rpm -ivh glibc-headers-2.5-18.i386.rpm&&rpm -ivh glibc-devel-2.5-18.i386.rpm&&rpm -ivh gcc-4.1.2-14.el5.i386.rpm&&rpm -ivh elfutils-libs-0.125-3.el5.i386.rpm&&rpm -ivh elfutils-0.125-3.el5.i386.rpm&&rpm -ivh rpm-build-4.4.2-47.el5.i386.rpm&&rpm -ivh unifdef-1.171-5.fc6.i386.rpm&&rpm -ivh redhat-rpm-config-8.0.45-22.el5.noarch.rpm

安装源码包:
# rpm -ivh kernel-2.6.18-92.el5.src.rpm

生成内核源码:
# rpmbuild -bp --target=`uname -m` /usr/src/redhat/SPECS/kernel-2.6.spec

# uname -r
得知本机TYPE为xen

# vi /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`/Makefile
将“EXTRAVERSION = -prep”改为“EXTRAVERSION = -92.el5xen”,其中“xen”是必需的。

# cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`
# cp /boot/config-`uname -r` .config

# make oldconfig
使用系统原.config会询问新选项。既然是升级,内核编译的新选项看不懂,就都选n好了。反正按原来的配置就能用,我觉得不知道怎么定制内核新选项还是不启用的好。

# uname -i
得知i386,
# vi /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`/.config
第一行原来只有一个井号,现改为“# i386”,井号和“i386”间有一个空格。

将内核定制文件保存至内核源代码中:
# cp /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`/.config /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`/configs/kernel-2.6.18-`uname -m`-xen.config
# cp /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`/.config /usr/src/redhat/SOURCES/kernel-2.6.18-`uname -m`-xen.config

打开“/usr/src/redhat/SPECS/kernel-2.6.spec”文件,确保“%define buildid”没有被注释起来;
如果有补丁要打,搜索“Patch”,找到patch的声明部分,并在当中添加一行自己的patch声明:
Patch40000: my-custom-kernel.patch
使用从40000开始的序列号可以保证不与系统patch冲突。添加前搜索下pathc序列号是否已存在便是。
再搜索“%patch”部分,并在当中添加一行:
%patch40000 -p1
确保之后的rpmbuild自动应用补丁(注意“p1”是一二三四的1);

编译成内核rpm包:
# rpmbuild -bb --target=`uname -m` --with xenonly --without debug --without debuginfo /usr/src/redhat/SPECS/kernel-2.6.spec

rpmbuild命令编译选项:
--with baseonly
--with xenonly
--without up
--without xen
--without debug
--without debuginfo
--without fips
--without kabichk

编译完成后,产生内核更新包:
/usr/src/redhat/RPMS/i686/kernel-xen-2.6.18-92.el5.i686.rpm
/usr/src/redhat/RPMS/i686/kernel-xen-devel-2.6.18-92.el5.i686.rpm

安装内核更新包:
# rpm -Uvh /usr/src/redhat/RPMS/i686/kernel-xen-2.6.18-92.el5.i686.rpm

重启,内核更新就生效了~

总结:看来所谓升级内核就是更新内核安装包。更新内核很快,但是编译很慢。而且最主要的问题在于.config文件配置的复杂性,可能导致定制出性能拙劣的内核。还是去下官方的内核安装包吧。注意内核安装包和一般rpm包不同,不能下CentOS的内核安装包,CentOS有自己的定制方式。可以下新版本RHEL的disc1,其中包含这个其对应版本的内核安装包。
查看本机内核安装包:
# rpm -qa|grep kernel
看见什么就更新什么,更新kernel-headers前需安装gcc。如果先更新了kernel-headers再装原光盘中的gcc包会报错

RedHat官方公布的内核RPM包的MD5:
http://rhn.redhat.com/errata/RHBA-2008-0314.html

kernel-xen-2.6.18-92.el5.i686.rpm
MD5:0f2273ec19a037f392a46067cdb9c11c

kernel-headers-2.6.18-92.el5.i386.rpm
MD5:a83bb33c9f8eebba673d90c7ea0fedfa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值