&apt-author.team; &apt-email; &apt-product; 29 February 2004
apt_preferences
5

# apt_preferences

APT 設定制御ファイル

## 説明

APT 設定ファイル `/etc/apt/preferences` は、 インストールするパッケージのバージョン選択を制御するのに使用します。

&sources-list; ファイルに複数のディストリビューション (`stable` と `testing` など) が指定されていて、 パッケージに対し複数のバージョンがインストールできることがあります。 このとき APT は、利用できるバージョンごとに優先度を割り当てます。 依存関係規則を条件として、`apt-get` は、 最も高い優先度を持つバージョンをインストールするよう選択します。 APT 設定ファイルは、APT がデフォルトで割り当てた、 パッケージのバージョンの優先度を上書きします。 その結果、インストールするものの選択を、ユーザが選択できるようになります。

&sources-list; ファイルに複数の参照が書かれている場合、 パッケージの同じバージョンのインスタンスが複数利用できる可能性があります。 この場合、`apt-get` は &sources-list; ファイルの初めの方に指定されているところからダウンロードします。 APT 設定ファイルは、バージョンの選択にのみ影響し、 インスタンスの選択には影響しません。

### APT のデフォルト優先度の割り当て

設定ファイルがなかったり、 設定ファイルに、特定のパッケージを割り当てるエントリがない場合、 そのバージョンの優先度は、 そのバージョンが属しているディストリビューションの優先度となります。 デフォルトで他のディストリビューションより高い優先度を持つ、 特定のディストリビューションを「ターゲットリリース」としておくのは可能です。 ターゲットリリースは、`apt-get` のコマンドラインで設定したり、 APT 設定ファイル `/etc/apt/apt.conf` で設定したりできます。 例えば以下のようになります。

    apt-get install -t testing some-package

    APT::Default-Release "stable";

ターゲットリリースが指定されると、APT は以下のアルゴリズムで、 パッケージのバージョンの優先度を設定します。このように割り当てます。

優先度 100

  (あるならば) 既にインストールされているバージョン。

優先度 500

  インストールされておらず、ターゲットリリースに含まれないバージョン。

優先度 990

  インストールされておらず、ターゲットリリースに含まれるバージョン。

ターゲットリリースが指定されていなければ、 APT は単純にインストールしているパッケージのバージョンには 100 を、 インストールしていないパッケージのバージョンには 500 を割り当てます。

APT は、インストールするパッケージのバージョンを決定するために、 以下のルールを上から順番に適用します。

- 有効なバージョンの優先度が 1000 を越えない場合、 決してダウングレードしません。 (「ダウングレード」は、現在のパッケージのバージョンよりも、 小さいバージョンのものをインストールします。 APT のデフォルト優先度が 1000 を越えないことに注意してください。 そのような優先度は設定ファイルでのみ設定できます。 また、パッケージのダウングレードは危険であることにも注意してください)

- 最も高い優先度のバージョンをインストールします。

- 同じ優先度のバージョンが複数存在する場合、 最も新しいもの (最もバージョン番号が高いもの) をインストールします。

- 優先度・バージョン番号が同じものが複数存在し、 そのパッケージのメタデータが異なるか `--reinstall` オプションが与えられている場合、 インストールされていないものをインストールします。

よくある状況として、 あるインストールされているパッケージのバージョン (優先度 100) が、 &sources-list; ファイルのリストから得られるバージョン (優先度 500 か 990) よりも新しくないということがあります。この場合、 `apt-get install some-package` や `apt-get upgrade` を実行するとパッケージが更新されます。

まれに、インストールされているパッケージのバージョンが、 他の有効なバージョンよりも新しい場合があります。 この時 `apt-get install some-package` や `apt-get upgrade` を実行しても、 ダウングレードしません。

時々、インストールしているパッケージのバージョンが、 ターゲットリリースに属するバージョンよりも新しく、 他のディストリビューションよりも古い場合があります。 そのようなパッケージに対して `apt-get install some-package` や `apt-get upgrade` を実行すると、 パッケージは更新されます。 この場合、インストールされているバージョンよりも、 少なくともひとつは、 高い優先度を持つ有効なパッケージがあるからです。

### APT 設定の効果

APT 設定ファイルを使うと、 システム管理者が優先度を割り当てられるようになります。 ファイルは、空白行で区切られた、複数行からなるレコードで構成されています。 レコードは特定形式か、汎用形式のどちらかの形式をとります。

- 特定形式は、優先度 ("Pin-Priority") を、 指定したパッケージの指定したバージョン (範囲) について割り当てます。 例えば以下のレコードは、 "`5.8`" で始まる `perl` パッケージを、 高い優先度に設定します。

      Package: perl
      Pin: version 5.8*
      Pin-Priority: 1001

