🐔

apt-key の非推奨化と keyring の扱い方

2024/01/27に公開

keyring ってどうすればいいんだっけ?

Debian 系で apt-key コマンドが非推奨化されて久しいが、リポジトリ追加の時に手で keyring ファイルをメンテするたびに「あれ、どうすればいいんだっけ?」となっていたので(鳥頭)、ちゃんと調べてメモ。

結論

  • ダウンロードした keyring は推奨の /etc/apt/keyrings ディレクトリ配下に置く。他の場所でもまぁいいが、間違っても /etc/apt/trusted.gpg.d にだけは置いてはいけない。
  • ファイルが ASCII armor 形式だった場合でも gpg --dearmor する必要は無いが、その場合拡張子は .asc にする必要がある。
  • sources.list にオプション [signed-by=/etc/apt/keyrings/ダウンロードしたファイル名] を付ける。

以下、調べたメモ。

keyring は /etc/apt/keyrings に置く

どうせ sources.listsigned-by オプションでファイル名を指定するので keyring は基本的にどこにおいても良いのだが、最近[1] は野良リポジトリのための keyring を置く場所として /etc/apt/keyrings ディレクトリが推奨されている[2]ので、わざわざ逆らう必要が無い。

たまに /usr/share/keyrings に置くような手順が書かれている場合もあるが、ここはパッケージでメンテナンスされている keyring ファイルの置き場[3]なので、ここには置かない方が良いだろう。

他の場所に置いたらダメなわけではないが、/etc/apt/trusted.gpg.d にだけは置いてはいけない。なぜかと言うと、signed-by オプションが指定されていない sources.list で勝手に使われてしまうからだ。

keyring は ASCII armor 形式のままでいい

keyring が ASCII armor 形式の場合に、gpg --dearmor でバイナリ形式にしてから置くように書いてある手順が多い。しかし、apt のバージョンが 1.4 以上[4]の場合には ASCII armor 形式のままで大丈夫なので、わざわざ dearmor する必要は無い[5]

ただし、その場合ファイルの拡張子は .asc にする必要がある。

ちなみに、バイナリ形式の場合の推奨(?)拡張子は .gpg である。

sources.list には signed-by オプションを付ける

sources.list/etc/sources.list.d ディレクトリ配下に任意のファイル名で作成すればよいが、その際に signed-by オプションを忘れずにつける必要がある。
例えば Docker の場合は以下のような感じ。

/etc/sources.list.d/docker.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg.asc] https://download.docker.com/linux/ubuntu jammy stable

なお、/etc/sources.list への直接追加はしない方がいいのは言うまでもない。

ちなみに、arch=amd64 は書いておいた方が速い的な記載を見かけた気がするが、ホントなのかはよく分からない。(だって /etc/sources.list には書いてないよ?)

脚注
  1. Debian だと 12(Bookworm)、Ubuntu だと 22.04(Jammy) あたり? ↩︎

  2. man 5 sources.listSigned-By の記載によると、"The recommended locations for keyrings are /etc/apt/keyrings for keyrings managed by the system operator" とのこと ↩︎

  3. man 5 sources.listSigned-By の記載によると、"The recommended locations for keyrings are ... , and /usr/share/keyrings for keyrings managed by packages" とのこと ↩︎

  4. Debian だと 8 stretch 以降、Ubuntu だと 18.04(Bionic) あたり? ↩︎

  5. man 8 apt-key の SUPPORTED KEY RING FILES を参照 ↩︎

Discussion