移植指南
此页探讨如何将旧本的 CentOS 移植至新版本,又或者将其它基于同一套上游代源组件的企业级 Linux 移植至 CentOS。
不小心地执行本文章所描述的行动,甚至完全遵照去做,都可能会损坏现有的文件系统及操作系统。如果你看重你的数据,请先在一台测试的机器上进行实验,然后在创建了最新及测试好的备份后才继续。除非你已清楚指令的作用,否则切勿盲目地剪贴指令,尤其是作为 root 时。有一位用户汇报,以 upgradeany 把 CentOS-5 升级至 CentOS-6 后得出一个不能运作的系统。 |
- 关乎移植的一般考虑:
重新安装一般来说远胜於升级。
- 在对你所紧张的系统进行任何重大改动前,请确保你有良好的(可引导或可恢复的)备份。
- 往往在一套独立的分区,或更理想地在独立的磁盘,拥有一个可引导的 Linux 系统会有很大帮助。它可以作为后备或救援系统,以及在线的备份。磁盘空间比起系统管理员的时间来得便宜。
相比之下,移植那些基於同一套上游代源组件的系统理论上应该较为简单。其中一个例子是 zh/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/PackageManagement/Yum/ProtectBase 及 zh/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.8 作出更新)…… {{{# 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