ubuntuのapt周りを理解する

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ファイルの中の情報で検証する

gihyo.jp

/* https://sunrise033.com/entry/hatena-blog-how-to-hierarchicalize-categories */