RHEL6.3使用rpmbuild方式升級內核

RHEL是一個商業支持的Linux版本,他的軟件可以免費獲得,免費使用,但是補丁和技術支持則需收費。

但是根據GPLv2協議,對內核的任何改動都必須公佈代碼,所以RedHat只將源碼公佈在官方的FTP上,沒有給出二進制包。對於沒有買RHEL服務的人來說,則需要自己手動將源碼編譯成RPM二進制包。

在RHEL5上,編譯kernel.src.rpm時候,非常輕鬆,一個命令就可以搞定,但是在RHEL6.1的時候,杯具了。。。。一方面,RedHat爲了遏制Oracle的OEL,改變了一些打包方式。另一方面,內核變化很大,從2.6.18變成2.6.32,跨度太大,有些地方有改變。

OS:RHEL6.3,kernel:kernel-2.6.32-279.el6.x86_64

請保證/root可用空間在20G以上。

1)獲取kernel.src.rpm

lftp ftp.redhat.com:/pub/redhat/linux/enterprise/6Server/en/os/SRPMS

get kernel-2.6.32-279.el6.src.rpm    #這個是最新的kernel.

2)安裝依賴包
yum -y install rpm* xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel hmaccalc perl*

注意,此時會提示,asciidoc,newt-devel不存在。我在這裏沒有注意,忽略了,在下面build的時候提示缺少依賴包時候就病急亂投醫了。注意,在編譯RHEL的src.rpm時候千萬不要亂去google缺少的依賴包。

3)編譯kernel
groupadd mockbuild
useradd -g mockbuild mockbuild
rpm -ivh kernel-2.6.32-279.el6.src.rpm

cd /root/rpmbuild/SPEC/
rpmbuild -bb --with fireware --target=`uname -m` kernel.spec

此時會提示,缺少一些依賴包,只要yum安裝上即可,最終提示asciidoc,newt-devel沒有。的確在ISO裏也沒有

4)解決依賴關係
這裏,開始時候我第一反應是去google,其實完全不用。再進入RedHat的FTP

lftp ftp.redhat.com:/pub/redhat/linux/enterprise/6Server/en/os/SRPMS

get asciidoc-8.4.5-4.1.el6.src.rpm,newt-0.52.11-2.el6.src.rpm

rpmbuild --bb --target=`uname -m` asciidoc.spec 

這樣即可解決依賴asciidoc問題。而newt-devel會稍微麻煩些。

在rpmbuild newt的時候,會提示依賴slang這個包,一樣,www.linuxidc.com 光盤裏沒有提供,再從ftp上取得slang-2.2.1-1.el6.src.rpm,而在rpmbuild  slang時候提示依賴oniguruma,也是光盤裏沒有的,再從ftp上取得oniguruma-5.9.1-3.1.el6.src.rpm

所以是先build出oniguruma,然後是slang,最後是newt-devel.

至此,依賴性解決。

5)重新開始編譯
rpmbuild --bb --with firmware --target=`uname -m` kernel.spec.

然後是漫長的等待,顯示 gpg: WARNING: unsafe permissions on homedir `.'的時候,耐心等待。

6)編譯時間很長。。多喝幾杯咖啡。:D


發佈了32 篇原創文章 · 獲贊 3 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章