CentOS 7 迁移到Rocky Linux 9

2024-08-07 16:41:52 浏览数 (2)

我们知道CentOS 7在2024年6月30日停止支持,在此前,陆陆续续已经有人迁移了。但是如果还未迁移,现在迁移可能会遇到不同的问题。例如我们源地址发生了变化。下面我们给大家演示迁移升级。

CentOS 7 Update

因为原版源已经从mirror.centos.org改为vault.centos.org,默认是找不到新更新的。你可以修改你的源为vault.centos.org或者使用linuxmirror.cn修改为国内镜像源。

我为了更快速下载,使用国内镜像源。 CentOS 7 to CentOS 8 Stream 1GiG - CentOS 7 to CentOS 8

代码语言:javascript复制
sudo yum update -y
代码语言:javascript复制
sudo yum install epel-release -y
代码语言:javascript复制
sudo yum install rpmconf -y
代码语言:javascript复制
sudo rpmconf -a
代码语言:javascript复制
sudo yum install yum-utils -y
代码语言:javascript复制
sudo package-cleanup --leaves
sudo package-cleanup --orphans

清除完后,重启。

代码语言:javascript复制
sudo yum install dnf -y
sudo dnf remove yum yum-metadata-parser -y

sudo rm -Rf /etc/yum
代码语言:javascript复制
sudo dnf update -y

因为我使用了国内镜像源,我先把/etc/yum.repo.bak还原回来。也就是原本的centos源。

代码语言:javascript复制
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

上面的命令是下载新版本repo 不过我们先打开BaseOS, AppSteam,Extra源,看看他们是mirror.centos.org还是vault.centos.org。 如果不是vault则改过来。

例如:

代码语言:javascript复制
sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

使用下面的命令时因为缓存还在使用mirror.centos.org的原因,会有报错,但是没关系,因为我们安装的是下载的网址内安装包。之后我们清除缓存即可。

代码语言:javascript复制
sudo dnf upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
代码语言:javascript复制
sudo dnf clean all
代码语言:javascript复制
sudo rpm -e `rpm -q kernel`

这个时候,表面已经是CentOS 8 了。你可以通过

代码语言:javascript复制
cat /etc/redhat-release

查看。

更换源为国内镜像源 - 选择华为云源

代码语言:javascript复制
bash <(curl -sSL https://linuxmirrors.cn/main.sh)

选择华为云源
代码语言:javascript复制
sudo dnf update -y

安装完成后,表面上应该就会是CentOS 8, 但是应该也会有冲突的python3的报错,sysvinit-tools的报错等等。 我们先dnf remove移除python3-pip, sysvinit-tools 也可以

代码语言:javascript复制
rpm -e --nodeps sysvinit-tools
# dnf remove sysvinit-tools-2.88-14.dsf.el7.x86_64

remove python3-setuptools-39.2.0-10.el7.noarch

# 我们无法移除gdbm 使用以下方式升级到CentOS 8
dnf upgrade --best --allowerasing

然后继续升级CentOS 7到CentOS 8

代码语言:javascript复制
dnf clean all


dnf --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync 

安装内核

代码语言:javascript复制
dnf install kernel-core -y

安装CentOS 8 的最小版本

代码语言:javascript复制
dnf -y groupupdate "Core" "Minimal Install" 

虽然,我们可以通过以下命令再次将CentOS 8 转为CentOS 8 Stream

代码语言:javascript复制
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的步骤继续迁移: Migrate to Rocky Linux 8

代码语言:javascript复制
curl https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky.sh
代码语言:javascript复制
chmod u x migrate2rocky.sh

运行脚本:

代码语言:javascript复制
./migrate2rocky.sh -r

等待运行完毕重启后:

代码语言:javascript复制
cat /etc/*release*

Rocky Linux release 8.10 (Green Obsidian)
NAME="Rocky Linux"
VERSION="8.10 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.10"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.10 (Green Obsidian)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:8:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2029-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-8"
ROCKY_SUPPORT_PRODUCT_VERSION="8.10"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.10"
Rocky Linux release 8.10 (Green Obsidian)
Rocky Linux release 8.10 (Green Obsidian)
Derived from Red Hat Enterprise Linux 8.10
Rocky Linux release 8.10 (Green Obsidian)
cpe:/o:rocky:rocky:8:GA

之后再打开/etc/yum.repos.d并将CentOS-*.repo删除

代码语言:javascript复制
rm -rf /etc/yum.repos.d/CentOS-*
# 或不加f 可以确认删除的文件
rm -r /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下载后安装。

代码语言:javascript复制
sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm

Elevate Repo内容:(该repo无镜像站)

代码语言:javascript复制
[elevate]
name=ELevate
baseurl=https://repo.almalinux.org/elevate/el8/$basearch/
...

因为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 升级并迁移为Alma 9。 因此需要直接VPN到https://repo.almalinux.org/elevate/ 这个源里安装依赖。

代码语言:javascript复制
yum install -y leapp-upgrade leapp-data-rocky
代码语言:javascript复制
leapp preupgrade

然后查看answerfile,我的answerfile中只有vdo问题,所以直接使用以下命令覆盖即可。

代码语言:javascript复制
leapp answer --section check_vdo.no_vdo_devices=True

后面步骤不展示了,因为没成功。(需要VPN连,太慢了。)

Rocky Linux 8 到Rocky Linux 9 (非leapp方式)

RL8 to RL9 可以参考浙江大学的镜像源

代码语言:javascript复制
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
代码语言:javascript复制
dnf -y --releasever=9 --allowerasing --setopt=deltarpm=false distro-sync

应该会报iptable的错误,通过以下方式解决

代码语言:javascript复制
yum remove iptables-ebtables make-devel

然后再来一次升级后重建rpmdb。这是因为9版本不再使用Berkeley DB(bdb_ro)而是使用SQLite

代码语言:javascript复制
rpm --rebuilddb

安装CentOS 9 的最小版本之后重启。

代码语言:javascript复制
dnf -y groupupdate "Core" "Minimal Install" 

升级如果遇到以下问题,需要用dnf module disable禁用。

代码语言:javascript复制
Problem 1: conflicting requests
 - nothing provides module(platform:el8) needed by module mariadb:10.3:8080020230920001707:fd72936b.x86_64 from @modulefailsafe
Problem 2: conflicting requests
 - nothing provides module(platform:el8) needed by module python27:2.7:8100020240523105808:5f0f67de.x86_64 from @modulefailsafe
Problem 3: conflicting requests
 - nothing provides module(platform:el8) needed by module python36:3.6:8100020231207204726:5ae887d0.x86_64 from @modulefailsafe

我们根据上面的信息禁用对应的模块,并且是同时输入

代码语言:javascript复制
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在的情况下,则需要

代码语言:javascript复制
rpm -e --nodeps `rpm -qa|grep -i kernel|grep 4.18`

因为卸载的有点多,我为了确保稳定性将系统环境改为Server(你也可以用Server with GUI)

代码语言:javascript复制
dnf groupinstall "Server"

# dnf grouplist 查看可选安装环境

这样他会安装很多组件,应该来说就比较稳定了。

当然我们都知道,重新安装才是最稳定的。这是一个迁移临时方案。

0 人点赞