CentOS から Fedora に直接アップグレードしてみる

どうも、みむらです。

気がついたら 2022 年になっていましたし、オリンピックも終わっていました。
年が進むのは早いものですね。

同じく年が早いと気づかされたものとして、CentOS Linux 8 のサポート切れがあります。

CentOS Stream 8 にアップグレードしましょう、という話もありますが、
“Stream” は RHEL の “Nightly” の立ち位置になっていますし、
今までのRHEL 互換を求めるなら、Alma Linux Rocky Linux に切替えていくのが正しいように見えます。

Fedora/CentOS Stream/CentOS/RHELの関係性 – 赤帽エンジニアリングブログ
https://rheb.hatenablog.com/entry/202007-fedora-distribution

GitHub の CentOS などから Alma Linux に移行するためのツール (Almalinux-deploy):
https://github.com/AlmaLinux/almalinux-deploy

上記の移行ツールの使用について日本語で書かれた記事:
https://www.server-memo.net/memo/centos8_to_almalinux.html

他方、 CentOS Stream 9 からミラーが変わるようで、
執筆時点 (2022/01/17) では日本のサーバがなく寂しい所でもあります。

CentOS Stream 9 Mirror list:
https://admin.fedoraproject.org/mirrormanager/mirrors/CentOS

今実験用に稼働させているサーバのひとつが CentOS なのですが、
実験用ですし CentOS Stream が “Nightly” の立場に変わるのであれば、
更に上流の Fedora にアップグレード出来るのではないか・・と試してみました。


注意:
下記の手法を試したことにより生じた損害や被害などは当方では全く関知しません。
また、公式ではない方法かつ危険が伴う可能性もあるため、バックアップ等を取り、リスクを取ることが出来る環境でのみお試しください。


今回は CentOS 8 から Fedora へのアップグレードを実行しました。

1. Release, gpg-key, repos を CentOS のものから Fedora に変更する

下記 URL から次のファイルをダウンロードします
https://archives.fedoraproject.org/pub/archive/fedora/linux/updates/28/Everything/x86_64/Packages/f/

  • fedora-release-28-6.noarch.rpm
  • fedora-repos-28-7.noarch.rpm
  • fedora-gpg-keys-28-7.noarch.rpm
wget https://archives.fedoraproject.org/pub/archive/fedora/linux/updates/28/Everything/x86_64/Packages/f/fedora-release-28-6.noarch.rpm
wget https://archives.fedoraproject.org/pub/archive/fedora/linux/updates/28/Everything/x86_64/Packages/f/fedora-repos-28-7.noarch.rpm
wget https://archives.fedoraproject.org/pub/archive/fedora/linux/updates/28/Everything/x86_64/Packages/f/fedora-gpg-keys-28-7.noarch.rpm

centos-linux-release, centos-linux-repos, centos-gpg-keys を削除します。
( Stream になっている場合は centos-stream-release, centos-stream-repos, centos-gpg-keys を削除します )

また削除の際は “–nodeps” をつけて、依存関係を無視する必要があります。
( epel が入っている方は epel も削除する必要があります )

rpm -e --nodeps centos-linux-release centos-gpg-keys centos-linux-repos
rpm -e --nodeps centos-stream-release centos-gpg-keys centos-stream-repos

Fedora の fedora-release, fedora-repos, fedora-gpgkeys をインストールします

rpm -Uvh fedora-release* fedora-repos* fedora-gpgkeys*

2. アップデート可能なパッケージをアップデートする

下記のコマンドでパッケージをアップグレードします。

dnf upgrade --allowerasing --nobest --refresh

3. dnf-plugin-system-upgrade をインストールする

まず dnf パッケージと libmodulemd パッケージをダウンロードし
dnf パッケージのみをアップグレードします。

dnf download dnf libmodulemd

rpm -Uvh dnf-2.7.5-12.fc28.noarch.rpm --nodeps --force

次に、下記のコマンドで dnf-plugin-system-upgrade をインストールします

dnf install dnf-plugin-system-upgrade --allowerasing

この状態で dnf コマンドを実行すると、下記のようなエラーが表示されます。
(もし出ない場合は次に進んでください)

下記のコマンドを実行して、不足している libmodulemd を補ってあげるとエラーが出なくなります。

rpm -Uvh libmodulemd-1.3.0-2.fc28.x86_64.rpm --force

4. システムアップグレード

まず、yum コマンドが入っている場合はこれを削除します

rpm -e yum

続いて、次のコマンドで Fedora 30 のアップグレードの準備(ダウンロード)をします

dnf system-upgrade --releasever=30 download --allowerasing

“dnf –refresh upgrade” を実行しましたか、と聞かれますので “y” と答えて続行します。

ダウンロードが完了したら “dnf system-upgrade reboot” を実行して待ちます。


5. システムブート

grub 周りもガシガシ変更が入るため、
コンフィグファイルが消えてしまい一時的に grub が起動できなくなります。

起動できなくなった場合は、下記のようなコマンドを入れて起動させます
(例:efi 領域, /boot 領域, /領域 の3パーティションの場合)

linux (hd0,gpt2)/vmlinuz-5.6.13-100.fc30.x86_64 root=/dev/sda3
initrd (hd0,gpt2)/initramfs-5.6.13-100.fc30.x86_64.img

その後無事起動したら、下記のコマンドでコンフィグを再生成しておきましょう。

grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg

6. 不要なパッケージを削除して、再度アップグレード

ほとんどのパッケージが Fedora のものになっていますが、
いくつかのパッケージに限り CentOS 由来のものが残っているでしょう。

下記のコマンドを実行し、不要なパッケージがあれば削除を行います

rpm -qa | grep el8
# 削除は dnf remove や rpm -e を使う。

また el8 モジュール依存のコンフリクトが起きている場合は、
“dnf module reset (パッケージ名)” にて解決を行いましょう。

#上記の場合の例
dnf module reset perl-IO-Socket-SSL perl-libwww-perl python36

そして、最後に “dnf upgrade –refresh” と “dnf distro-sync –allowerasing” を実行してアップデートが必要なパッケージが依存関係の破損などが存在しないことを確認した上で、
“dnf system-upgrade” を用いて更に上位のバージョンへアップグレードします。
(バージョンは2個先まで指定可能です)

ここから先は、Fedora の公式ドキュメントとほぼ同じになります。

DNF System Upgrade
https://docs.fedoraproject.org/ja/quick-docs/dnf-system-upgrade/

dnf upgrade --refresh
# Nothing to do. と出る事を確認。他の表示が出た場合は画面に従う。
dnf distro-sync --allowerasing
# Nothing to do. と出る事を確認。他の表示が出た場合は画面に従う。
dnf system-upgrade --releasever=32 download
# ダウンロードが完了したら
dnf system-upgrade reboot

あとは、システムアップグレードを繰り返し、最新版(執筆時点では Version 34)まで到達出来れば完成です。


さいごに

この方法はあくまでもその結果の責任が持てる方向けの
ちょっとした遊び心として執筆しました。

冒頭にもあるように、これを実行したことにより何か影響が出た場合でも自己責任にて対処頂ければと思います。(上手くいかない等の質問は OK ですが、ファイルが消えてしまった等による責任問題については対処出来ません。。)

執筆中、なぜ CentOS から Fedora にインプレースアップグレード(?)を行ったかということを聞かれたのですが・・そこに Fedora があったとしか言えません。

Fedora さんも昔に比べて安定したと聞いていますので、これからちょっと遊んでみようかなと思っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です