Gentoo Logo

Gentoo Linux 核心升級指南

內容:

1.  介紹

核心是 portage 中少數需要人工介入以完成升級的套件之一。Portage 會幫您下載並安裝 核心原始碼,但是您必須親自動手設定和編譯新核心,任何改變才會生效。

雖然這份指引以計劃要升級核心的使用者為預定對象,對轉換不同核心套件的使用者來說 仍是很有用的。

這份文件使用 gentoo-dev-sources 作為例子,但是這些指令也是用於其他在 portage tree 內的套件。

2.  為何要升級核心?

通常,升級小改版的核心不會帶來任何重要的改變。升級核心的理由通常是為了特定的新 功能或驅動程式,以避免安全上的漏洞,或是僅僅為了維護一個最新且健康的系統。

即使您選擇不要每一次核心修正改版時都升級,建議您至少隔一段時間要升級一次,我們 更強烈建議您,在修正安全問題的新版本釋出時,立即更新到新的核心。

3.  透過 Portage 取得新版原始碼

升級核心原始碼的方法就跟升級其他任何套件一樣 - 使用 emerge。最可能的情況 是您在檢視 world 更新列表時發現有新版核心升級,例如:

原始碼 3.1: 新核心原始碼出現在升級表列

# emerge -Dup world
Calculating dependencies ...done!
[ebuild     U ] sys-kernel/gentoo-dev-sources-2.6.9-r2 [2.6.8-r5]

您可以直接安裝升級版,也就是:

原始碼 3.2: 升級您的核心原始碼

# emerge -u gentoo-dev-sources

核心原始碼就會被安裝到 /usr/src 下的一個子目錄。在上面的例子中,我 的新核心原始碼會安裝在 /usr/src/linux-2.6.9-gentoo-r2

4.  更新 /usr/src/linux symbolic link

Gentoo 要求您維持一個 symbolic link /usr/src/linux,它應該指到您正 在執行的核心原始碼。

在這種情況下,我們需要更新這個 symbolic link,讓它指到我們即將升級的核心。繼續 我們的例子:

原始碼 4.1: 更新 /usr/src/linux softlink

# cd /usr/src
# ln -sfn linux-2.6.9-gentoo-r2 linux

5.  設定、編譯和安裝新核心

不管您選擇下設方法中的哪一種,您都應該參考 Gentoo 手冊 中關於 設定核心設定開機管理程式 的指示。在這裡提供個簡單的總結。

選擇 1:使用 Genkernel 自動設定核心

如果您是個 genkernel 的使用者,您指需要重複您在初次安裝核心時的步驟就可以了。

只要正常執行 genkernel:

原始碼 5.1: 執行 genkernel

# genkernel all

您也可以加入額外的參數來利用 genkernel 其他的功能。舉例來說,如果您希望用 menuconfig 設定額外的核心選項,同時您想要 genkernel 自動更新 grub 開機管 理程式的設定,可以如下執行 genkernel:

原始碼 5.2: 搭配一些常見參數執行 genkernel

# genkernel --menuconfig --bootloader=grub all

要得到更多資訊,請參考 Gentoo Linux Genkernel 指引,或是參考手冊。

選擇 2:手動設定

第一步,開啟核心原始碼中的 menuconfig 工具:

原始碼 5.3: 執行 menuconfig

# cd /usr/src/linux
# make menuconfig

勾選您的硬體和作業環境所需要的選項,請參考 Gentoo 手冊 中更多關於此的指引。

接下來,編譯您的核心並且複製一份到您的開機分割區。同樣的,請遵從手冊中的指示, 還有,不要忘了先將您的 /boot 分割區掛載起來!在您初次安裝時,這個分割區是在早先 的步驟就已經掛載起來。

原始碼 5.4: 編譯和安裝新核心

# make && make modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot/bzImage-2.6.9-gentoo-r2
# cp System.map /boot/System.map-2.6.9-gentoo-r2

最後,您必須更新開機管理程式的設定,為新核心加入一個條目 (還不要把舊條目刪除!),然後卸載 /boot 分割區。同樣的,請參考手 冊中的指示。

6.  重新安裝額外的模組

如果您有使用任何不包含在核心原始碼中而是其他 Portage 套件所提供的核心模組 (例如 Nvidia 或 ATI 圖形驅動程式),那麼您必須在每次更新核心時都要重新安裝一次, 這就像重新安裝相關套件一樣的簡單。請參考 Gentoo 手冊 設定核心 章節提供的更多資訊。重新安裝這些套件會確保它們是用 /usr/src/linux 所指到的原始碼編譯的 - 因此它們會被安裝到我們剛編譯 的核心的模組目錄。

7.  重開機進入新核心

接下來,關閉所有的應用程式然後重開機。如果您正確的遵循了上述指令,您會在開機管 理程式中看到新核心的條目,選擇這個新核心,然後讓系統執行開機程序。

希望您的系統可以順利開機並且可以正常登入,您可以像平常一樣工作。如果各方面都運 作良好,那麼升級到這一步就告完成。

如果您犯了某個錯誤而使系統無法開機進入新核心,您只需要重新開機,使用您原有的核 心進入系統,然後從 設定、編譯和安裝心核心 這個步驟重 新開始 - 做出適當的更動修正您的錯誤。在某些情況下(像是您漏編了某個網路驅動程 式),您甚至不需要重開機就可以修正錯誤。

8.  使用多個核心

您也許已經注意到,在安裝新核心的原始碼時,您原有核心的原始碼並沒有被移除,這是 我們的設計,因為這讓您能夠輕鬆地執行不同的核心。

要同時擁有多個核心很簡單,只要把核心原始碼留在 /usr/src/ 目錄下, 並且把相對應的 bzImage 檔案留在您的 /boot 分割區 (您的開機管理程式的設定中會參考到它)。每一次您開機,您會看到多個核心可以選擇。

9.  移除舊核心

延續上一節,也許您很滿意新的核心而不需要再保留任何舊核心,要把核心原始碼移除, 只保留最新版本很簡單,您可以利用 emerge 的 prune 選項。繼續上面使用 gentoo-dev-sources 的例子:

原始碼 9.1: 移除舊版本

# emerge -P gentoo-dev-sources

多數情況下,編譯時使用的暫存檔會留在 /usr/src 下合適的原始碼目錄中 ,可以用 rm 安全地移除它們。

您也可以安全地刪除任何該核心所使用的模組,就是刪除 /lib/modules/ 下與您要移除的核心版本相關的目錄。請注意不要刪到您目前核心所使用的模組!

最後,您可以將 /boot 分割區掛載起來,然後移除與舊核心相關的 bzImageSystem.map 檔案。您也需要編輯您的開機管理 程式設定,把舊核心的條目刪除。

10.  升級核心後出現問題?

由於 Linux 核心快速的發展,不可避免的,某個核心所作的一些更動可能會造成問題,如 果您使用 Gentoo 支援的核心 最新的版本遇到任何問題,請將問題回報給我們。



列印

最後更新 December 6, 2004

這份文件的原始版本已不再被維護

大綱: 這份文件說明將核心從某一版本升級到另一版本的過程

Daniel Drake
Author

oai79
Translator

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.