升級你的 Linux 發行版本 mini-HOWTO Greg Louis, glouis@dynamicro.on.ca v1.11, 6 June 1996 _________________________________________________________________ 從一個 Linux 發行版本升級到另一個的提示和技巧. _________________________________________________________________ 1. 重要!!! 宣告及版權 2. 自1.1版之後的改變 3. 介紹 * 3.1 如何清除你的Linux 舊版本升級至新版本! * 3.2 為什麼有人要這麼做? * 3.3 你需要``毀掉並重新安裝嗎?'' * 3.4 須要花多久時間? 4. 記下你所做的每件事。 5. 對現存的資料作完全的備份。 6. 備份/etc 與其子目錄至一張或多張磁片。 7. 對你想保留的檔案作分開備份。 8. 為新安裝準備root 和 boot 磁片。 9. 格式化磁片以做為存放暫時的kernel跟final build。 10. 禁止簽入並備份/root及/home以下的檔案。 11. 用新的boot和root磁片開機。 12. 用fdisk刪除linux分割區並重建它們。 13. 執行新的linux安裝 14. 從硬碟開機新的系統,編輯/etc/fstab 15. 將設定資料恢復至/etc及其下之子目錄。 16. 設定和重建核心。 17. 回復早先所做的備份。 18. 安全回顧。 19. 將簽入致能 20. 抱歉,還是要再提醒一次: 21. 感謝 _________________________________________________________________ 1. 重要!!! 宣告及版權 嘗試使用本文件當作導引就對儲存在你電腦上的程式及資料有潛在的危險。 你必 需親自冒這個風險。本文件描述的過程對作者來說可行;並不保証它也同樣對你 有用或你照本文件做不會對你電腦資料及/或程式產生嚴重破壞。你要自行決定是 否使用這裡所提供的資訊,作者並不保證這樣做所遭遇的傷害和不方便。 本文件 版權 1996, Dynamicro Consulting Limited, 以GNU公共版權發行(授權許可), 基本上意指你可以任意拷貝並修改,而你也不能阻止別人這麼做。 建議及問題都 可以直接給與作者,非常歡迎,特別是可以用作未來更新版本使用,特別歡迎有 關成功的升級雜複的系統之詳細說明。 2. 自1.1版之後的改變 * 增加了本歷史段落 * 增加了 Zolt嫕 Hidv嶲i關於mtime和ctime的建議 感謝, Zolt嫕! * 增加了感謝段落 3. 介紹 3.1 如何清除你的Linux 舊版本升級至新版本! 本文件的目的是提供你清除並重新安裝 Linux系統所須的技巧。無論如何這不是 一個簡單的手冊;但希望它能提供你所想的指示,還有做事的順序。它對我是一 項幫助,如果在我第一次升級時有人寫像這樣的文件的話;所以我希望它對你有 幫助,如果你須要重建一台 Linux 機器的話 然而,不要拿它當準則:你們的經驗值大部分都不一樣。即使本文件所提及的目 錄名稱跟你所用的不一樣;例如,有些人用的是/usr/home而不是/home;有些人 叫它/u,還有一些人()甚至直接將他們的使用者目錄放在/usr下面! 我不能確定 你所使用的系統,所以我以我所使用的名稱為準。 你也要注意到我用的是Slackware安裝套件,我假設你有足夠的RAM跟硬碟空間來 安裝linux核心原始碼和建立你自己的核心。如果你的系統不同,可以不必完全聽 從我的建議(我的建議不完全適用);但我仍希望你能在重建計畫中找到大致對你 有幫助的遵循的方向。 3.2 為什麼有人要這麼做? 好問題! 如果可以避免,盡量不要做!(這是本導引中最重要的建議!!!)但是有些 時候你不得不做。 例如,我曾經在一顆4Gb的硬碟安裝Slackware 2.0,發現它不知道硬碟可以超 過2Gb,它搞糊塗了。所以我必須升級至當時最新的Slackware 2.3。那次升級真 是一個很累的經驗, 這是我寫這份文件的原因之一。我幾乎犯過所有可能的錯誤 ,幸運的是我有另一個會動的Linux機器使我免於災難。 另一個例子是,我發現不能建立一個可運行的a.out核心於1.3系列版本,使用一 個外接的Slackware 2.3安裝(另一台機器,不是我之前糟踏的那一台)。我冒險嘗 試,買了Slackware 3.0的CDROM並把它轉成ELF格式。這次重安裝的過程比較順利 了,有一部份要感謝前一次痛苦的經驗,它提供了我現在跟你講的大部分靈感來 源。 3.3 你需要``毀掉並重新安裝嗎?'' 說也奇怪,這樣反而比較安全. 如果你在現存的系統上安裝,可能同時存在新和 舊的二進位檔,有可能你將有新舊混雜的二進位檔,新的和舊的設定檔,當你管 理的時候可能會一團亂。將系統清乾淨,然後只放你知道並且需要的檔案,激烈 但有效的得到一個乾淨的系統的方法。(當然我們討論的是安裝一整個新的linux 發行版本,而不是只升級一兩個套件! 避免完全重新安裝的最好方法就是,精確 地,保持每個位元 -- 尤其是gcc和它的函式庫還有binutils 都是最新的。如果 你現在使用的東西已經相當新了,可以維持這樣需要的時候再包含進來,如果需 要隨時編譯新的程式碼,就不需要大規模的升級了。) 如Patrick Volkerding指 出的 (他也建議升級的清除乾淨程序),在一個執行a.out的系統上安裝ELF是一個 引發災難的好方法;如果你知道的夠多,你就不必讀這份導引了! 即使沒有這麼複雜,你最好還是重頭開始建立系統。 3.4 須要花多久時間? 當然,取決於你的系統有多複雜。但是我想成功的升級約花十小時於備份 (其他 的呢? -- 別問了! :),六小時重建系統直到可以登錄,還有約半天時間回復比較 不重要的東西。 隨時間過去,我陸續發現許多我不需要的東西。-- 我逐一的修 正他們 -- 主要的, 對於相當複雜的重建工作,二十個小時應該足夠。如果你用 硬碟重安裝的話也許更少,如果用磁片的話可能更久(我用CDROM)。如果你用的是 較快的pentium機器,花的時間也許更少,若是三八六的話,也許更多。你知道的 。 介紹了這麼多。一但你決定做了,這就是有關如何進行了。無論如何要毅然決然 並充滿衝勁地去做,並且: 4. 記下你所做的每件事。 在你準備及實現任何改變的過程所做的記錄都是非常有用的。特別重要的是在你 毀掉現存系統之前所做的備份清單。 5. 對現存的資料作完全的備份。 通常,備份最好寫在循序存取設備,這樣你就不用為了恢復重要的幾個檔案(幾個 重要的檔案)作完全的備份;會存在太多你不想要的檔案。最好對你知道將來要完 全回復的東西做各個部分單獨的備份。接下來我會列出一堆例子。 為什麼你需要 從完全的備份開始? 有兩個基本的理由: 一、 萬一你在安裝新的系統過程中發 生災難性的失敗,你可以以較少的痛苦回到起點。 二、 不管你在安裝新系統前 作了多少準備,都有很大的機會忽略一兩個重要的檔案。在這些情況下,從完全 備份集中回復一兩個檔案比沒有備份的不方便好。 為了節省時間及空間,如果你有你舊版的linux發行套件,你也會想要備份那 些mtime和ctime比原來安裝更新的檔案。 6. 備份/etc 與其子目錄至一張或多張磁片。 另一個極端是:你不用恢復這些檔案(大部分,無論如何);你要和安裝過程中產生 的新檔案比較。為什麼? 因為新系統可能有舊系統沒有的資料,或是用新的方式 表示舊資料。規約上的改變,增加新的工具,或在現存的工具上實作新的特點都 可能表示/etc下的設定檔及起始檔有所改變,你可能必需編輯你的舊資料至這些 檔案以保留新的格式並利用這些改進。 7. 對你想保留的檔案作分開備份。 這是變化最多的部分,我所能做的就是描述我在我系統上所做的,希望能作為大 略的指導。基本上,你要檢視包含任何下列檔案的目錄 * 非標準linux安裝檔案或 * 比你將要新安裝的linux還新的檔案 並分開那些你將要繼續保留的檔案。 (另一個可能的策略是備份比上次linux安裝具有更新的mtime及ctime的檔案, 如 上所述,然後從那邊開始回復。如果你這樣作的話,必需考慮新的linux安裝可能 會有比你所保留的還新的檔案。) 在我的情況,最後我對下列每一項都做了一個.tgz的檔案在備份媒體上 * /usr/lib/rn * /usr/lib/smail * /usr/lib/trn (/usr/lib的其他部分須要重新安裝) * /usr/local/src * /usr/local/bin * /usr/local/lib * /usr/local/lpfont * /usr/local/man * /usr/local/sbin * /usr/local/thot (還有一些/usr/local下的檔案是我不須要的) * /usr/openwin * /usr/src/lilo-17 (因為我的新Slackware還是用16的版本) * /usr/src/linux-1.2.13 (因為我要作一些個人化) * /usr/X11R6/lib/X11/app-defaults * /usr/X11R6/lib/X11/initrc (其他Xfree86的部分要重新安裝) * /var/named * /var/openwin * /var/texfonts 我的機器相當的簡單,因為沒有spool 檔案需要擔心。我並沒有在這上面跑news spool,而且只有兩個使用者,很容易在關機前讀完所有的信。否則/var/spool目 錄必需在最後一刻備份。(當然,還有(新聞函式庫)和網站目錄!) 8. 為新安裝準備root 和 boot 磁片。 有關如何做的詳細資料可以在新發行版本的安裝介紹中找到。 9. 格式化磁片以做為存放暫時的kernel跟final build。 你需要兩片磁片,各使用一片。 以上做完後,就要進入關鍵時刻了,接下來的步驟會使你的系統失去生產力。 10. 禁止簽入並備份/root及/home以下的檔案。 這是在舊系統上所要做的最後一件事,以便保留大多數現有的使用者及root的資 料。 11. 用新的boot和root磁片開機。 12. 用fdisk刪除linux分割區並重建它們。 安裝手冊將會解釋如何作,這將毀掉舊系統。從現在起你要完全依賴早先所作的 備份的品質了。你已經被告知了! 13. 執行新的linux安裝 已經有許多很好的文件說明如何做了,所以我就不再詳細解釋了。我們新系統自 硬碟開機說起。 接下來,確定你有做可開機的磁片,因為linux核心在安裝過程將會被取代,而隨 時意外都可能發生。確定你有安裝發展套件及核心原始碼。 14. 從硬碟開機新的系統,編輯/etc/fstab 增加你的swap分割區。然後下swapon -a這個指令。 我不知道為什麼,但 是Slackware安裝不會讓你這麼做,如果你的swap分割區已經存在。然後,當你開 機後rc.S手稿會試著打開swap,它無法找到fstab檔案中的分割區也無法致 能swapping。 這個步驟可以修正它。 15. 將設定資料恢復至/etc及其下之子目錄。 如上所述,你不能只是拷貝所有舊檔案到/etc 下之後,就期望能正常運作。有些 檔案你可以這樣作;例如/etc/XF86Config (只要你還是用相同版本的Xfree86 -- 還有相同的顯示硬體 -- 在你新linux安裝裡和舊的linux安裝一樣)。 然而, 最重要的,在你做任何拷貝之前還是使用diff去比較新舊檔案。特別要注 意/etc/rc.d下的檔案有無重大的改變。可能需要手動編輯舊的設定檔,而非拷貝 舊的rc手稿檔備份。所有都作完後,重新開機。 16. 設定和重建核心。 即使你不一定絕對要編一個支援你硬體的核心,仍然值得作一個不含你機器沒有 的不必要的雜亂的驅動程式的核心。詳細的資料,參考Kernel HOWTO。首先將重 建的核心放在磁片上;如果開機順利,再將它放在硬碟上,如果你用lilo的話, 重新跑一次lilo,然後重開機。 17. 回復早先所做的備份。 有些二進位檔可能必需從原始碼目錄安裝;例如,我必需對lilo這麼做,因為我 的版本比Slackware安裝中的還新而且保留/sbin下的檔案並不麻煩。你要檢查回 復的程式並且確定設定檔,程式庫等等都存在且正確。某些情況下,你可能需要 照特定順序恢復東西;你應該在備份過程就作筆記,不是嗎? ;-) 18. 安全回顧。 檢查檔案及目錄權限以確定存取權限不致太嚴格或太寬鬆。我發現Slackwarep傾 向於比我喜歡的還開放的環境,所以我將如/bin及其他類似的目錄下的二進位檔 權限從755改為711,甚至把像.../sbin一類的目錄下的改為700。 如果你在繼續 一個檔案伺服器,還是需要特別留心;但是,如果你正在執行檔案伺服器,你可 能已經想到了:) 19. 將簽入致能 你的機器已經啟動並且運行了,接下來的一段時間,還有一些細節要整理;但還 有很多事情要作。享受它吧! 20. 抱歉,還是要再提醒一次: 使用本資料,你得自負風險! (見本文一開始不承諾那一段。) 21. 感謝 感謝to Zolt嫕 Hidv嶲i對此mini-HOWTO內容的貢獻。