リモート開発メインのソフトウェア開発企業のエンジニアブログです

Rocky Linux 8 から Rocky Linux 9 にアップグレード

はじめに

Rocky Linux (以下、RL) 8 から 9 へのアップグレードは公式にはサポートされていません。公式には、データをバックアップし、RL 9 を新規インストールしてからデータを戻してくれ、という事です。が、そんな事やりたくないわけです。

なので、新規インストールせずに RH 8 -> 9 へアップグレードしました。

2026年にもなってこんな事はやりたくないのですが、背に腹はかえられないです。

やった事

参考にしたページ

検索して出てきた以下のページを参考に行いました。基本的にはこれの通りで良いのですが、注意点とかは別途記載します。

How to Upgrade from Rocky Linux 8 to 9

事前にやる事

自前のパソコンで作業するときは別に良いですが、ネットワーク上のサーバー(VPS 等)の場合は、必ず screen コマンドを起動して、その中で作業しましょう。ネットワークが切断されても再度 ssh で接続して screen -r で復帰できます。

手順

Step 1: Backing Up Your Rocky Linux 8 System

参考元ページだとほぼ全てのファイルをバックアップしていますが、容量に余裕が無いので必要最小限にとどめました。

Step 2: Update All Currently Installed Packages

以下のコマンドでパッケージを最新にします。

dnf update

Step 3: Verify the Currently Installed Rocky Version

こんなの確認するまでもない気もしますが、以下のコマンドで RL 8 がインストールされていることを一応確認しましょう。

cat /etc/redhat-release

Step 4: Prepare the System for Migration to Rocky 9

ここからが本番です。

以下のコマンドで、RL 9 レポジトリリスト等をインストールします。バージョン番号(9.7-1.4 等)はこちらのページより最新のものを確認してください。

REPO_URL="https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r"
RELEASE_PKG="rocky-release-9.7-1.4.el9.noarch.rpm"
REPOS_PKG="rocky-repos-9.7-1.4.el9.noarch.rpm"
GPG_KEYS_PKG="rocky-gpg-keys-9.7-1.4.el9.noarch.rpm"

dnf install $REPO_URL/$RELEASE_PKG $REPO_URL/$REPOS_PKG $REPO_URL/$GPG_KEYS_PKG

私の場合は REMI が入っていたせいでちょっとエラーが出ました。解決方法は後述します。

Step 5: Upgrade from Rocky Linux 8 to Rocky Linux 9

さて、アップグレードです。/usr/share/redhat-logos というディレクトリがあると途中で止まるので、事前に名前を変えておきます。

mv /usr/share/redhat-logos{,.bak}

その後、以下のコマンドでアップグレードします。

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

私は screen を使わずにこのコマンドを実行していたらネットワークが切れてしまい、後始末が若干面倒でした。これも後述します。

依存関係の問題が出る場合は、一旦そのパッケージは削除し、再度上のコマンドを実行します。私は以下のコマンドでパッケージを削除しました。

yum remove iptables-ebtables

Step 6: Rebuild the RPM Database

RL 9 からパッケージデータベースの形式が Berkley DB から SQLite に変わりました。以下の通り DB を再構築します。

rpm --rebuilddb

終わったら再起動します。

reboot

Step 7: Post-installation Steps

アップグレード後の後始末等です。まずはバージョン番号を確認します。

cat /etc/redhat-release

パッケージを最新にします。

dnf update

が、元記事にもあるように上手くいかないことが多いので、悪さをしているモジュールを無効化します。私は13個のモジュールを無効化する必要がありました。

dnf module disable gimp httpd mariadb nginx perl perl-DBD-MySQL perl-DBI perl-IO-Socket-SSL perl-libwww-perl php python27 python36 virt

その後に再度 dnf update を実行すれば完了です。

Moba Pro

上手くいかなかった点

REMI が入っていてエラーになった

備忘録のためエラーメッセージを貼っておきます。

# dnf install $REPO_URL/$RELEASE_PKG $REPO_URL/$REPOS_PKG $REPO_URL/$GPG_KEYS_PKG
メタデータの期限切れの最終確認: 2:36:54 前の 2026年03月15日 23時03分28秒 に実施しました。
rocky-release-9.7-1.4.el9.noarch.rpm                                                                              37 kB/s |  22 kB     00:00
rocky-repos-9.7-1.4.el9.noarch.rpm                                                                                28 kB/s |  12 kB     00:00
rocky-gpg-keys-9.7-1.4.el9.noarch.rpm                                                                             28 kB/s |  12 kB     00:00
エラー:
 問題: インストール済パッケージの問題 remi-release-8.10-2.el8.remi.noarch
  - package remi-release-8.10-2.el8.remi.noarch from @System requires system-release(releasever) = 8, but none of the providers can be installed
  - package remi-release-8.10-1.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installe
