はじめに
Ubuntu環境で、パッケージをインストールする際に、
sudo apt update
sudo apt install <package>
sudo apt upgrade
をちゃんと理解せず使っていました。
本記事では、apt update / install / upgrade は何をしているのかを整理します。
各コマンドが実施していること(概念)
| コマンド | 行うこと |
|---|---|
| apt update | 最新のパッケージの一覧を取得して ローカルに保持しているパッケージの索引を最新化 |
| apt install | ローカルにある索引をもとに、必要なファイルを取得しインストール |
| apt upgrade | インストール済みのパッケージを最新化する |
ここから各コマンドが行っていることを追っていきます。
apt update
apt update はパッケージの一覧を取得してローカルに保持しているパッケージの索引を最新化します。
パッケージ一覧はどこから取得するのか
apt update したとき、一覧はaptリポジトリから取得します。
- /etc/apt/sources.list
- /etc/apt/sources.list.d/*.list
等に、aptリポジトリの接続先などが定義されており、各リポジトリのInReleaseなどのメタ情報を取得します。

https://jp.archive.ubuntu.com/ubuntu/dists/jammy/InRelease
取得したInReleaseファイルは下記コマンドで確認することができます。
ls /var/lib/apt/lists/
ここには以下のようなファイルが並びます。
jp.archive.ubuntu.com_ubuntu_dists_jammy-backports_InRelease
jp.archive.ubuntu.com_ubuntu_dists_jammy-backports_main_dep11_Components-amd64.yml.gz
各ファイルの中にはパッケージごとのメタ情報が書かれています。

これらのメタ情報を使って実際のinstallを後続で行います。
apt install
apt updateで取得した索引をもとに、実際のパッケージのインストールを行います
npm 等のように直接インターネットから探しに行くのではなく、updateで取得している索引をもとにインストールします。
索引をもとに指定されたパッケージの.debファイルをダウンロードし、/var/cache/apt/archives/に保存します。

その後、.debファイルからdpkgを使ってインストールを実施し、パッケージの状態をローカルに保存します。
保存されたパッケージの状態は下記コマンドで確認することができます。
less /var/lib/dpkg/status
apt upgrade
apt upgrade は すでにインストールされているパッケージについて索引をもとに更新します。
- updateで取得した最新の情報(/var/lib/apt/lists)
- installのときに保存した情報(/var/lib/dpkg/status)
を比較して、削除や新規パッケージ追加を伴わずに置き換え可能なものについて.debファイルの置き換えを行います。
(依存関係の変更が必要な更新は apt full-upgrade を使います)
おわりに
いまいち理解せずに使っていたコマンドを整理しました。
同じように apt を雰囲気で使っていた方の参考になれば嬉しいです。

