CentOS7
已停止支持超过半年了,因此需要将其迁移至其他Linux版本系统,如Rocky Linux 9
、Debian 12
等来避免可能导致的安全漏洞问题。现在来记录下迁移过程中遇到过的问题。
CentOS 7 Update
因为原版源已经从mirror.centos.org
改为vault.centos.org
,默认是找不到新更新的。你可以修改你的源为vault.centos.org
或者使用linuxmirror.cn
修改为国内镜像源。
为了提速,可将镜像源更改为国内源。
1 | sudo yum update -y |
清除完后,重启。
1 | sudo yum install dnf -y |
更新完成后还原至原来的软件源/etc/yum.repo.bak
并下载最新版本的repo
1 | sudo dnf install http://vault.centos.org/8.5.2111/BaseOS/x86_64/os/Packages/{centos-linux-repos-8-3.el8.noarch.rpm,centos-linux-release-8.5-1.2111.el8.noarch.rpm,centos-gpg-keys-8-3.el8.noarch.rpm} -y |
不过我们先打开
BaseOS
,AppSteam
,Extra
源,看看他们是mirror.centos.org
还是vault.centos.org
。
如果不是vault
则改过来。
例如:
1 | sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* |
使用下面的命令时因为缓存还在使用mirror.centos.org
的原因,会有报错,但是没关系,因为我们安装的是下载的网址内安装包。之后我们清除缓存即可。
1 | sudo dnf upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y |
这个时候,表面已经是CentOS 8
了。可以通过
1 | cat /etc/redhat-release |
查看。
更换源为国内镜像源 - 选择华为云源
1 | bash <(curl -sSL https://linuxmirrors.cn/main.sh) |
选择华为云源
1 | sudo dnf update -y |
安装完成后,表面上应该就会是CentOS 8
, 但是应该也会有冲突的python3
的报错,sysvinit-tools
的报错等等。
我们先dnf remove
移除python3-pip
, sysvinit-tools
也可以
1 | rpm -e --nodeps sysvinit-tools |
然后继续升级CentOS 7到CentOS 8
1 | dnf clean all |
安装内核
1 | dnf install kernel-core -y |
安装CentOS 8 的最小版本
1 | dnf -y groupupdate "Core" "Minimal Install" |
虽然,我们可以通过以下命令再次将CentOS 8
转为CentOS 8 Stream
1 | sudo dnf install centos-release-stream -y |
但是后续其实还有步骤,只要dnf版本足够高的话,其实可以直接迁移Rocky Linux。所以没有转换的必要。
与此同时Rocky Linux 8
迁移到Rocky Linux 9
需要使用AlmaLinux
的leapp
也就是ELevate
工具来升级,且升级步骤必须使用VPN
,直接下载依赖好像还是不行的。leapp
默认只支持CentOS
, 需要leapp-data-xxx
来支持其他系统升级。
因为本身大版本升级操作系统是不支持的,所以官方也没有明确的方式,而Rocky Linux 8.10 EOL
是2029年
,其实直接迁移为Rocky Linux 8
已经足够了。
迁移到Rocky Linux 8
根据Rocky Linux
的步骤继续迁移:
1 | curl https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky.sh |
运行脚本:
1 | ./migrate2rocky.sh -r |
等待运行完毕重启后:
1 | cat /etc/*release* |
之后再打开/etc/yum.repos.d
并将CentOS-*.repo
删除
1 | rm -rf /etc/yum.repos.d/CentOS-* |
使用ELevate leapp升级系统
Rocky Linux 8 to 9方法
AlmaLinux leaapp Upgrade
leaapp Upgrade
如果直接是CentOS 8
也可以直接使用这个方式升级。
下载这个rpm, 就会在/etc/yum.repos.d
安装Elevate repo
,也可以使用wget
下载后安装。
1 | sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm |
Elevate Repo
内容:(该repo无镜像站)
1 | [elevate] |
因为Elevate无镜像站资源,leapp-data-rocky就无法下载,即使预先先从官网下载依然是不行的。
leapp-data-rocky最新版地址:https://repo.almalinux.org/elevate/el8/x86_64/leapp-data-rocky-0.2-7.el8.noarch.rpm
因为默认的leapp-upgrade
只支持CentOS
,不支持其他升级。所以leapp-upgrade
和leapp-data-rocky
都需要。如果使用leapp-data
,只支持从Rocky 8
升级到Rocky 9
,不支持CentOS 8
升级并迁移为Rocky 9
或CentOS 8
升级并迁移为AlmaLinux 9
。
因此需要直接VPN到https://repo.almalinux.org/elevate/
这个源里安装依赖。
1 | yum install -y leapp-upgrade leapp-data-rocky |
然后查看answerfile
,我的answerfile
中只有vdo
问题,所以直接使用以下命令覆盖即可。
1 | leapp answer --section check_vdo.no_vdo_devices=True |
后面步骤不展示了,因为没成功。(需要VPN连,太慢了。)
Rocky Linux 8 到Rocky Linux 9 (非leapp方式)
RL8 to RL9
可以参考浙江大学的镜像源
1 | dnf install https://mirror.nju.edu.cn/rocky-vault/9.3/BaseOS/x86_64/os/Packages/r/{rocky-repos-9.3-1.3.el9.noarch.rpm,rocky-release-9.3-1.3.el9.noarch.rpm,rocky-gpg-keys-9.3-1.3.el9.noarch.rpm} -y |
应该会报iptable的错误,通过以下方式解决
1 | yum remove iptables-ebtables make-devel |
然后再来一次升级后重建rpmdb
。这是因为9版本不再使用Berkeley DB(bdb_ro)
而是使用SQLite
1 | rpm --rebuilddb |
安装CentOS 9 的最小版本之后重启。
1 | dnf -y groupupdate "Core" "Minimal Install" |
升级如果遇到以下问题,需要用dnf module disable
禁用。
1 | Problem 1: conflicting requests |
我们根据上面的信息禁用对应的模块,并且是同时输入
1 | dnf module disable mariadb:10.3 python27:2.7 python36:3.6 |
我们当然也可以使用dnf module list
的方式查看模块并禁用。
这时如果dnf update -y
或者dnf upgrade
已经无报错代表升级成功了,可以重启使用了。
不过如果你查看dnf list |grep el8
可能还会找到有软件包是el8的
你可以按需看情况使用dnf remove
卸载掉。
如果遇到kernel-core
在的情况下,则需要
1 | rpm -e --nodeps `rpm -qa|grep -i kernel|grep 4.18` |
因为卸载的有点多,我为了确保稳定性将系统环境改为Server
(你也可以用Server with GUI
)
1 | dnf groupinstall "Server" |
这样他会安装很多组件,应该来说就比较稳定了。
当然我们都知道,重新安装才是最稳定的。这是一个迁移临时方案。