CentOS Stream 8(以下、Stream 8と表記)のサポート期限は2024年5月です。
運用しているStream 8をどうするか悩んでいる方もいらっしゃるかと思います。
(私もその一人です)
個人的には新しい環境を作ってそちらにアプリケーションやデータを移行するのがいいと思います。
環境構築や移行に手間はかかりますが、現状で動いている環境を手つかずで残しておけるのはメリットが大きいと思います。
現環境をそのままアップグレードする方法、いわゆるインプレースアップグレードであればアプリケーションやデータ、各種設定は引き継ぐことができます。
しかしアップグレードに失敗して起動不能となる可能性があることには留意する必要があります。
どちらにもデメリットがあるわけですが、今回はStream 8の環境をインプレースアップグレードでCentOS Stream 9(以下、Stream 9と表記)にしてみました。
この記事がアップグレードを考えている方の参考になれば幸いです。
環境情報
macOS上に構築した仮想環境です。
$ cat /etc/os-release
NAME="CentOS Stream"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Stream 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"
$ cat /proc/version
Linux version 4.18.0-497.el8.x86_64 (mockbuild@x86-05.stream.rdu2.redhat.com) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-19) (GCC)) #1 SMP Sat Jun 10 12:24:53 UTC 2023
アップグレード手順
何らかの問題が発生しても当方は一切の責任を負いかねます。
バックアップを取得した上で自己責任でお願いします。
以下の作業は全てrootユーザーで行います。
インストール済みパッケージを最新版に更新する
下記のコマンドを実行してインストール済みパッケージを最新版に更新しておきます。
dnf update
不要パッケージを削除する
下記のコマンドを実行して使われていないパッケージを表示します。
dnf repoquery --unneeded
dnf repoquery --extras
下記のコマンドを実行して上記で表示されたパッケージを削除します。
dnf remove {パッケージ名1} {パッケージ名2} …
// 例
// dnf remove NetworkManager-initscripts-updown-1:1.40.16-7.el8.noarch boost-iostreams-1.66.0-13.el8.x86_64
Stream 9のリポジトリをインストールする
下記のコマンドを実行してStream 9のリポジトリをインストールします。
dnf install \
https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-9.0-21.el9.noarch.rpm \
https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-release-9.0-21.el9.noarch.rpm \
https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-9.0-21.el9.noarch.rpm \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \
https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm \
https://rpms.remirepo.net/enterprise/remi-release-9.rpm
各リポジトリの最新バージョンはこちらでご確認ください。
インストールの際、当方の環境では下記のエラーが出ましたが無視しました。
Line is not an assignment at '/usr/lib/sysctl.d/50-redhat.conf:7': (null)
Couldn't write '1' to 'net/ipv4/conf/*/rp_filter', ignoring: No such file or directory
警告: %transfiletriggerin(systemd-239-76.el8.x86_64) スクリプトの実行に失敗しました。終了ステータス 1
Error in scriptlet in rpm package epel-next-release
一部のrepoファイルを修正する
「/etc/yum.repos.d」ディレクトリ内にある下記のrepoファイルについてそれぞれ修正します。
epel.repo
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/
#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-9&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9
[epel-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/debug/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
epel-next.repo
[epel-next]
name=Extra Packages for Enterprise Linux $releasever - Next - $basearch
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/next/$releasever/Everything/$basearch/
#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-next-$releasever&arch=$basearch&infra=$infra&content=$contentdir
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-next-9&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9
[epel-next-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - Next - $basearch - Debug
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/next/$releasever/Everything/$basearch/debug/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-next-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
[epel-next-source]
name=Extra Packages for Enterprise Linux $releasever - Next - $basearch - Source
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/next/$releasever/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-next-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
#baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
baseurl=http://nginx.org/packages/mainline/centos/9/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
いずれのファイルもポイントは「$releasever」を「9」とすることです。
アップグレードを実行する
下記のコマンドを実行してアップグレードを行います。
dnf -y --releasever=9-stream --allowerasing --setopt=deltarpm=false distro-sync
当方の環境ではImageMagick-libsパッケージについて「パッケージの最良アップデート候補をインストールできません」というエラーが出ました。
面倒だったので当該パッケージについてはアンインストールし、アップグレード後に必要があれば再度インストールするようにしました。
問題がなければこれでインプレースアップグレードが行われます。
(当方の環境では10分ほどかかりました)
subscription-managerを削除する
サブスクリプションを取得していない場合は下記のコマンドを実行してsubscription-managerを削除します。
dnf remove subscription-manager
パッケージを最新版に更新する
下記のコマンドを実行して最新のパッケージにアップデートします。
rpmdb --rebuilddb
dnf clean packages
dnf update
dnf groupupdate "Core" "Minimal Install"
再起動する
下記のコマンドを実行して再起動します。
reboot
再起動に成功したらStream 9の環境になっています。
$ cat /etc/os-release
NAME="CentOS Stream"
VERSION="9"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="9"
PLATFORM_ID="platform:el9"
PRETTY_NAME="CentOS Stream 9"
ANSI_COLOR="0;31"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:centos:centos:9"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 9"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"
以上でインプレースアップグレードは完了です。
環境によってはモジュールの依存関係絡みでエラーが発生することがあるようですが、当該モジュールをリセットすることで解消できるようです。
// 例
sudo dnf module reset container-tools
まとめ
アップグレード後、一部のサービスの自動起動設定が外れる場合があるようです。
当方の環境においてもlogrotate.timerが影響を受けていました。
各種ログファイルを監視して問題が起きていないかを確認する必要がありそうです。
今回アップグレードした環境はテスト環境なので割と気楽に作業を行いましたが、本番環境だとかなり慎重に作業を進める必要があるかと思います。
何らかの問題が発生しても当方は一切の責任を負いかねます。
バックアップを取得した上で自己責任でお願いします。
コメント