zaki work log

作業ログやら生活ログやらなんやら

dnf updateでGPGの期限切れエラーになったときの対処方法

メインマシンのFedoraのパッケージアップデートでkubectlの更新がエラーになったのでその対処方法についてメモ。
最初の頃は登録が少なかったヘイシャアドカレのいつのまにか全部埋まってたので特に何も紐づけずに公開(笑)

初期状態

コマンドバージョン

zaki@cloud-dev2:~$ kubectl version
Client Version: v1.31.2
Kustomize Version: v5.4.2
Server Version: v1.30.5+k3s1

アップデート内容

zaki@cloud-dev2:~$ sudo dnf update
:
:
 kubectl                                 x86_64          1.31.3-150500.1.1                    kubernetes                 11 M
:

この通り、1.31.2から1.31.3への更新。

エラー内容

error: Verifying a signature using certificate DE15B14486CD377B9E876E1A234654DA9A296436 (isv:kubernetes OBS Project <isv:kubernetes@build.opensuse.org>):
  1. Certificate 234654DA9A296436 invalid: certificate is not alive
      because: The primary key is not live
      because: Expired on 2024-11-02T16:21:11Z
  2. Key 234654DA9A296436 invalid: key is not alive
      because: The primary key is not live
      because: Expired on 2024-11-02T16:21:11Z
error: Verifying a signature using certificate DE15B14486CD377B9E876E1A234654DA9A296436 (isv:kubernetes OBS Project <isv:kubernetes@build.opensuse.org>):
  1. Certificate 234654DA9A296436 invalid: certificate is not alive
      because: The primary key is not live
      because: Expired on 2024-11-02T16:21:11Z
  2. Key 234654DA9A296436 invalid: key is not alive
      because: The primary key is not live
      because: Expired on 2024-11-02T16:21:11Z
Kubernetes                                                                                    3.3 kB/s | 1.7 kB     00:00    
https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key (0x9A296436) の GPG 鍵はインストール済みです
"Kubernetes" リポジトリーに一覧表示されている GPG 鍵はインストール済みですが、このパッケージには適切ではありません。
正しい鍵 URL がこのリポジトリー用に設定されているか確認してください。. 失敗したパッケージは: kubectl-1.31.3-150500.1.1.x86_64
 GPG 鍵が設定されています: https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。
'dnf clean packages' を実行することでキャッシュパッケージを削除できます。
エラー: GPG の確認に失敗しました

メッセージをよく見たらキーの期限が先月に切れている模様。
(1か月以上パッケージアップデートしてなかったんかい)

ダメだった対処法

GPGキーを更新すればいいと思い(いや、それは間違いではないんだが)、以下のGPGをインポートするコマンドを実行。

zaki@cloud-dev2:~$ sudo rpm --import https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
zaki@cloud-dev2:~$ 

しかし、これで更新が成功すると思いきや再実行しても同じエラーになった。

回避策

GPGキーを一度明示的に削除して再インストール、という方法を取る。
もっとスマートなやり方ありそうな気もするけど、一応これでうまくいったという記録。

まずはインストール済みのGPGキーがどれか探す。
これはエラー時のメッセージの以下から。

https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key (0x9A296436) の GPG 鍵はインストール済みです

zaki@cloud-dev2:~$ rpm -qa | grep -i 9A296436
gpg-pubkey-9a296436-6307a177

パッケージ名が分かったら削除。

zaki@cloud-dev2:~$ sudo rpm -e gpg-pubkey-9a296436-6307a177
zaki@cloud-dev2:~$ rpm -qa | grep -i 9A296436
zaki@cloud-dev2:~$ 

そして再度インストール。

zaki@cloud-dev2:~$ sudo rpm --import https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
zaki@cloud-dev2:~$ rpm -qa | grep -i 9A296436
gpg-pubkey-9a296436-6307a177

これでdnf updateがうまくいく。


ちなみに

'dnf clean packages' を実行することでキャッシュパッケージを削除できます。

これはdnf updateでダウンロード済みのパッケージが消えるだけなので、効果なし。
(GPGの期限切れエラーになってもダウンロードされたパッケージは一時的に保存されるので再実行の際はダウンロード済みのもので処理されるが、これを実行してしまうと再度ダウンロードするハメになる)