移植指南
此頁探討如何將舊本的 CentOS 移植至新版本,又或者將其它基於同一套上游代源套件的企業級 Linux 移植至 CentOS。
不小心地執行本文章所描述的行動,甚至完全遵照去做,都可能會損壞現有的檔案系統及操作系統。如果你看重你的數據,請先在一台測試的機器上進行實驗,然後在建立了最新及測試好的備份後才繼續。除非你已清楚指令的作用,否則切勿盲目地剪貼指令,尤其是作為 root 時。有一位用戶匯報,以 upgradeany 把 CentOS-5 升級至 CentOS-6 後得出一個無法運作的系統。 |
- 關乎移植的一般考慮:
重新安裝一般來說遠勝於升級。
- 在對你所緊張的系統進行任何重大改動前,請確保你有良好的(可啟動或可恢復的)備份。
- 往往在一套獨立的分割區,或更理想地在獨立的磁碟,擁有一個可啟動的 Linux 系統會有很大幫助。它可以作為後備或救援系統,以及在線的備份。磁碟空間比起系統管理員的時間來得便宜。
相比之下,移植那些基於同一套上游代源套件的系統理論上應該較為簡單。其中一個例子是 zh-tw/FAQ/CentOS3 裡的第五題:「我如何將一個系統由 WBEL-3(White Box Enterprise Linux)轉移至 CentOS 3?」。
- 你可能只想更新檔案系統裡藏有操作系統的部份,而保留用戶的目錄,例如 /home。如果你真的保留用戶的舊有主目錄,請預期 GNOME/KDE 的功能表及某些桌面項目會有問題。較優勝的做法是建立新的戶口,然後在移植完成後於將舊的目錄掛載在檔案系統上,藉以參考、複製、或連結用戶的物料。
- 如果你最終仍決定進行升級……
- 請將任何你在乎的東西備份。
請緊記 —— 重新安裝一般來說遠勝於升級。
- 在升級前盡可能作出清理,將那些你不需要、或知道將要被取替的 RPM 移除。
用 anaconda 進行升級。採用 yum 或利用其它套件管理員進行的即場升級或許可行,但多數會問題重重 —— 尤其是針對 glibc 及 內核/模塊。
由緊接的版本升級往往比橫跨數個版本的升級有較大的成數。舉個例子:如果你正運行(現已停止支援的)CentOS 4 而且想升級至 CentOS 6,請先升級至兩者之間的 CentOS 5。
由其它系統(WhiteBox、RHEL、Scientific Linux、TaoLinux、……)升級或許是可行的,但將會須要更多善後功夫作出清理。請考慮移植至對應的 CentOS 版本後才進行升級。
升級完成後,請使用 rpm -qa --last —— 最好是輸出至一個檔案或 less —— 來尋找那些未被更新的套件。剩餘的套件會在輸出的尾部,而且日期會早於升級的日期。
- 移除沒有用的剩餘套件。
- 如果你發現某些剩餘套件的版本比現存的 CentOS 套件更新或等同,請用 "rpm -Uvh --oldpackage foo-1.2-3.i386.rpm ……"()以較舊或相同版本的 CentOS 套件取代這些剩餘套件。
為必需/被遺留下來的套件找尋/建立相應的 CentOS x(x=2、3、4、5、6)版本。ATrpms、RPMforge(Dag/Dries)、及 EPEL(Fedora Extras for EL)軟件庫都備有針對各個 CentOS 版本的 ELx 套件。KaranbirSingh 為 CentOS 重建 Fedora Extras 及另外一些套件。那些不存在的元件往往可以由 Fedora 計劃(前身為 Fedora Core 或 Fedora Extras)的 src.rpm 套件重建出來,你甚至可以碰碰運氣,直接使用 Fedora 計劃的元件(不建議這樣做)。最好的起始點是採用對應各個 EL 發行版的 Fedora/RH 版本內的套件。就 CentOS 5 而言,那是 FC6 測試版本;就 CentOS 6 而言,那是 Fedora 12。
- 假如舊的套件沒有版本可以支援最新的操作系統,請考慮透過虛擬化讓較舊的操作系統在最新發行內運行,藉此支援舊的套件。可行的選擇包括 Vmware 及 Xen。
運用/混合第三方軟件庫時請特別小心。yum 的 protectbase 或 priorities 插件是你的好幫手。雖然它們可以同時被應用,但 priorities 插件提供更多功能,所以如果 priorities 插件已被正確設定,protectbase 是不須要的。見 zh-tw/PackageManagement/Yum/ProtectBase 及 zh-tw/PackageManagement/Yum/Priorities。
- 祝你好運。享受!
- 假若進行升級,請考慮先將系統「複製」,然後將複製品升級。
- 以 root 的身份建立所需的新分割區 —— root、boot、home、swap —— 假設它們是 /dev/hde1、2、3、4 ……
- 建立檔案系統
# mke2fs -j -L /clone_boot /dev/hdb1 # mke2fs -j -L /clone /dev/hde2 # mkswap -L SWAP-hde3 /dev/hde3 # mke2fs -j -L /clone_home /dev/hde5 # mke2fs -j -L /clone_data /dev/hde6
- 為複製品建立掛載點,舉例說 /clone
# mkdir /clone
- 把將要成為新的主目錄的分割區掛載在 /clone 上,然後建立其它掛載點,及掛載所有新分割區
# mount /dev/hde2 /clone # mkdir /clone/boot /clone/home /clone/data # mount /dev/hde1 /clone/boot # mount /dev/hde5 /clone/home # mount /dev/hde6 /clone/data
- 進行複製
# tar clf - /boot | tar xf - -C /clone # tar clf - /home | tar xf - -C /clone # tar clf - / | tar xf - -C /clone
- 編輯 /dev/fstab 及 /boot/grub/grub.conf,在當中加入複製分割區的記錄及開機設定。
- 編輯 /clone/dev/fstab 及 /clone/boot/grub/grub.conf,在當中加入原有分割區的記錄及開機設定。
- 測試這兩個系統能否正常啟動。
- 在複製的系統進行升級,並將 grub 寫到開機分割區而不是 MBR。
- 開啟原有的操作系統並將 grub 的開機設定指向新的操作系統 —— 先前的複製品。
- 啟動新的操作系統。你亦可選擇預設使用新操作系統的 grub(最好是在測試之後)
# grub-install /dev/hda (or /dev/sda)
任何一位管理員可在 /boot/grub/grub/conf 內為其它操作系統加入設定,包括:原有的操作系統、微軟 Windows、Ubuntu、FreeBSD 等……
1. 把現有的系統由 RHEL5 移植至 CentOS5
「你需要做的就只是安裝 centos-release,移除 redhat-release 套件,然後利用 yum 更新系統,這樣便會帶進所有被 CentOS 修改過的套件(因為它們將會有較高的 E-V-R)。」—— 根據 KaranbirSingh 在 centos 郵件列表上所說
- 你亦可能會想從 yum 移除 rhnplugin 插件(不一定要做,但它報告有錯誤)
又或者 —— 按照 Craig White 於 2007 年 10 月 29 日在 centos 郵件列表的方法(已針對 5.4 作出更新)…… {{{# cp /etc/redhat-release /etc/redhat-release-saved
# rpm -e --nodeps redhat-release-notes redhat-release yum-rhn-plugin redhat-logos # rpm -ivh \ http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-5-8.el5.centos.i386.rpm \ http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-notes-5.8-0.i386.rpm \ http://mirror.centos.org/centos/5/os/i386/CentOS/redhat-logos-4.9.99-11.el5.centos.noarch.rpm # yum update }}}
有時透過 URL 安裝 rpm 或許會出現問題。在這些情況下,請使用 wget 或 lftpget 來建立本地的複製檔,然後以 "rpm -ivh ..." 進行安裝。
註:利用 mirror.centos.org 這台主機只可以取得每個套件的最新版本。舊版本的套件都被移至 vault.centos.org,因此上述的例子應該採用下列指令:
# cp /etc/redhat-release /etc/redhat-release-saved # rpm -e --nodeps redhat-release-notes redhat-release yum-rhn-plugin redhat-logos # rpm -ivh \ http://vault.centos.org/5.0/os/i386/CentOS/centos-release-5-0.0.el5.centos.2.i386.rpm \ http://vault.centos.org/5.0/os/i386/CentOS/centos-release-notes-5.0.0-2.i386.rpm
2. 把現有的系統由 RHEL6 或 SL6 移植至 CentOS 6
要從 RHEL6 移植至 CentOS 6,請為你的架構取得下列套件的最新版本並將它們放置在一個臨時的目錄內。除了如以下所示範,透過 wget 取得套件之餘,你也可掛載 CentOS-6 的安裝媒體並從它安裝套件。如果是 CentOS 6.2 x86_64
mkdir TMP yum remove rhnlib abrt-plugin-bugzilla redhat-release-notes* rpm -e --nodeps redhat-release redhat-indexhtml cd TMP wget http://mirror.centos.org/centos/6/os/x86_64/Packages/centos-release-6-2.el6.centos.7.x86_64.rpm wget http://mirror.centos.org/centos/6/os/x86_64/Packages/centos-indexhtml-6-1.el6.centos.noarch.rpm wget http://mirror.centos.org/centos/6/os/x86_64/Packages/yum-3.2.29-22.el6.centos.noarch.rpm wget http://mirror.centos.org/centos/6/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.30-10.el6.noarch.rpm rpm -Uvh *.rpm cd .. rm -rf TMP yum clean all yum upgrade
如果是 CentOS 6.2 i386,只有 wget 的行不相同:
wget http://mirror.centos.org/centos/6/os/i386/Packages/centos-release-6-2.el6.centos.7.i686.rpm wget http://mirror.centos.org/centos/6/os/i386/Packages/centos-indexhtml-6-1.el6.centos.noarch.rpm wget http://mirror.centos.org/centos/6/os/i386/Packages/yum-3.2.29-22.el6.centos.noarch.rpm wget http://mirror.centos.org/centos/6/os/i386/Packages/yum-plugin-fastestmirror-1.1.30-10.el6.noarch.rpm
要從 Scientific Linux 6 移植過來,唯一的改動就是 rpm -e 那一行變為
rpm -e --nodeps sl-release sl-indexhtml
針對 SL 的額外改動 —— 以下步驟會找出某些 SL 專用的套件:
rpm -qa | grep ^sl- rpm -qa | grep SL_
你可以這樣移除它們(舉個例):
rpm -e --nodeps sl-bookmarks sl-release-notes yum-conf-sl6x SL_desktop_tweaks
你也許會想下載及加入一些與外觀有關的項目,或從 CentOS DVD 載入它們:
rpm -Uvh redhat-bookmarks-6-1.el6.centos.noarch.rpm redhat-logos-60.0.14-10.el6.centos.noarch.rpm \ redhat-menus-14.0.0-3.el6.noarch.rpm redhat-rpm-config-9.0.3-34.el6.noarch.rpm
完成以上步驟及更新後,你也許會想看看你還有哪些 SL 套件:
rpm -qa --qf "%{VENDOR} \n" | sort | uniq
這樣會顯示已安裝套件的所有發行者標記。然後
rpm -qa --qf "%{NAME} %{VENDOR} \n" | grep "Scientific Linux" | cut -d ' ' -f 1 | sort
會顯示餘下的 SL 套件。這樣做並非必然,但你可如此「淨化」系統
yum reinstall $(rpm -qa --qf "%{NAME} %{VENDOR} \n" | grep "Scientific Linux" | cut -d ' ' -f 1 | sort)
你也許會發現某些套件沒有 CentOS 的代用品,因為 SL 供應一些不包含在 CentOS 內的套件。請重覆以上的套件查詢並檢查還餘下甚麼。
移植其它相關發行版本的程序應該亦類同。
- 另外請參閱
Translation of revision 27