- 汎用形式は、与えられたディストリビューションにある、 すべてのパッケージ (`Release` ファイルに列挙したパッケージ) の優先度や、FQDNで指定した、 特定のインターネットサイトから取得するパッケージの優先度を割り当てます。

  APT 設定ファイルに書かれている汎用形式のエントリは、 パッケージのグループについてのみ適用されます。 例えば以下のレコードは、ローカルサイトにある全パッケージについて、 高い優先度を割り当てます。

      Package: *
      Pin: origin ""
      Pin-Priority: 999

  注: ここで使用しているキーワードは "`origin`" です。 `Release` ファイルに指定されたような、 ディストリビューションの Origin と混同しないようにしてください。 `Release` ファイルにある "Origin:" タグは、 インターネットアドレスではなく、 "Debian" や "Ximian" といった作者やベンダ名です。

  以下のレコードは、アーカイブ名が "`unstable`" となっているディストリビューションに属するパッケージを、 すべて低い優先度に割り当てます。

      Package: *
      Pin: release a=unstable
      Pin-Priority: 50

  以下のレコードは、アーカイブ名が "`stable`" で、 リリースバージョン番号が "`3.0`" となっているリリースに属するパッケージを、 すべて高い優先度に割り当てます。

      Package: *
      Pin: release a=stable, v=3.0
      Pin-Priority: 500

### APT が優先度に割り込む方法

APT 設定ファイルで割り当てた優先度 (P) は、正負の整数でなくてはなりません。 これは (おおざっぱにいうと) 以下のように解釈されます。

P > 1000

  パッケージがダウングレードしても、このバージョンのパッケージをインストールします。

990 < P <=1000

  インストールされているバージョンの方が新しいことを除き、 ターゲットリリースに含まれなくても、 このバージョンのパッケージをインストールします。

500 < P <=990

  ターゲットリリースに属するバージョンがあったり、 インストールされているバージョンの方が新しいのでなければ、 このバージョンのパッケージをインストールします。

100 < P <=500

  他のディストリビューションに属するバージョンがあったり、 インストールされているバージョンの方が新しいのでなければ、 このバージョンのパッケージをインストールします。

0 < P <=100

  このパッケージがインストールされていない場合、 このバージョンのパッケージをインストールします。

P < 0

  このバージョンがインストールされないようにします。

特定形式のレコードが利用可能パッケージバージョンに一致した場合、 最初のレコードが、パッケージバージョンの優先度を決定します。 失敗して、汎用形式のレコードが利用可能パッケージバージョンに一致した場合、 最初のレコードが、パッケージバージョンの優先度を決定します。

例えば、APT 設定ファイルの上の方に、 以下のレコードが書かれていると仮定してください。

    Package: perl
    Pin: version 5.8*
    Pin-Priority: 1001

    Package: *
    Pin: origin ""
    Pin-Priority: 999

    Package: *
    Pin: release unstable
    Pin-Priority: 50

すると、

- バージョン番号が "`5.8`" で始まっていれば、 `perl` の最新の利用可能パッケージがインストールされます。 バージョン 5.8* が利用可能で、バージョン 5.9* がインストールされている場合、 `perl` はダウングレードされます。

- ローカルシステムで有効な、 `perl` 以外のどんなパッケージでも、 他のバージョンより (たとえターゲットリリースに属していても) 優先度が高くなります。

- ローカルシステムにはなくても &sources-list; に列挙されたサイトにあるバージョンで、 `unstable` ディストリビューションに属しているパッケージは、 インストールするよう選択され、 既にインストールされているバージョンがない場合にのみインストールされます。

### パッケージのバージョンとディストリビューションプロパティの決定

&sources-list; ファイルに列挙した場所では、 その場所で利用できるパッケージを記述した、 `Packages` ファイルや `Release` ファイルを提供します。

`Packages` ファイルは通常 `.../dists/dist-name/component/arch` ディレクトリにあります。 例えば、`.../dists/stable/main/binary-i386/Packages` です。 これは、ディレクトリにある利用可能パッケージごとに、 複数行のレコードからできています。 APT 優先度の設定は、レコードごとに以下の 2 行だけです。

`Package:` 行

  パッケージ名を与えます。

`Version:` 行

  その名前のパッケージのバージョン番号を与えます。

`Release` ファイルは、通常 `.../dists/dist-name` にあります。例えば、 `.../dists/stable/Release`, `.../dists/woody/Release` です。 これは、このディレクトリ以下にある全パッケージに適用する、 複数行のレコード 1 つから成っています。 `Packages` と違い `Release` ファイルは、 ほとんどの行が APT 優先度の設定に関連します。

