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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章