%aptent; ]> &apt-docinfo; apt_preferences 5 apt_preferences APT 設定制御ファイル 説明 APT 設定ファイル /etc/apt/preferences は、インストールするパッケージのバージョン選択を制御するのに使用します。 &sources-list; ファイルに複数のディストリビューション (例 stabletesting) が指定されていて、パッケージに対し複数のバージョンがインストールできることがあります。 このとき 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 は以下のアルゴリズムで、パッケージのバージョンの優先度を設定します。 このように割り当てます。 優先度(priority) 100 (あるならば) 既にインストールされているバージョン。(RPM Database) 優先度 500 インストールされておらず、ターゲットリリースに含まれないバージョン。 優先度 990 インストールされておらず、ターゲットリリースに含まれるバージョン。 ターゲットリリースが指定されていなければ、APT は単純にインストールしているパッケージのバージョンには 100 を、インストールしていないパッケージのバージョンには 500 を割り当てます。 APT は、インストールするパッケージのバージョンを決定するために、 以下のルールを上から順番に適用します。 有効なバージョンの優先度が 1000 を越えない場合、決してダウングレードしません。 (「ダウングレード」は、現在のパッケージのバージョンよりも、小さいバージョンのものをインストールします。APT のデフォルト優先度が 1000 を越えないことに注意してください。そのような優先度は設定ファイルでのみ設定できます。また、パッケージのダウングレードは危険であることにも注意してください) 最も高い優先度のバージョンをインストールします。 同じ優先度のバージョンが複数存在する場合、最も新しいもの (最もバージョン番号が高いもの) をインストールします。 優先度・バージョン番号が同じものが複数存在し、そのパッケージのメタデータが異なるか --reinstall オプションが与えられている場合、インストールされていないものをインストールします。 よくある状況として、あるインストールされているパッケージのバージョン (優先度 100) が、&sources-list; ファイルのリストから得られるバージョン (優先度 500 か 990) よりも新しくないということがあります。 この場合、apt-get install some-packageapt-get upgrade を実行するとパッケージが更新されます。 まれに、インストールされているパッケージのバージョンが、他の有効なバージョンよりも新しい場合があります。 この時 apt-get install some-packageapt-get upgrade を実行しても、ダウングレードしません。 時々、インストールしているパッケージのバージョンが、ターゲットリリースに属するバージョンよりも新しく、他のディストリビューションよりも古い場合があります。 そのようなパッケージに対して apt-get install some-packageapt-get upgrade を実行すると、パッケージは更新されます。 この場合、インストールされているバージョンよりも、少なくともひとつは、高い優先度を持つ有効なパッケージがあるからです。 パッケージのバージョンとディストリビューションプロパティの決定 &sources-list; ファイルに列挙した場所では、その場所で利用できるパッケージを記述した、release ファイル、release.component ファイル、pkglist.component.bz2 ファイルなどを提供します。 これらのファイルについては、&genbasedir; コマンドのマニュアルでも説明していますので参照してください。 これらのファイルは通常 baseuri/distribution/<architecture>/base ディレクトリにあります。 また、パッケージは、通常 baseuri/distribution/<architecture>/RPMS.component ディレクトリにあります。 複数のコンポーネントがある場合、baseuri/distribution/<architecture>/RPMS.component2 のようなディレクトリもあります。 それぞれ、具体的な例を挙げれば releaseファイルなどは、http://updates.vinelinux.org/apt/&Vine-linux-release-version;/i386/base/に、パッケージは、http://updates.vinelinux.org/apt/&Vine-linux-release-version;/i386/RPMS.main/ にあります。 release ファイルは、どのようなコンポーネントがあるか、また、release.component ファイルや pkglist.component.bz2 ファイルの具体的なファイル名の情報などを含んでいます。 この情報をもとに、release.component や、pkglist.component.bz2 といったファイルを取得します。 pkglist.component.bz2 ファイルは、baseuri/distribution/<architecture>/RPMS.component ディレクトリにある利用可能パッケージごとに、パッケージ名、パッケージのバージョン番号、依存情報など様々な情報を含んでいます。(このファイルは純粋なテキストファイルではありません。) pkglist.component.bz2 ファイルからは、パッケージ名パッケージのバージョン番号 といった情報が利用されます。 release.component ファイルは、ディレクトリ baseuri/distribution/<architecture>/RPMS.component 以下にある全パッケージ(コンポーネントの全パッケージ)に適用する、複数行のレコードから成っています。 release.component ファイルは、ほとんどの行が APT 優先度の設定に関連します。 release.component ファイルの内容は、apt-cache policy コマンドでは、次のように出力されます。 500 http://updates.vinelinux.org &Vine-linux-release-version;/i386/main pkglist release v=&Vine-linux-release-version;,o=Project Vine,a=stable,l=Vine Linux,c=main origin updates.vinelinux.org release と書かれた行の、v=, o=, a=, l=, c= の部分が release.component ファイルのそれぞれ次の部分と対応しています。 Version: リリースバージョン名。 apt-cache policy コマンドの出力の v= の部分に対応します。 例えば、このツリーのパッケージが、Vine Linux リリースバージョン &Vine-linux-release-version; に属するとします。 通常 testing ディストリビューションや unstable ディストリビューションには、まだリリースされていないので、バージョン番号が付きません。 APT 設定ファイルでこれを指定するには、以下の行のいずれかが必要になります。 Pin: release v=&Vine-linux-release-version; Pin: release a=stable, v=&Vine-linux-release-version; Pin: release &Vine-linux-release-version; 二つ目では、a=stable, v=&Vine-linux-release-version; のように、Version だけではなく Archive も指定しています。複数指定する場合には、このように "," を利用して記述します。 Origin: release.component ファイルのディレクトリツリーにあるパッケージの提供者名。 apt-cache policy コマンドの出力の o= の部分に対応します。 ほとんど共通で、Project Vine です。 APT 設定ファイルでこの提供者を指定するには、以下の行が必要になります。 Pin: release o=Project Vine なお、Project Vine という文字列は t と V の間にスペース(空白)を一つ含んでいますが、" " は不要です。 Pin: release o="Project Vine" のように、" をつけると " も文字として認識されてしまい、正しく処理されません。 Archive: このディレクトリツリーに属する全パッケージのアーカイブ名。 apt-cache policy コマンドの出力の a= の部分に対応します。 例えば、"Archive: stable" という行は、release.component ファイルの親ディレクトリツリー以下にある全パッケージが、stable アーカイブだと指定します。 APT 設定ファイルでこの値を指定するには、以下の行が必要になります。 Pin: release a=stable Label: release.component ファイルのディレクトリツリーにあるパッケージのラベル名。 apt-cache policy コマンドの出力の l= の部分に対応します。 Vine LinuxVine Linux - コンポーネント名 が用いられます。 APT 設定ファイルでこのラベルを指定するには、以下の行が必要になります。 Pin: release l=Vine Linux Component: release.component ファイルの、ディレクトリツリーにあるパッケージのライセンスコンポーネント名。 apt-cache policy コマンドの出力の c= の部分に対応します。 例えば、"Component: main" という行は、このディレクトリ以下の全ファイルが、main コンポーネント(Eratta発行の対象となるパッケージ)であることを表します。 APT 設定ファイルでこのコンポーネントを指定するには、以下の行が必要になります。 Pin: release c=main &sources-list; ファイルに列挙された場所から取得した release.component ファイルや release ファイルはすべて、/var/state/apt/lists ディレクトリや、apt.conf ファイルの設定項目 Dir::State::lists で指定した場所に取得されます。 例えば、updates.vinelinux.org_apt_&Vine-linux-release-version;_i386_base_release.main ファイルは、updates.vinelinux.org から取得した、&Vine-linux-release-version; ディストリビューションで、main コンポーネントな、i386 アーキテクチャ用の release ファイルを含んでいます。 APT 設定の効果 APT 設定ファイルを使うと、システム管理者が優先度を割り当てられるようになります。 ファイルは、空白行で区切られた、複数行からなるレコードで構成されています。 レコードは特定形式か、汎用形式のどちらかの形式をとります。 特定形式は、優先度 ("Pin-Priority") を、指定したパッケージの指定したバージョン (範囲) について割り当てます。 例えば以下のレコードは、"5.8" で始まる perl パッケージを、高い優先度に設定します。 Package: perl Pin: version 5.8* Pin-Priority: 1001 汎用形式は、与えられたディストリビューションにある、すべてのパッケージ (release ファイルに列挙したパッケージ) の優先度や、FQDN(Fully Qualified Domain Name)で指定した、特定のインターネットサイトから取得するパッケージの優先度を割り当てます。 APT 設定ファイルに書かれている汎用形式のエントリは、パッケージのグループについてのみ適用されます。 例えば以下のレコードは、ローカルサイトにある全パッケージについて、高い優先度を割り当てます。 Package: * Pin: origin "" Pin-Priority: 999 注: ここで使用しているキーワードは "origin" です。 origin には updates.vinelinux.org のような URL を書きます。"" のようにすると、ローカルサイトを示すことになります。 release ファイルに指定されたような、ディストリビューションの Origin と混同しないようにしてください。 release ファイルにある "Origin:" タグは、インターネットアドレスではなく、"Project Vine" や "Debian" といった作者やベンダ名です。 以下のレコードは、アーカイブ名が "unstable" となっているディストリビューションに属するパッケージを、すべて低い優先度に割り当てます。 Package: * Pin: release a=unstable Pin-Priority: 50 以下のレコードは、アーカイブ名が "stable" で、リリースバージョン番号が "3.0" となっているリリースに属するパッケージを、すべて高い優先度に割り当てます。 Package: * Pin: release a=unstable, v=3.0 Pin-Priority: 50 APT が優先度に割り込む方法 APT 設定ファイルで割り当てた優先度 (P) は、正負の整数でなくてはなりません。 これは (おおざっぱにいうと) 以下のように解釈されます。 P > 1000 パッケージがダウングレードしても、このバージョンのパッケージをインストールします。 990 < P <=1000 インストールされているバージョンの方が新しいことを除き、ターゲットリリースに含まれなくても、このバージョンのパッケージをインストールします。 500 < P <=990 ターゲットリリースに属するバージョンがあったり、インストールされているバージョンの方が新しいのでなければ、このバージョンのパッケージをインストールします。 100 < P <=500 他のディストリビューションに属するバージョンがあったり、インストールされているバージョンの方が新しいのでなければ、このバージョンのパッケージをインストールします。 0 < P <=100 このパッケージがインストールされていない場合、このバージョンのパッケージをインストールします。 P < 0 このバージョンがインストールされないようにします。 特定形式のレコードが利用可能パッケージバージョンに一致した場合、最初のレコードが、パッケージバージョンの優先度を決定します。 失敗して、汎用形式のレコードが利用可能パッケージバージョンに一致した場合、最初のレコードが、パッケージバージョンの優先度を決定します。 例えば、APT 設定ファイルの上の方に、以下の 3つのレコードが書かれていると仮定してください。 Package: perl Pin: version 5.8* Pin-Priority: 1001 Package: * Pin: origin "" Pin-Priority: 999 Package: * Pin: release unstable Pin-Priority: 50 すると 1番目のレコードで、perl のパッケージについて記述されています。 バージョン番号が "5.8" で始まっていれば、perl の最新の利用可能パッケージがインストールされます。 perlバージョン 5.8* が利用可能で、バージョン 5.9* がインストールされている場合、perl はダウングレードされます。 2番目のレコードで、 origin "" とあり、ローカルシステムの優先度が指定されています。 ローカルシステムで入手可能な、perl 以外のどんなパッケージでも、他のバージョンより (たとえターゲットリリースに属していても) 優先度が高くなります。 3番目のレコードで、ローカルシステムにはなくても &sources-list; に列挙されたサイトにあるバージョンで、unstable ディストリビューションに属しているパッケージは、インストールするよう選択され、既にインストールされているバージョンがない場合にのみインストールされます。 APT 設定レコードのオプション行 APT 設定ファイルのレコードごとに、任意で Explanation: で始まる行を持てます。 これは、コメント用の場所を確保します。 APT 設定レコードの Pin-Priority: 行は任意です。 省略すると、Pin-Priority: release ... で始まる行で指示した最後の値 (少なくとも1つ) を優先度に割り当てます。 サンプル 安定版(Stable)を追跡 以下の APT 設定ファイルは、stable ディストリビューションに属する全てのパッケージのバージョンに、 デフォルト (500) より高い優先度を割り当て、 他の Project Vine ディストリビューションのパッケージのバージョンには、低くてインストールできないような優先度を割り当てます。 Explanation: Uninstall or do not install any Project Vine-originated Explanation: package versions other than those in the stable distro Package: * Pin: release a=stable Pin-Priority: 900 Package: * Pin: release o=Project Vine Pin-Priority: -10 適切な &sources-list; ファイルと上記の設定ファイルにより、 以下のコマンドで最新の stable バージョンにアップグレードできます。 apt-get install package-name apt-get upgrade apt-get dist-upgrade 以下のコマンドで、指定したパッケージを testing ディストリビューションの最新バージョンにアップグレードします。 このパッケージは、再度このコマンドを発行しないとアップグレードされません。 apt-get install package/testing テスト版(Testing)や不安定版(Unstable)を追跡 以下の APT 設定ファイルは、testing ディストリビューションのパッケージのバージョンに高い優先度を割り当て、unstable ディストリビューションのパッケージのバージョンには低い優先度を割り当てます。 また他の Project Vine ディストリビューションのパッケージのバージョンには、低くてインストールできないような優先度を割り当てます。 Package: * Pin: release a=testing Pin-Priority: 900 Package: * Pin: release a=unstable Pin-Priority: 800 Package: * Pin: release o=Project Vine Pin-Priority: -10 適切な &sources-list; ファイルと上記の設定ファイルにより、以下のコマンドで最新の testing バージョンにアップグレードできます。 apt-get install package-name apt-get upgrade apt-get dist-upgrade 以下のコマンドで、指定したパッケージを unstable ディストリビューションの最新バージョンにアップグレードします。 それ以降、apt-get upgradetesting バージョンのパッケージが更新されていれば testing の最新版に、unstable バージョンのパッケージが更新されていれば unstable の最新版にアップグレードします。 apt-get install package/unstable Project Vine のパッケージにもどす 以下の APT 設定ファイルは、Project Vine ディストリビューションに属する全てのパッケージのバージョンに、ダウングレードも認める 1000 より大きな優先度を割り当てます。 ローカルで Patch を当てるなどしてテストパッケージを作りインストールしていた場合などに、公式に配布されているパッケージのバージョンに戻すことができます。 Package: * Pin: release o=Project Vine Pin-Priority: 1001 適切な &sources-list; ファイルと上記の設定ファイルにより、 以下のコマンドで最新の stable バージョンにアップグレードできます。 apt-get install package-name apt-get upgrade apt-get dist-upgrade 以下のコマンドで、指定したパッケージを testing ディストリビューションの最新バージョンにアップグレードします。 このパッケージは、再度このコマンドを発行しないとアップグレードされません。 apt-get install package/testing 関連項目 &apt-get; &apt-cache; &apt-conf; &sources-list; &manbugs; 著者 APT は Debian APT team によって作成され、その後 Conectiva(現 Mandriva) により rpm へ移植され apt-rpm となり、現在は Panu Matilainen さん(http://laiskiainen.org/) たちによって、http://apt-rpm.org/ でメンテナンスされています。 APT に対して貢献された方々については、&docdir;AUTHORS* 等も参照してください。 注) この日本語マニュアルは 倉澤 望さん、喜瀬 浩さん、岡 充さんなど、Debian JP Documentation ML の人たちによって日本語訳された Debian GNU/Linux のオンラインマニュアル、および、APT HOWTO (http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.ja.html) の内容をもとに、2007年 7月に Vine Linux の環境にあわせて Vine Linux ドキュメントチーム 小林が修正しています。 オリジナルの英語のマニュアルとは異なる部分が多数あります。この日本語マニュアルの間違いを発見した場合は Vine Linux バグトラッキングセンター http://bts.vinelinux.org/ 等を通じて報告してください。