`Archive:` 行

  このディレクトリツリーに属する全パッケージのアーカイブ名。 例えば、 "Archive: stable" という行は、`Release` ファイルの親ディレクトリツリー以下にある全パッケージが、 `stable` アーカイブだと指定します。 APT 設定ファイルでこの値を指定するには、以下の行が必要になります。

      Pin: release a=stable

`Version:` 行

  リリースバージョン名。 例えば、このツリーのパッケージが、 GNU/Linux リリースバージョン 3.0 に属するとします。 通常 `testing` ディストリビューションや `unstable` ディストリビューションには、 まだリリースされていないので、バージョン番号が付きません。 APT 設定ファイルでこれを指定するには、以下の行のいずれかが必要になります。

      Pin: release v=3.0
      Pin: release a=stable, v=3.0
      Pin: release 3.0

`Component:` 行

  `Release` ファイルの、 ディレクトリツリーにあるパッケージのライセンスコンポーネント名。 例えば、"Component: main" という行は、このディレクトリ以下の全ファイルが、 `main` コンポーネント (Debian フリーソフトウェアガイドラインの元でライセンスされている) であることを表します。 APT 設定ファイルでこのコンポーネントを指定するには、以下の行が必要になります。

      Pin: release c=main

`Origin:` 行

  `Release` ファイルのディレクトリツリーにあるパッケージの提供者名。 ほとんど共通で、`Debian` です。 APT 設定ファイルでこの提供者を指定するには、以下の行が必要になります。

      Pin: release o=Debian

`Label:` 行

  `Release` ファイルのディレクトリツリーにあるパッケージのラベル名。 ほとんど共通で `Debian` です。 APT 設定ファイルでこのラベルを指定するには、以下の行が必要になります。

      Pin: release l=Debian

&sources-list; ファイルに列挙された場所から取得した `Packages` ファイルや `Release` ファイルはすべて、 `/var/lib/apt/lists` ディレクトリや、 `apt.conf` ファイルの `Dir::State::Lists` 変数で指定した場所に取得されます。例えば、 `debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release` ファイルは、 `debian.lcs.mit.edu` から取得した、 `unstable` ディストリビューションで、 `contrib` コンポーネントな、 `binary-i386` アーキテクチャ用の `Release` ファイルを含んでいます。

### APT 設定レコードのオプション行

APT 設定ファイルのレコードごとに、 任意で `Explanation:` で始まる行を持てます。 これは、コメント用の場所を確保します。

APT 設定レコードの `Pin-Priority:` 行は任意です。 省略すると、`Pin-Priority: release ...` で始まる行で指示した最後の値 (少なくとも1つ) を優先度に割り当てます。

## サンプル

### 安定版を追跡

以下の APT 設定ファイルは、`stable` ディストリビューションに属する全てのパッケージのバージョンに、 デフォルト (500) より高い優先度を割り当て、 他の `Debian` ディストリビューションのパッケージのバージョンには、 低くてインストールできないような優先度を割り当てます。

    Explanation: Uninstall or do not install any Debian-originated
    Explanation: package versions other than those in the stable distro
    Package: *
    Pin: release a=stable
    Pin-Priority: 900

    Package: *
    Pin: release o=Debian
    Pin-Priority: -10

適切な &sources-list; ファイルと上記の設定ファイルにより、 以下のコマンドで最新の `stable` バージョンにアップグレードできます。

    apt-get install package-name
    apt-get upgrade
    apt-get dist-upgrade

以下のコマンドで、指定したパッケージを `testing` ディストリビューションの最新バージョンにアップグレードします。 このパッケージは、再度このコマンドを発行しないとアップグレードされません。

    apt-get install package/testing

### テスト版や不安定版を追跡

以下の APT 設定ファイルは、`testing` ディストリビューションのパッケージのバージョンに高い優先度を割り当て、 `unstable` ディストリビューションのパッケージのバージョンには低い優先度を割り当てます。 また他の `Debian` ディストリビューションのパッケージのバージョンには、 低くてインストールできないような優先度を割り当てます。

    Package: *
    Pin: release a=testing
    Pin-Priority: 900

    Package: *
    Pin: release a=unstable
    Pin-Priority: 800

    Package: *
    Pin: release o=Debian
    Pin-Priority: -10

適切な &sources-list; ファイルと上記の設定ファイルにより、 以下のコマンドで最新の `testing` バージョンにアップグレードできます。

    apt-get install package-name
    apt-get upgrade
    apt-get dist-upgrade

以下のコマンドで、指定したパッケージを `unstable` ディストリビューションの最新バージョンにアップグレードします。 それ以降、`apt-get upgrade` は `testing` バージョンのパッケージが更新されていれば `testing` の最新版に、 `unstable` バージョンのパッケージが更新されていれば `unstable`の最新版にアップグレードします。

    apt-get install package/unstable

## 関連項目

&apt-get; &apt-cache; &apt-conf; &sources-list;

&manbugs; &translator;