ククログ

株式会社クリアコード > ククログ > 非推奨となったapt-keyの代わりにsigned-byとgnupgを使う方法

非推奨となったapt-keyの代わりにsigned-byとgnupgを使う方法

apt-key(8)はapt 2.1.8より非推奨となりました。

Ubuntu 20.10 (Groovy)やそろそろリリースの時期が近づいてきたDebian 11(Bullseye)からはapt-keyを利用すると警告されます。

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

今回はapt-keyを使うのをやめて、代替手段へと(パッケージ提供側が)移行する方法について紹介します。

apt-keyはどのような挙動をするのか

ソフトウェアを簡単にインストールできるように、開発元が独自にAPTリポジトリを提供してくれている場合があります。 その場合、パッケージの署名に使っている公開鍵をあらかじめインポートするように指示していることがあります。

apt-keyはその鍵をインポートするのにこれまでよく使われていました。

ただし、apt-keyは(対象となるキーリングを指定しない場合には)鍵を/etc/apt/trusted.gpgへと取り込みます。 /etc/apt/trusted.gpgはAPTが既定で信頼する鍵として扱うことを意味します。 単に特定のリポジトリにひもづいた鍵をそちらへ追加するのは、あまりよいやりかたではありません。

apt-keyから移行する方法

apt-keyを使ったやりかたから移行する方法はいくつかあります。

  • apt-keyを使ってキーリングに変換し、対象リポジトリとひもづける方法
  • gpgを使ってキーリングに変換し、対象リポジトリとひもづける方法(非推奨)
  • gpgを使ってキーリングを作成したものをエクスポート、対象リポジトリとひもづける方法(おすすめ)

apt-keyはまだDebian 12 (bookworm)でも使えますが、今後削除される 1 ことを踏まえると、最後のgpgを使って適宜エクスポートするやりかたがおすすめです。

apt-keyを使ってキーリングに変換し、対象リポジトリとひもづける方法

インポート元の鍵がarchive.keyで移行先のキーリングをarchive-keyring.gpgとした場合の変換は次のようにして行います。

$ apt-key --keyring ./archive-keyring.gpg add archive.key

apt-keyが削除され、使えなくなるまでは有効な方法です。2 apt-keyが削除されたあとに移行する必要がでてきたときは、gpgを使いましょう。

キーリングを対象リポジトリとひもづける方法は後述します。

gpgを使ってキーリングに変換し、対象リポジトリとひもづける方法(非推奨)

2025-01-06 追記: 以前の記事では、gpgで鍵をインポートしてkeybox形式のキーリングに変換するという方法を紹介していました。

ただし、apt 2.9.16以降のバージョンでは、keybox形式がサポートされなくなり、リポジトリの検証に失敗するようになっています。 3

例えば、apt update等を実行すると次のようなエラーが発生し、リポジトリの更新に失敗します。

Warning: An error occurred during the signature verification.
The repository is not updated and the previous index files will be used. GPG error:
https://packages.treasuredata.com/lts/5/debian/bookworm bookworm InRelease:
Sub-process /usr/bin/sqv returned an error code (1), error message is:
Error: Failed to parse keyring "/usr/share/keyrings/fluent-lts-archive-keyring.gpg"
Caused by:     0: Reading "/usr/share/keyrings/fluent-lts-archive-keyring.gpg": EOF     1: EOF

具体的には、来年リリースされるであろうDebian 13 (trixie)やUbuntu 25.04 (Plucky Puffin)以降でこの問題が発生するはずです。 そのため、この方法が非推奨であることを明記しました。

インポート元の鍵がarchive.keyで移行先のキーリングをarchive-keyring.gpgとした場合の変換は次のようにして行います。

$ gpg --no-default-keyring --keyring ./archive-keyring.gpg --import archive.key

期待通りに変換できたかは、fileコマンドを使うとわかります。

$ file archive-keyring.gpg
archive-keyring.gpg: GPG keybox database version 1 (省略)

上記のようにGPG keybox database version 1となっていれば期待通りに変換できています。

キーリングを対象リポジトリとひもづける方法はあとで述べます。

2025-01-06 追記: 上記の説明は現在では古くなっています。過去の時点では利用できたものの、推奨される方法ではありませんでした。 次の.ascにエクスポートする方法を推奨します。あくまで過去の情報としてこのまま残しておきますが、使用しないでください。

gpgを使ってキーリングを作成したものをエクスポート、対象リポジトリとひもづける方法(おすすめ)

インポート元の鍵がarchive.keyで移行先のキーリングをarchive-keyring.ascとした場合の変換は次のようにして行います。

$ gpg --no-default-keyring --keyring ./archive-keyring.kbx --import archive.key
$ gpg --no-default-keyring --keyring ./archive-keyring.kbx --armor --export > archive-keyring.asc

期待通りに変換できたかは、fileコマンドを使うとわかります。

$ file archive-keyring.asc
archive-keyring.asc: PGP public key block Public-Key (old)

上記のようにPGP public key block Public-Key (old)となっていれば期待通りに変換できています。

エクスポートしたファイルを対象リポジトリとひもづける方法は次で述べます。

変換した鍵を対象リポジトリとひもづける方法

APTの設定ファイルでは、リポジトリがどの鍵で署名されたかを明示できます。

そのため、サードパーティーの鍵は/usr/share/keyrings/配下において、 どの鍵で署名されているかをsigned-byで明示してひもづけるのがおすすめです。

変換した鍵がarchive-keyring.ascであれば、次のようにして対象リポジトリとひもづけます。

/etc/sources.list.d/配下に置かれた設定ファイルの内容は次のようになるはずです。

deb [signed-by=/usr/share/keyrings/archive-keyring.asc] https://packages.example.com/debian stable main

deb822形式だと次のようになるはずです。

Types: deb
URIs: https://packages.example.com/debian/
Suites: bookworm
Components: contrib
Signed-By: /usr/share/keyrings/archive-keyring.asc

このようにすることで、/etc/apt/trusted.gpg.d配下に変換後の鍵を置かなくても、 サードパーティーが提供するリポジトリの正規パッケージであることを確認してパッケージをインストールできます。 サードパーティーによって提供される鍵によって検証されるリポジトリの範囲を限定できるのでおすすめです。

まとめ

今回は、非推奨となったapt-keyから移行する方法について紹介しました。 Debian 11 (Bullseye)がapt-keyが使える最後のリリースです。Debian 12 (Bookworm)で削除されますので移行はお早めに。4

  1. apt 2.9.17以降でapt-keyが削除されているため、今後リリースされるDebian 13 (trixie)や25.04 (Plucky Puffin)では使えません。

  2. apt-keyでarchive-keyring.gpgに鍵を追加した場合、keybox形式とはならないため、aptが2.9.16以降に更新されてもそのまま使えます。

  3. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1088656

  4. 本記事の初出はbullseyeリリースよりも前であったため、当時の情勢からそのように書いていましたが、最終的にはDebian 12 (bookworm)がapt-keyが使える最後のリリースになるはずです。