有馬総一郎のブログ

(彼氏の事情)

2024年02月19日 17:46:47 JST - 5 minute read - Comments - Linux

`公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY` GPG鍵失敗編

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のリポジトリが書いてない…え、どこ見て処理しているんだ2grepするも見付かない。sudo apt cleanやら再起動しても駄目。

GPG鍵リングにdockerの公開鍵が

打ったコマンドを思い返すにGPG鍵リングが怪しいと、思いgpg --list-keysするとIDの7EA0A9C3F273FCD8は一致しないが、dockerのものがあったのでgpg --delete-secret-and-public-key キーID3をして削除した。

$ 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するとデフォルトの鍵リングってのに格納されてしまうんだなぁ。だから、技評のサイトでは

  1. gpg --no-default-keyring --keyring /tmp/temp-keyring.gpg --import "ダウンロードしたリポジトリ鍵ファイル名"とインポート
  2. 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コマンドの代替コマンドの登場が待たれる。


  1. 18.04からアップグレードを繰り返していたので、 .distUpgrade.sava といったファイルが残りまくっていたり、コメントアウトされて参照されなくなったファイルなど大量にあったので削除した。 13.10 - difference between sources.list and sources.list.distUpgrade - Ask Ubuntuを参照。 ↩︎

  2. /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はあったけど、aptgpgと紐付けてるのはどこだろうか? ↩︎

  3. -が一つ足らなくてgpg: 対立するコマンドというエラーが出て、戸惑ったのは秘密だ。 ↩︎

  4. しなおす、というか以前はdockerは専用リポジトリでなくubuntuリポジトリからインストールしていたと思う。 ↩︎

Tags: Ubuntu Desktop Ubuntu Server Pop!_OS

Linuxで、Blu-rayやDVDのチャプター情報を確認して、音声をflacに変換する dokcer-wineで日本語入力が出来る状態でWindows版LINEを起動する

comments powered by Disqus