Ubuntu Weekly Recipe

第677回 aptで使うsources.listのオプションいろいろ

この記事を読むのに必要な時間:およそ 5.5 分

第675回ではapt-keyコマンドが廃止される理由を,さらに第676回ではaptの新機能を紹介しました。今回はaptパッケージのリポジトリ情報を指定するsources.listの内容とそのカスタマイズ方法について紹介しましょう。

リポジトリ情報を設定するsources.list

Aptはリポジトリにあるパッケージをその依存関係に基づいてダウンロードし,システムにインストールするツールです。その「リポジトリ」の情報を管理するのがsources.listと呼ばれるファイルとなります。

パッケージリポジトリとしてアクセスするためには,具体的には次の情報が必要です。

  • リポジトリのURI
  • 通信プロトコルの種別
  • リリース名やコンポーネント
  • アーキテクチャーや鍵情報など,その他のオプション

これらの情報が/etc/apt/sources.listもしくは/etc/apt/sources.list.d/以下のファイルに保存されます。

Ubuntuの場合は,Ubuntu公式のリポジトリ情報を/etc/apt/sources.listに記述し,サードパーティの情報は/etc/apt/sources.list.d/以下に「なんとか.list」というファイル名で保存するのが一般的です。sources.list.d以下のファイル名は,英数字a-zA-Z0-9およびアンダースコア_⁠,ハイフン-⁠,ピリオド.のみ含めることができます。またファイル名は.listで終わっている必要があります※1⁠。

※1
.sourcesで終わっているファイルについては後半で別途説明します。

すべてsources.listにまとまっていると管理が大変になるので,サードパーティのリポジトリを追加する場合は,なるべくsources.list.dを利用しましょう。ここではどちらもまとめて「sources.list」と呼称します。

1行スタイルのフォーマット

sources.listは,古い書式だと次のようなフォーマットで記述します。

deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]
deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]

「古い書式」というからには「新しい書式」もあるのですが,こちらはまだあまり使われていません。新しい書式(deb822)については後半で説明します。

古い書式では,リポジトリごとに1行ずつ記述します。空行および#で始まる行は無視されます。行の途中に#がある場合は,その行のそれ以降の内容を無視します。URIに#がある場合などはURLエンコードを使うよう,注意してください。

「deb」で始まるのはバイナリパッケージ,⁠deb-src」で始まるのはソースパッケージを提供するリポジトリです。普段使う分には,バイナリパッケージだけで十分です。ソースパッケージリポジトリを有効化するとその分だけダウンロードするメタデータの情報なども増えてしまいます。パッケージングなど特別な理由がない限りはdeb-srcを有効化しなくて良いでしょう。

ちなみに/etc/apt/sources.listには最初から公式リポジトリのソースパッケージ行がコメントアウトされています。デスクトップ版だと「ソフトウェアとアップデート」から有効化できますし,手作業で行頭の#を削除してコメントアウトを無効化すれば,ソースパッケージをダウンロードできるようになります。

リポジトリのオプションとURI

[ option1=value1 option2=value2 ]でリポジトリごとの固有のオプションを指定できます。普段使うことはないのですが,特定の条件下ではオプションを使うと便利なこともあります。オプションの種別については後ほど説明します。

uriがリポジトリのURIを指定する部分です。Ubuntuの公式リポジトリの日本のミラーサーバーだとhttp://jp.archive.ubuntu.com/ubuntu/となりますし,Debianの日本のミラーサーバーだとhttp://ftp.jp.debian.org/debian/を指定することが一般的です。また,HTTP以外のプロトコルでアクセスすることもあります。URIの指定方法についても詳細は後述します。

ディストリビューションごとに異なるsuiteとcomponent

suitecomponentはリポジトリ固有の設定です。

suiteには一般的に「リリースのコードネーム」が使われます。たとえばUbuntu 20.04 LTS(Focal Fossa)だと「focal」ですし,21.04(Hirsute Hippo)だと「hirsute」です。さらにリリース後のアップデートを提供するfocal-updatesやそのうちセキュリティアップデートのみ提供するfocal-securityなども存在します。Debianの場合は「buster(Debian 10⁠⁠」や「bullseye(Debian 11⁠⁠」を指定することもありますが,よりジェネリックな「stable(最新の安定版⁠⁠sid(開発版⁠⁠」といった名前を使うこともあります。

コードネームを指定する場合は,一般的に「URI/dists/SUITE/」のアドレスへ,aptコマンドがメタデータファイルを取得しにいきます。Ubuntuのfocalならhttp://jp.archive.ubuntu.com/ubuntu/dists/focal/です。apt updateを実行すると,各リポジトリのInReleaseファイルないしReleaseRelease.gpgファイルを所得するのです。

suiteはファイルパスを直接指定することもあります。これはInReleasePackagesといったメタデータが同じディレクトリに存在する場合に有効です。なおファイルパスを指定する場合は,componentは指定できません。

componentはそのリポジトリが複数のコンポーネントに対応しているときに有効なオプションです。たとえばUbuntuの場合,そのサポートやライセンスに応じてリポジトリごとにmain,restricted,universe,multiverseの4種類にわかれています。Debianにもmain,contrib,non-freeが存在します。公式リポジトリのようにコンポーネントに対応したリポジトリを使う場合は,componentを適切に設定しましょう。複数を同時に設定することも可能ですし,コンポーネントだけ変更してURIやsuiteは同じ行を複数行設定することも可能です。

ここまででsources.listの基本的な設定は把握できました。これにより個々の行の意味をおおよそ理解できるはずです。次は個別の設定項目について,設定できる選択肢を見ていきましょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。