Skip to content

CentOS 7 升级至 CentOS Stream 9 操作教程

本操作教程仓库地址:https://github.com/hyperter96/OhMyStream9,所有Shell脚本在scripts目录下。

CentOS 7 升级至 CentOS 8

cs7to8.sh
bash
#/bin/bash

# 安装EPEL Repository
yum install epel-release

# 安装 yum-utils tools
yum install yum-utils -y

# 安装rpmconf to resolve RPM packages
yum install rpmconf -y

rpmconf -a

# Perform a clean-up of all the packages you don’t require.
package-cleanup --leaves
package-cleanup --orphans

# 安装dnf (package manager) on CentOS 7
yum install dnf -y

# 删掉YUM package manager
dnf remove yum yum-metadata-parser
rm -rf /etc/yum

# Upgrade CentOS 7 to Centos 8
dnf upgrade -y
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}
dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf clean all

# Remove the old CentOS 7 Kernel
rpm -e `rpm -qa kernel-ml`
rpm -e `rpm -qa kernel-lt`
rpm -e --nodeps sysvinit-tools
rpm -e --nodeps `rpm -qa gdbm`
dnf remove python36
dnf remove iprutils
dnf remove initscripts
dnf clean all
rm -rf /var/cache/dnf
dnf upgrade

#需要更新源
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
dnf install iprutils
rm -f /var/lib/rpm/__db*
db_verify /var/lib/rpm/Packages
rpm --rebuilddb
dnf install initscripts
dnf update


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

annobin=$(find /var/cache/dnf/ -name annobin-9.72-1.el8_5.2.x86_64*)
redhat_rpm_config=$(find /var/cache/dnf/ -name redhat-rpm-config-125-1.el8.noarch*)
mariadb=$(find /var/cache/dnf/ -name mariadb-connector-c-3.1.11-2.el8_3.x86_64*)

rpm -ivh --nodeps --force $annobin
rpm -ivh --nodeps --force $redhat_rpm_config
rpm -ivh --nodeps --force $mariadb

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

#  Install new kernel for CentOS 8
dnf -y install kernel-core

rmdir /etc/yum/pluginconf.d/ /etc/yum/protected.d/ /etc/yum/vars/

# Install CentOS 8 minimal packages
dnf -y groupupdate "Core" "Minimal Install"

sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config

CentOS 8 升级至 CentOS Stream 8

cs8upgrade2stream.sh
bash
#/bin/bash

# 切换到vault源
minorver=8.5.2111
sudo sed -e "s|^mirrorlist=|#mirrorlist=|g" \
         -e "s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/$minorver|g" \
         -i.bak \
         /etc/yum.repos.d/CentOS-*.repo

# 更新CentOS Stream 8
sudo dnf install \
    http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-8-4.el8.noarch.rpm \
    http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-stream-release-8.6-1.el8.noarch.rpm \
    http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-4.el8.noarch.rpm \
    -y --allowerasing

sudo dnf distro-sync --allowerasing -y

CentOS Stream 8 升级至 CentOS Stream 9

准备RPMs

cs9rpmdownload.sh
bash
# /bin/sh

echo "Preparing to download RPMs"
echo "Setting up wget..."
sudo dnf install wget -y

echo "Creating directory ~/cs8to9/el9"
mkdir -p ~/cs8to9/el9
echo "Creating directory ~/cs8to9/epel9"
mkdir -p ~/cs8to9/epel9

echo "Downloading RPMs..."
cd ~/cs8to9/epel9
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
wget https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm

cd ~/cs8to9/el9
wget http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-release-9.0-22.el9.noarch.rpm
wget http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-9.0-22.el9.noarch.rpm
wget http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-9.0-22.el9.noarch.rpm

移除非必要RPM包和旧内核

removekernel.sh
bash
# /bin/sh

echo "Removing old packages..."
sudo dnf autoremove -y

echo "Removing old kernels..."
echo "The following packages will be removed:"
rpm -q kernel && rpm -q kernel-devel && rpm -q kernel-core && rpm -q kernel-modules

read -p "Are you sure(y/N)? " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
    echo "yes"
    sudo rpm -e `rpm -q kernel` --nodeps
    sudo rpm -e `rpm -q kernel-devel` --nodeps
    sudo rpm -e `rpm -q kernel-core` --nodeps
    sudo rpm -e `rpm -q kernel-modules` --nodeps
fi

升级 CentOS Stream 9

cs8to9.sh
bash
# /bin/sh

echo "Installing CentOS Stream 9 RPMs..."
cd ~/cs8to9/el9
sudo dnf install centos-stream-release-9.0-22.el9.noarch.rpm centos-stream-repos-9.0-22.el9.noarch.rpm centos-gpg-keys-9.0-22.el9.noarch.rpm -y

echo "Installing EPEL 9 RPMs..."
cd ~/cs8to9/epel9
sudo dnf install epel-release-latest-9.noarch.rpm epel-next-release-latest-9.noarch.rpm -y

echo "Upgrade to CentOS Stream 9..." 
sudo dnf distro-sync --allowerasing -y

echo "cat /etc/redhat-release"
cat /etc/redhat-release

安装新内核

installkernel.sh
bash
# /bin/sh

echo "Rebuilding rpm database..."
sudo rpm --rebuilddb

echo "Reset dnf module cache..."
mkdir -p ~/cs8to9/empty && cd ~/cs8to9/empty
sudo dnf module reset * -y

echo "Installing new kernel..."
sudo dnf install kernel kernel-core kernel-devel kernel-modules -y

重启系统

检查内核是否安装成功,如果安装成功,请重启系统。

注意

重启之前请检查 /etc/ssh/sshd_config,查看下是否有

bash
#PermitRootLogin prohibit-password

有的话改成

bash
PermitRootLogin yes

然后保存。

bash
dnf list --installed | grep -i "kernel"

sudo reboot

重启后,检查内核版本

bash
uname -a

内核版本应为5.14

重建rescue镜像

你可以在scripts目录下找到rebuildrescue.sh,运行它,它会执行上述指令,自动重建rescue镜像。

rebuildrescue.sh
bash
# /bin/sh

echo "Rebuilding rescue image..."
sudo dnf reinstall dracut -y
mkdir -p ~/cs8to9/backup
sudo mv /boot/vmlinuz-0-rescue-* ~/cs8to9/backup
sudo mv /boot/initramfs-0-rescue-*.img ~/cs8to9/backup
sudo /usr/lib/kernel/install.d/51-dracut-rescue.install add $(uname -r) "" /lib/modules/$(uname -r)/vmlinuz

(可选)重新安装所有RPM包

bash
cd ~/cs8to9/empty
sudo dnf reinstall -y *

享受你的新系统!