非公式APTリポジトリの利用 - apt-key addから/etc/apt/trusted.gpg.dとsigned-byオプションへの移行
apt keyを実行すると以下のメッセージを見るようになりました。
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
/etc/apt/trusted.gpg.dディレクトリを見るとdebian-archive-keyringパッケージによって展開されたDebian公式リポジトリのOpenPGP公開鍵が存在しています。
非公式なAPTリポジトリについての対処方法はDebianRepository/UseThirdParty - Debian Wikiに分かりやすく書いてありました。
OpenPGP公開鍵の配布方法はOpenPGP Key distributionにて以下のように定められています。
- リポジトリはOpenPGP鍵で署名されているべきです。
- バイナリ形式の公開鍵が
<deriv>-archive-keyring.gpgという名前でリポジトリのルートから取得可能であるべきです。<deriv>はリポジトリを表す短い名前です。
- ASCII形式の公開鍵は
<deriv>-archive-keyring.ascという名前で取得可能でもよいです。 - OpenPGP公開鍵はHTTPSで提供されるべきです。
- 公開鍵サーバから取得可能にしてもよいです。
- 適切な公開鍵サーバーを選ぶべきです。
- OpenPGP公開鍵は他の信頼できる鍵で署名されるべきです。
- rootのみが書き換え可能な場所でHTTPSのようなセキュアなメカニズムでダウンロードできなければなりません。
/etc/apt/trusted.gpg.dに置いてはなりません。apt-key addで追加してはなりません。/usr/share/keyringsに置くべきです。
リポジトリを利用する場合には以下に従う必要があります。
- ASCII形式の公開鍵を使ってはなりません。
gpg --dearmorや、gpt --importとgpg --exportの組合せなどでバイナリ形式に変換すべきです。
sources.listのエントリはsigned-byオプションを持つべきです。signed-byオプションにはフィンガープリントではなくファイルを指定しなければなりません。- tipではsecure aptのバージョンが1.4以降であればASCII形式のOpenPGP公開鍵を使用できるとあります。
signed-byオプションではgpg拡張子だとバイナリ形式として読み込み、asc拡張子だとASCII形式として読み込むようです。 私はバイナリ形式とASCII形式の両方を管理するものの、signed-byオプションにはバイナリ形式を使うことにします。
/etc/apt/trusted.gpg.dとsigned-byオプションへの移行
節のタイトルとは矛盾しますが/etc/apt/trusted.gpg.dを避けて非公式APTリポジトリの公開鍵を管理しなければなりません。
/usr/share/keyringsディレクトリにはdebian-archive-keyringパッケージに含まれるOpenPGP公開鍵が置かれているため、/usr/local/share/keyringsディレクトリを作り分けて管理することにしました。
以下に利用している非公式APTリポジトリのsources.listの内容を掲載します。#で始まるコメント行にOpenPGP公開鍵の取得方法を書きました。
プロンプト文字が$であれば一般ユーザーで実行するコマンドで、#であればrootで実行するコマンドです。
Docker Engine (/etc/apt/sources.list.d/docker-engine.list)
# # wget https://download.docker.com/linux/debian/gpg -O /usr/local/share/keyrings/docker-engine.asc
# # wget -qO- https://download.docker.com/linux/debian/gpg | gpg --dearmor | tee /usr/local/share/keyrings/docker-engine.gpg > /dev/null
deb [signed-by=/usr/local/share/keyrings/docker-engine.gpg] https://download.docker.com/linux/debian bullseye stable
Heroku CLI (/etc/apt/sources.list.d/heroku.list)
# # wget https://cli-assets.heroku.com/apt/release.key -O /usr/local/share/keyrings/heroku-archive-keyring.asc
# # wget -qO- https://cli-assets.heroku.com/apt/release.key | gpg --dearmor | tee /usr/local/share/keyrings/heroku-archive-keyring.gpg > /dev/null
deb [signed-by=/usr/local/share/keyrings/heroku-archive-keyring.gpg] https://cli-assets.heroku.com/apt ./
ローカルAPTリポジトリ (/etc/apt/sources.list.d/local-debsrc.list)
# $ gpg --list-keys # get a fingerprint
# $ gpg --export <fingerprint> | sudo dd of=/usr/local/share/keyrings/local-debsrc-archive-keyring.gpg
# $ gpg -a --export <fingerprint> | sudo tee /usr/local/share/keyrings/local-debsrc-archive-keyring.asc
deb [signed-by=/usr/local/share/keyrings/local-debsrc-archive-keyring.gpg] file:///home/ein/debsrc/repository/ ./
PowerShell (/etc/apt/sources.list.d/microsoft.list)
# # wget https://packages.microsoft.com/keys/microsoft.asc -O /usr/local/share/keyrings/microsoft-archive-keyring.asc
# # wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /usr/local/share/keyrings/microsoft-archive-keyring.gpg > /dev/null
deb [arch=amd64 signed-by=/usr/local/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/microsoft-debian-bullseye-prod/ bullseye main
Installing PowerShell on Debian Linux - PowerShell | Microsoft DocsのInstallation on Debian 10 via Package Repositoryを見ると正しいOpenPGP公開鍵の取得からPowerShellのインストールの手順は以下の通りのようです。
# Download the Microsoft repository GPG keys
$ wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb
# Register the Microsoft repository GPG keys
$ sudo dpkg -i packages-microsoft-prod.deb
# Update the list of products
$ sudo apt-get update
# Install PowerShell
$ sudo apt-get install -y powershell
# Start PowerShell
$ pwsh
Skype Stable (/etc/apt/sources.list.d/skype-stable.list)
# # wget https://repo.skype.com/data/SKYPE-GPG-KEY -O /usr/local/share/keyrings/skype-archive-keyring.gpg
# # rm -f /tmp/skype-archive-keyring.gpg
# # gpg --keyring /tmp/skype-archive-keyring.gpg --no-default-keyring --import /usr/local/share/keyrings/skype-archive-keyring.gpg
# # gpg --keyring /tmp/skype-archive-keyring.gpg --no-default-keyring --export -a > /usr/local/share/keyrings/skype-archive-keyring.asc
deb [arch=amd64 signed-by=/usr/local/share/keyrings/skype-archive-keyring.gpg] https://repo.skype.com/deb stable main
Skype Unstable (/etc/apt/sources.list.d/skype-unstable.list)
# # wget https://repo.skype.com/data/SKYPE-GPG-KEY -O /usr/local/share/keyrings/skype-archive-keyring.gpg
# # rm -f /tmp/skype-archive-keyring.gpg
# # gpg --keyring /tmp/skype-archive-keyring.gpg --no-default-keyring --import /usr/local/share/keyrings/skype-archive-keyring.gpg
# # gpg --keyring /tmp/skype-archive-keyring.gpg --no-default-keyring --export -a > /usr/local/share/keyrings/skype-archive-keyring.asc
deb [arch=amd64 signed-by=/usr/local/share/keyrings/skype-archive-keyring.gpg] https://repo.skype.com/deb unstable main
/etc/apt/trusted.gpgの削除
apt-key addで使われていた/etc/apt/trusted.gpgを削除します。
# rm /etc/apt/trusted.gpg
apt updateの実行
最後にapt updateを実行してエラーが出なければ移行の完了です。
なお、拡張子(.gpgか.asc)と実際の中身が違っていたり、無関係なOpenPGP公開鍵ファイルを指定していたりするとNO_PUBKEYといったGPG errorが表示されます。