章 4. 從先前的發行版進行升級

內容目錄

4.1. 系統升級之準備
4.1.1. 備份資料及設定資訊
4.1.2. 事先知會使用者
4.1.3. 回復準備
4.1.4. 準備一個安全無虞的環境以進行升級
4.1.5. LILO 專用的 initramfs
4.2. 檢查系統的狀況
4.2.1. 重新檢視在套件管理程式的懸而未決之動作
4.2.2. 關閉 APT 的釘鎖 (Pinning) 功能
4.2.3. 檢查套件的狀態
4.2.4. proposed-updates
4.2.5. 非官方的來源及 backports
4.3. 手動將套件解除標註
4.4. APT 來源之準備工作
4.4.1. 加入網際網路上的 APT 套件來源
4.4.2. 增加 APT 的本機鏡像套件來源
4.4.3. 增加 APT 的 CD-ROM 或 DVD 的套件來源
4.5. 進行套件的升級
4.5.1. 記錄歷程
4.5.2. 更新套件的列表
4.5.3. 確認您有足夠的空間可以用來進行升級
4.5.4. 先更新 apt 及/或 aptitude
4.5.5. 讓 apt 使用 aptitude 的自動安裝套件列表
4.5.6. 系統最低限度升級
4.5.7. 升級系統的其它部份
4.5.8. 在升級過程中可能會發生的問題
4.6. 替您的 Kernel 及相關套件進行升級
4.6.1. 安裝 Kernel 的虛擬套件
4.6.2. 重新排序裝置列表
4.6.3. 開機時機問題
4.7. 在重新開機前應該完成的工作
4.7.1. 重新執行 lilo
4.8. 系統開機時當在 Waiting for root file system
4.8.1. 如何在升級之前避開這個問題
4.8.2. 如何在升級後再修復這個問題
4.9. 替下一個釋出版本進行準備
4.10. 被廢棄的套件
4.10.1. 替代 (Dummy) 套件

4.1. 系統升級之準備

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

4.1.1. 備份資料及設定資訊

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

您可能會想進行備份的內容主要包括了 /etc/var/lib/dpkg/var/lib/aptitude/pkgstates 的內容,以及 dpkg --get-selections "*"(請別忘了雙引號)所輸出的資訊。

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

Any package installation operation must be run with superuser privileges, so either log in as root or use su or sudo to gain the necessary access rights.

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

4.1.1.1. Make sure you are on a suitable kernel

lenny's version of glibc will not work with kernels older than 2.6.8 on any architecture and some architectures have higher requirements. We strongly recommend that you upgrade to and test an etch 2.6.18 or 2.6.24 kernel or a custom kernel of at least version 2.6.18 before beginning the upgrade process.

4.1.2. 事先知會使用者

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

If you wish to take extra precautions, back up or unmount the /home partition before upgrading.

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

4.1.3. 回復準備

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

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

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

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

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

另一個我們建議的作法是使用 lenny Debian 安裝程式的 rescue mode。使用安裝程式的好處是您可以在它所提供的許多安裝方式中選擇一個最符合您的狀況的方式。請參閱在 Installation Guide 的第 8 節“回復毀損的系統”及 Debian Installer FAQ以取得更詳盡的資訊。

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

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

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

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

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

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

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

[重要]重要

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

4.1.5. LILO 專用的 initramfs

使用 LILO 開機程式的使用者應該要注意到,initramfs-tools 的預設值會建立一個大到 LILO 無法載入的 initramfs。因此,這些使用者應該要替而使用 grub,或編輯 /etc/initramfs-tools/initramfs.conf,並將

MODULES=most

修改為

MODULES=dep

Note, however, that doing this will cause initramfs-tools to install onto the initramfs only those modules that are required for the particular hardware that it is being run on. If you want to generate boot media that will work on more hardware than just the machine you're generating it on, you should leave the line as

MODULES=most

並確認您不是使用 LILO

4.2. 檢查系統的狀況

在這個章節中所說明的升級過程是專門為“純粹的” etch 所寫的,也就是在系統中沒有安裝任何其它協力套件。為了確保升級程序能平順進行,您也許會希望在升級之前先從系統裡移除那些協力套件。

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

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

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

Because of this you should review if there are any pending actions in the package manager aptitude. If a package is scheduled for removal or update in the package manager, it might negatively impact the upgrade procedure. Note that correcting this is only possible if your sources.list still points to etch and not to stable or lenny; see 節 A.2, “檢查您的來源列表”.