d
  - package remi-release-8.10-2.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installe
d
  - package remi-release-8.4-1.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installed
  - package remi-release-8.5-2.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installed
  - package remi-release-8.5-3.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installed
  - package remi-release-8.6-1.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installed
  - package remi-release-8.7-2.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installed
  - package remi-release-8.8-1.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installed
  - package remi-release-8.9-2.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installed
  - package remi-release-8.9-3.el8.remi.noarch from remi-safe requires system-release(releasever) = 8, but none of the providers can be installed
  - cannot install both rocky-release-9.7-1.4.el9.noarch from @commandline and rocky-release-8.10-1.10.el8.noarch from @System
  - cannot install both rocky-release-9.7-1.4.el9.noarch from @commandline and rocky-release-8.10-1.10.el8.noarch from baseos
  - cannot install both rocky-release-9.7-1.4.el9.noarch from @commandline and rocky-release-8.10-1.7.el8.noarch from baseos
  - cannot install both rocky-release-9.7-1.4.el9.noarch from @commandline and rocky-release-8.10-1.8.el8.noarch from baseos
  - cannot install both rocky-release-9.7-1.4.el9.noarch from @commandline and rocky-release-8.10-1.9.el8.noarch from baseos
  - 競合するリクエスト
(競合するパッケージを置き換えるには、コマンドラインに '--allowerasing' を追加してみてください または、'--skip-broken' を追加して、インストール不
可のパッケージをスキップしてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)

解決方法は以下の通りです。

rpm -e remi-release

RL8 と RL9 のパッケージが共にインストール済、という状態になった

アップグレード中にネットワークが切断されたため、RL8 と RL9 のパッケージが両方インストール済という状態になりました。

例を挙げると、以下の2つが同時にインストールされている状態です。

  • NetworkManager-1.40.16-20.el8_10.x86_64
  • NetworkManager-1.54.0-3.el9_7.x86_64

el8 の方を削除してしまえば良いと思うかもしれませんが、そうすると el9 でインストールされたファイルも削除されてしまうか、エラーになると思います。

結論としては、以下の通りパッケージの実体は削除せずにパッケージ情報だけを削除します。 --justdb がポイントです。

# 一応、パッケージ DB をバックアップ
cp -a /var/lib/rpm /var/lib/rpm.bak.$(date +%Y%m%d)
# パッケージ情報を削除
rpm -e --justdb --nodeps $(rpm -qa | grep el8)

その他やった事

PHP 8.3 のインストール

RL 9 では、REMI を使わなくても PHP の新しいバージョンをインストールすることが出来ます。まずは既存の PHP を削除します。

rpm -e $(rpm -a | grep php)

次にインストールします。

dnf module reset php
dnf module install php:8.3

足りない PHP モジュールは手動で入れます。

dnf install php-pdo php-mysqlnd php-gd php-pecl-zip

やったのはそれくらいです。

まとめと今後

Rocky Linux 8 のサポート期間が終了していたため、RL 9 にアップグレードしました。せっかくなので次は 10 にアップグレードしようと思ったのですが、RL 9 -> RL 10 のアップグレードも公式にはサポートされていません。

一方、Rocky Linux とほぼ同時期に登場した RHEL クローンである AlmaLinux では ELevate という仕組みがあり、古い OS から新しいバージョンにアップグレードできます。

ELevate Quickstart Guide | AlmaLinux Wiki

以前は ELevate で、CentOS 7 -> RL 8 -> RL 9 というアップグレードパスがサポートされていたようです。RL 9 -> 10 もそろそろサポートされるかと思ってさっきのページをみてみたら、今では RL 自体がサポートされていないようです。

ということで、次回は Rocky Linux に見切りを付けて

  1. RL 9 -> AlmaLinux 9 に移行
  2. AlmaLinux 9 -> 10 にアップグレード

という流れでやろうと思います。

冒頭にも書きましたが、2026年にもなって OS のアップグレードとか面倒な作業はやりたくないんですが、仕方ないですね。

宣伝

株式会社もばらぶでは、レガシーシステムの移行や OS のアップグレードなども積極的に行っています。何かお困りのことがあれば、お気軽にお問い合わせください。

お問い合わせ – もばらぶん

← 前の投稿

Docker Desktop から完全撤退して Podman Desktop 一本で行くことにした (macOS)

次の投稿 →

コメントを残す