Skip to the content.

Oh My CentOS Stream 9

A short tutorial about updating CentOS 8 / CentOS Stream 8 to CentOS Stream 9

中文 English

Listen, dude! Did you know? It was December 31st, 2021 that CentOS 8 reached end of life! 🎉🎉🎉
Are you still using CentOS 8? Why not update to CentOS Stream 8, Rocky Linux 8 or AlmaLinux ?

Wait, don’t you hear that CentOS Stream 9 has already released? There are even Nodejs16 , Golang1.17.5, kernel5.14 and glic 2.34 package indexes available!

If you pursue new features and a dnf package manager, CentOS Stream 9 is probably your second best choice! (The first one is still Fedora)

But my VPS provider doesn’t provide a CentOS Stream 9 image, or even a CentOS Stream 8 image, so I have to use an outdated CentOS 8 image, wouldn’t that be bad?

Don’t worry, with the method provided in this article, you can also upgrade to CentOS Stream 9 from CentOS 8, with all your data kept and not have to reinstall your system!

How to use

WARNING: Upgrading a major version may cause the software or even the system to fail to operate properly, so please be careful!

TIPS: Please read the whole article before you start the operation. Fell free to open an issue when you encounter a problem. If you would like to share a better solution, please submit a pull request to help us improve the documention.

Preparation

Use a backup tool you are familiar with to back up your data. If your service provider supports snapshot capabilities, it is highly recommended that you create a snapshot before proceeding.

Upgrade from CentOS 8 to CentOS Stream 8

The life cycle of CentOS 8 is over, you can upgrade to CentOS Stream 8 by the following steps:

Switch to vault index, here use the Tsinghua mirror for demo, you can also change to other mirrors you like.


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

Upgrade 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

sudo dnf distro-sync --allowerasing -y

Upgrade from CentOS Stream 8 to CentOS Stream 9

1. Preparing for RPMs


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-9.el9.noarch.rpm
wget http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-9.0-9.el9.noarch.rpm
wget http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-9.0-9.el9.noarch.rpm

cd 

cs9rpmdownload.sh can be found in the directory scripts. Run the script to execute the command above to automatically download all RPMs.

2. Removing non-essential RPM packages and legacy kernels


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

removekernel.sh can be found in the directory scripts. Run the script to execute the command above to automatically remove non-essential RPM packages and lagacy kernels.

3. Upgrading CentOS Stream 9


echo "Installing CentOS Stream 9 RPMs..."
cd ~/cs8to9/el9
sudo dnf install centos-stream-release-9.0-9.el9.noarch.rpm centos-stream-repos-9.0-9.el9.noarch.rpm centos-gpg-keys-9.0-9.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

cs8to9.sh can be found in the directory scripts. Run the script to execute the command above to automatically upgrade CentOS Stream 9.

4. Installing new kernels


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
sudo dnf groupupdate "Core" "Minimal Install" -y

installkernel.sh can be found in the directory scripts. Run the script to execute the command above to automatically install new kernels.

5. Rebooting the system

Check if the kernel is successfully installed. If so, reboot the system.


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

sudo reboot

After the system is rebooted, you can check the new kernel version.


uname -a

The kernel version should be 5.14

5. Rebuild rescue image


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

rebuildrescue.sh can be found in the directory scripts. Run the script to execute the command above to automatically rebuild rescue image.

6. (Optional) Reinstall all RPM packages


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

Enjoy your new system!

License


OhMyStream9 由 Ink33 采用 知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。

OhMyStream9 by Ink33 is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Thanks

Thanks to all the developers who already contributed!