apt updateが「以下の署名が無効です」で失敗した

にあえん

July 8, 2023

aptでVSCodeをアップデートしようとしたら以下のようなエラーが出力されました。

% sudo apt update 
ヒット:1 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy InRelease
ヒット:2 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy-updates InRelease                                                                             
ヒット:3 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy-backports InRelease                                                                           
ヒット:4 https://cli.github.com/packages stable InRelease                                                                                            
ヒット:5 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy-security InRelease                                                                            
取得:6 https://apt.releases.hashicorp.com jammy InRelease [12.9 kB]                                                                                  
ヒット:7 https://brave-browser-apt-release.s3.brave.com stable InRelease                                                                             
取得:8 https://dl.k6.io/deb stable InRelease [4,149 B]                                                                                               
エラー:6 https://apt.releases.hashicorp.com jammy InRelease                                       
  公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY AA16FCBCA621E701
エラー:8 https://dl.k6.io/deb stable InRelease                 
  以下の署名が無効です: EXPKEYSIG C780D0BDB1A69C86 k6.io (key for signing binaries) <security@k6.io>
ヒット:9 https://ppa.launchpadcontent.net/cartes/drawing/ubuntu jammy InRelease
ヒット:10 https://ppa.launchpadcontent.net/jonmagon/kdiskmark/ubuntu jammy InRelease
17.0 kB を 3秒 で取得しました (6,203 B/s)                      
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了        
アップグレードできるパッケージが 4 個あります。表示するには 'apt list --upgradable' を実行してください。
W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://apt.releases.hashicorp.com jammy InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY AA16FCBCA621E701
W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://dl.k6.io/deb stable InRelease: 以下の署名が無効です: EXPKEYSIG C780D0BDB1A69C86 k6.io (key for signing binaries) <security@k6.io>
W: https://apt.releases.hashicorp.com/dists/jammy/InRelease の取得に失敗しました  公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY AA16FCBCA621E701
W: https://dl.k6.io/deb/dists/stable/InRelease の取得に失敗しました  以下の署名が無効です: EXPKEYSIG C780D0BDB1A69C86 k6.io (key for signing binaries) <security@k6.io>
W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。

インストールしているK6とTerraformに関連したリポジトリの更新に失敗しています。

そのため、TerraformとK6の2つの公開鍵を更新します。 (Terraformはこちらを参照、K6はこちらを参照しました)

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-keyring.gpg
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/hashicorp-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list >/dev/null
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list > /dev/null

ここまでやって治るかと思ったんですが、K6の方だけ競合してるよーというエラーが出てきました。

% sudo apt update
E: ソース https://dl.k6.io/deb/ stable に関してオプション Signed-By の値が競合します: /usr/share/keyrings/k6-archive-keyring.gpg != /usr/share/keyrings/k6io-keyring.gpg
E: ソースのリストを読むことができません。

原因はイマイチよくわからなかったんですが、最終的にはこの対処法で治りました。

ls -d /etc/apt/sources.list.d/* | grep k6 | xargs sudo rm

まとめ

エラー怖い