Gentoo Linux 核心更新指南__Linux

來源:互聯網
上載者:User

 原文網址: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支援的核心中發現了什麼問題,請一定報告給我們。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.