APT_PREFERENCES(5)

NAME
apt_preferences - APT 用選択制御ファイル

説明

APT 選択ファイル /etc/apt/preferences と /etc/apt/preferences.d/ フォルダにある断片ファイルは、インストールするパッケージのバージョンを制御するのに使用します。

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

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

Preferences are a strong power in the hands of a system administrator but they can become also their biggest nightmare if used without care! APT will not questioning the preferences so wrong settings will therefore lead to uninstallable packages or wrong decisions while upgrading packages. Even more problems will arise if multiply distribution releases are mixed without a good understanding of the following paragraphs. Packages included in a specific release aren't tested in and therefore doesn't always work as expected in older or newer releases or together with other packages from different releases. You have been warned.

Note that the files in the /etc/apt/preferences.d directory are parsed in alphanumeric ascending order and need to obey the following naming convention: The files have either no or "pref" as filename extension and only contain alphanumeric, hyphen (-), underscore (_) and period (.) characters. Otherwise APT will print a notice that it has ignored a file if the file doesn't match a pattern in the Dir::Ignore-Files-Silently configuration list - in this case it will be silently ignored.

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

設定ファイルがなかったり、設定ファイルに特定のパッケージを割り当てるエントリがない場合、そのバージョンの優先度は、そのバージョンが属しているディストリビューションの優先度となります。デフォルトで他のディストリビューションより高い優先度を持つ、特定のディストリビューションを「ターゲットリリース」としておけます。後述する /etc/apt/preferences ファイルで設定した一般優先度よりもこれは優先されますが、pin 止めしたパッケージには及ばないことに注意してください。例えば以下のようになります。

    apt-get install -t testing some-package

    APT::Default-Release "stable";

ターゲットリリースが指定されると、APT は以下のアルゴリズムで、パッケージのバージョンの優先度を設定します。以下のように割り当てます。.PP priority 1
    to the versions coming from archives which in their Release files are marked as "NotAutomatic: yes" but not as "ButAutomaticUpgrades: yes" like the debian experimental archive.

priority 100
    to the version that is already installed (if any) and to the versions coming from archives which in their Release files are marked as "NotAutomatic: yes" and "ButAutomaticUpgrades: yes" like the debian backports archive since squeeze-backports.

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

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

If the target release has not been specified then APT simply assigns priority 100 to all installed package versions and priority 500 to all uninstalled package versions, except versions coming from archives which in their Release files are marked as "NotAutomatic: yes" - these versions get the priority 1 or priority 100 if it is additionally marked as "ButAutomaticUpgrades: yes".

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

    A note of caution: the keyword used here is "origin" which can be used to match a hostname. The following record will assign a high priority to all versions available from the server identified by the hostname "ftp.de.debian.org"

        Package: *
        Pin: origin "ftp.de.debian.org"
        Pin-Priority: 999

    This should not be confused with the Origin of a distribution as specified in a Release file. What follows the "Origin:" tag in a Release file is not an Internet address but an author or vendor name, such as "Debian" or "Ximian".

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

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

    The following record assigns a high priority to all package versions belonging to any distribution whose Codename is "wheezy".

        Package: *
        Pin: release n=wheezy
        Pin-Priority: 900

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

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

  Regular expressions and glob() syntax

APT also supports pinning by glob() expressions and regular expressions surrounded by /. For example, the following example assigns the priority 500 to all packages from experimental where the name starts with gnome (as a glob()-like expression) or contains the word kde (as a POSIX extended regular expression surrounded by slashes).

    Package: gnome* /kde/
    Pin: release n=experimental
    Pin-Priority: 500

The rule for those expressions is that they can occur anywhere where a string can occur. Thus, the following pin assigns the priority 990 to all packages from a release starting with karmic.

    Package: *
    Pin: release n=karmic*
    Pin-Priority: 990

If a regular expression occurs in a Package field, the behavior is the same as if this regular expression were replaced with a list of all package names it matches. It is undecided whether this will change in the future, thus you should always list wild-card pins first, so later specific pins override it. The pattern "*" in a Package field is not considered a glob() expression in itself.

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

APT 選択ファイルで割り当てた優先度 (P) は、正負の整数でなくてはなりません。これは (おおざっぱにいうと) 以下のように解釈されます。.PP 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 行だけです。.PP Package: 行
    パッケージ名

Version: 行
    その名前のパッケージのバージョン番号

The Release file is normally found in the directory .../dists/dist-name: for example, .../dists/stable/Release, or .../dists/squeeze/Release. It consists of a single multi-line record which applies to all of the packages in the directory tree below its parent. Unlike the Packages file, nearly all of the lines in a Release file are relevant for setting APT priorities:

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

        Pin: release a=stable

Codename: 行
    names the codename to which all the packages in the directory tree belong. For example, the line "Codename: wheezy" specifies that all of the packages in the directory tree below the parent of the Release file belong to a version named wheezy. Specifying this value in the APT preferences file would require the line:

        Pin: release n=wheezy

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 選択ファイルは、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 選択ファイルは、指定したコードネームのディストリビューションに属する全てのパッケージのバージョンに、デフォルト (500) より高い優先度を割り当て、他の Debian ディストリビューション、コード名、アーカイブのパッケージのバージョンには、低くてインストールできないような優先度を割り当てます。この APT 選択ファイルにより、APT は testing アーカイブから、stable や最新の oldstable へ移行できます。コード名の変更に関係なく testing を追跡したい場合は、上記の設定例を使用するべきです。

    Explanation: Uninstall or do not install any Debian-originated package versions
    Explanation: other than those in the distribution codenamed with wheezy or sid
    Package: *
    Pin: release n=wheezy
    Pin-Priority: 900
    Explanation: Debian unstable is always codenamed with sid
    Package: *
    Pin: release n=sid
    Pin-Priority: 800
    Package: *
    Pin: release o=Debian
    Pin-Priority: -10

適切な sources.list(5) ファイルと上記の選択ファイルにより、以下のコマンドで、リリースコード名が wheezy である最新バージョンにアップグレードできます。

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

The following command will cause APT to upgrade the specified package to the latest version from the sid distribution. Thereafter, apt-get upgrade will upgrade the package to the most recent wheezy version if that is more recent than the installed version, otherwise, to the most recent sid version if that is more recent than the installed version.

    apt-get install package/sid

ファイル

/etc/apt/preferences
    バージョン選択ファイル。 ここに "pinning"の設定を行います。 つまり、別々の取得元や異なるディストリビューションのバージョンの、 どこからパッケージを取得するかを設定します。 設定項目 - Dir::Etc::Preferences

/etc/apt/preferences.d/
    バージョン選択ファイル断片。 設定項目 - Dir::Etc::PreferencesParts

関連項目

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,2009-2010), Debian JP Documentation ML <debian-doc@debian.or.jp>

この翻訳文書には未訳部分が含まれていることに注意してください。 翻訳がオリジナルに追従できていない場合、 内容を失わないようにこのようにしています。

AUTHOR

APT チーム

NOTES

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