ubuntuのapt周りで理解できていないことを調べた際に、読んだ記事群のメモです。
aptとは何か
apt
はDevian系Linuxに標準搭載される、パッケージ管理用のCLIコマンドです。
aptリポジトリは /etc/apt/sources.list で管理される
Ubuntu の公式リポジトリ情報は /etc/apt/sources.list
ファイルに記述されています。このファイルには、Ubuntu がパッケージを取得するためのリポジトリの URL が含まれています。
一方、サードパーティのリポジトリ情報は、 /etc/apt/sources.list.d/
ディレクトリ以下に ***.list
という名前のファイルで保存されます。これにより、公式リポジトリとサードパーティのリポジトリを分離し、管理を容易にしています。
リポジトリの設定行で、 deb
で始まるものはバイナリパッケージを提供するリポジトリを示し、 deb-src
で始まるものはソースパッケージを提供するリポジトリを示します。一般的なユーザーがコマンドやライブラリを使用する場合は、バイナリパッケージだけで十分です。
apt update コマンドを実行すると、apt は各リポジトリの InRelease
ファイル、または Release
ファイルと Release.gpg
ファイルをダウンロードします。これらのファイルには、リポジトリ内のパッケージの一覧とそれらの整合性を検証するための署名が含まれています。apt
はこれらのファイルを使用して、システムにインストールされているパッケージを最新の状態に保ちます。
apt update はパッケージインデックスファイルを更新する
apt update
コマンドは、 /etc/apt/sources.list
ファイルに記載されているリモートリポジトリから最新のパッケージ情報を取得し、 /var/lib/apt/lists
ディレクトリ配下にパッケージのインデックス情報を管理するファイルを格納します。このファイルは、パッケージの名前、バージョン、依存関係などの情報を含んでいます。
一方、 apt install
コマンドを実行すると、apt はこれらのパッケージインデックスファイルを参照し、指定されたパッケージ名に一致するレコードを検索します。もしパッケージが見つかれば、apt はインターネット上のリモートリポジトリからそのパッケージをダウンロードし、システムにインストールします。このプロセスにより、必要なパッケージとその依存関係が自動的に解決され、インストールされます。
GPG鍵 (GNU Privacy Guard)
aptを利用する際に理解する必要がある技術として GPG があります。
GPGは(インストールしようとしているsoftwareが)自分が意図した作成者が作ったソフトであるか検証するために使用される技術で、公開鍵暗号を使用します。
通常,Linux環境では自分が意図した作成者が作ったソフトであるか、 使うインストーラーが本物である事を検証(身元が正しいかどうか)してからインストールします. このとき,ソフトウェアの検証に使用される仕組みの一つがgpgです.
_
「正当性を保証」するために、APTの場合はGPGを利用した公開鍵方式で検証しています。バージョンや設定、リポジトリによって若干の差異はありますが、リポジトリからパッケージをダウンロードする際の検証方法は次のとおりです。
1.sources.listに記録されているURLからInReleaseファイルをダウンロードする
2.InReleaseファイルを、ローカルにあらかじめ保存しておいたリポジトリ鍵で検証する
3.main/binary-amd64/PackagesなどのPackagesファイルをダウンロードする
4.Packagesファイルのハッシュを、InReleaseの中の情報で検証する
5.Packagesのパスに応じてpool/main/以下などから、対象のパッケージファイルをダウンロードする
6.ダウンロードしたパッケージファイルのハッシュを、Packagesファイルの中の情報で検証する