To perform this review, launch aptitude in “visual mode” and press g (“Go”). If it shows any actions, you should review them and either fix them or implement the suggested actions. If no actions are suggested you will be presented with a message saying “No packages are scheduled to be installed, removed, or upgraded”.

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 裡有哪些套件是被保留住的:

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

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

# dpkg --get-selections | grep hold

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

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

# aptitude hold package_name

holdunhold 取代,以消除 “hold” 狀態。

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

4.2.4. proposed-updates

如果您有把 proposed-updates 區段加入了您的 /etc/apt/sources.list 檔中的話,您應當在進行系統升級之前把它從檔案中移除。這是降低潛在的衝突發生前的預防工作。

4.2.5. 非官方的來源及 backports

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

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

4.2.5.1. 使用 backports.org 套件

backports.org 是一個 Debian GNU/Linux 開發者所提供的半官方套件庫,它是重新編譯了 “testing” 套件庫裡的套件,以替穩定釋出版提供了較新版的套件。

The backports.org repository mainly contains packages from “testing”, with reduced version numbers so that the upgrade path from etch backports to lenny still works. However, there are a few backports which are made from unstable: security updates, plus the following exceptions: Firefox, the Linux kernel, OpenOffice.org, and X.Org.

If you do not use one of these exceptions, you can safely upgrade to lenny. If you use one of these exceptions, set the Pin-Priority (see apt_preferences(5)) temporarily to 1001 for all packages from lenny, and you should be able to do a safe dist-upgrade too.

4.3. 手動將套件解除標註

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

# aptitude unmarkauto openoffice.org vim

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

# aptitude unmarkauto $(dpkg-query -W 'linux-image-2.6.*' | cut -f1)
[注]

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

# aptitude search '~i~M'

4.4. APT 來源之準備工作

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

