以前に、次のような記事を書いたが、使えないパターンがあった。
エラーになるパターン
こんな感じにカーネルがインストールされた状態で、最も古いカーネルで起動中。
# rpm -qa | grep kernel | sort kernel-4.18.0-348.2.1.el8_5.x86_64 kernel-4.18.0-348.20.1.el8_5.x86_64 kernel-4.18.0-348.23.1.el8_5.x86_64 ・・・略 # uname -r 4.18.0-348.2.1.el8_5.x86_64
以前のコマンドでは、次のようなエラーになる。
# dnf remove $(dnf repoquery --installonly --latest-limit=-2) エラー: 問題: 操作は結果的に以下の保護されたパッケージを削除します: kernel-core (インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
古いカーネルを削除する方法・改良版
代わりに、次のようなコマンドで削除する。
# dnf remove --oldinstallonly --setopt installonly_limit=2 kernel 依存関係が解決しました。 =========================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ =========================================================================================== 削除中: kernel x86_64 4.18.0-348.20.1.el8_5 @baseos 0 kernel-core x86_64 4.18.0-348.20.1.el8_5 @baseos 68 M kernel-modules x86_64 4.18.0-348.20.1.el8_5 @baseos 22 M トランザクションの概要 =========================================================================================== 削除 3 パッケージ 解放された容量: 90 M これでよろしいですか? [y/N]:
これならエラーは出ない。
削除対象になるのは、起動中を除いた最も古いカーネルからカウントして決定される。
指定されたdnfのオプションの意味は以下の通り。
- remove --oldinstallonly:古いinstallonlyパッケージを削除
- --setopt:/etc/dnf/dnf.confのデフォルト値を変更(installonly_limitの値を2にした)