[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ A ] [ 下一頁 ]


Debian GNU/Linux 4.0 ("etch"), Intel x86 的發行情報
第 4 章 - 從先前的發行版進行升級


4.1 系統升級之準備

在進行升級之前,我們建議您能同時參閱 在 etch 您必須知道的一些問題, 第 5 章 所提供的資訊。在那個章節裡包含了一些和升級程序無直接相關,但在開始之前您仍然得要知道的可能潛在問題。


4.1.1 備份資料及設定資訊

在升級您的系統之前,我們強烈建議您能進行一次完整的備份,或至少您也應該把那些絕對不能出任何差錯的資料和設定資訊給備份起來。升級時所使用的工具和升級過程應該不會出什麼差錯,但在升級過程中若發生了什麼硬體錯誤可能會導致系統嚴重受損。

The main things you'll want to back up are the contents of /etc, /var/lib/dpkg, /var/lib/aptitude/pkgstates and the output of dpkg --get-selections "*" (the quotes are important).

這個升級的程序它本身並不會修改在 /home 目錄裡的任何資料,但是已知有某些應用程式(例如:部份的 Mozilla 家族程式及 GNOME、KDE 桌面環境)在使用者第一次以新的版本啟動時,會以新的預設值覆蓋使用者原有的設定。為了以防萬一,您也許想要針對在使用者的主目錄裡的隱藏檔案及目錄("dotfiles",以 . 開頭的檔案或目錄)進行備份。這個備份可以用來回復或重新建立舊有的設定。您也許有必要讓使用者知道有這個問題存在。

任何套件安裝的動作都需要有系統管理者的權限才能進行,所以您必須以 root 登入,或使用 susudo 來取得所需的權限。

升級有其必要條件,您應該在實地進行升級之前先行確認一次。


4.1.2 事先知會使用者

您應該在進行任何升級之前先把您的計畫告知所有使用者,雖然一些像是利用 ssh 連線來從遠端存取系統的使用者在升級過程中可能不會發現什麼異狀,且他們的工作也應該不會因而中斷。如果您希望能採取額外的預防措施的話,請在升級前備份或卸載使用者的分割區 (/home)。除非您計劃同時進行 Kernel 的升級,否則您在升級前後通常並不需要重新開機。

如果您希望能採取額外的預防措施的話,請在升級前備份或卸載使用者的分割區。

在升級至 etch 的同時,您大概也必須進行 Kernel 的升級。因此重新開機通常是無可避免的。一般而言,這將會在升級完畢後進行。


4.1.3 回復準備

由於 sarge 和 etch 間的 kernel 在像是驅動程式、硬體偵測、命名方式及裝置檔的順序上之變動太大了,在升級完成之後、重新啟動系統之時,您必須冒著可能會遭遇問題的風險。一些已知的可能問題記述於發行情報中的這個及下個章節。

也因此,當您的系統可能會再也無法開機,或者是無法啟用網路(對於遠端管理系統而言)之時,確保您有辨法進行回復就變得很重要了。

如果您是藉由 ssh 連線來從遠端進行更新的話,在此非常建議您能採取必要的預防措施,讓您能有辨法經由遠端序列終端來存取伺服器。這是因為偶爾在升級 Kernel 並重新開機之後,有些裝置的名稱被改變了(如同 重新排序裝置列表, 第 4.6.4 節 裡的說明),導致您得經由本機主控台才能修正系統的設定。同樣的,如果系統在升級途中意外得重新開機了,您將可能得由本機主控台才能進行修復。

第一個最顯而易見的方法是試著用您舊的 Kernel 開機,儘管如此,由於在本文件其它地方所陳述的種種原因,這個方法無法保証一定有效。

如果這個方法失敗了,您必須另尋其它方式來啟動您的系統,讓您可以進行存取並修復它。方法之一是利用特定的救援影像檔或 Linux 的 live CD。利用它們開機之後,您應該可以掛載您的 root 檔案系統並 chroot 進去以檢查並修復問題。

另一個我們建議的作法是使用 etch Debian 安裝程式的 rescue mode。使用安裝程式的好處是您可以在它所提供的許多安裝方式中選擇一個最符合您的狀況的方式。請參閱在 安裝指引 的第 8 節 "回復毀損的系統" 及 Debian 安裝程式的常見問題解答 以取得更詳盡的資訊。


4.1.3.1 在開機過程中使用 initrd 的除錯介面 (debug shell)

initramfs-tools 會在它所產生的 initrds 中放入一個除錯介面[6]。比如說,當您無法掛載您的 root 檔案系統時,您會進入這個提供了一些基本功能的除錯介面,以用來追蹤問題並試著修復它。

基本的檢查包括了:在 /dev 中是否有出現正確的裝置檔;已載入了哪些模組(cat /proc/modules);在 dmesg 的輸出裡是否有驅動無法載入的資訊。在 dmesg 的輸出裡也會顯示了哪個裝置檔已被指定為使用哪個磁碟;您應該把它和 echo $ROOT 的輸出進行比較以確保 root 檔案系統是掛載在正確的裝置上。

如果您已採取行動解決問題,鍵入 exit 將會跳出除錯介面並會由開機失敗的地方繼續進行開機。當然了,您也必須由根本修復問題並重新產生 initrd,讓下次開機時不會又因而失敗。


4.1.4 準備一個安全無虞的環境以進行升級

您應該在本機透過文字模式的虛擬主控台(或直接連線的序列終端機)、或由遠端透過 ssh 連線來進行發行版間的升級。

