腾讯云迁移centos stream 9 到 rocky linux 9

引言

鉴于腾讯云轻量服务器提供的镜像选择有限，无法直接获取 Rocky Linux 9 的镜像，决定采用手动方式迁移现有的 CentOS Stream 9（以下简称 CS 9）系统。使用了 Rocky Linux 官方提供的迁移脚本，以下是遇到的问题及解决方案

迁移

CS 8 直接按照官方教程来即可，我测试时没有出现 CS 9 一样的问题

获取脚本

Copy
curl https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky9.sh

若国内网络不佳
可以使用 stilleshan 提供的 github 加速服务

Copy
curl https://mirror.ghproxy.com/https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky9.sh

先下载再上传也是可以的

执行脚本安装

赋予脚本可执行权限

Copy
chmod +x migrate2rocky.sh

执行脚本

Copy
./migrate2rocky.sh -r

执行脚本可以考虑使用 screen 或者 tmux，避免连接中断导致系统崩溃

遇到的问题与初步分析

在尝试使用 Rocky Linux 9 的官方迁移脚本时，出现了一个关于 CentOS-Stream-BaseOS.repo 文件的错误提示，指出无法找到提供该文件的软件包。

Copy
Error: No matches found. ...
Can't get package that provides /etc/yum.repos.d/CentOS-Stream-BaseOS.repo.

经检查，CentOS-Stream-BaseOS.repo 内容如下：

Copy
[baseos]
name=CentOS Stream $releasever - BaseOS
baseurl=http://mirrors.tencentyun.com/$contentdir/$stream/BaseOS/$basearch/os/

同时，在腾讯云的镜像库中并未发现 CS 9 的相关镜像，仅找到了 CS 8 的镜像资源。据此推测，可能是腾讯云尚未提供 CS 9 的镜像，或是其采用了非标准的镜像路径，导致 Rocky 脚本无法正确识别和定位所需包路径。

解决过程

思路

改用清华大学的 CS 9 镜像源，再尝试迁移脚本

执行

创建备份目录，将 /etc/yum.repos.d/ 下的所有文件备份至 /root/backup/

根据清华大学镜像站的教程，替换为镜像源。得到新的 centos.repo 和 centos-addons.repo 文件

清理并重建软件包缓存 dnf clean all && dnf makecache

再次运行

问题

依赖模块问题

在执行清华大学镜像站推荐的 update_mirror.pl 脚本以更新镜像源地址时，出现了 autodie.pm 模块缺失的错误。通过 dnf 工具搜索并安装 perl-autodie.noarch 模块后，此问题得以解决。

Copy
dnf install perl-autodie.noarch

配置重复问题

然而，执行 dnf 命令后发现多个仓库被多次列出，这是由于腾讯云将 CentOS Stream 的仓库信息分散在了不同文件中，导致完成替换后原本的源仍然存在导致的。为了消除这一问题，需要删除重复的定义
我直接删除了原本的文件
注意：本操作应在使用清华大学教程中的脚本完成替换后执行

Copy
rm CentOS-Stream-*.repo

最后，运行 Rocky Linux 迁移脚本 ./migrate2rocky.sh -r，完成从 CentOS Stream 9 向 Rocky Linux 9 的迁移。

其他

也可以直接删除原文件，然后复制粘贴清华大学镜像站点文件，但要注意权限问题

脚本似乎对文件名称的大小写有要求，脚本执行失败可以考虑修改文件名为centos.repo 和 centos-addons.repo

参考

清华大学开源软件镜像站

如何从 CentOS Stream、Centos、Alma Linux、RHEL 或 Oracle Linux 迁移到 Rocky Linux