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/ダウンロードしたファイル名]
を付ける。
以下、調べたメモ。
/etc/apt/keyrings
に置く
keyring は どうせ 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/keyrings
for keyrings managed by the system operator" とのこと ↩︎ -
man 5 sources.list
のSigned-By
の記載によると、"The recommended locations for keyrings are ... , and/usr/share/keyrings
for keyrings managed by packages" とのこと ↩︎ -
Debian だと 8 stretch 以降、Ubuntu だと 18.04(Bionic) あたり? ↩︎
-
man 8 apt-key
の SUPPORTED KEY RING FILES を参照 ↩︎
Discussion