aptitude(apt)で捕まったときのメモです。

発生した状況

Ubuntu 24.04 で sudo aptitude update を実行した際、Phusion Passenger リポジトリに対して以下のエラーおよび警告が発生しました。

  • エラー:
    • 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY D870AB033FB45BD1
  • 警告:
    • Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

原因

GPG鍵の欠落:

システムが Passenger リポジトリのパッケージが真正なものであるかを確認するための公開鍵を持っていませんでした。

古い管理形式(非推奨):

以前の Ubuntu で一般的だった apt-key による鍵登録を行っていましたが、Ubuntu 24.04 ではその管理方式がセキュリティ上の理由で非推奨(Deprecated)となっていたためです。

対処内容

以下の手順で、鍵を新しい推奨形式(個別のキーリング管理)へ移行させました。

鍵の抽出と個別保存

sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --export D870AB033FB45BD1 | sudo tee /usr/share/keyrings/phusion-passenger.gpg > /dev/null

古い管理リストから鍵を削除

sudo apt-key del D870AB033FB45BD1

リポジトリ設定の更新

/etc/apt/sources.list.d/passenger.list 内の記述に [signed-by=/usr/share/keyrings/phusion-passenger.gpg] を追記し、特定のリポジトリと鍵を紐付けました。

→ 筆者にしては珍しく.listのバックアップを取っていませんが(切り戻しを取れるようにしていません)、これは「切り戻したところで古い鍵形式だから」です。

解決確認

sudo aptitude update

でエラーがないことを確認します。

作業が必要だった理由(背景)

Ubuntu 22.04 以降、OSのセキュリティ設計が強化され、

「すべてのリポジトリで共通の鍵束を使う方式」から「リポジトリごとに専用の鍵を個別に指定する方式」

への完全移行が推奨されているためです。これにより、以下のメリットがあります。

  • セキュリティ向上:
    • 万が一、一つのリポジトリの鍵が漏洩・悪用された場合でも、他のリポジトリの安全性に影響を与えない設計になっています。
  • メンテナンス性の向上:
    • どの鍵がどのリポジトリのものかが明確になり、不要になった鍵の削除や更新が安全に行えます。