原文網址:http://www.gentoo.org/doc/zh_cn/kernel-upgrade.xml
1. 簡介
核心是Portage樹中少數幾個需要部分人工介入方可完成更新的包之一。Portage會為你下載並安裝核心源碼,但需要你手動編譯新的核心,才能讓更改生效。
這份指南是關於如何從一個核心版本更新到另一個版本的,然而,對希望切換到另一個核心包的使用者同樣有用。
本文使用gentoo-sources作為例子,然而,這裡的操作適用於我們樹中的其他核心包。
2. 為什麼更新核心。
一般而言,小的核心版本更新不會帶來什麼巨大的差別。更新核心有若干原因,包括使用最新驅動或某個最新特性,免受安全性漏洞威脅,或僅僅是為了保持系統始終處於最新和健康的狀態。
即使你選擇不是每次有新的核心版本都去更新,我們也建議你時不時的更新到最新的核心。當新核心解決了某個安全問題時,則強烈建議你更新到這一版本。
3. 通過Portage擷取新的核心
更新核心源碼和更新其他包一樣:使用emerge工具。當在world更新列表中看到新的核心版本時,你或許希望做一次核心更新。例如:
代碼 3.1: 新核心源碼出現在更新列表 |
# emerge -Dup worldCalculating dependencies ...done![ebuild NS ] sys-kernel/gentoo-sources-2.6.9-r2 [2.6.8-r5] |
注意: 上面輸出中的"NS"標誌意味著,新的核心將會安裝到新的slot中,也就是說舊核心源碼會保留下來,直到你手動移除它。 |
你可以繼續下去,執行更新,例如:
代碼 3.2: 更新你的核心源碼 |
# emerge -u gentoo-sources |
這樣,核心源碼就會被安裝到/usr/src的某個子目錄中。對於上面的例子,新核心源碼會安裝在/usr/src/linux-2.6.9-gentoo-r2。
4. 更新/usr/src/linux符號連結
Gentoo要求符號連結/usr/src/linux指向正在啟動並執行核心的原始碼。
當你emerge新核心源碼時,Portage能自動更新這個連結。你需要做的是將symlink標誌添加到/etc/make.conf中的USE變數中。
代碼 4.1: /etc/make.conf中USE變數樣本 |
(添加關鍵字symlink)USE="symlink x86 3dnow 3dnowex X aac aalib adns alsa apache2" |
你也可以選擇使用app-admin/eselect來修改該符號連結。
代碼 4.2: 用eselect管理符號連結 |
(如果還沒有則安裝eslect)# emerge eselect(查看可用核心列表)# eselect kernel listAvailable kernel symlink targets: [1] linux-2.6.9-gentoo-r1 [2] linux-2.6.9-gentoo-r2(選擇正確的核心)# eselect kernel set 1 |
要是你真的想要自己做,下面的例子說明如何將連結指向linux-2.6.9-gentoo-r2:
代碼 4.3: 手動更新/usr/src/linux符號連結 |
# cd /usr/src# ln -sfn linux-2.6.9-gentoo-r2 linux |
5. 配置、編譯並安裝新的核心
對下面的每一種方式,你都應參考Gentoo手冊中關於配置核心和配置引導程式的指示。以下是所需操作的概述:
方式一:用Genkernel自動化佈建核心
如果你是genkernel使用者,你只需重複執行第一次安裝核心時所做的步驟就可以了。
正常運行genkernel就行了:
代碼 5.1: 運行genkernel |
# genkernel all |
通過附加參數,你可以使用genkernel的其他功能。例如,如果你希望用menuconfig配置額外的核心選項,並自動更新grub引導程式配置,可以如下啟動genkernel:
代碼 5.2: 運行genkernel時附加常用參數 |
# genkernel --menuconfig --bootloader=grub all |
更多詳情,參看Gentoo Linux Genkernel指南,或者參考Gentoo手冊。許多選項可以在genkernel的設定檔/etc/genkernel.conf中指定。
方式二:手動設定
首先,使用核心代碼樹中的menuconfig工具:
代碼 5.3: 運行menuconfig |
# cd /usr/src/linux# make menuconfig |
請選擇你的硬體和作業環境所需的選項。更多關於核心配置的資訊,參見Gentoo手冊中題為配置核心的章節。
接下來,編譯你的核心並複製到開機磁碟分割中。同樣,請參考Gentoo手冊中配置引導程式一章所列出的步驟。如果/boot是一個單獨的分區,在複製編譯好的核心前,確認它已掛載。否則,你就無法啟動系統運行新的核心。
代碼 5.4: 編譯並安裝新的核心 |
# make && make modules_install# mount /boot# cp arch/i386/boot/bzImage /boot/bzImage-2.6.9-gentoo-r2 |
最後,你應該更新引導程式設定檔,增加新核心的條目(先不要刪除舊的。),然後卸載/boot分區。同樣,參閱Gentoo手冊,瞭解這個過程更詳細的指示。
6. 重新安裝外部模組
如果你使用了不包含在核心代碼樹,而是由Portage中其他地方提供的核心模組(例如ALSA驅動,以及NVIDIA或ATI顯示驅動),那麼更新核心後,你需要重新安裝這些模組。很簡單,只需重新emerge涉及到的包即可。更多資訊,參考Gentoo手冊中關於配置核心的章節。
我們為你提供了一個簡易的工具(sys-kernel/module-rebuild),它能重新編譯你安裝的所有獨立的(與/usr/src/linux的核心使用不同的ebuild)核心模組。它的用法非常直觀。安裝後,運行module-rebuild populate產生一個資料庫,其中包含所有更新核心後需要重新編譯的包的列表。當你完成更新並重新編譯核心後,運行module-rebuild rebuild重新編譯對應新核心的驅動。
更多資訊,請不帶參數運行module-rebuild,這會顯示支援的命令列表。
7. 重啟到新的核心
接著,關閉所有應用程式並重啟系統。如果上面的步驟沒有做錯,那麼引導程式菜單中將會出現新核心的條目。選擇新的核心並啟動系統。
一切順利的話,新核心成功啟動,登入後你可以繼續工作了。這樣的話,更新就宣告完成了。
如果你犯了錯誤,新核心無法啟動,那麼重啟系統,在引導程式中選擇上次可以啟動並執行核心。接著你可以重新設定,編譯並安裝新核心,對錯誤做出適當的修正。某些情況下,你甚至無需重啟就可以進行這些操作,例如少安裝了音效卡驅動、網卡驅動等等。
8. 運行多個核心
你可能已經注意到了,當安裝新核心的原始碼時,現有核心的源碼沒有被刪除。這是有意為之的,這樣你就可以很方便的在運行不同核心間切換。
在多個核心間切換非常簡單。你只需保留/usr/src/中的核心原始碼,並保留/boot分區中的二進位檔案bzImage就可以了,後者會與引導程式配置中的一項相對應。每次啟動時,你都有機會選擇啟動到哪個核心。
9. 刪除舊的核心
接著上一節,你或許對新核心感到滿意,不再需要保留舊核心了。要想刪除除了最新核心外的其他版本核心源碼,你可以利用emerge中的prune選項。下面是針對gentoo-sources的例子:
代碼 9.1: 刪除舊版本 |
# emerge -P gentoo-sources |
一般情況下,編譯過程中產生的臨時檔案仍然會保留在/usr/src下的對應目錄中。你可以安全的用rm刪除這些檔案。
你也可以安全的刪除所有舊核心使用的模組。這能通過刪除/lib/modules/目錄下與刪除的核心版本相應的子目錄來完成。小心不要刪除了還在使用的核心的模組。
最後,你可以掛載/boot分區,刪除你剛才卸載的核心的bzImage檔案。你還應該編輯引導程式的配置,刪去對應已卸載核心的項。
10. 進階:用你舊.config檔案配置新核心
有時,配置新核心時重用舊核心的設定檔能夠節省時間。需要注意的是,一般這是不安全的——每次版本更新都會帶來很多改變,使得這種更新途徑並不可靠。
唯一適用於這種方法的場合,是從一個Gentoo核心修訂版升級到另一個。例如,從gentoo-sources-2.6.9-r1到gentoo-sources-2.6.9-r2的改變會非常微小,所以一般可以使用下面的方法。然而,這種方法不適用於本文中一直使用的例子,即從2.6.8更新到2.6.9。官方發行版本之間的改動太多,下面敘述的方法沒有向使用者提示足夠的相關資訊,這經常會導致使用者因禁用了本不想禁用的選項而出現問題。
利用你舊有的.config檔案,只需把它複製過來,並運行make oldconfig即可。下面的例子裡,我們使用gentoo-sources-2.6.9-r1的設定檔,並用在gentoo-sources-2.6.9-r2中。
代碼 10.1: 重用舊配置 |
# cd /usr/src/linux-2.6.9-gentoo-r2# cp ../linux-2.6.9-gentoo-r1/.config .# make oldconfig |
代碼 10.2: 對genkernel重用舊配置 |
# cd /etc/kernels# cp kernel-config-x86-2.6.9-gentoo-r1 kernel-config-x86-2.6.9-gentoo-r2# genkernel all |
這時,你需要回答若干個問題,以決定在兩個版本之間改變的那些配置選項。完成之後,你就可以正常編譯並安裝核心,不用再進行menuconfig的配置過程。
一個更加安全的辦法是,同樣方法複製你的設定檔,接著運行make menuconfig。這能夠上面提到的make oldconfig的問題,因為make menuconfig會在菜單中中顯示這箇舊設定檔中儘可能多的內容。現在你所需做的就是瀏覽每個菜單,尋找新的選項,刪除了的選項等等。通過使用menuconfig,你可以瞭解所有改變的相關內容,可以更容易的查看新的選擇和瞭解協助資訊。你甚至可以用這種方法來完成例如從2.6.8到2.6.9的更新,只需保證你仔細的查看了每個選項。完成之後,正常編譯並安裝核心。
11. 更新核心後出現問題。
Linux核心發展迅速,版本更新帶來的改變可能會引起一些問題,這是無法避免的。如果你在最新版本Gentoo支援的核心中發現了什麼問題,請一定報告給我們。