如何在CentOS/RHEL上安裝或升級新的內核版本

    Linux內核是一個整體的類Unix計算機操作系統內核。通常我們使用的Linux發行版,如Red Hat、Debian、SUSE等,這些都稱爲Linux的分發版。一個典型的分發版,是由Linux內核,以及支持的許多由GNU項目提供的應用程序、GNU組件,C標準庫,CLI shell,X windows等組成的一個完整操作系統。我們應該要知道的是,Linux的定義僅僅是Linux內核,所有的”Linux”發行版實際上是以Linux爲內核的GNU系統的版本。不同的Linux內核版本都有其生命週期,Linux內核組織或Linux發行版廠商只在該日期提供錯誤或漏洞修復,我們可以從從內核的版本號區分辨別,比如版本3.16.43,該數字3.16表示一個長期版本,43則表示錯誤修訂之後再發行的具體版本號,當然我這裏描述的只是提供一個參考價值,更細緻的版本還有可能是3.16.43-1這種。值得我們關注的是,任何內核版本錯誤修復後的再發布版本都應該是我們考慮升級使用的內核版本。



Linux內核版本

   Linux內核版本分爲主線、穩定和長期版本。(所有內核版本都可以在內核開發官方網站https://www.kernel.org上獲取)目前我們看到最新的穩定內核版本爲4.10.12

主線版本代表整個Linux內核的一個樹幹,新的主線版本每2-3個月發佈一次,所有的新功能及特性都將會包含主線版本中。穩定內核則是在主線版本中,被認爲是穩定的得出。穩定內核的任何錯誤修復都將從主線樹中返回,也就是主線內核出現的任何錯誤(包括之前的任何舊版本內核的錯誤和BUG)在得到修復之後纔會被指定爲穩定內核,所以在通常情況下,穩定內核既有內核新功能,同時BUG也是最少的內核版本。穩定內核的更新發布依賴於主線內核(直到下一個主線內核可用),穩定的內核更新是根據需要發佈的,通常是每3個月。而對於長期內核版本,通常提供幾個長期維護內核版本,用於較早的內核樹錯誤修復返回的目的。這些內核只應用重要的錯誤修復,通常不會有非常頻繁的更新。

主線、穩定和長期都是活動內核版本,由Linus TorvaldsLinux內核組織維護和釋放。 而我們平時所使用的Linux發行版的內核都爲分發內核,許多Linux發行版都提供自己的長期維護內核版本,這些內核可能是也可能不是基於內核開發人員維護的內核。因此分發版本的內核版本由發行版的廠商決定並有自己的維護週期,通常由分發版更新時一起發佈。


安裝/升級新內核的目的

許多出於對安全的考慮,如避免以前版本中發現的漏洞

更充分地認識內核,瞭解內核的各個內核模塊和功能

更好的利用/體驗新內核的的新功能和特性


安裝/升級的方法和建議

1、對於CentOS/RHEL系統,儘量使用yum方式或RPM包安裝/升級內核,需要注意的是紅帽的Red Hat Linux服務需要訂閱。

2、使用安裝新內核而不是直接升級內核,安裝新內核不會覆蓋舊內核,而升級會導致新內核直接替換舊內核,可能會導致系統無法啓動,安裝也可以讓我們在升級後有回滾的選擇。

3、一般地,對於大多數Linux分發版,使用yum/dnf和分發版布官方的存儲庫來升級內核,這種方式只能升級到該分發版的存儲庫提供的最新版本,而不是Linux內核組織發佈的最新內核。

4、如果想迅速並且安全地使用最新內核,對於CentOS/RHEL系統並不支持yum的方式直接安裝或升級。那麼此時我們可以使用ELRepo(第三方存儲庫)進行內核安裝升級。(相關信息請訪問網站http://www.elrepo.org)

5、下載新內核的源碼包進行編譯安裝,這種方式有助於我們更細緻地學習內核底層知識,但在生產環境中不推薦編譯安裝。

6、儘量使用最新的Linux發行版,新的Liunx發行版包含該發行版維護的新內核,如果有必要,那麼請使用如yum upgrade或者yum update來更新你的系統。對於UbuntuDebian等發行版,使用apt-get update方式來更新。


內核軟件包介紹

  • kernel      Linux內核軟件包,包含單、多核和多處理器系統的內核,是任何Linux操作系統的核心,單處理器的系統僅需安裝內核包。內核處理操作系統的基本功能: 內存分配、進程分配、設備輸入和輸出等

  • kernel-devel   包含提供足夠的針對內核軟件包構建模塊的內核頭文件和makefile文件

  • kernel-headers  包含指定Linux內核、用戶空間庫文件和程序之間指定接口的C頭文件。頭文件定義了構建大多數標準程序所需的結構和常量,也是重建glibc軟件包所必需的

  • kernel-doc     包含來自內核源代碼的文檔文件。各種關於Linux內核和設備以及驅動程序的信息都記錄在這些文件當中

  • kernel-firmware  包含對於某些設備及其操作的固件信息文件

  • kernel-debug    包含許多對於內核debug診斷和調試的啓用選項,只有當我們需要嘗試收集額外的內核錯誤信息時才應該安裝它。它是以犧牲性能爲代價

  • kernel-debug-devel  包含內核debug診斷和調試的啓用選項,以犧牲性能爲代價


CentOS上安裝/升級內核

  我將介紹在CentOS下通過yum軟件管理程序或RPM包安裝/升級內核和通過ELRepo存儲庫安裝/升級最新的內核版本(兩種方法)

一、CentOS下通過yum軟件管理程序或RPM包安裝/升級內核

安裝步驟:

1、查看當前內核版本

[root@HMing-Server34 ~]# uname -sr
Linux 2.6.32-431.el6.x86_64

查看系統已安裝的內核軟件

# yum list installed kernel*

wKiom1j_FSzjvvUlAACmTgyX6DI426.png

在上面輸出中,白色高亮部分就是系統已經安裝的內核軟件包


2、獲取CentOS 6發行版的最新內核

對於上面介紹的內核軟件包,我們不用全部安裝,只安裝以下幾個包即可

kernel-2.6.32-696.el6.x86_64.rpm
kernel-devel-2.6.32-696.el6.x86_64.rpm
kernel-headers-2.6.32-696.el6.x86_64.rpm
kernel-firmware-2.6.32-696.el6.noarch.rpm
kernel-doc-2.6.32-696.el6.noarch.rpm

我們可以從目前最新版CentOS6.9iso文件中獲取以上內核軟件包,或者從官方支持的鏡像網站中下載,如國內的sohu鏡像地址http://mirrors.sohu.com中下載,詳細地址爲http://mirrors.sohu.com/centos/6.9/os/x86_64/Packages/

wKiom1j_FXHRL2yBAABiv_FIUic556.png


CentOS7(目前最新版7.3),我們需要以下幾個包

kernel-3.10.0-514.el7.x86_64.rpm

kernel-headers-3.10.0-514.el7.x86_64.rpm

kernel-tools-3.10.0-514.el7.x86_64.rpm

kernel-tools-libs-3.10.0-514.el7.x86_64.rpm

kernel-doc-3.10.0-514.el7.noarch.rpm

3、執行安裝/升級內核軟件包

使用RPM安裝方式安裝/升級內核

# rpm -Uvh kernel-firmware-2.6.32-696.el6.noarch.rpm
# rpm -Uvh kernel-headers-2.6.32-696.el6.x86_64.rpm
 
# rpm -ivh kernel-devel-2.6.32-696.el6.x86_64.rpm
# rpm -ivh kernel-doc-2.6.32-696.el6.noarch.rpm

# rpm -ivh kernel-2.6.32-696.el6.x86_64.rpm
# rpm -ivh kernel-2.6.32-696.el6.x86_64.rpm --nodeps

安裝kernel包,如果有其他依賴軟件需要安裝,我們可以根據提示安裝,或者在rpm後面加上--nodeps選項,意思是解除依賴

wKiom1j_FgDjZ8CLAADbyfIcIAw602.png


注意:在安裝/升級以上內核軟件包時,安裝內核軟件包kernel-2.6.32-696.el6.x86_64.rpm 時,rpm安裝方式選項參數使用的-i而不是-U,兩者是有區別的,-i表示安裝,-U表示升級,而我們需要保留舊的內核版本,所有這裏使用安裝的方式。而對於內核軟件包kernel-firmwarekernel-headerskernel-develkernel-doc等,對於已安裝過的,直接安裝可能會報相關錯誤提示,所以我們可以使用-U選項升級,也可以直接用yum安裝,自動安裝相關依賴的軟件包。


使用yum方式安裝/升級內核

  cd進入新下載的內核軟件包所在的目錄,執行yum localinstall kernel*進行安裝,值得提的是,使用這種方式安裝同樣不會直接替換升級舊內核,安裝之後新舊內核並存。所以我們推薦這種使用安裝方式。

[root@HMing-Server34 src]# ls kernel-*
kernel-2.6.32-696.el6.x86_64.rpm
kernel-devel-2.6.32-696.el6.x86_64.rpm
kernel-doc-2.6.32-696.el6.noarch.rpm
kernel-firmware-2.6.32-696.el6.noarch.rpm
kernel-headers-2.6.32-696.el6.x86_64.rpm

執行yum localinstall kernel*進行安裝

[root@HMing-Server34 src]# yum localinstall kernel*

wKiom1j_FoXRKpD-AADSHEZ12YE127.png


4、安裝/升級內核之後,修改系統默認使用的內核

  在CentOS中安裝完新內核之後,新的內核成爲系統的默認啓動選擇,我們不需要做任何修改。新的內核在重啓系統後生效。如果有必要,比如使用舊內核,我們可以手動修改/boot/grub/grub.conf文件中系統默認使用的內核,修改default=1,表示GRUB使用第二個內核啓動系統

wKioL1j_FtKAUZNfAAEpu58Ww-s980.png


在重新啓動系統的GRUB的引導界面,快速按下任意鍵,確認新內核默認被使用

wKiom1j_FvaSmOyDAABJxr-yP6o438.png


查看新內核,確認是否正確安裝

[root@HMing-Server34 src]# uname -sr
Linux 2.6.32-696.el6.x86_64


二、通過ELRepo存儲庫安裝/升級最新的穩定內核版本

安裝步驟

1、CentOS上啓用ELRepo存儲庫

導入公鑰

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

CentOS6上安裝ELRepo 6存儲庫:

# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

CentOS7上安裝ELRepo 7存儲庫:

# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

安裝了ELRepo存儲庫,我們可以通過查找特定的存儲庫中查找可用的軟件包,這裏我們查看"elrepo-kernel" 內核軟件包的版本信息

# yum --disablerepo "*" --enablerepo "elrepo-kernel" list available

wKiom1j_GArTVOXBAACya6J7atI557.png


2、指定ELRepo存儲庫安裝最新的穩定內核

# yum --enablerepo=elrepo-kernel install kernel-ml

wKiom1j_GEjggo6-AAB09Aoo5l4517.png


安裝完成之後,我們即可以在/boot/grub/grub.conf 文件看到存在新安裝的內核條目,並修改default=0,指定系統默認啓動的內核選項,爲4.10.12內核版本,重新啓動系統即可生效

wKiom1j_GGqw_1EbAAFujKHa1cA588.png


查看重新引導的GRUB內核啓動項界面,確認是否正確使用了指定的新內核

wKioL1j_GJSQ60avAABMm1tcAE8902.png


同樣的,對於在RHEL上安裝/升級內核使用上面的兩種方法也適用


結語

  在本文中,介紹了內核的幾種版本,以及安裝/升級新內核版本的兩種方法,也是在生產環境中推薦的安裝/升級方法。當這兩種方法都不滿足要求時,我們也可以從https://www.kernel.org/下載內核源碼包進行編譯安裝。



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