apt-key の非推奨化と keyring の扱い方
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.list の signed-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 の場合は以下のような感じ。
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 には書いてないよ?)
-
Debian だと 12(Bookworm)、Ubuntu だと 22.04(Jammy) あたり? ↩︎
-
man 5 sources.listのSigned-Byの記載によると、"The recommended locations for keyrings are/etc/apt/keyringsfor keyrings managed by the system operator" とのこと ↩︎ -
man 5 sources.listのSigned-Byの記載によると、"The recommended locations for keyrings are ... , and/usr/share/keyringsfor keyrings managed by packages" とのこと ↩︎ -
Debian だと 8 stretch 以降、Ubuntu だと 18.04(Bionic) あたり? ↩︎
-
man 8 apt-keyの SUPPORTED KEY RING FILES を参照 ↩︎
Discussion