えんでぃの技術ブログ

えんでぃの技術ブログ

ネットワークエンジニアの視点で、IT系のお役立ち情報を提供する技術ブログです。

FedoraのOSバージョンアップ手順

fedora_logo

お伝えしたいこと

FedoraのOSをバージョンアップしました。
公式手順通りに実行しただけですが、実際にそのまま試してうまくいったということで記録に残します。
バージョンアップ手順は、公式サイトを都度ご確認ください。
手順が更新されている可能性もありますし、複数メジャーバージョンをまたいでバージョンアップするときはアップグレードパスが異なる場合もあります (※)。

(※) Fedora公式ページに書いてあります。Fedora20以前の場合は、Fedora21近辺を経由してから最新版にバージョンアップします。また、Fedora20以前からのバージョンアップ手順は異なります。

バージョンアップ手順の前に、なぜバージョンアップすべきなのか知りたい方は、先に#(参考) バージョンアップすべき理由をご覧ください。

バージョンアップ手順

公式情報

  1. Fedora Quick Docs - Upgrading to a new release of Fedora
  2. Fedora Quick Docs - DNF System Upgrade

1つ目の記事に、Fedoraのバージョンアップ手順が複数パターン書いてあります。
今回は2つ目の記事で紹介されている、DNF System Upgrade によるOSアップグレードを実施しました。
2021年現在、DNF System UpgradeによるOSアップグレードが公式で最も推奨されています。

事前バックアップ

公式手順にはさらっと書いてありますが、事前にバックアップを取得します。
今回はrsyncによるバックアップを取得しました。
Timeshift による定期バックアップももちろんセットしていますが、下記記事に記載の通り今回のケースにおいては3つの理由からrsyncの方が向いています。

  • ハードリンクを保持できる
  • システム不具合のリスクが高い作業である
  • バックアップ取得したいタイミングが明確である (バックアップ定期実行ではなく、手動実行でもよい)

rsyncによるバックアップ方法とメリットは、こちらの記事で紹介しています。Timeshiftのメリットにも触れています

endy-tech.hatenablog.jp

↓Timeshiftとは何か、Timeshiftの使い方についてはこちらの記事で紹介しています (基本GUIが必要です)。

endy-tech.hatenablog.jp

バージョンアップの実施

下記公式情報に従ってバージョンアップします。
Fedora Quick Docs - DNF System Upgrade

パッケージ更新、再起動

まずは、既存のrpmパッケージを全て最新にします。
--refreshを付けることで、ローカルのメタデータのキャッシュを「期限切れ」扱いにします。
要するにこのタイミングでリポジトリから改めてパッケージ一覧をダウンロードすることで、現時点の最新版のパッケージを確実にオンラインからダウンロードし、インストールするということをやっています。

sudo dnf upgrade --refresh

そしてコンピュータを再起動します (重要プロセスやカーネルの更新が入っている可能性もあるためだと思います)。

sudo reboot

dnf-plugin-system-upgrade のインストール

DNF によって Fedora をバージョンアップするために、DNF System Upgrade Plugin をインストールします。
既にインストール済みでしたらこの手順は不要ですが、とりあえず実行しちゃっても害はありません。

sudo dnf install dnf-plugin-system-upgrade

Fedora 新バージョン用のパッケージをダウンロード

ここは要注意です。
コピペする前にコマンドをよく確認してください。

dnf system-upgrade downloadは、バージョンアップに必要なパッケージをダウンロードするコマンドです (man dnf-system-upgrade)。
--refreshオプションは、メタデータのキャッシュを利用せず、必ずダウンロードするオプションです (man dnf)。

さて、ここが重要です。
--releaseverで、アップグレード先のFedoraバージョンを指定します。
基本的には最新の安定版を指定します (今回は37)。
最新の安定版は、Fedoraダウンロードサイトで確認できます (例えば初期パッケージが最小限のFedora Serverはコチラ)。
その他アグレッシブなバージョン (rawhide版や、2022年11月時点では安定版ではない38など) のインストール方法はまた異なりますので、公式サイトにてご確認ください。
https://docs.fedoraproject.org/en-US/quick-docs/dnf-system-upgrade/

ダウンロードには以下のコマンドを実行します。
大量のダウンロードが発生しますが、この時点ではまだ影響はありません。

sudo dnf system-upgrade download --refresh --releasever=37