apt will consider all packages that can be found via any “deb” line, and install the package with the highest version number, giving priority to the first line in the file (thus where you have multiple mirror locations, you'd typically first name a local hard disk, then CD-ROMs, and then HTTP/FTP mirrors).

[提示]提示

You might need to add an GPG checking exception for DVDs and CD-ROMs. Add the following line to /etc/apt/apt.conf, if it's not already in /etc/apt/apt.conf.d/00trustcdrom:

APT::Authentication::TrustCDROM "true";

This does not work with DVD/CD-ROM image files, however.

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

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

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

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

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

http://mirrors.kernel.org/debian/dists/lenny/main/binary-amd64/...
http://mirrors.kernel.org/debian/dists/lenny/contrib/binary-amd64/...

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

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

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

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

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

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

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

/var/ftp/debian/dists/lenny/main/binary-amd64/...
/var/ftp/debian/dists/lenny/contrib/binary-amd64/...

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

deb file:/var/ftp/debian lenny 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 來源項目是指向 “lenny” 或是 “stable”,且應該沒有任何來源項目是指向 etch。

[注]

CD-ROM 的來源項目通常會指向 “unstable”,雖然您可能會覺得這有點奇怪,但您應該去加以更動。

4.5.1. 記錄歷程

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

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

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

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

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

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

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

4.5.2. 更新套件的列表

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

# aptitude update

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

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

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

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

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

Running this command at the beginning of the upgrade process may give an error, for the reasons described in the next sections. In that case you will need to wait until you've done the minimal system upgrade as in 節 4.5.6, “系統最低限度升級” and upgraded your kernel before running this command to estimate the disk space.

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

  • 移除那些之前為了用來安裝而下載至 /var/cache/apt/archives 的套件。執行 apt-get cleanaptitude clean 將會清除之前所下載的所有套件檔。

  • Remove forgotten packages. If you have popularity-contest installed, you can use popcon-largest-unused to list the packages you do not use that occupy the most space. You can also use deborphan or debfoster to find obsolete packages (see 節 4.10, “被廢棄的套件” ). Alternatively you can start aptitude in “visual mode” and find obsolete packages under “Obsolete and Locally Created Packages”.

  • Remove packages that take up too much space and are not currently needed (you can always reinstall them after the upgrade). You can list the packages that take up the most disk space with dpigs (available in the debian-goodies package) or with wajig (running wajig size).

    You can list packages that take up most of the disk space with aptitude. Start aptitude into “visual mode”, select ViewsNew Flat Package List (this menu entry is available only after etch version), press l and enter ~i, press S and enter ~installsize, then it will give you nice list to work with. Doing this after upgrading aptitude should give you access to this new feature.

  • Remove translations and localization files from the system if they are not needed. You can install the localepurge package and configure it so that only a few selected locales are kept in the system. This will reduce the disk space consumed at /usr/share/locale.

  • 把存放在 /var/log/ 裡的系統記錄檔暫時移至其它的系統,或是乾脆刪除它們。

  • 使用暫時的 /var/cache/apt/archives:您可以使用位於另一個檔案系統(USB 儲存裝置、暫用的硬碟、正在使用中的檔案系統...)上的暫存快取目錄。

    [注]

    不要使用 NFS 掛載點,因為網路連線可能會在升級的過程中中斷。

    比如說,如果您有個 USB 裝置掛載在 /media/usbkey 上:

    1. 移除之前在安裝時所下載的套件:

      # apt-get clean

    2. /var/cache/apt/archives 目錄複製到 USB 裝置:

      # cp -ax /var/cache/apt/archives /media/usbkey/

    3. 將暫存快取目錄掛載到該目錄上:

      # mount --bind /media/usbkey/archives /var/cache/apt/archives

    4. 在升級完畢後,還原原本的 /var/cache/apt/archives 目錄:

      # umount /media/usbkey/archives

    5. 移除剩下的 /media/usbkey/archives

    您可以在任何已掛載於您的系統的檔案系統上建立暫存快取目錄。

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

4.5.4. 先更新 apt 及/或 aptitude

Several bug reports have shown that the versions of the aptitude and apt packages in etch are often unable to handle the upgrade to lenny. In lenny, apt is better at dealing with complex chains of packages requiring immediate configuration and aptitude is smarter at searching for solutions to satisfy the dependencies. These two features are heavily involved during the dist-upgrade to lenny, so it is necessary to upgrade these two packages before upgrading anything else.

The following command will upgrade both aptitude and apt:

# aptitude install aptitude apt dpkg

This step will also automatically upgrade libc6 and locales. At this point, some running services will be restarted, including xdm, gdm and kdm. As a consequence, local X11 sessions might be disconnected.

[注]Upgrading with apt

Please note that using apt-get is not recommended for the upgrade from etch to lenny. If you do not have aptitude installed you are recommended to install it first.

If you want to perform the upgrade with apt or if the upgrade with aptitude failed and you want to try the upgrade with apt' dependency chain resolution algorithm, you should run:

# apt-get install apt

Note that you will have to adapt other aptitude commands to use apt-get instead.

4.5.5. 讓 apt 使用 aptitude 的自動安裝套件列表

aptitude 管理了一份被自動安裝的套件列表(例如:某個套件的相依套件)。在 lenny 的 apt 現在也有這個功能了。

在第一次執行 lenny 版的 aptitude 時,它會讀入被自己的自動安裝套件列表並將它轉換為可讓 lenny 版的 apt 使用。如果您已經安裝了 aptitude,您至少需要執行一次 aptitude 指令以便進行這個轉換。方法之一就是尋找一個不存在的套件:

# aptitude search "?false"

4.5.6. 系統最低限度升級

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

首先,執行:

# aptitude safe-upgrade

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

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

一些可能會被移除掉的常見套件包括了 base-confighotplugxlibsnetkit-inetdpython2.3xfree86-commonxserver-common。您可以在 節 4.10, “被廢棄的套件” 找到有關 lenny 的廢棄套件的更多詳盡資訊。

4.5.7. 升級系統的其它部份

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

# aptitude dist-upgrade

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

When upgrading from a set of CD-ROMs (or DVDs), you will be asked to insert specific CDs at several points during the upgrade. You might have to insert the same CD multiple times; this is due to inter-related packages that have been spread out over the CDs.

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

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

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

E: Dynamic MMap ran out of room

the default cache space is insufficient. You can solve this by either removing or commenting lines you don't need in /etc/apt/sources.list or increasing the cache size. The cache size can be increased by setting APT::Cache-Limit in /etc/apt/apt.conf. The following command will set it to a value that should be sufficient for the upgrade:

# 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

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

正在解開 <package-foo>(由 <package-foo-file>)...
dpkg: 在處理時出錯 <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 產生程式,這些資訊中有些是和您無關的。

4.6.1. 安裝 Kernel 的虛擬套件

當您由 etch 完整升級至 lenny 後,強烈建議您安裝某個 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

If you are unsure about which package to select, run uname -r and look for a package with a similar name. For example, if you see '2.6.18-6-686', it is recommended that you install linux-image-2.6-686. (Note that the k7 flavor no longer exists; if you are currently using the k7 kernel flavor, you should install the 686 flavor instead.) You may also use apt-cache to see a long description of each package in order to help choose the best one available. For example:

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

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

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

If possible, it is to your advantage to upgrade the kernel package separately from the main dist-upgrade to reduce the chances of a temporarily non-bootable system. Note that this should only be done after the minimal upgrade process described in 節 4.5.6, “系統最低限度升級”.

4.6.2. 重新排序裝置列表

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

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

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

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

Add these module names to /etc/initramfs-tools/modules in the order they should be loaded at boot time. Some module names may have changed between etch and lenny. For example, sym53c8xx_2 has become sym53c8xx.

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

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

4.6.3. 開機時機問題

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

一般而言,無法正常開機的原因多是因為無法掛載 root 檔案系統,然後您會進入一個除錯介面。但若您在稍後再進行檢查時,卻發現所有必要的裝置都已出現於 /dev 內。這種情況會發生在 root 檔案系統是放在 USB 裝置或 RAID 上,尤其又和 LILO 搭配運用時。

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

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

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

4.7.1. 重新執行 lilo

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

# /sbin/lilo

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

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

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

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

4.8. 系統開機時當在 Waiting for root file system

回復已變為 /dev/sda/dev/hda 的步驟

Some users have reported that an upgrade could cause the kernel not to find the system root partition after a system reboot.

此時,系統開機會當掉,並顯示如下資訊:

Waiting for root file system ...

and after a few seconds a bare busybox prompt will appear.

這個問題可能會發生在升級後的 kernel 採用了新的 IDE 裝置命名規則。舊的 IDE 裝置命名規則為 hdahdbhdchdd,而新的裝置則依次對應為 sdasdbsdcsdd。而這個問題的發生是因為在升級過程中並沒有根據新的命名方式而建立新的 /boot/grub/menu.lst,而在開機過程中,Grub 會傳送系統 root 分割區給 kernel,但 kernel 卻找不到這個分割區。

如果您在升級後遇到了這個問題,請參閱 節 4.8.2, “如何在升級後再修復這個問題”。而關於如何在升級之前避開這個問題,請繼續閱讀。

4.8.1. 如何在升級之前避開這個問題

One can avoid this problem entirely by using an identifier for the root filesystem that does not change from one boot to the next. There are two possible methods for doing this - labeling the filesystem, or using the filesystem's universally unique identifier (UUID). These methods are supported in Debian since the 'etch' release.

The two approaches have advantages and disadvantages. The labeling approach is more readable, but there may be problems if another filesystem on your machine has the same label. The UUID approach is uglier, but having two clashing UUIDs is highly unlikely.

在以下的範例中,我們假設 root 檔案系統是位於 /dev/hda6。我們也同時假設了您的系統安裝並使用了 udev,同時使用的是 ext2 或 ext3 檔案系統。

To implement the labeling approach:

  1. 可以利用以下指令來替檔案系統命名(該名稱必須 < 16 個字元):e2label /dev/hda6 rootfilesys

  2. 然後,編輯 /boot/grub/menu.lst 並將以下這一行:

    # kopt=root=/dev/hda6 ro

    修改為

    # kopt=root=LABEL=rootfilesys ro

    [注]

    請不要刪掉最開頭的 #。它是必要的。

  3. 執行 update-grub 指令,讓它更新 menu.lst 裡的 kernel 設定。

  4. 修改 /etc/fstab,修改用來掛載 / 分割區的那一行,例如:

    /dev/hda6     /     ext3 defaults,errors=remount-ro 0 1

    修改為

    LABEL=rootfilesys     /     ext3  defaults,errors=remount-ro 0 1

    在此主要是修改第一個欄位,您不需要修改該行中的其它欄位。

To implement the UUID approach:

  1. Find out the universally unique identifier of your filesystem by issuing: ls -l /dev/disk/by-uuid | grep hda6. You can also use vol_id --uuid /dev/hda6 (in etch) or blkid /dev/hda6 (if already upgraded to lenny).

    您應該會得到類似的結果如下:

    lrwxrwxrwx 1 root root 24 2008-09-25 08:16 d0dfcc8a-417a-41e3-ad2e-9736317f2d8a -> ../../hda6

    UUID 就是那個指向 /dev/hda6 的符號連結。亦即:d0dfcc8a-417a-41e3-ad2e-9736317f2d8a

    [注]

    您的檔案系統的 UUID 應該會是一個完全不同的字串。

  2. 然後,編輯 /boot/grub/menu.lst 並將以下這一行:

    # kopt=root=/dev/hda6 ro

    修改為

    # kopt=root=UUID=d0dfcc8a-417a-41e3-ad2e-9736317f2d8 ro

    [注]

    請不要刪掉最開頭的 #。它是必要的。

  3. 執行 update-grub 指令,讓它更新 menu.lst 裡的 kernel 設定。

  4. 修改 /etc/fstab,修改用來掛載 / 分割區的那一行,例如:

    /dev/hda6     /     ext3 defaults,errors=remount-ro 0 1

    修改為

    UUID=d0dfcc8a-417a-41e3-ad2e-9736317f2d8  /  ext3 defaults,errors=remount-ro 0 1

    在此主要是修改第一個欄位,您不需要修改該行中的其它欄位。

4.8.2. 如何在升級後再修復這個問題

4.8.2.1. 方案 1

讓 Grub 顯示開機選單,讓您能夠選擇您要從哪個項目開機是個很合乎情理的作法。但若這個選單沒有出現,請在 kernel 開機之前按下 Esc 鍵即可讓這個選單出現。如果還是沒辨法弄出這個選單的話,請試試 節 4.8.2.2, “方案 2”節 4.8.2.3, “方案 3”

  1. 在 Grub 選單上,選擇您想要開機的項目,然後按下 e 鍵來修改這個項目的相關選項。您會看到類似的文字如下:

    root (hd0,0)
    kernel /vmlinuz-2.6.26-1-686 root=/dev/hda6 ro
    initrd /initrd.img-2.6.26-1-686

  2. 選擇該項目

    kernel /vmlinuz-2.6.26-1-686 root=/dev/hda6 ro

    按下 e 鍵並將 hdX 取代為 sdX(其中的 X 為字母 abcd,依您的系統而定)。在這個例子中,這個項目就變成了:

    kernel /vmlinuz-2.6.26-1-686 root=/dev/sda6 ro

    然後按下 Enter 來儲存這些修改。如果有其它的項目中也有 show hdX,請也同時修改。不要將這些項目修改成類似 root (hd0,0)。在全數修改完成後,按下 b 鍵,然後您的系統應該就能正常開機了。

  3. 等到您的系統開完機,您必須手動修復這個問題。請參閱 節 4.8.1, “如何在升級之前避開這個問題” 並從 2 個解決方案之中選擇其中 1 個進行。

4.8.2.2. 方案 2

Boot from Debian GNU/Linux installation media (CD/DVD) and when prompted, pick rescue to launch rescue mode. Select your language, location, and keyboard mapping; then let it configure the network (no matter whether it succeeds or not). After a while, you should be asked to select the partition you want to use as root file system. The proposed choices will look something like:

/dev/ide/host0/bus0/target0/lun0/part1
/dev/ide/host0/bus0/target0/lun0/part2
/dev/ide/host0/bus0/target0/lun0/part5
/dev/ide/host0/bus0/target0/lun0/part6

如果您知道哪個分割區是您的 root 檔案系統,請逕行選擇。否則,請直接嘗試第一個。如果程式回覆說這並不是一個 root 檔案系統,再試下一個,依此類推。這樣依次嘗試並不會對您的分割區造成什麼影響,但如果您的磁碟上只安裝了一個作業系統的話,您可以輕易得找到正確的 root 檔案系統分割區。但如果您在您的磁碟上安裝了好幾個作業系統,那麼您最好能清楚得知道哪個才是正確的分割區。

一旦您選擇了某個分割區,會出現一系列的選項供您使用。請選擇在選定的分割區上執行一個 Shell 的那個選項。如果程式回應說無法進行,請再試另一個分割區。

Now you should have shell access as user root on your root file system mounted on /target. You need access to the contents of the /boot, /sbin and /usr directories on your hard disk, which should now be available under /target/boot, /target/sbin and /target/usr. If these directories need to be mounted from other partitions, do so (see /etc/fstab if you have no idea of which partition to mount).

請參閱 節 4.8.1, “如何在升級之前避開這個問題” 並採取 2 種解決方案之一來手動修正這些問題。然後按下 exit 來離開這個救援 shell,然後選擇 reboot 來將系統重新開機(別忘了要取出開機媒體)。

4.8.2.3. 方案 3

  1. 從您想用的 LiveCD 發行版,像是 Debian Live、Knoppix、Ubuntu Live 來進行開機。

  2. 將您的 /boot 分割區給掛載起來。如果您不清楚是哪一個,請利用 dmesg 命令的輸出文字來找出您的磁碟是 hdahdbhdchdd 或是 sdasdbsdcsdd。等到您知道是哪個磁碟後,比如說是 sdb,執行以下命令來檢視該碟碟的磁碟分割表,並找到正確的分割區:fdisk -l /dev/sdb

  3. 在此假設您已將正確的分割區掛載在 /mnt 下,且這個分割區也包含了 /boot 目錄及裡面的所有東西,然後修改 /mnt/boot/grub/menu.lst 檔案,

    找到類似的段落如下:

    ## ## End Default Options ##
    
    title           Debian GNU/Linux, kernel 2.6.26-1-686
    root            (hd0,0)
    kernel          /vmlinuz-2.6.26-1-686 root=/dev/hda6 ro
    initrd          /initrd.img-2.6.26-1-686
    
    title           Debian GNU/Linux, kernel 2.6.26-1-686 (single-user mode)
    root            (hd0,0)
    kernel          /vmlinuz-2.6.26-1-686 root=/dev/hda6 ro single
    initrd          /initrd.img-2.6.26-1-686
    
    ### END DEBIAN AUTOMAGIC KERNELS LIST

    and replace every hda, hdb, hdc, hdd with sda, sdb, sdc, sdd, as appropriate. Don't modify the line similar to:

    root            (hd0,0)

  4. 將系統重新開機,移除 LiveCD 然後您的系統應該能正常開機了。

  5. 在關機後,請採取在 節 4.8.1, “如何在升級之前避開這個問題” 中那 2 種解決方案之一來手動修正這些問題。

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

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

  • 如果是因為舊的 kernel image 虛擬套件之相依性關係才將新的安裝進來的話,它會被標示為被自動安裝進來的,而這必須加以修正:

    # aptitude unmarkauto $(dpkg-query -W 'linux-image-2.6-*' | cut -f1)
    
  • 將在 節 4.10, “被廢棄的套件” 裡所說明的已廢棄及已不再使用的套件移除掉。您應該重新檢視它們使用了哪些設定檔並考慮完全將套件清除 (purge) 掉以移去它們的設定檔。

4.10. 被廢棄的套件

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

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

Detecting which packages in an updated system are “obsolete” is easy since the package management front-ends will mark them as such. If you are using aptitude, you will see a listing of these packages in the “Obsolete and Locally Created Packages” entry. dselect provides a similar section but the listing it presents might differ.

Also, if you have used aptitude to manually install packages in etch it will have kept track of those packages you manually installed and will be able to mark as obsolete those packages pulled in by dependencies alone which are no longer needed if a package has been removed. Also, aptitude, unlike deborphan will not mark as obsolete packages that you manually installed, as opposed to those that were automatically installed through dependencies.

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

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

The list of obsolete packages includes:

  • apache (1.x), successor is apache2

  • bind (8), successor is bind9

  • php4, successor is php5

  • postgresql-7.4, successor is postgresql-8.1

  • exim (3), successor is exim4

4.10.1. 替代 (Dummy) 套件

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

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



[2] 可以在開機參數上加上 panic=0 參數來關閉這個功能。

[3] 因為 Debian 的套件管理程式不允許某一個套件移除或取代了屬於另一個套件的檔案,除非那一個套件本來就是用來取代這個套件的。

[4] 這些規則是由 /etc/udev/rules.d/75-persistent-net-generator.rules 這個 Script 所自動產生的,它會替網路介面建立固定的名稱。刪除該符號連結就可以關閉在 udev 裡那些網路卡的固定名稱。

[5] 有關 lilo 的開機錯誤訊息之更詳盡資訊請參考 The Linux 開機磁碟指南

[6] 或是直到在這段期間內有新的發行版推出為止。基本上,我們只會同時維護兩個 stable 的發行版。