跳至内容

Rocky 支持的版本升级

如何复制任何 Rocky 机器。

简介

自 Rocky Linux 项目第一天起,就有人问:如何从 CentOS 7 升级到 Rocky 8,或从 Rocky 8 升级到 Rocky 9? 答案始终是相同的:该项目不支持原地从一个主版本升级到另一个主版本。您需要重新安装才能迁移到下一个主版本。 明确地说,这正确的答案。本文档允许用户通过正确的 Rocky 支持的全新安装过程从一个主版本迁移到下一个主版本。您可以使用此方法重新构建相同的 Rocky Linux 版本。例如,将 9.5 安装到一个全新的 9.5 版本,包含所有软件包。

注意事项

即使有了这个过程,从一个较旧版本的操作系统 (OS) 到同一个或不同操作系统的较新版本时,也可能发生许多事情。程序会过时,被维护者替换为完全不同的软件包名称,或者名称在一个操作系统到另一个操作系统之间不匹配。另外,请了解您机器的软件仓库,并验证它们在新操作系统上仍然可用。如果从非常旧的版本迁移到非常新的版本,请确保您的 CPU 和其他机器要求与新版本匹配。由于这些原因以及许多其他原因,您必须保持谨慎,并在执行此过程时注意任何错误或问题。在此,作者使用了 Rocky Linux 8 作为旧版本,Rocky Linux 9 作为新的主版本。所有示例的公式都使用了这两个版本。您可以随时自行承担风险继续操作。

步骤摘要

  1. 从旧安装中获取用户列表 (userid.txt)。
  2. 从旧安装中获取仓库列表 (repolist.txt)。
  3. 从旧安装中获取软件包列表 (installed.txt)。
  4. 将旧安装中的所有数据、配置、实用程序和脚本备份到非易失性位置,以及创建的 .txt 文件。
  5. 验证您将要安装的硬件是否支持您正在安装的操作系统(CPU、内存、磁盘空间等)。
  6. 在硬件上全新安装您使用的操作系统。
  7. 运行 dnf upgrade 以获取自 ISO 文件创建以来可能已更新的任何软件包。
  8. 通过检查 userid.txt 文件来创建所需的任何用户。
  9. 安装 repolist.txt 文件中未包含的非 Rocky 相关仓库。(请参阅 EPEL 和 Code Ready Builder (CRB) 仓库的说明。)
  10. 使用 installed.txt 文件的过程来安装软件包。

详细步骤

相同版本升级

如前所述,此过程同样适用于复制机器安装,使用相同的操作系统版本,例如从 8.10 到 8.10 或从 9.5 到 9.5。区别在于,在安装 installed.txt 文件中的软件包时,您应该不需要 --skip-broken。如果在安装版本时遇到软件包错误,您可能缺少一个仓库。停止该过程并重新检查 repolist.txt 文件。这里的示例使用了 8.10 作为旧安装,9.5 作为新安装。

版本 10 未知

由于 9.5 和即将发布的 10 版本之间存在巨大变化,此过程可能不适用于从 9.5 迁移到 10。一旦有 10 版本发布进行测试,就会对此进行探索。

示例旧机器

此处使用的旧机器是 Rocky Linux 8。安装包括了几个适用于企业 Linux 的附加软件包 (EPEL) 仓库中的软件包。

Code Ready Builder

Rocky Linux 9 中的 Code Ready Builder (CRB) 仓库取代了版本 8 中已弃用的 PowerTools 仓库的功能。如果您从 8 版本迁移到 9,并且您有 EPEL,您需要在新机器上启用 CRB,方法如下:

sudo dnf config-manager --enable crb

获取用户列表

您需要手动在新机器上创建用户,因此您需要知道需要创建哪些用户帐户。用户帐户通常从用户 ID 1000 开始,并向上递增。

sudo getent passwd > userid.txt

获取仓库列表

您需要一份旧机器上存在的仓库列表。

sudo ls -al /etc/yum.repos.d/ > repolist.txt