もし従来バージョンでは提供されていたパッケージが、バージョンアップ後のリポジトリに存在しない場合にはエラーになることがあります。
その際は、--allowerasingオプションを追加することで存在しないパッケージについてはインストールを諦めることができます。
このオプションをつけて実行した場合、実際に削除されるパッケージ名を確認できるはずです (未検証ですが、downloadコマンドなので悪影響はないはずです)。
このオプションを追加して、「実際に消えても問題ないパッケージか」、「代替品を探しておくべきか」、「新バージョンのリポジトリに追加される見込みがあれば待つべきか」など検討した上で、更新作業を進めてよいかご判断ください。
非公式のリポジトリを追加しているとこのような事態になりうるとのことですが、幸いなことに今回のケースでは何も起こりませんでした。

Fedoraバージョンアップ

以下のコマンドを実行した直後、OS再起動してバージョンアップ処理が実行されます。

sudo dnf system-upgrade reboot

バージョンアップされたことの確認

以下のようなコマンドで確認可能です。

cat /etc/os-release 
# NAME="Fedora Linux"
# VERSION="36 (Server Edition)"
# (以下略)

dnf list
# (fc35など、新しいバージョンに対応したパッケージが表示される)

RHEL系の場合は以下コマンドでも確認できます。

cat /etc/redhat-release
# Fedora release 36 (Thirty Six)

以上でバージョンアップ作業は完了です。
お疲れ様でした。

(任意) retired packagesの削除

(参考) retired packagesとは

参考: Fedora Docs - #Clean-up retired package

新しいバージョンのFedoraがリリースされるたびに、様々な理由でFedora公式リポジトリで一部のパッケージが配布対象から外されます。
配布対象からはずされたRPMパッケージは、今後Fedora公式のRPMリポジトリでアップデートが配布されなくなります。

retired packagesとは、以下の理由でFedora公式リポジトリでの配布が終了したパッケージのことです。
retired packagesとみなされる主な原因は、以下が挙げられます。

  • パッケージが古く、今後は使われなくなる
  • アップストリームの更新が停止している
  • メンテナが更新終了を宣言した

retired packagesは、明示的に削除しない限りずっとインストールされたまま残り続けます。
そのままでもFedoraの動作に直接悪影響を与えることはあまりないと思います。
しかし、更新が止まったパッケージが存在し続けることで、セキュリティの脆弱性を踏む可能性が高まります。

retired packagesの中で自分が使わないものがあれば、この機に一括削除することがFedora公式でも推奨されています。

retired packagesの削除手順

Fedora36より1remove-retired-packagesというコマンドが利用できるようになりました。
このコマンドを使えば、「Fedoraのあるバージョン以降のretired packagesを一覧化して削除する」ことが可能となります。

削除する際に気をつけていただきたいのですが、retired packagesが自分にとって本当に不要なパッケージなのか、都度判断が必要です。
retired packagesの洗い出しはツールに任せられますが、削除するか否かの判断はご自身で行うようにしてください。

初回利用時は、以下のコマンドでremove-retired-packagesをインストールします。

sudo dnf install remove-retired-packages

remove-retired-packagesを実行すると、以下の条件の両方に該当するパッケージが一覧表示されます。
その後、それらのパッケージ1つ1つに対してdnf removeコマンドが実行され、該当パッケージを削除するか否かを選択できます。

  • 「今のバージョン-1」以降にリリースされたretired packages
    • (例えば、今Fedora36なら、Fedora35のretired packagesが対象になります)
  • 現在インストールされているパッケージ
remove-retired-packages

以下のようにFedoraバージョンを指定すると、そのバージョン以降のretired packagesが対象になります。
Fedoraを繰り返しバージョンアップしてきたマシンで今回初めてバージョンアップする場合は、バージョン番号を指定することをおすすめします。
あまりにも古いバージョンを指定するとretired packagesの洗い出しに時間がかかりますので、適切なバージョン番号を指定すると良いでしょう。

# remove-retired-packages 32

バージョン番号をどう指定すれば良いかわからないときは、以下のコマンドで今インストールされているパッケージのFedoraリリースを確認するのが良いと思います。

以下のコマンド出力例からは、インストール済みのパッケージがFedora32向け以降であることがわかります。
したがって、remove-retired-packages 32を実行すれば良さそうと判断できます。
(※) リリースバージョンが古くてもretired packagesではないものもありますので、この結果はあくまで目安と考えてください。

rpm -qa | grep -Po 'fc\d+' | uniq | sort
# fc32
# fc34
# fc35
# fc36

最後に、remove-retired-packagesを実行したときのログを添付します。

# remove-retired-packages 32
# Looking for retired packages betweeen Fedora 32 and Fedora 36

