引言#
鉴于腾讯云轻量服务器提供的镜像选择有限,无法直接获取 Rocky Linux 9 的镜像,决定采用手动方式迁移现有的 CentOS Stream 9(以下简称 CS 9)系统。使用了 Rocky Linux 官方提供的迁移脚本,以下是遇到的问题及解决方案
迁移#
CS 8 直接按照官方教程来即可,我测试时没有出现 CS 9 一样的问题
获取脚本#
curl https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky9.sh
若国内网络不佳
可以使用 stilleshan 提供的 github 加速服务
curl https://mirror.ghproxy.com/https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky9.sh
先下载再上传也是可以的
执行脚本安装#
赋予脚本可执行权限
chmod +x migrate2rocky.sh
执行脚本
./migrate2rocky.sh -r
执行脚本可以考虑使用 screen 或者 tmux,避免连接中断导致系统崩溃
遇到的问题与初步分析#
在尝试使用 Rocky Linux 9 的官方迁移脚本时,出现了一个关于 CentOS-Stream-BaseOS.repo
文件的错误提示,指出无法找到提供该文件的软件包。
Error: No matches found. ...
Can't get package that provides /etc/yum.repos.d/CentOS-Stream-BaseOS.repo.
经检查,CentOS-Stream-BaseOS.repo
内容如下:
[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
模块后,此问题得以解决。
dnf install perl-autodie.noarch
配置重复问题#
然而,执行 dnf
命令后发现多个仓库被多次列出,这是由于腾讯云将 CentOS Stream 的仓库信息分散在了不同文件中,导致完成替换后原本的源仍然存在导致的。为了消除这一问题,需要删除重复的定义
我直接删除了原本的文件
注意:本操作应在使用清华大学教程中的脚本完成替换后执行
rm CentOS-Stream-*.repo
最后,运行 Rocky Linux 迁移脚本 ./migrate2rocky.sh -r
,完成从 CentOS Stream 9 向 Rocky Linux 9 的迁移。
其他#
也可以直接删除原文件,然后复制粘贴清华大学镜像站点文件,但要注意权限问题
脚本似乎对文件名称的大小写有要求,脚本执行失败可以考虑修改文件名为centos.repo
和 centos-addons.repo