在以遠端進行更新時,為了能得到更多的安全保障,在此建議您在 screen 程式所提供的虛擬主控台裡進行升級程序。它能夠讓您一再地重複連線,以確保如果遠端連線中斷時,也不會干擾到升級程序的進行。

極重要!不應該透過 telnetrloginrsh,或是由您要進行升級的機器上的 xdmgdmkdm 等等所管理的 X 行程來進行升級。這是因為這些服務在升級的過程中都可能會被中斷,因而將會留下了一個只完成部分升級而無法存取的系統。


4.1.5 已不再支援 2.2 系列的 Kernel

如果您所運行的 Kernel 版本比 2.4.1 還舊,在升級 glibc 之前,您必須至少升級至 2.4 系列的 Kernel。這個動作必須在開始進行升級之前完成。在此建議您能直接升級至 sarge 所提供的 2.6.8 版的 Kernel,而不是升級至 2.4 版的 Kernel。


4.2 檢查系統的狀況

The upgrade process described in this chapter has been designed for upgrades from "pure" sarge systems without third-party packages. In particular, there are known problems with third-party packages which install programs under /usr/X11R6/bin/ causing problems with upgrades due to the X.Org transition (將 XFree86 轉換至 X.Org, 第 5.3 節). For greatest reliability of the upgrade process, you may wish to remove third-party packages from your system before you begin upgrading.

而在這個過程中也假設您的系統已更新至 sarge 的最新釋出版本。如果您尚未完成或是您根本無從確定,請遵循在 更新您的 sarge 系統, 第 A.1 節 裡的相關說明。


4.2.1 重新檢視在套件管理程式的懸而未決之動作

在某些情況下,使用 apt-get 而不是 aptitude 來安裝套件可能會讓 aptitude 認為某個套件是 "無用的" 且會計劃要將其移除。一般來說,您應該在進行升級程序前確保系統已完全更新且 "乾淨"。

因此,您必須重新檢視是否有什麼懸而未決的動作尚存在套件管理程式 aptitude 裡。如果在套件管理程式裡有什麼套件尚待移除或更新,將會對升級程序造成不利的影響。請注意到,在進行修正時,您的 sources.list 必須還是指向 sarge,而不是 stableetch;請參閱 檢查您的來源列表, 第 A.2 節

若要進行,您必須執行 aptitude 的使用者介面並按下 'g' ("Go")。如果它顯示了任何的動作,您必須重新檢視並進行修正或執行所推薦的動作。如果沒有任何動作將要進行,您會立即得到一個訊息寫著 "沒有套件尚待安裝、移除或更新"。


4.2.2 關閉 APT 的釘鎖 (Pinning) 功能

如果您將 APT 設定為可以安裝除了 stable 發行版之外的套件,(像是:testing),您可能必須修改您的 APT 的釘鎖 (Pinning) 設定(儲存於 /etc/apt/preferences 中)來讓將要進行升級的套件能夠升級至新的 stable 發行版。您可以在 apt_preferences(5) 取得 APT 的釘鎖功能的更多詳盡資訊。


4.2.3 檢查套件的狀態

不論您是用什麼方式進行系統的更新,我們都建議您先檢查所有套件的狀態,並確認所有的套件都能夠順利升級。以下的指令會顯示所有狀態為半安裝 (Half-Installed) 或設定失敗 (Failed-Config) 或有其他任何錯誤的套件。

     # dpkg --audit

除此之外,檢查系統中所有套件狀態的方法還包括使用使用 dselectaptitude、或是利用以下的指令:

     # dpkg -l | pager

或是

     # dpkg --get-selections "*" > ~/curr-pkgs.txt

最佳的做法是在進行系統升級前將所有的套件解除保留 (hold) 狀態。如果在升級過程中有任何的關鍵套件的狀態被設定為保留,那麼升級的作業就會失敗。

請注意到,aptitude 使用了和 apt-getdselect 迥然不同的方式來登錄哪些是保留套件。您可以使用以下方式來確認哪些套件是被保留住的:

     # aptitude search "~ahold" | grep "^.h"

如果您想要檢查那些套件是被 apt-get 所保留住的,請使用:

     # dpkg --get-selections | grep hold

如果您自行在系統中變更並重新編譯了某個套件,但卻沒有將其更名或在版本號碼中使用 epoch(自行定義版本號碼),那您就必須把它設定為保留狀態,以防止它被升級到新的版本。

若想更改那些在 aptitude 裡被保留住的套件的狀態,請使用:

     # aptitude hold package_name

holdunhold 取代,以消除保留狀態。

如果還有什麼地方尚待修正,最好再次確認您的 sources.list 仍然是指向 sarge,如同 檢查您的來源列表, 第 A.2 節 裡的說明。


4.2.4 非官方的來源及 backports

如果在您的系統裡安裝了不是由 Debian 所提供的套件,您必須要知道,在升級的過程中它們可能會因為相依性的關係而被移除掉。如果這些套件是先在 /etc/apt/sources.list 新增了額外的套件檔案庫然後再加以安裝的,您應該檢查一下那個檔案庫是否也提供了特別為 etch 而編譯的套件,在替 Debian 變更套件來源時也同時適當得修改這些套件的來源項目。

也許有些使用者會在他們的 sarge 上安裝了在 Debian 已有套件的非官方但 "較新" 的 backported 版本。這些套件很可能在升級的時候產生檔案衝突的問題,[7]。在 在升級過程中可能會發生的問題, 第 4.5.8 節 那一節有一些當發生了檔案衝突時該如何解決的資訊。


4.3 手動將套件解除標註

為了避免 aptitude 將某些因為相依性而安裝進來的套件移除掉,您必須手動將這些套件解除標註為自動套件。在安裝桌面時,這包含了 OpenOffice 和 Vim:

     # aptitude unmarkauto openoffice.org vim

