Ubuntuのパッケージを管理するリポジトリについて、Copilotさんに聞きながら確認してみました。
手元の環境は、Ubuntu 24.04.3です。
1. パッケージ入手元について
手元に作成した24.04.3のOSでは、OS上の以下の設定ファイルに記載された置き場所(=リポジトリ)に従って、パッケージを取得します。リポジトリは大きく2か所に分かれています。
Types: deb
URIs: http://jp.archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
各URLから、何を得るかは、Suites行、Components行に書かれています。
・Sutes:どのリリースからパッケージを取得するかの定義
・Components:パッケージの分類
です。すなわち、
http://jp.archive.ubuntu.com/ubuntu/ からは、以下を得る。
・noble:Ubuntu 24.04
・noble-updates:そのアップデート(バグ修正など)
・noble-backports:新機能など
http://security.ubuntu.com/ubuntu/ からは、以下を得る。
・noble-security:セキュリティ修正など
例えば、Ubuntu 24.04(=noble)のOSで$ sudo apt install nginx、のようにnginxのソフトウェア追加をすると、APTは、
(1) http://archive.ubuntu.com/ubuntu/dists/noble/ の下からパッケージの場所情報を得る。
(2) http://archive.ubuntu.com/ubuntu/pool/main/ の下からパッケージファイル(=debファイル)を得る。
のように、動作します。
また、パッケージの分類は、思想的・技術的な観点で分けられています。
・main:Ubuntu公式で完全サポートされるソフトウェア
・restricted:一部制限付きだが公式サポートされるもの(一部ベンダ向けのソースコード非開示のドライバなど)
・universe:公式のサポート外で、各コミュニティが提供するもの
・multiverse:公式のサポート外で、ライセンス制限(GPL以外や、商用ライセンスなど)があるもの
また、デバッグ情報パッケージを利用するには、そのリポジトリを示すファイルを、/etc/apt/sources.list.d/以下に追加する必要があります。例えば、次のように追加します。
Types: deb
URIs: http://ddebs.ubuntu.com/
Suites: noble noble-updates noble-proposed
Components: main restricted universe multiverse
Signed-by: /usr/share/keyrings/ubuntu-dbgsym-keyring.gpg
http://ddebs.ubuntu.com/ が、デバッグ情報パッケージのリポジトリです。ブラウザでアクセスすると、よく、「503 Service Unavailable」になります。サーバが過負荷っぽい。
こちらのSuitesの意味は以下です。
・noble:Ubuntu 24.04のもの。
・noble-updates:そのアップデート。恐らく、基本的にnoble以外すべて(-updates、-backports、-securityを集めたもの)
・noble-proposed:リリース前のテスト段階にあるもの(本番環境では非推奨)
また、パッケージのソースコードは、debやddebファイルではなく、以下の3種類のファイルから構成されます。
・tar.xzファイル
・dscファイル
・tar.gzファイル
リポジトリとしては、上記と同じです。指定するには、Types行を、「Types: deb」から「Types: deb deb-src」に変えます。それにより、apt sourceコマンドにより、ソースコードのファイルと、それらが適切に展開されたディレクトリを得ることができます。
2. リポジトリのディレクトリ構成について
リポジトリは、ブラウザでアクセスしてdebファイルを探したり、ブラウザ上でダウンロードしたりできますが、構成を理解しないと、迷子になりがちです。
http://jp.archive.ubuntu.com/ubuntu/ のリポジトリでいえば、次のような構成になっています。
dists/
├── trusty/ → Ubuntu 14.04 LTS
├── xenial/ → Ubuntu 16.04 LTS
├── bionic/ → Ubuntu 18.04 LTS
├── focal/ → Ubuntu 20.04 LTS
├── jammy/ → Ubuntu 22.04 LTS
├── noble/ → Ubuntu 24.04 LTS
│ ├── main/binary-amd64/Packages.gz → debパッケージの一覧のテキストファイルの圧縮
│ ├── multiverse/binary-amd64/Packages
│ ├── restricted/binary-amd64/Packages
│ └── universe/binary-amd64/Packages
├── oracular/ → Ubuntu 24.10(非LTS)
├── plucky/ → Ubuntu 25.04(非LTS)
├── questing/ → Ubuntu 25.10(非LTS)
└── devel/ → 開発中の未定版
pool/
├── main/ → Canonicalが公式に管理するソフトウェア
│ └── l/linux/ → カーネル関連(例:linux-image-*-dbgsym)
├── restricted/ → 非フリーだが重要なドライバ等(例:nvidia)
├── universe/ → コミュニティ管理の自由ソフトウェア
└── multiverse/ → ライセンス制約付きソフトウェア
つまり、distsの方がインデックス(ファイルの場所の索引)、poolの方がファイルの置き場所です。
Ubuntu 24.04のamd64のパッケージ一覧の情報は、dists/noble/main/binary-amd64/Packages.gzに書かれています。
このファイルを解凍して、1つ抜きだすと、こうなっています。
Package: linux-image-6.8.0-31-generic
Architecture: amd64
Version: 6.8.0-31.31
Built-Using: linux (= 6.8.0-31.31)
Priority: optional
Section: kernel
Source: linux-signed
Origin: Ubuntu
Maintainer: Canonical Kernel Team <kernel-team@lists.ubuntu.com>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 14604
Provides: fuse-module, ivtv-modules, kvm-api-4, linux-image, redhat-cluster-modules, spl-dkms, spl-modules, v4l2loopback-dkms, v4l2loopback-modules, virtualbox-guest-modules, zfs-dkms, zfs-modules
Depends: kmod, linux-base (>= 4.5ubuntu1~16.04.1), linux-modules-6.8.0-31-generic
Recommends: grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub | lilo, initramfs-tools | linux-initramfs-tool
Suggests: fdutils, linux-tools, linux-headers-6.8.0-31-generic, linux-modules-extra-6.8.0-31-generic
Conflicts: linux-image-unsigned-6.8.0-31-generic
Filename: pool/main/l/linux-signed/linux-image-6.8.0-31-generic_6.8.0-31.31_amd64.deb
Size: 14687796
MD5sum: 311e4eb1e17567176592789bda6fe0e0
SHA1: 75ea9633abebac0dbdee02f8f1b3101ab242fa12
SHA256: fd2ed023c84163e62c73d3b7b613a9b004bd31e335641c23d42bd249e489fbe6
SHA512: aac8e72ff30d9b077bb3cf1f9bda5a1afc72c75bdd93e1eb2554c2c8fbcdad61747ad13d01870e24ca995d72a164bd8748edea09e5bb350360cab05595029097
Description: Signed kernel image generic
Description-md5: b0fd0df88b1cd31408007b00d2458952
Filename:行に、pool/以下のファイルのパスがあります
Filename: pool/main/l/linux-signed/linux-image-6.8.0-31-generic_6.8.0-31.31_amd64.deb
pool/以下には、Ubuntu 14.04~25.10の、すべてのパッケージ(=debファイル)が、置いてあります。
main/l/linux/なら、linux-imageのdebファイルが、何万個も名前順に並んでいます。
pool/
├── main/ → Canonicalが公式に管理するソフトウェア
│ └── l/linux/ → カーネル関連(例:linux-image-*-dbgsym)
├── restricted/ → 非フリーだが重要なドライバ等(例:nvidia)
├── universe/ → コミュニティ管理の自由ソフトウェア
└── multiverse/ → ライセンス制約付きソフトウェア
また、Ubuntu 24.04はLTSであり、24.04.3など、マイナーバージョンアップされたリリースがあります。
dists/
├── noble/
│ ├── main/binary-amd64/Packages.gz → debパッケージの一覧のテキストファイルの圧縮
│ ├── multiverse/binary-amd64/Packages
│ ├── restricted/binary-amd64/Packages
│ └── universe/binary-amd64/Packages
├── noble-updates/
│ ├── main/binary-amd64/Packages.gz → debパッケージの一覧のテキストファイルの圧縮
│ ├── multiverse/binary-amd64/Packages
│ ├── restricted/binary-amd64/Packages
│ └── universe/binary-amd64/Packages
├── noble-security/
├── noble-backports/
├── noble-proposed/
dists/noble/以下のPackages.gzには、24.04のリリースの全パッケージ情報があります。一方、noble-updates/以下のPackages.gzには、24.04.3など、マイナーバージョンアップのリリースのパッケージを含め、一覧になっています。ただし、24.04.3のリリースのパッケージ一覧、というくくりにはなっておらず、24.04系への更新がすべて含まれています。
root@u24043s-vm1:~# cat Packages | grep "Package: linux-image-6.8.0-" | grep generic
Package: linux-image-6.8.0-35-generic
Package: linux-image-6.8.0-36-generic
Package: linux-image-6.8.0-38-generic
Package: linux-image-6.8.0-39-generic
Package: linux-image-6.8.0-40-generic
Package: linux-image-6.8.0-41-generic
Package: linux-image-6.8.0-44-generic
Package: linux-image-6.8.0-45-generic
Package: linux-image-6.8.0-47-generic
Package: linux-image-6.8.0-48-generic
Package: linux-image-6.8.0-49-generic
Package: linux-image-6.8.0-50-generic
Package: linux-image-6.8.0-51-generic
Package: linux-image-6.8.0-52-generic
Package: linux-image-6.8.0-53-generic
Package: linux-image-6.8.0-54-generic
Package: linux-image-6.8.0-55-generic
Package: linux-image-6.8.0-56-generic
Package: linux-image-6.8.0-57-generic
Package: linux-image-6.8.0-58-generic
Package: linux-image-6.8.0-59-generic
Package: linux-image-6.8.0-60-generic
Package: linux-image-6.8.0-62-generic
Package: linux-image-6.8.0-63-generic
Package: linux-image-6.8.0-64-generic
Package: linux-image-6.8.0-71-generic → 24.04.3のカーネルパッケージ
root@u24043s-vm1:~#
また、noble-updates/の他にも、noble-security/の方にも、linux-image-6.8.0-71-genericがありました。kernelは、updatesでもあり、securityでもあるから、でしょうか(別に、1つのパッケージの索引を、複数個所に書いても問題はないはずです)。
まとめ
Ubuntuのリポジトリについて、調べたことをまとめました。