# These packages have been retired:
# bashtop: Linux resource monitor
# compat-openssl10: Compatibility version of the OpenSSL library
# ...

# ===================================================
#  Package  Architecture  Version  Repository  Size
# ===================================================
# Removing:
#  bashtop   noarch  0.9.25-1.fc33  @fedora   252 k
# Removing unused dependencies:
#  pcp-conf  x86_64  5.3.6-2.fc36   @fedora   63 k
#  pcp-libs  x86_64  5.3.6-2.fc36   @fedora   1.4 M
#  sysstat   x86_64  12.5.6-1.fc36  @updates  1.6 M

# Transaction Summary
# ===================================================
# Remove  4 Packages

# Freed space: 3.3 M
# Is this ok [y/N]:

# (以下略)

(参考) バージョンアップすべき理由

1つ目の理由は、古いOSバージョンでは最新のパッケージが使えないことがあるためです。
OSがサポート期間中であっても、最新のOSバージョンに紐づく公式リポジトリでしかパッケージが更新されないことがあります。

今回についても、GNS3クライアントをFedora に導入しようとしたら、最新版のGNS3クライアントが新しいバージョンのFedora公式リポジトリでしか提供されていなかったのがバージョンアップのきっかけになりました。
※GNS3サーバとGNS3クライアントは、同じバージョンでないと動きません。今回はGNS3サーバが最新だったので、クライアントも最新にしたかったのです

2つ目の理由は、OSがサポート切れ (End of Life) になると色々と困るためです。
これは言わずもがなですね。
サポートが切れると、パッケージが更新されなくなったり、各種製品の動作要件から外れたり、新しいツールが動作しなくなったりします。
ツールのバージョンを古いまま保ったとしても外部サービスと連携する時に互換性がなくなり、不具合が起こるリスクもあります。

3つ目の理由は、あまりにも古いバージョンのままにしておくと、アップグレードパスが複雑になるためです。
Fedora公式のアップグレード手順にも記載がありますが、End of Life のOSからのアップグレードはサポートされないか、良くても複雑な手順を踏むことになります。
中間のバージョンを経由しつつ複数のバージョンアップ作業が必要になることもザラです。
常に最新に保つ必要まではないですが、あまり最新版とかけ離れないよう意識するのが大事かなと思います。
特にFedoraのようにリリースサイクルの短いディストリビューションではなおさらです。

(参考) Fedoraのサポート期間について

サポート対象のFedoraは、基本的に最新版とその1つ前のバージョンです。
2つ先のバージョンがGeneral Availableとしてリリースされてから、4週間が経過するとEnd of Lifeになります。2

例えば、2021年現在でFedora35が最新です。
この場合、サポートされるのはFedora35, Fedora34のみです。
Fedora35がリリースされてから4週間以内であればFedora33のサポートが継続するので、この間であればFedora33→Fedora35というアップグレードもサポート期間内に可能です。
Fedora33以下はEnd of Life (EoL) となります。

サポート期間の目安ですが、13ヶ月程度と言われています3
Fedoraの新しいバージョンのリリースはおよそ6ヶ月ごとに行われます。

現時点でどのバージョンのFedoraがサポートされているかの情報は、以下のリンクが参考になります。

リンク コメント
Fedora - End of Life ※EoLになったFedoraの一覧
Get Fedora "Download Now"のリンクから、Fedoraの最新リリースを確認できる
Fedora - Releases/HistoricalSchedules 過去のリリース日とリリースノートへのリンクがある。
たまに更新が遅れる

EoLになってもOSバージョンアップは可能ですが、それでもなるべく早く最新版に追従した方が良いと思います。
ないとは思いますが、10年ぐらい塩漬けにするとアップグレードパスが複雑になるリスクもあります。

(参考) アップグレードパスの実績

本記事の手順にて、私が経験したFedoraのアップグレードパスを記録しておきます。

アップグレード元 アップグレード先
32 33, 35
33 35
35 36
36 37

(参考) ディスク空き容量について

アップグレードに際し、大量のパッケージをダウンロードします。
ルートファイルシステムサイズが16GiBのVMをアップグレードするのに、約10GiBの空き容量が必要でした。

空き容量が足りない場合、sudo dnf system-upgrade download コマンドがcurlのエラーなどによって失敗しました。

まとめ

Fedoraのバージョンアップ手順を書きました。
公式通りの手順でうまく行きました。
基本は公式ページに従って操作するのが良いと思いますが、ざっくり予習するのに本記事が少しでもお役に立てれば幸いです。