以及 2.6 Kernel 影像檔,如果您是使用 Kernel 虛擬套件來安裝的話:

     # aptitude unmarkauto $(dpkg-query -W 'kernel-image-2.6.*' | cut -f1)

請注意到:您可以藉由以下指令來重新檢視有哪些套件是被標註成自動的:

     # aptitude search 'i~M <package name>'

4.4 APT 來源之準備工作

在開始進行升級之前,您必須先在 apt 的設定檔 /etc/apt/sources.list 中設定套件列表。

apt 會把所有可以在 "deb" 行中找到的套件全數列入考慮,並安裝其中版本號碼最高的套件,且會依序由列出的來源中取得套件。(也因此,當您是由許多不同位置來取得套件時,您可以讓系統依先由本機硬碟,接下來是由光碟片,然後是遠端 HTTP/FTP 的順序來取得套件)

發行版通常可以使用它的代碼(如,sarge、etch)或是它的狀態名稱(如,oldstable、stable、testing、unstable)來表示。使用發行版的代碼有個好處是您將不用為了新的發行版的到來而感到不安,這也是為什麼會在此提出這個技巧的原因。理所當然的,這也表示了您必須自行去注意發行版是何時發佈的。如果您是替而使用狀態名稱的,在新的發行版發佈的同時,您將會立即發覺大量套件已有新的版本可供更新。


4.4.1 加入網際網路上的 APT 套件來源

雖然系統的預設設定是使用 Debian 在網際網路上的主要伺服器來進行安裝,但您還是可能會希望修改 /etc/apt/sources.list 來改為使用在網路上離您最近的其它鏡像站。

您也可以在 http://www.debian.org/distrib/ftplist 取得 Debian 的 HTTP 或 FTP 鏡像站的位址(請參考【Full list of mirrors】小節)。HTTP 鏡像站的傳輸速度通常會比 FTP 鏡像站來得快。

舉例來說,假設離您最近的 Debian 鏡像站是 http://mirrors.kernel.org/debian/。當您透過網頁瀏覽器或 FTP 程式來檢視這個網站時,您會發現其中的主要目錄架構會像是這個樣子:

     http://mirrors.kernel.org/debian/dists/etch/main/binary-i386/...
     http://mirrors.kernel.org/debian/dists/etch/contrib/binary-i386/...

為了要讓 apt 能夠使用這個鏡像站,請把以下的這一行加入您的 sources.list 檔案之中:

     deb http://mirrors.kernel.org/debian etch main contrib

請注意,`dists' 將會被自動加到路徑中,而在發佈代號之後的參數則會被用來展開成多個不同目錄的路徑。

在加入了新的來源之後,請在 sources.list 中原本的 "deb" 項目前加上井字符號 (#) 以關閉這些套件來源。


4.4.2 增加 APT 的本機鏡像套件來源

您可能也會想修改 /etc/apt/sources.list 中的設定,以使用本機(像是透過 NFS 掛載的)磁碟上的鏡像資料來取代透過 HTTP 或 FTP 存取遠端的套件鏡像站。

舉例來說,如果您的套件鏡像是放在 /var/ftp/debian/ 之下,而主要的目錄看起來是像這樣的話:

     /var/ftp/debian/dists/etch/main/binary-i386/...
     /var/ftp/debian/dists/etch/contrib/binary-i386/...

如果要和 apt 搭配使用,請把下行加入 sources.list 檔案之中:

     deb file:/var/ftp/debian etch main contrib

請注意,`dists' 將會被自動加到路徑中,而在發佈代號之後的參數則會被用來展開成多個不同目錄的路徑。

