メインマシンの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の期限切れエラーになってもダウンロードされたパッケージは一時的に保存されるので再実行の際はダウンロード済みのもので処理されるが、これを実行してしまうと再度ダウンロードするハメになる)