获取软件包列表

使用以下命令生成软件包列表:

sudo dnf list installed | awk 'NR>1 {print $1}' | sort -u > installed.txt

在此,NR>1 消除了列中的第一条记录,该记录具有来自 dnf list installed 命令的“Installed”。它不是一个软件包,所以您不需要它。{print $1} 表示只使用第一列。在列表中您不需要软件包版本或它来自的仓库。

您不需要安装任何与内核相关的软件包。如果您省略此步骤,再次安装它们也不会有坏处。您可以使用以下命令删除内核行:

sudo sed -i '/kernel/d' installed.txt

备份任何数据

这可能包含很多内容。确保您了解要替换的机器的用途及其所有程序组件(数据库、邮件服务器、DNS 等)。如果您有任何疑问,请将其全部备份。

复制文件

将您创建的文本文件和所有备份数据复制到非易失性位置。

示例新机器

您的 Rocky Linux 9 新安装已完成。您需要获取自 ISO 镜像创建以来可能存在的任何软件包更新。

sudo dnf upgrade

您已准备好开始从早期过程中存储的位置复制您的文本文件和备份。

创建用户

检查 userid.txt 文件,在新机器上创建您需要的用户。

安装仓库

检查 repolist.txt 文件,手动安装您需要的仓库。您可以忽略与 Rocky 相关的仓库。请记住,我们有来自 EPEL 的软件包,因此您需要 CRB 仓库而不是 PowerTools。

sudo dnf config-manager --enable crb

安装 EPEL

sudo dnf install epel-release

repolist.txt 文件安装任何其他非 Rocky 或 EPEL 基础的仓库。

安装软件包

仓库安装完成后,尝试从 installed.txt 安装您的软件包:

sudo dnf -y install $(cat installed.txt)

有些软件包在 Rocky Linux 8 和 Rocky Linux 9 之间不存在,无论您启用了哪些仓库。运行此命令可以帮助您了解哪些软件包不存在。

这是作者测试机器上未安装的内容(重新组织为一列而不是长字符串):

Error: Unable to find a match: 
OpenEXR-libs.x86_64 
bind-export-libs.x86_64 
dhcp-libs.x86_64 
fontpackages-filesystem.noarch 
hardlink.x86_64 
ilmbase.x86_64 
libXxf86misc.x86_64 
libcroco.x86_64 
libmcpp.x86_64 
libreport-filesystem.x86_64 
mcpp.x86_64 
network-scripts.x86_64 
platform-python.x86_64 
platform-python-pip.noarch 
platform-python-setuptools.noarch 
xorg-x11-font-utils.x86_64

注意

如果您在新的安装中需要这些缺失软件包的功能,请将它们保存在一个文件中以备后用。您可以使用以下命令查看缺失软件包的可用性状态:

sudo dnf whatprovides [package_name]

再次运行命令,但这次附加 --skip-broken

sudo dnf -y install $(cat installed.txt) --skip-broken

由于您刚刚进行了许多更改,因此在继续之前应重新启动。

恢复您的备份

在安装完所有软件包后,恢复您在迁移到新机器之前备份的所有备份、修改的配置文件、脚本和其他实用程序。

结论

Rocky Linux 不支持从一个主版本迁移到另一个主版本的魔法例程。Rocky Linux 开发人员仅支持全新安装。本文档提供的例程允许您在遵循 Rocky 团队的最佳实践的同时,从一个主版本迁移到另一个主版本。

此过程假定为简单安装。但是,如果您的安装很复杂,您可能需要采取更多步骤。您可以将此过程作为指南。

免责声明

虽然本文档的基本内容是作者的,但 [论坛](https://forums.rockylinux.org/t/boot-too-small-rebuild/17415) 中的两位个人提出了一个更简洁的生成 installed.txt 的方法,并消除了内核软件包。感谢所有为此过程提供意见的人。

作者:Steven Spencer

贡献者:Ganna Zhyrnova