概要
Debian 系の Linux ディストリビューション(例:Debian、Ubuntu)で使用されるパッケージマネージャー apt
のレポジトリと GPG キーについて、解説します。
レポジトリ
apt
のリポジトリ(repository)は、ソフトウェアパッケージのリストを保持するサーバーのことです。
これらのリポジトリは、パッケージのインストール、アップグレード、削除、および管理を行うために apt
によってアクセスされます。
レポジトリのコンポーネント
apt
パッケージマネージャーが利用するリポジトリには、いくつかの異なるコンポーネントが存在します。これらのコンポーネントは、パッケージの種類やサポートの範囲に基づいて分類されています。以下は、各コンポーネントの説明です。
- main: Ubuntu の公式サポートを受けたオープンソースソフトウェア。
- restricted: 特定のハードウェアで動作するプロプライエタリドライバなどの制限付きソフトウェア。
- universe: コミュニティがサポートするオープンソースソフトウェア。
- multiverse: ライセンスが制限されたソフトウェア。
- security: セキュリティアップデート用のリポジトリ。
リポジトリの設定
リポジトリの設定は、通常、以下のディレクトリとファイルに保存されます:
/etc/apt/sources.list
:- リポジトリの情報を記載するメインの設定ファイル
/etc/apt/sources.list.d/
:- 追加のリポジトリ情報を記載する設定ファイルを格納するディレクトリ
これらのファイルには、使用するリポジトリの URL と、そのリポジトリから取得するパッケージの情報が含まれています。
リポジトリの書式
/etc/apt/sources.list
ファイルの書式は以下のようになります。
deb <URI> <distribution> <component1> [<component2> ...]
deb-src <URI> <distribution> <component1> [<component2> ...]
- deb: バイナリパッケージリポジトリを示します。バイナリパッケージは、既にコンパイルされてインストール可能な形式のパッケージです。
- deb-src: ソースパッケージリポジトリを示します。ソースパッケージは、ソースコードとそれをビルドするための指示を含むパッケージです。
<URI>
: リポジトリの URL を示します。これは、パッケージを取得するサーバーのアドレスです。<distribution>
: ディストリビューションのリリース名を示します(例:focal
、buster
、stable
)。<component1>, <component2>, ...
: リポジトリのコンポーネントを示します。
以下は、Ubuntu 20.04 LTS (Focal Fossa) の sources.list
ファイルの一例です。
# Main repository
deb http://archive.ubuntu.com/ubuntu focal main restricted
# Updates repository
deb http://archive.ubuntu.com/ubuntu focal-updates main restricted
# Universe repository
deb http://archive.ubuntu.com/ubuntu focal universe
deb http://archive.ubuntu.com/ubuntu focal-updates universe
# Multiverse repository
deb http://archive.ubuntu.com/ubuntu focal multiverse
deb http://archive.ubuntu.com/ubuntu focal-updates multiverse
# Security updates
deb http://security.ubuntu.com/ubuntu focal-security main restricted
deb http://security.ubuntu.com/ubuntu focal-security universe
deb http://security.ubuntu.com/ubuntu focal-security multiverse
リポジトリのリストを更新
リポジトリのパッケージリストを最新の状態に更新するには、以下のコマンドを使用します。
sudo apt update
このコマンドを実行することで、/etc/apt/sources.list
ファイルおよび /etc/apt/sources.list.d/
ディレクトリ内のファイルにリストされているすべてのリポジトリからパッケージ情報を取得し、ローカルのパッケージリストを更新します。
新しいリポジトリを追加
新しい PPA(Personal Package Archive)リポジトリを追加するには、以下のコマンドを使用します。
sudo add-apt-repository ppa:repository-name
例えば、特定のソフトウェアの新しいバージョンが必要な場合や、公式リポジトリに含まれていないソフトウェアをインストールする場合に、このコマンドを使用して PPA リポジトリを追加します。追加後は apt update
でパッケージリストを更新します。
sudo apt update
リポジトリの一覧を表示
現在設定されているリポジトリとその優先順位を表示するには、以下のコマンドを使用します。
apt-cache policy
このコマンドを実行すると、インストールされているパッケージや利用可能なパッケージのリストとともに、各リポジトリの優先順位が表示されます。これにより、どのリポジトリからパッケージがインストールされるかを確認することができます。
GPG キー
GPG(GNU Privacy Guard)キーは、データの暗号化と署名に使用される鍵ペア(公開鍵と秘密鍵)です。apt
では、GPG キーを使用してリポジトリからダウンロードしたパッケージの署名を検証し、そのパッケージが改ざんされていないことを確認するために使用されます。
パッケージの署名:
- 各パッケージはリポジトリの管理者によってデジタル署名されます。
- この署名は、パッケージがリポジトリの管理者によって作成されたことを証明し、パッケージが改ざんされていないことを保証します。
署名の検証:
apt
は、パッケージをインストールまたはアップデートする際に、そのパッケージの署名を検証します。- これは、信頼された GPG 公開鍵を使用して行われます。
- 署名が検証されない場合、
apt
は警告を表示し、通常はそのパッケージのインストールまたはアップデートを拒否します。
GPG キーの管理
GPG キーは、通常、以下のディレクトリとファイルに保存されます:
/etc/apt/trusted.gpg
:- 信頼された GPG キーのバイナリファイル。
/etc/apt/trusted.gpg.d/
: (廃止予定)- 個々の信頼された GPG キーを格納するディレクトリ。
/etc/apt/keyring/
:- 各レポジトリに対応する信頼された GPG キーを格納するディレクトリ。
GPG キーの追加
新しいリポジトリを追加するとき、そのリポジトリの GPG 公開鍵をシステムに追加する必要があります。これにより、apt
はそのリポジトリからのパッケージの署名を検証できるようになります。
/etc/apt/trusted.gpg.d/
に保存する方法 (非推奨)
# リポジトリから GPG キーをダウンロードして追加する
curl -fsSL https://example.com/repository/gpg.key | sudo apt-key add -
このコマンドでは、ダウンロードした GPG キーの中身を標準出力に出力し、apt-key add
コマンドで標準入力として受け取り、/etc/apt/trusted.gpg.d/
ディレクトリに保存します。
/etc/apt/trusted.gpg.d
に格納されているすべての鍵はシステム全体で信頼されるため、あるリポジトリの鍵が他のリポジトリにも影響を与える可能性がありました。これにより、信頼性が低下するリスクがあるため、Ubuntu 22.04 で廃止予定のため、次に紹介する方法が推奨されます。
/etc/apt/keyring/
に保存する方法 (推奨)
# /etc/apt/keyrings を作成する
sudo install -m 0755 -d /etc/apt/keyrings
# リポジトリから GPG キーをダウンロードして追加する
curl -fsSL https://example.com/repository/gpg.key | sudo gpg -o /etc/apt/keyrings/EXAMPLE.asc
このように、/etc/apt/keyrings/
ディレクトリに GPG キーを保存する方法が推奨されます。
GPG キーにはテキスト形式とバイナリ形式が存在し、テキスト形式の場合 .asc
という拡張子で保存します。
GPG キーのレポジトリを /etc/apt/sources.list.d/
に追加する際に、signed-by
オプションを使ってこの鍵のパスを指定します。
echo "deb [signed-by=/etc/apt/keyrings/EXAMPLE.asc] https://example.com/ focal stable" | sudo tee /etc/apt/sources.list.d/example.list
Docker の例
例として、Docker のレポジトリを登録する方法について紹介します。
GPG キーの追加:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
/etc/apt/keyrings
を権限 755 で作成する。https://download.docker.com/linux/ubuntu/gpg
から GPG キーをダウンロードし、/etc/apt/keyrings/docker.asc
として保存する/etc/apt/keyrings/docker.asc
キーの権限を全ユーザーに読み取り権限を与えるように変更する。
レポジトリの追加
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
arch=$(dpkg --print-architecture)
: PC のアーキテクチャ (例:arm64
)signed-by=/etc/apt/keyrings/docker.asc
: 検証に使用する GPG キーのパス. /etc/os-release && echo "$VERSION_CODENAME"
: OS のコードネーム (例:facal
)echo 文字列 | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
:/etc/apt/sources.list.d/docker.list
にレポジトリを追加
GPG キーのリストを表示
現在システムにインストールされている GPG キーのリストを表示するには、以下のコマンドを使用します。
apt-key list
コメント