sudo apt update
で突如出現する公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 7EA0A9C3F273FCD8
だけど、sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8
でも解消しなかったのでメモしておく。こんなバカやる人も少ないだろうが…
理由と解決方法は、gpg
コマンドで失敗しているので、一度、GPG鍵リングから削除してから、再度、鍵の取得、リポジトリ追加をしたら直った。一部、勘違いしているかも知れないし、腑に落ちない部分もあるが、つらつらと経緯を記しておく。
リポジトリ追加に失敗したらsudo apt update
でエラー
cloudflare
のパッケージが更新されいないなぁ、と思ってdebファイルをダウンロードして更新したのだけど、あれsudo apt update
で更新されないんだっけ?とか思って調べると
Do .deb installed apps get updates? - Ask Ubuntuによるとリポジトリから提供できるなら、sudo apt update
で更新されるとあった。
cloudflaredリポジトリ追加してなかったっけなぁ。追加しておくかと、 pkg.cloudflare.com/index.htmlを見て実行しようとする。しかし、 過去に書いたようにASCII Armor(テキスト)形式のまま保存するより、バイナリで保存しておきたいと欲をかいて、以下のコマンドを実行する。
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo gpg -o /usr/share/keyrings/docker-keyring.gpg --dearmor
そう、cloudflare
の公開鍵をdocker
として保存してしまったのだ。上書きしたわけでもなく、削除してやりなおせば良いだろうと軽く考えていたのだけどsudo apt update
すると以下のエラーが。
エラー:1 https://download.docker.com/linux/ubuntu jammy InRelease
公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 7EA0A9C3F273FCD8
/etc/apt/sources.list/ 、 /etc/apt/sources.list.d/配下ファイル など1見てもdocker
のリポジトリが書いてない…え、どこ見て処理しているんだ2。grep
するも見付かない。sudo apt clean
やら再起動しても駄目。
GPG鍵リングにdockerの公開鍵が
打ったコマンドを思い返すにGPG鍵リングが怪しいと、思いgpg --list-keys
するとIDの7EA0A9C3F273FCD8
は一致しないが、docker
のものがあったのでgpg --delete-secret-and-public-key キーID
3をして削除した。
$ gpg --delete-secret-and-public-key 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
pub rsa4096/8D81803C0EBFCD88 2017-02-22 Docker Release (CE deb) <docker@docker.com>
この鍵を鍵リングから削除しますか? (y/N) y
そして、以下のようにdocker
のリポジトリ、鍵を追加・設定しなおす4。
$ ls /usr/share/keyrings/docker.gpg
/usr/share/keyrings/docker.gpg
$ sudo rm /usr/share/keyrings/docker.gpg
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg -o /usr/share/keyrings/docker-keyring.gpg --dearmor
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
再度、sudo apt update
すると
E: ソース https://download.docker.com/linux/ubuntu/ jammy に関してオプション Signed-By の値が競合します: /usr/share/keyrings/cloudflare-main.gpg != /usr/share/keyrings/docker-keyring.gpg
E: ソースのリストを読むことができません。
とエラー。もう、cloudflare
のリポジトリ、鍵も削除する。
これでようやく、平安を取り戻せた。sudo apt update
出来ること、エラーがないことを確認してcloudflare
のリポジトリ追加しなおした。
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/cloudflare-main.gpg > /dev/null
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared jammy main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
gpg --delete-keys 0E98404D386FA1D9
前はsudo gpg
する形にしていたが、良くないということで| gpg --dearmor |
を挟むようにした。バイナリをtee
で書き込むのって、どうよ?と思ったが、問題ないようだ。最後にGPGの鍵リングからは削除した。
Debian APTの鍵を安全に追加する方法などで詳しい内容が書かれている。
gpg
のご利用は慎重に
gpg
するとデフォルトの鍵リングってのに格納されてしまうんだなぁ。だから、技評のサイトでは
gpg --no-default-keyring --keyring /tmp/temp-keyring.gpg --import "ダウンロードしたリポジトリ鍵ファイル名"
とインポートgpg --no-default-keyring --keyring /tmp/temp-keyring.gpg --export --output "リポジトリ名".gpg
とエスクポート
とするやり方をしていたか。
--no-default-keyring
: このオプションを使用すると、デフォルトの鍵リングを無視します。通常、GPGはデフォルトの鍵リング(通常は~/.gnupg/pubring.kbxや~/.gnupg/pubring.gpg)を使用して、公開鍵を格納および検索します。しかし、このオプションを指定すると、デフォルトの鍵リングが無視され、代わりに明示的に指定された鍵リングだけが使用されます。 `–keyring: このオプションを使用して、特定の鍵リングを指定します。指定された鍵リングは、GPGが公開鍵や秘密鍵を読み込むためのファイルです。このオプションを使用することで、デフォルトの鍵リング以外の鍵リングを明示的に指定することができます。
ChatGPTで解説してくれた上の内容が少し分かった気がする。にしても /etc/apt/keyrings だったり /usr/share/keyrings とブレがあったり、私のようなうっかりエンジニアは、コマンドミスが起こすので、やはりapt-key
コマンドの代替コマンドの登場が待たれる。
-
18.04からアップグレードを繰り返していたので、 .distUpgrade 、.sava といったファイルが残りまくっていたり、コメントアウトされて参照されなくなったファイルなど大量にあったので削除した。 13.10 - difference between sources.list and sources.list.distUpgrade - Ask Ubuntuを参照。 ↩︎
-
/var/lib/apt/lists/download.docker.com_linux_ubuntu_dists_jammy_InRelease
や/var/lib/apt/lists/download.docker.com_linux_ubuntu_dists_jammy_stable_binary-amd64_Packages
はあったけど、apt
とgpg
と紐付けてるのはどこだろうか? ↩︎ -
-
が一つ足らなくてgpg: 対立するコマンド
というエラーが出て、戸惑ったのは秘密だ。 ↩︎ -
しなおす、というか以前は
docker
は専用リポジトリでなくubuntuリポジトリからインストールしていたと思う。 ↩︎