APT_PREFERENCES(5)

NAME
apt_preferences - APT 設定制御ファイル

説明

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

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

sources.list(5) ファイルに複数の参照が書かれている場合、 パッケージの同じバージョンのインスタンスが複数利用できる可能性があります。 この場合、apt-get は sources.list(5) ファイルの初めの方に指定されているところからダウンロードします。 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(5) ファイルのリストから得られるバージョン (優先度 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(5) に列挙されたサイトにあるバージョンで、 unstable ディストリビューションに属しているパッケージは、 インストールするよう選択され、 既にインストールされているバージョンがない場合にのみインストールされます。

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

sources.list(5) ファイルに列挙した場所では、 その場所で利用できるパッケージを記述した、 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(5) ファイルに列挙された場所から取得した 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(5) ファイルと上記の設定ファイルにより、 以下のコマンドで最新の 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(5) ファイルと上記の設定ファイルにより、 以下のコマンドで最新の 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(8) apt-cache(8) apt.conf(5) sources.list(5)

バグ

APT バグページ[1]を ご覧ください。 APT のバグを報告する場合は、 /usr/share/doc/debian/bug-reporting.txt や reportbug(1) コマンドをご覧ください。

訳者

倉澤 望 <nabetaro@debian.or.jp> (2003-2006), Debian JP Documentation ML <debian-doc@debian.or.jp>

AUTHOR

APT team

    Author.

REFERENCES

1.  APT バグページ
    http://bugs.debian.org/src:apt