[CentOS 7] 核心升級免苦惱,三行指令就搞定

by 3月 09, 2016 3 意見        

聽說核心升級的步驟很麻煩!
聽說核心升級的設定值選錯會開不了機!
聽說核心升級之後才能支援最新的硬體設備!

是的!這些的確曾經是事實。
但是請遺忘掉那個牛車時代的故事吧,跟著我們一起來到先進的太空時代了。

在 Linux 的世界,自由軟體基金會的創辦人 Richard Matthew Stallman 的地位非常重要。

偏偏所有 Linux 的書大多都只提到 Linus Torvalds 這個人,為什麼這個脾氣不太好的大叔為什麼那麼知名呢?

因為他創造了 Linux 裡面最重要的東西 - 核心 (Kernel),而且直到現在他依然在 The Linux Kernel Organization 持續開發新一代的功能。

至於脾氣不好這回事,鬧最大的事件應該是 T客邦 - Linux 之父對 NVIDIA 表達 「F**k You」事件,還原原委、雙方攻防戰 提到的這件吧,有興趣的朋友請自行服用。


核心到底幹啥用的


簡單的說,這寶貝是介於硬體與軟體之間的橋樑,我們可以從 O'Reilly - Linux Device Drivers 這本書的第一章的圖片看到,它主要負責管理 CPU、記憶體、儲存媒體、週邊設備、網路介面等資源。

讓每一個服務套件、函數庫、系統程式不必自己去驅動硬碟設備和管理硬體資源,只要透過核心來存取就可以了,一來可以減少程式設計師的負擔,二來可以提高系統資源的使用效率,三來可以避免惡意攻擊的傷害程度。


該怎麼升級


通常核心需要升級的原因,大多是因為加入硬體週邊的支援、運作效能的最佳化、減少核心的檔案大小,或是增加新的功能。
 CentOS 7 預設的核心版本是 3.10.0-123,到 2016/03/09 為止,從官方套件庫能升級的最新版本是 3.10.0-327.10.1。

但是 The Linux Kernel Organization 目前釋出的穩定版 (Stable) 版號已經到了 4.4.4。

我們要升級到 4.x 的原因,最重要的一個就是在 科技新報 - 天網近了!linux 核心推出新版 4.0,以後更新不必重開機 所提到的,原本只有更新套件不必重新開機,之後連更新核心也不用重新開機了,這將可以進一步減少 Server 必須下線的時間。

那,到底要怎麼升級呢?

手動升級


詳細的說明請參閱 別偷懶了,好好認真的照規矩來編譯核心吧 的實作過程。

簡單來說,步驟大約是這樣子:
  1. The Linux Kernel Organization 下載核心的原始碼。
  2. 將原始碼解壓縮。
  3. 清理無效的設定檔及目標檔。
  4. 選擇核心功能選項與相關模組。
  5. 進行編譯。
  6. 開始安裝。
  7. 重新開機。
  8. 選擇使用新版核心。

自動升級


手動編譯的工程實作太浩大,而且我們並沒有打算修改任何功能與模組,所以還是從套件庫安裝比較方便。

這次我們要利用 ELRepo Project 套件庫來升級核心。

先安裝套件庫設定檔。
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

再安裝 GPG 金鑰。
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

接著就可以開始安裝新版的 Kernel,目前 CentOS 7.x 版只提供主線 (Mainline) 的版本。
sudo yum -y --enablerepo=elrepo-kernel install kernel-ml

安裝過程需要一些時間,可以去上個廁所再回來。

重新開機後,就可以在 GRUB 選單看到新版的核心了。

目前 ELRepo 提供的核心版號是 4.4.3-1 。


更換預設用來開機的版本


為了安全起見,也擔心相容性的問題,預設還是會留在前一個版號來開機。
sudo grub2-editenv list

如果我們就是想改成預設由最新的版本來開機的話,那就要修改 GRUB 預設開機選項從第 2 個改到第 1 個。
sudo grub2-set-default 0

重新產生 GRUB 的選單組態檔。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

這樣子就會改由 4.x 版來開機了。


參考資料


圖片來源


更新紀錄

  • 2016/03/09 撰文。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

3 則留言 :

  1. 公公你好:
    Centos7 要如何作到 更新kernel 之後,不用重新開機?

    回覆刪除
    回覆
    1. 這個功能我是有聽說過,但是還沒親自實作看看,這邊有篇文章你可以參考一下。
      https://linux-audit.com/livepatch-linux-kernel-updates-without-rebooting/
      或是用「updating kernel without reboot」的關鍵字去拜一下谷歌大神....

      刪除
  2. 請問有沒有方法可以在安裝的時候更新kernel?

    回覆刪除