在加入了新的來源之後,請在 sources.list 中原本的 "deb" 項目前加上井字符號 (#) 以關閉這些套件來源。


4.4.3 增加 APT 的 CD-ROM 或 DVD 的套件來源

如果光碟是唯一您想使用的媒體,請在 /etc/apt/sources.list 中原有的 "deb" 設定行前加入井字符號 (#) 以關閉這些套件來源。

請確定在 /etc/fstab 中有著能讓您的光碟機掛載在 /cdrom 這個掛載點下的項目(apt-cdrom 限定掛載點必須是 /cdrom)。舉例來說,如果您的光碟機的裝置是 /dev/hdc,那麼 /etc/fstab 中就應該要有像這樣的一行:

     /dev/hdc /cdrom auto defaults,noauto,ro 0 0

請注意在第四欄的 defaults,noauto,ro 的字中間一定不能參雜空白字元

要確認您的設定是否正確,請放入一張光碟片,並試著執行

     # mount /cdrom    # 這樣將會將這張 CD 掛載在該掛載點上
     # ls -alF /cdrom  # 這樣將會列出 CD 的根目錄
     # umount /cdrom   # 這樣將會卸載這張 CD

接下來對每一張 Debian 的程式光碟執行

     # apt-cdrom add

來把每一張光碟的資料加到 APT 的資料庫中。


4.5 進行套件的升級

若要從舊有的 Debian GNU/Linux 發行套件進行升級時,建議的方法是使用套件管理工具 aptitude。這個程式在套件安裝上會比起直接執行 apt-get 來得安全。

不要忘了用類似以下的指令把所有會用到的分割區(特別是 /usr 和 root 分割區)重新以可讀寫的模式掛載:

     # mount -o remount,rw /mountpoint

接下來,您必須再次確認在 /etc/apt/sources.list 中的 APT 來源項目是指向 "etch" 或是 'stable',且應該沒有任何來源項目是指向 sarge。請注意,CD-ROM 的來源項目通常會指向 "unstable",雖然您可能會覺得這有點奇怪,但您應該去加以更動。


4.5.1 記錄歷程

我們強烈建議您使用 /usr/bin/script 這個程式來記錄升級的完整過程。因為一旦發生了任何問題,您手上就會有發生了什麼問題的確實記錄,而在必要之時,在錯誤報告中也能據此提供確實的資訊。若要開始進行記錄,請使用

     # script -t 2>~/upgrade-etch.time -a ~/upgrade-etch.script

或類似的指令。請不要把記錄檔放在像是 /tmp/var/tmp 之類的暫存目錄下(這些目錄中的檔案可能會在升級的過程中或在重新開機時被清除掉)。

而這些記錄檔也可以讓您重新檢視那些已被捲出螢幕之外的訊息。請切換至第二個虛擬終端機 VT2(使用 Alt-F2),在登入之後,使用 less -R ~root/upgrade-etch.script 來瀏覽這個檔案。

在您完成升級作業後,您可以藉由在命令列上鍵入 exit 來關閉 script

如果您在 script 上使用了 -t 參數,您可以利用 scriptreplay 程式來重新播放整個過程:

     # scriptreplay ~/upgrade-etch.time ~/upgrade-etch.script

4.5.2 更新套件的列表

首先,必須先取得在新釋出版上的可取用的套件列表。這可以利用以下指令進行:

     # aptitude update

首次執行時,新的來源若有更新將會顯示一些關於可取得來源之警告訊息。這些警告訊息是無關緊要的,且如果您再次執行該指令,這些訊息將不會再出現。


4.5.3 確認您有足夠的空間可以用來進行升級

在進行系統升級之前,您必須確認在您開始進行 升級系統的其它部份, 第 4.5.6 節 上寫的全系統升級之時,您的系統有著足夠的硬碟空間。首先,所有由網路所取得的安裝所需的套件都會儲放在 /var/cache/apt/archives 裡(以及子目錄 partial/,在進行下載時),所以您必須確認在包含了 /var/ 的檔案系統分割區裡必須擁有足夠的硬碟空間以容納那些將會安裝到您的系統上而暫時下載的套件。在下載完成之後,在其它的檔案系統分割區裡您應該會需要更多的空間以用來安裝升級套件(它們很可能會包含需要更大空間的檔案及資料)以及在升級過程中會一併安裝的新套件。如果您的系統並沒有足夠的空間,您可能在最後得到的是一個未能完全升級卻又難以還原的系統。

aptitudeapt 都會替您顯示在安裝時所需的硬碟空間之詳盡資訊。在進行升級之前,您可以得到這些估算值。請執行:

     # aptitude -y -s -f --with-recommends dist-upgrade
     [ ... ]
     更新了 XXX、新安裝了 XXX、要移除 XXX 而 XXX 將不會被升級。
     必須下載 xx.xMB/yyyMB 的檔案。在解壓縮之後將會用掉 AAAMB。
     將會進行 下載/安裝/移除 套件。

[8]

如果您沒有足夠的空間可供升級,請在事先就清出磁碟空間。您可以:

請注意到,為了能夠安全得移除套件,最好將您的 sources.list 換回 sarge,如同 檢查您的來源列表, 第 A.2 節 裡的說明。


4.5.4 系統最低限度升級

由於在 sarge 和 etch 間有不少必需套件是相互衝突的,直接執行 aptitude dist-upgrade 常常會把一堆您希望保留的套件移除掉。因而我們在此建議進行二段式升級,首先是最低限度昇級以克服衝突問題,然後再是完整的 dist-upgrade

首先,執行:

     # aptitude upgrade

這樣會將那些在升級過程中不需要移除或安裝到其它套件的套件進行升級。

利用以下指令來進行最低限度升級:

     # aptitude install initrd-tools

這個步驟將會自動得更新 libc6locales,且會將支援 SELinux 所需的檔案安裝進來。此時,有些正在運行中的服務會被重新啟動,包括 xdmgdmkdm,影響所及將導致本機的 X11 連線將會因而被中斷。

下個步驟會根據您所安裝的套件組合之不同而有所不同。本發行情報在關於該採取什麼樣的方式上是給予最常見的建議。但為確保萬一,建議您在實地進行之前先試過種種不同手法所建議的套件移除方案。

一些可能會被移除掉的常見套件包括了 base-confighotplugxlibsnetkit-inetdpython2.3xfree86-commonxserver-common。您可以在 被廢棄的套件, 第 4.10 節 找到更完整的 etch 的廢棄套件的列表。


4.5.4.1 升級桌面系統

升級途徑已被適度修改,讓它能和安裝了 desktop 主題的 sarge 系統搭配運作。在安裝了 desktop 主題或是安裝了 gnomekde 套件的系統上,它可能是提供了最佳解決方案的辨法了。

如果您並未安裝 libfam0c102xlibmesa-glu 套件,這可能並不是應該採用的正確方案。

     # dpkg -l libfam0c102 | grep ^ii
     # dpkg -l xlibmesa-glu | grep ^ii

如果您安裝了完整的桌面環境,請執行:

     # aptitude install libfam0 xlibmesa-glu

4.5.4.2 升級安裝了部份 X 套件的系統

對於安裝了部份的 X 套件卻沒有安裝完整的桌面主題的系統,升級方式也有所不同。這個方式一般適用於安裝了 xfree86-common,其中包含了一些安裝了 tasksel 裡的伺服器主題的伺服器系統,因為這些主題裡可能會包含了圖形的管理工具。這對於那些有執行 X,但並沒有安裝完整的桌面主題的系統可能是最佳的方法。

     # dpkg -l xfree86-common | grep ^ii

首先,請確認您是否安裝了 libfam0c102xlibmesa-glu 套件。

     # dpkg -l libfam0c102 | grep ^ii
     # dpkg -l xlibmesa-glu | grep ^ii

如果您並未安裝 libfam0c102,請去掉下面的指令中的 libfam0。如果您並未安裝 xlibmesa-glu,請將其從下面的指令中去掉。[9]

     # aptitude install x11-common libfam0 xlibmesa-glu

請注意到,安裝 libfam0 的同時也將會把『檔案變化監看程式』(fam) 以及『RPC 連接埠對應程式』(portmap) 安裝進來,若您的系統上尚未安裝的話。這兩個套件都會在系統中啟用新的網路服務程式,雖然他們都能夠設定為使用(內部的)loopback 網路裝置。


4.5.4.3 升級沒有安裝任何 X 的系統

On a system with no X, no additional aptitude install command should be required, and you can move on to the next step.


4.5.5 升級 Kernel

在 etch 所搭載的 udev 版本並不支援比 2.6.15 版更早期的 Kernel(也包含了 sarge 的 2.6.8 版的 Kernel)。在此同時,在 sarge 所搭載的 udev 版本也無法正常地和最新的 Kernel 搭配使用。此外,安裝 etch 版的 udev 將會強迫移除 Linux 2.4 kernel 所需的 hotplug

也因此在進行升級後,可能再也無法利用之前的 kernel 套件來開機了。同樣的,在進行升級時,當 udev 已升級、但卻未安裝最新版的 kernel 期間有個空窗期,如果系統安裝到一半,卻在這個節骨眼系統重新開機了,它可能再也無法開機,因為無法偵測並載入正確的驅動模組。(請參閱 準備一個安全無虞的環境以進行升級, 第 4.1.4 節 裡,一些當您是用遠端進行升級的一些建議及可行的預防方案。)

除非您的系統安裝了桌面主題,或有其它的套件會導致必須移除大量套件,在此還是建議您能在此時個別得進行 kernel 的升級。

要進行 kernel 的升級,請執行:

     # aptitude install linux-image-2.6-flavor

請參閱 安裝 Kernel 的虛擬套件, 第 4.6.1 節 來幫助您決定您該安裝的 kernel 套件的類別。

對於桌面而言,糟糕的是很難去確保在安裝了新的 udev 後,是否會立刻安裝新的 kernel 套件,所以無法確認在您的系統上僅安裝了 kernel、但卻沒有完整的 hotplug 支援的空窗期到底是多長。請參閱 替您的 Kernel 及相關套件進行升級, 第 4.6 節 以取得如何將您的系統設定為不需依賴 hotplug 就能開機之資訊。


4.5.6 升級系統的其它部份

那麼,現在已經準備好可以進行升級作業的重頭戲了。請執行:

     # aptitude dist-upgrade

這將會在您的系統上進行完整的更新,也就是安裝所有套件目前所提供的最新版本,並解決套件在不同發行版之間可能會有的相依性問題。如果有必要的話,它也會安裝一些新的套件(通常是新版的函式庫或是被更名的套件),並移除任何和新版套件發生衝突的過時套件。

如果您是從光碟組來進行升級的話,系統將會在升級進行時不時要求您放入某張特定的光碟片。您可能會需要反覆放入同一張光碟數次;這是由於相關的套件被分散在多張光碟之中所造成的。

如果升級某些已安裝的套件至新版本時會改變其他套件的安裝狀態的話,這些套件就會被保留在原來的狀態(並顯示為 "留置, held back")。可以使用 aptitude 選擇這些套件並進行安裝,或是試著鍵入 aptitude -f install package,就能夠解決這個問題。


4.5.7 取得套件簽名

在完成升級後,您現在已可以藉由新版的 apt 來更新您的套件資訊,其中包含了新的套件簽名檢驗機制:

     # aptitude update

在升級中將會取得並啟用 Debian 的套件檔案庫的簽名金鑰。如果您新增了其它(非官方)的套件來源,apt 將會秀出因為無法確認套件的來源是合法的且未被擅改過之相關錯誤資訊。請參閱 套件管理, 第 2.1.1 節 以取得更詳盡資訊。

您將會發現,自從您使用新版的 apt 後,它將只會下載套件的差異檔 (pdiff),而不是所有的套件索引列表。請參閱 APT 套件索引檔更新變慢, 第 5.1.5 節 以取得這個功能的更詳盡資訊。


4.5.8 在升級過程中可能會發生的問題

如果在使用 aptitudeapt-getdpkg 的過程中失敗了並顯示以下錯誤

     E: Dynamic MMap ran out of room

那麼,就表示預設的快取空間不夠了。您可以從 /etc/apt/sources.list 中將您不需要的項目加上註解或是乾脆將它移去,或是增加快取空間,來解決這個問題。可以經由設定 /etc/apt/apt.conf 裡的 APT::Cache-Limit 來增加快取空間。假設您還沒有在這個檔案裡替這個變數設定任何的數值,那麼以下的命令應該可以替升級的動作設定足夠的快取空間:

     # echo 'APT::Cache-Limit "12500000";' >> /etc/apt/apt.conf

在此則假設了您尚未在該檔案中設定這個變數。

有時候您會需要啟用 APT::Force-LoopBreak 選項讓 APT 暫時移除某個重要的套件,以解決循環的 相互衝突(Conflicts) / 相互依存(Pre-Depends) 關係。aptitude 會對此提出警告,並終止升級的進行。您可以在 aptitude 的指令行中加入 -o APT::Force-LoopBreak=1 來解決這個問題。

系統中的相依關係也可能混亂到需要手動介入才得以解決。通常這代表您需要使用 aptitude

     # dpkg --remove package_name

來清除一些會造成問題的套件,或

     # aptitude -f install
     # dpkg --configure --pending

在極端的情況下,您可能需要利用類似以下的指令來強制進行重新安裝的動作:

     # dpkg --install /path/to/package_name.deb

如果您是由一個 "純粹" 的 sarge 進行升級的話,應該不會有檔案衝突的情況發生;但如果您安裝了非官方的 backports 套件時就不一定了。如果發生檔案衝突時,會產生類似以下的錯誤:

     正在解開 <package-foo>(由 <package-foo-file>)...
     dpkg: 在處理時出錯 lt;package-foo> (--install):
      試圖覆寫 `<some-file-name>',
      而同時存在於套件 <package-bar> 中
     dpkg-deb: 子程序 paste 因錯誤訊息(損毀的 pipe)而被中斷
      在處理時發生了錯誤:
      <package-foo>

您可以強制移除出現在錯誤訊息裡最一行的那個套件,以解決檔案衝突的問題:

     # dpkg -r --force-depends package_name

在問題都修正了之後,您就應該可以重新輸入先前所描述的 aptitude 指令並繼續升級的工作了。

在升級的過程中,系統可能會詢問您一些問題,以便能對套件進行設定或重新設定。當您被問到是否要把在 /etc/init.d/etc/terminfo 目錄中的檔案或是 /etc/manpath.config 這個檔案置換成套件維護者所提供的版本時,您通常必須回答 `yes' 以維護系統的一致性。您可以在稍後再復原為舊的設定檔,因為它們都會以在檔名後附加 .dpkg-old 的方式給保留下來。

如果您不太確定要怎麼做的話,把套件或檔案的名稱寫下來,等稍後再想辨法理出頭緒來。您可以在記錄檔中搜尋,以便能重新檢視在系統升級時出現在螢幕上的資訊。


4.6 替您的 Kernel 及相關套件進行升級

這一節中解釋了如何升級您的 kernel 及和升級有關的潛在問題。您可以安裝由 Debian 提供的某個 linux-image-* 套件,或是由原始碼自行編譯一個自訂的 kernel。

請注意到,在這一節中的許多資訊是假設了您使用著某個模組化、和 initramfs-toolsudev 搭配使用的 Kernel。如果您是使用不需 initrd 的自訂 kernel 或是您使用的是另一種 initrd 產生程式,這些資訊中有些是和您無關的。

請注意到,如果 udev 並沒有 安裝在您的系統上,那麼還是可以使用 hotplug 來進行硬體偵測。

如果您正在使用 2.4 版的 kernel,您也應該仔細得閱讀 將 Kernel 升級至 2.6, 第 5.2 節


4.6.1 安裝 Kernel 的虛擬套件

當您由 sarge 完整升級至 etch 後,強烈建議您安裝某個 linux-image-2.6-* 虛擬套件。這個套件可能會在完整升級的過程中被自動安裝。若想確認,請執行:

     # dpkg -l "linux-image*" | grep ^ii

如果您沒有看到任何輸出文字,那麼您將得手動安裝一個新的 linux-image 虛擬套件。若想得到可用的 linux-image-2.6 虛擬套件列表,請執行:

     # apt-cache search linux-image-2.6- | grep -v transition

如果您無法確定該選擇哪一個套件,請執行 uname -r 並查看是否有名稱類似的套件。比如說,如果您看到了 '2.4.27-3-686',在此建議您安裝linux-image-2.6-686。 (請注意到,386 類別已不再存在,如果您還是用著 386 類別的 kernel,您應該替而使用 486 類別。) 您也可以利用 apt-cache 來查看每個套件的詳細說明來讓您能在其中選出最合適的套件。比如說:

     # apt-cache show linux-image-2.6-686

接下來,您應該使用 aptitude install 來進行安裝。當新的 Kernel 安裝完畢後,您應當找個適當時機重新開機,以便能享用新的 Kernel 版本所帶來的種種好處。

對於那些比較富有冒險心的人,我們也提供了一個在 Debian GNU/Linux 上自行編譯 Kernel 的簡易方法。請安裝 kernel-package 工具並詳細閱讀在 /usr/share/doc/kernel-package 裡的說明文件。


4.6.2 由某個 2.6 版的 Kernel 進行升級

如果您所運行的是 sarge 所搭載的 2.6 系列的 kernel,在您進行系統套件的完整升級時,就會自動進行這項升級。(如同 進行套件的升級, 第 4.5 節 裡所說明的)。

如果可以的話,您最好是將 kernel 套件的升級和主要的 dist-upgrade 分開進行,以降低讓系統變成一時之間無法開機的機會。請注意到,這必須在完成了 系統最低限度升級, 第 4.5.4 節 所說明的最低限度升級之後才能進行。

如果您是使用著自訂的 Kernel,且您希望使用 etch 所搭載的 Kernel,您也可以按照這些步驟進行。如果您的 Kernel 並不被 udev 所支援,在此建議您能先進行最低限度的升級後再進行 kernel 的升級。如果您的版本已被 udev 所支援,您可以放心得等到全系統升級後再進行。


4.6.3 由某個 2.4 版的 Kernel 進行升級

如果您安裝了某個 2.4 系列的 kernel,且您的系統是藉助於 hotplug 來進行硬體偵測的話,在進行升級之前您必須先升級至 sarge 所提供的 2.6 系列的 kernel。在進行升級之前請確認那個 2.6 系列的 kernel 可以正確啟動您的系統且您所有的硬體都能正確的被偵測到。因為在您進行完整的系統升級時,hotplug 套件將會由系統中移除(取而代之的是 udev)。如果您未在事先就進行 Kernel 的升級,您的系統可能會因而無法正常開機。一旦您已升級為 sarge 所提供的 2.6 系列的 kernel,您可以再進行 kernel 的升級,就如同 由某個 2.6 版的 Kernel 進行升級, 第 4.6.2 節 裡的說明。

如果您的系統並不依賴 hotplug,[10]您可以將 kernel 的升級延遲到您進行了完整的系統升級後,如同升級系統的其它部份, 第 4.5.6 節裡的說明。一旦您的系統升級完成,您可以如下進行:(請修改 kernel 套件名稱,將其中的 <flavor> 替換為最適合您系統的類別):

     # aptitude install linux-image-2.6-<flavor>

4.6.4 重新排序裝置列表

比起先前的釋出版本,etch 在判斷硬體設備方面提供了一個更為穩健的機制。然而,這將可能會改變在您的系統上所找到的硬體的順序,進而會影響到所使用的裝置名稱。比如說,如果您有著兩片使用著不同的驅動程式的網路卡,那麼 eth0 和 eth1 的順序很可能會互換。請注意到,新的機制也代表了如果您像是置換了正在運作中的 etch 系統上的網路卡,新的網路卡將會拿到一個新的介面名稱。

對於網路裝置而言,您可以利用 udev 的規則;更明確得說,經由 /etc/udev/rules.d/z25_persistent-net.rules 裡的定義來避開這個順序更動的問題。[11]。除此之外,您也可以利用 ifrename 工具程式來在開機時替實體裝置指定特定的名稱。請參閱 ifrename(8)iftab(5) 以取得更詳盡的資訊。這兩個方案(udevifrename)只能選擇其一,無法同時採用。

對於儲存裝置而言,您可以藉由使用 initramfs-tools 並將其設定為依照目前相同的載入順序來載入儲存裝置的驅動模組以避開這個問題。為此,您可以查看 lsmod 的輸出來確認您的系統載入儲存裝置的驅動模組的順序。lsmod 會以相反的順序列出載入的模組。也就是說,在列表中的第一個模組是最後載入的。請注意到,這只在那些 Kernel 會以一定的順序來載入的裝置(像是 PCI 裝置)上能生效。

但是,在開機後移除或重新載入模組將會影響這份列表的順序。同時,您的 Kernel 也許會以靜態連結至某些模組,所以這些名稱將不會出現在 lsmod 的輸出裡。您也可以經由查看 /var/log/kern.logdmesg 的輸出來辨認出這些驅動的名稱及載入順序。

將這些模組名稱以它們在開機時應有的載入順序新增到 /etc/initramfs-tools/modules 裡。有些模組名稱在 sarge 及 etch 裡是有所不同的。比如說,sym53c8xx_2 已變成了 sym53c8xx。

然後,您將必須執行 update-initramfs -u -k all 來重新產生您的 initramfs 影像。

若您使用的是 etch 版的 kernel 及 udev,您也許要重新設定您的系統以便能以和驅動載入順序無關的別名來進行存取。這些別名會分門別類得放在 /dev/disk/ 裡。


4.6.5 開機時機問題

如果使用由 initramfs-tools 產生的 initrd 來開機的話,在某些狀況下 udev 建立裝置檔的時機比開機 scripts 的動作還慢。

The usual symptoms are that the boot will fail because the root file system cannot be mounted and you are dropped into a debug shell, but that when you check afterwards, all devices that are needed are present in /dev. This has been observed in cases where the root file system is on a USB disk or on RAID, especially if lilo is used.

要避開這個問題的方法是使用 rootdelay=9 開機參數。其中的秒數可能得再加以調整才行。


4.7 在重新開機前應該完成的工作

aptitude dist-upgrade 執行完畢後,系統升級「形式上」已經完成了,但仍然有一些工作是在您下次重新啟動系統之前應該要加以注意的。


4.7.1 從 devfs 進行轉換

Debian 的 kernel 已不再提供對 devfs 的支援,所以 devfs 的使用者在以 etch 的 Kernel 開機之前將必須手動進行系統的轉換。

如果您在 /proc/mounts 裡有看到 'devfs' 這個字串,那麼您十之八九還在使用著 devfs。所有還在使用著 devfs 版的名稱的設定檔必須要修正為指向 udev 版的名稱。一些可能會使用著 devfs 版的裝置名稱包含了 /etc/fstab/etc/lilo.conf/boot/grub/menu.lst/etc/inittab

可以在錯誤回報 #341152 裡取得一些可能的問題的更詳盡資訊。


4.7.2 重新執行 lilo

如果您還是使用 lilo 做為您的開機程式(它是 sarge 裡某些安裝程式的預設開機程式),在此強烈建議您在升級完畢後重新執行 lilo

     # /sbin/lilo

請注意到,即使您並沒有升級您的系統的 kernel,這個動作還是必要的,因為 lilo 的第二階段可能會因為套件的升級而改變了。

同時,再次查看您的 /etc/kernel-img.conf 內容並確認其中有著 do_bootloader = Yes。那麼,在 Kernel 升級後就會必定會自動執行開機程式了。

如果您在執行 lilo 時遇到了任何問難,請再次檢查在 / 裡指向 vmlinuzinitrd 的符號連結,以及您的 /etc/lilo.conf 的內容是否有什麼不對勁的地方。

如果您在重新開機之前忘了執行 lilo,或者是在您有機會手動執行之前系統就意外得重新開機了,您的系統很可能會因而無法開機。在開機時,您將看不到 lilo 提示字元,取而代之的是 LI[12]。關於如何進行回復請參閱 回復準備, 第 4.1.3 節 以取得更多詳盡資訊。


4.7.3 更新 mdadm

mdadm 現在需要設定檔來在 initial ramdisk 及系統初始化過程中建構 MD 陣列。在該套件被更新後、在您重新啟動之前,請務必閱讀並依照 /usr/share/doc/mdadm/README.upgrading-2.5.3.gz 的內容進行。這個檔案的最新版可以在 http://svn.debian.org/wsvn/pkg-mdadm/mdadm/trunk/debian/README.upgrading-2.5.3\|[nbsp ]\|op=file 取得,若遭遇任何問題請不妨參閱。


4.8 替下一個釋出版本進行準備

在更新完畢之後,您可以進行某些工作來替下一個釋出版本進行準備:


4.9 Deprecated packages

With the release of Lenny a bigger number of server packages will be deprecated, thus updating to newer versions of those now will save you from trouble when updating to Lenny.

This includes the following packages:


4.10 被廢棄的套件

雖然在 etch 裡採用了數千個新的套件,但它同時也撤除並捨棄了超過兩千個曾經包含在 sarge 裡的舊套件。它將不會再提供這些已遭廢棄的套件任何的升級途徑,雖然我們並不會禁止您企圖繼續使用這些已遭廢棄的套件,但依慣例,在 etch 發佈的一年之後 Debian 專案將不會再針對它們繼續提供安全上的支援[13],而除此之外,我們在這段期間內一般並不會再提供其它方面的支援。如果可以的話,我們建議您能採用其它的替代方案來取代這些套件。

而這些套件為什麼會從發行版中移去的原因不一而足:有的是因為它的原始程式已經沒有人在繼續維護了;有的是因為已經沒有 Debian 的開發者有意願想要繼續維護這些套件了;有的是因為它們所提供的功能已經被其它的軟體(或是新的版本)所取代了;有的是因為它們本身所包含的一些 Bug 使得我們認為它們已無法和 etch 相容。如果是最後一個情況,這些套件很可能是被放在 "unstable" 這個分類裡。

因為套件管理的前端介面會將這些套件標示為 "廢棄(obsolete)",因而我們可以很輕易得就可以判斷在一個已經過升級後的系統裡,哪些套件已遭廢棄了。如果您所使用的是 aptitude,您可以在【廢棄及本機所建立的套件, Obsolete and Locally Created Packages】這個項目裡看到這些套件的列表。在 dselect 裡也提供了類似的功能但它所顯示的列表可能會有點不太一樣。同時,如果您之前是手動使用 aptitude 來安裝 sarge 的套件,它會持續得追蹤這些您手動安裝的套件,並且如果有某個套件被移除了,而使得這些因相依關係而被安裝的套件已經不再有任何作用時,它可以找出這些套件並將其標示為 "廢棄"。而像是 deborphan 並不會將您手動安裝的套件標示為 "廢棄";但 aptitude 則是完全相反,即使這些套件是因為相依性才被自動安裝進來的。

還有一些其它的套件可以讓您用來尋找這些廢棄了的套件,像是 deborphandebfostercruft。其中推薦使用 deborphan,因為它在預設的模式下只會報告已遭廢棄了的函式庫:位於 "libs" 或 "oldlibs" 區的套件就表示它們已不再被其它的套件所使用了。但請不要輕率得依據這些工具所回報的列表就把這些套件給移掉了,尤其是您在執行時使用的不是預設的,而是較為寬鬆的選項時,它們很可能會因而做出不正確的判定。因此在此強烈建議您,在進行移除的動作之前,您必須親自再重新檢視一次這些將要被移除的套件,包括它們的內容、大小,及它們的詳細說明。

Debian 錯誤追蹤系統 裡常常會提供了為什麼某個套件會被移掉的相關資訊。您可以使用該套件本身的錯誤回報資料庫,或是在 ftp.debian.org pseudo-package 裡的錯誤回報資料庫來重新檢視這些資訊。


4.10.1 替代 (Dummy) 套件

有時為了讓系統能更易於管理,有些原來是包含於 sarge 的套件在 etch 裡已被分開成數個套件。在此況狀下,為了能讓升級的過程更加順遂,etch 通常會採取提供 替代 (Dummy) 套件的方式:使用一個和原本是包含於 sarge 的套件相同名稱的套件,但它的內容卻是空的,但利用相依上的關聯性來使得新的套件能被安裝。這些替代套件在升級之後就會被視同廢棄套件了,您可以放心得移除它們。

大多數(但不是所有)的替代套件會在套件的說明中會介紹它們的用途,雖然它們的說明的格式並不統一,所以您可能會發現 deborphan 在搭配 --guess 選項時可以輕易得把它們從您的系統中找出來。請注意,有些替代套件並不希望您在升級後就將其刪除,因為日後您可以替而使用它來追蹤是否有任何新版本出現。


[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ A ] [ 下一頁 ]


Debian GNU/Linux 4.0 ("etch"), Intel x86 的發行情報

$Id: release-notes.en.sgml,v 1.312 2007-08-16 22:24:38 jseidel Exp $

Josip Rodin, Bob Hilliard, Adam Di Carlo, Anne Bezemer, Rob Bradford (現職), Frans Pop (現職), Andreas Barth (現職), Javier Fernández-Sanguino Peña (現職), Steve Langasek (現職)
debian-doc@lists.debian.org