はじめに
半年に一度の恒例行事となりましたFedoraのアップグレードですが、Fedora 31から32へのアップグレード中に大量のエラーが発生し、やむなく電源を切ったところ、dnfが実行できなくなってしまいました。dnfのフロントエンドプログラム自体はPython3で記述されていますが、dnfが使用するパッケージがないので実行できない旨のエラーメッセージが表示されます。
ただし、この現象はFedora 31から32へのアップグレード時に必ず発生するというものではないようです。アップグレードを試みたPCに接続されているHDDで寿命が近いものがあるようで、それが悪さをしている可能性がありそうです。
dnfが動かないというのは一大事で、その解決が最優先になってしまい、詳細な記録を取ることができなくなりがちです。今回のケースでも詳細な記録を取っていません。
そこで、この記事ではhistoryコマンドの記録を元にして、試してみてよかったこと、試してはいけないことを雑にまとめます。
試してみてよかった(と思われる)コマンド
以下のコマンドは試してみてよかった(と思われる)コマンドです。
どのコマンドもダウンロードされたパッケージが格納されているディレクトリ上で実行します(Fedoraの場合は/var/cache/dnf/の下あたりにあります)。dnfコマンドはこの時点では壊れた状態でしたが、幸いFedora 32へのアップグレードに必要なパッケージ(rpmファイル)はダウンロードされていたので、rpmコマンドを駆使して思いあたるパッケージをインストールしていきます。
--nodepsオプション最強です。
また、同名のパッケージでアップグレード元のバージョンのものがインストールされていることが原因で依存パッケージを見つけられない状況になっている場合には、そのパッケージを削除後にアップグレード先のバージョンのパッケージをインストールします。
ここまでの作業で何とかdnfが復活したので、root権限で以下のコマンドを実行します。
PCを再起動すると、インストールが実行されます。インストールが終了するとFedora 32のカーネルを利用してPCが再起動されます。
試してはいけない(と思われる)コマンド
以下のコマンドをroot権限で片っ端から実行してみたのですが、怪しいダミーパッケージがインストールされたり(dnf及びyum)、そもそもパッケージがなかったりして、先に進むことができませんでした。
スポンサーリンク
特にdnf及びyumのダミーパッケージっぽいパッケージをインストールしてしまった場合には、以下のコマンドを実行して当該のパッケージを削除します。
まとめ
dnfコマンドの復旧後はFedora 32へのアップグレードが無事完了しました。
なお、この記事を書きながら別のPCにインストールされているFedora 31を32にアップグレードしてみましたが、この記事の冒頭に書いたような現象は発生しませんでした。上記の現象はアップグレードの作業内容の問題ではなさそうであることが確認できたので、他のFedora 31についても順次Fedora 32にアップグレードしていきます。
アップグレードの完了後にuname -aコマンドを実行すると、以下のような表示になります。カーネルのバージョンは5.6.13のようです。
今回はhistoryコマンドの記録を元に実行してよいコマンドと実行してはいけないコマンドを雑に分類しましたが、次回dnfコマンドが壊れたときにはエラーメッセージもしっかり回収しておきたいと思います。(`・ω・´)
この記事は以上です。