[CentOS 7] 別偷懶了,好好認真的照規矩來編譯核心吧

by 11月 09, 2016 6 意見        

我們之前試過 核心升級免苦惱,三行指令就搞定 這種偷懶的方法來升級 Kernel。
可是,為什麼要這麼做呢?手工打造自己的系統,那可是專屬於 Linux 人的浪漫啊。

沒錯!我們應該要貫徹工程師的精神,一步一步來從頭編譯核心才是王道!

取得核心的原始碼


先看一下目前的 Kernel 版號是 3.10.0-372.36.3。
uname -a

為了避免權限問題而造成編譯過程的錯誤,我們先切換到 root 帳號。
su -

用瀏覽器連上 The Linux Kernel Archives,可以看到目前最新的穩定版號是 4.8.6,將下載連結複製起來。

回到 Shell,將原始碼下載回來。
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.6.tar.xz

解壓縮到 /usr/src/kernels 裡,這是專門用來處理 Kernel 原始碼的目錄。
tar -Jxvf linux-4.8.6.tar.xz -C /usr/src/kernels

大小約在 746MB,而在編譯之後會爆增到 8GB 以上。

開始設定


切換到剛剛解壓縮的目錄。
cd /usr/src/kernels/linux-4.8.6

安裝編譯器、curses 開發套件、OpenSSL 開發套件、Perl、以及它們的相依套件。
yum -y install gc gcc ncurses ncurses-devel bc openssl-devel perl

清理上一次編譯時產生的目標檔、暫存檔、模組檔 ... 等,以及最重要的核心組態檔和備份檔。
make mrproper

將使用中的核心組態檔複製過來。
cp /boot/config-3.10.0-327.36.3.el7.x86_64 .config

再以文字視窗的方式來挑選增加或移除的功能。
make menuconfig

上下鍵用來移動區域1 的功能指標,左右鍵跟 Enter 鍵用來處理區域 2 的選項:選擇 (Select)、退出(Exit)、說明(Help)、儲存(Save)、載入(Load),按空白鍵決定功能的啟用與否,* 代表直接加入 Kernel 裡,M 代表編譯成 Kernel Module。

其實編譯核心最困難的地方就是這個部份。

裡面有許多的選項,到底是要增加還是刪除、直接內建還是編成模組、驅動程式的種類與數量、功能的支援與調教、功能之間的相依性與相容性 ...... 等等的考量。

調錯了開不了機、當機連連,調對了怕檔案太肥、速度太慢,每重來一次之後,往往又花了好幾個小時,進退之間的細節,實在是充滿著道不盡的 OOXX。

這次我們試著增加 NTFS 檔案系統的支援,先進入「File systems」選單,再進入「DOS/FAT/NT Filesystems」選單,加入「NTFS file system support」選項。



不過以實務上來說,NTFS 的支援一般會使用 NTFS-3G 這個 Kernel Module ,因為它的支援性跟效果都比較好。

別忘了把修改過的設定值儲存起來,預設會存到現行工作目錄的 .config 檔案。


如果想用先前調整過的核心組態檔為基礎來修改,又怕改壞掉,可以用 make oldconfig 複製一個新的來實驗。


進行編譯


開始編譯。
make

這個步驟要花費非常多的時間。

我在 Intel E8300 2.83GHz CPU、4G RAM、320G SATA2 HDD 的 Win10 x64 PC 上建立的虛擬機裡,使用 2 個 Core、2G RAM、200GB 虛擬硬碟,等了約二個半小時左右才完成。

如果編譯到一半有問題,只要執行 make clean 保留核心組態檔跟必要的模組,並且把先前執行時產生的檔案全清掉,再重新 make 一次就可以了 。

編譯核心模組。
make modules

安裝核心模組。
make modules_install

安裝核心。
make install

最後,我們就可以在 /boot 目錄裡看到已經安裝好剛剛編譯完成的 Kernel。


正式使用


本來在 GRUB 開機選單裡,只有三個選項,第一個就是我們目前使用的 3.10.0-327 版。

完全無法掛載 NTFS 格式的隨身碟。

現在則是可以看到增加了 4.8.6 版的選項。

開機之後來驗明正身一下,真的是新版的核心。

而且真的可以掛載 NTFS 了 ...
只不過,認是認得出來啦,要讀寫又是另外一回事了。XD

在一切順利的狀況下,不多啦!從頭到尾大概「只」花掉了我們三個半小時的時間。

是誰說要自己把核心編譯一次的,
給我站出來,我保證不打他的臉!!!


注意事項


如果不是要升級新版核心,而是要針對現行版本的核心增刪功能的話,步驟就不太一樣了。

先到 http://vault.centos.org 去取得原始碼,像是我的 CentOS 版號是 7.2.1511,核心的版號是 3.10.0-372,檔案位置就會是在 /7.2.1511/os/Source/SPackages/kernel-3.10.0-372.el7.src.rpm。

再依照 CentOS Wiki - I need the Kernel Source 的說明來操作。


參考資料

圖片來源
  • https://pixabay.com/
  • http://onefunnyjoke.com/

更新紀錄
  • 2016/11/09 撰文。

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

IT 技術家 - 創站部落客

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

6 則留言 :

  1. menuconfig實在是太好用了,遠古年代,我試著去改.config
    結果.............就此長眠,從此以後,我再也不敢玩make kernel

    回覆刪除
    回覆
    1. 幫 QQ ......
      我雖然沒有走過那一段,
      但是這次光是為了截圖,反反覆覆 Compile 不下十數次,
      大概就可以想見當年戰況之慘烈與悲壯了....

      刪除
    2. 話說…是不是在make時,加上-j 2會快一點呢

      刪除
    3. 對哦~~~ 完全忘了這回事,感謝提醒。
      另外,聽說 -j 的數字是跟著 CPU 的核心數走,不知道是不是醬子???

      刪除
  2. linode编译过内核,不过是增加功能,速度还是挺快的

    回覆刪除
  3. On a subsequent journey, he hit a jackpot on a slot machine and was hooked. Every dollar helps your family ones}, associates and neighbors have access to dependable, unbiased reporting. Kansas is projected to make $185 million in complete tax income from gaming and the lottery through the 2022 fiscal 12 months, however solely about $8 million might be transferred to the Problem Gambling and Addictions Grant Fund. The fund is projected to have $726,000 readily available at the end of the 2022 fiscal 12 months and one other surplus of $532,000 in 2023, in accordance with budget knowledge reported by the Kansas Legislative Research Department. Apple at present added refurbished M2 MacBook Air models to its online store, providing the 카지노사이트 machines at a reduced value for the primary time.

    回覆刪除