名前
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 プリファレンスファイルはバージョンの選択にのみ影響し、インスタンスの選択には影響しません。 プリファレンスファイルは、システム管理者の強い力ですが、注意して使わないと大きな悪夢にもなります! APT はプリファレンスについて問い合わせることはしません。そのため、設定を誤ったことにより、インストールできないパッケージに誘導されたり、パッケージのアップグレード中に誤った判断をしたりという事がありえます。以降の段落の内容をよく理解しないで、複数のディストリビューションリリースを混ぜてしまうと、より多くの問題が発生する事になります。特定のリリースに含まれるパッケージは、古い/新しいリリースや、異なるリリースから持ってきた他のパッケージとでは、テストされていません (し、予想通りに常に動作するとは限りません)。以上、警告しました。 /etc/apt/preferences.d ディレクトリにあるファイルは、英数字の昇順で解析され、以下の命名規約に従う必要があることに注意してください。ファイル名の拡張子はないか、"pref" となっており、英数字、ハイフン (-)、アンダースコア (_)、ピリオド (.) でできています。そうでなければ、Dir::Ignore-Files-Silently 設定リストのパターンに一致するもの以外に対して、ファイルを無視するという注意を APT が出力します。一致する場合は黙って無視します。APT のデフォルト優先度の割り当て
プリファレンスファイルがなかったり、プリファレンスファイルに特定のパッケージを割り当てるエントリがない場合、そのバージョンの優先度は、そのバージョンが属しているディストリビューションの優先度となります。デフォルトで他のディストリビューションより高い優先度を持つ、特定のディストリビューションを「ターゲットリリース」としておけます。ターゲットリリースは、 apt-get のコマンドラインや、APT 設定ファイル /etc/apt/apt.conf で設定できます。後述する /etc/apt/preferences ファイルで設定した一般優先度よりもこれは優先されますが、pin 止めしたパッケージには及ばないことに注意してください。例えば以下のようになります。apt-get install -t testing some-package
APT::Default-Release "stable";
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,
as well as versions that are not phased on this systems.
優先度 100
(もしあれば)
既にインストール済みのバージョンや、squeeze-backports
以降である Debian
のバックポートアーカイブのような、Release
ファイルに "NotAutomatic: yes"
かつ "ButAutomaticUpgrades: yes"
とマークされているアーカイブ由来のバージョン。
優先度 500
ターゲットリリースに属していないバージョン。
優先度 990
ターゲットリリースに属するバージョン。
説明がバージョンとマッチし、優先順位が最も高いものがバージョンに割り当てられます。
ターゲットリリースが指定されていなければ、APT
は単純にインストールしているパッケージのバージョンには優先度
100
を、インストールしていないパッケージのバージョンには優先度
500
を割り当てます。ただし、Release
ファイルに "NotAutomatic: yes"
とマークされたアーカイブ由来のバージョンは違います。こういったバージョンでは優先度
1 を割り当て、さらに
"ButAutomaticUpgrades: yes"
とマークされている場合には、優先度
100 を割り当てます。
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
を実行すると、パッケージは更新されます。この場合、インストールされているバージョンよりも、少なくとも
ひとつは、高い優先度を持つ有効なパッケージがあるからです。
Phased Updates
APT understands a field called Phased-Update-Percentage which can be used to control the rollout of a new version. It is an integer between 0 and 100. A system's eligibility to a phased update is determined by seeding random number generator with the package source name, the version number, and /etc/machine-id, and then calculating an integer in the range [0, 100]. If this integer is larger than the Phased-Update-Percentage, the version is pinned to 1, and thus held back. Otherwise, normal policy rules apply. In case you have multiple systems that you want to receive the same set of updates, you can set APT::Machine-ID to a UUID such that they all phase the same, or set APT::Get::Never-Include-Phased-Updates or APT::Get::Always-Include-Phased-Updates to true such that APT will never/always consider phased updates.APT プリファレンスファイルの効果
APT プリファレンスファイルを使うと、システム管理者が優先度を割り当てられるようになります。ファイルは、空白行で区切られた、複数行からなるレコードで構成されています。レコードは特定形式か、汎用形式のどちらかの形式をとります。•特定形式は、優先度
("Pin-Priority")
を、指定したバージョンやバージョン範囲の、指定したパッケージについて割り当てます。例えば以下のレコードは、バージョン番号が
"5.32" で始まる perl
パッケージを、高い優先度に設定します。空白で区切り、複数のパッケージを指定できます。
Package: perl Pin: version 5.32* Pin-Priority: 1001
•汎用形式は、与えられたディストリビューションにある、すべてのパッケージ
(Release
ファイルに列挙したパッケージ)
の優先度や、FQDNで指定した、特定のインターネットサイトから取得するパッケージの優先度を割り当てます。
APT
プリファレンスファイルに書かれている汎用形式のエントリは、パッケージのグループについてのみ適用されます。例えば以下のレコードは、ローカルサイトにある全パッケージについて、高い優先度を割り当てます。
注意:
ここで使われるキーワードは、ホスト名にマッチするのに使われる
"origin"
です。以下のレコードは、ホスト名が
"ftp.de.debian.org"
で識別されるサーバ由来のすべてのバージョンに、高い優先度を割り当てます。
Release
ファイルに指定されたような、ディストリビューションの
Origin と
混同しないようにしてください。Release
ファイルにある "Origin:"
タグは、インターネットアドレスではなく、"Debian"
や "Ximian"
といった作者やベンダ名です。
以下のレコードは、アーカイブ名が
"unstable"
となっているディストリビューションに属するパッケージを、すべて低い優先度に割り当てます。
以下のレコードは、コード名が
"trixie"
となっているディストリビューションに属するパッケージのバージョンを、高い優先度に割り当てます。
以下のレコードは、アーカイブ名が
"stable"
で、リリースバージョン番号が
"12"
となっているリリースに属するパッケージを、すべて高い優先度に割り当てます。
Package: * Pin: origin "" Pin-Priority: 999
Package: * Pin: origin "ftp.de.debian.org" Pin-Priority: 999
Package: * Pin: release a=unstable Pin-Priority: 50
Package: * Pin: release n=trixie Pin-Priority: 900
Package: * Pin: release a=stable, v=12 Pin-Priority: 500
Matching packages in the Package field
The Package field specifies the package that a pinning priority is applied to. The field can either contain a binary package name, a source package name (prefixed with "src:"), a glob(7) expression or a regular expression (surrounded by slashes). Multiple package names, glob(7) expressions and regular expressions can be listed separated by whitespace in which case the record will match any of the matched packages. By default, only packages of the native architecture are matched. To match binary packages of any architecture, add the :any suffix to the package name. You can also limit matching to a specific architecture by appending the architecture name to the package name, separated by a colon character. For example, the following example uses a glob expression and a regular expression to assign the priority 500 to all packages from experimental where the name starts with gnome (as a glob(7)-like expression) or contains the word kde (as a POSIX extended regular expression surrounded by slashes).Package: gnome* /kde/ Pin: release a=experimental Pin-Priority: 500
Package: * Pin: release n=lunar* Pin-Priority: 990
Package: src:apt Pin: version 2.6.1 Pin-Priority: 990
Package: src:*apt*:any Pin: version * Pin-Priority: 990
APT が優先度に割り込む方法
APT プリファレンスファイルで割り当てた優先度 (P) は、正負の整数でなくてはなりません。これは (おおざっぱにいうと) 以下のように解釈されます。 P >= 1000パッケージがダウングレードしても、このバージョンのパッケージをインストール
990 <= P < 1000
インストールされているバージョンの方が新しいのでなければ、ターゲットリリースに含まれなくても、このバージョンのパッケージをインストール
500 <= P < 990
ターゲットリリースに属するバージョンがあったり、インストールされているバージョンの方が新しいのでなければ、このバージョンのパッケージをインストール
100 <= P < 500
他のディストリビューションに属するバージョンがあったり、インストールされているバージョンの方が新しいのでなければ、このバージョンのパッケージをインストール
0 < P < 100
このパッケージがインストールされていない場合、このバージョンのパッケージをインストール
P < 0
このバージョンのインストール禁止
P = 0
は動作が未定義です、使用しないでください。
利用可能なパッケージバージョンに一致する最初の特定形式のレコードが、パッケージバージョンの優先度を決定します。それに失敗すると、パッケージバージョンの優先度は、バージョンに一致する汎用形式のレコードで定義されたすべての優先度の最大値として定義されます。
例えば、APT
プリファレンスファイルの上の方に、以下のレコードが書かれていると仮定してください。
Package: perl Pin: version 5.32* Pin-Priority: 1001 Package: * Pin: origin "" Pin-Priority: 999 Package: * Pin: release unstable Pin-Priority: 50
•バージョン番号が
"5.32"
で始まっていれば、perl
の最新の利用可能パッケージがインストールされます。バージョン
5.32*
が利用可能で、バージョン
5.36*
がインストールされている場合、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/bookworm/Release
です。これは、このディレクトリ以下にある
全パッケージに適用する、複数行のレコード
1
つから成っています。Packages
ファイルと違い Release
ファイルは、以下のようにほとんどの行が
APT
優先度の設定に関連します。
Archive: 行や Suite: 行
このディレクトリツリーに属する全パッケージのアーカイブ名です。例えば、"Archive:
stable" や "Suite: stable"
という行は、Release
ファイルの親ディレクトリツリー以下にある全パッケージが、stable
アーカイブだと指定します。APT
プリファレンスファイルでこの値を指定するには、以下の行が必要になります。
Codename: 行
Pin: release a=stable
このディレクトリツリーに属する全パッケージのコード名です。たとえば、"Codename:
trixie" という行は、Release
ファイルの親ディレクトリツリー以下にある全パッケージが、trixie
と名前のついたバージョンであると指定します。APT
プリファレンスファイルでこの値を指定するには、以下の行が必要になります。
Version: 行
Pin: release n=trixie
リリースバージョン名です。例えば、このツリーのパッケージが、Debian
リリースバージョン 12
に属するとします。通常
testing
ディストリビューションや
unstable
ディストリビューションには、まだリリースされていないので、バージョン番号が付きません。APT
プリファレンスファイルでこれを指定するには、以下の行のいずれかが必要になります。
Component: 行
Pin: release v=12 Pin: release a=stable, v=12 Pin: release 12
Release
ファイルの、ディレクトリツリーにあるパッケージのライセンスコンポーネント名です。例えば、"Component:
main"
という行は、このディレクトリ以下の全ファイルが、main
コンポーネント (Debian
フリーソフトウェアガイドラインの元でライセンスされている)
であることを表します。APT
プリファレンスファイルでこのコンポーネントを指定するには、以下の行が必要になります。
Origin: 行
Pin: release c=main
Release
ファイルのディレクトリツリーにあるパッケージの提供者名です。ほとんど共通で
Debian です。APT
プリファレンスファイルでこの提供者を指定するには、以下の行が必要になります。
Label: 行
Pin: release o=Debian
Release
ファイルのディレクトリツリーにあるパッケージのラベル名です。ほとんど共通で
Debian です。APT
プリファレンスファイルでこのラベルを指定するには、以下の行が必要になります。
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
ファイルを含んでいます。
Pin: release l=Debian
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
apt-get install package-name apt-get upgrade apt-get dist-upgrade
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
apt-get install package-name apt-get upgrade apt-get dist-upgrade
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 trixie or sid Package: * Pin: release n=trixie 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
apt-get install package-name apt-get upgrade apt-get dist-upgrade
apt-get install package/sid
ファイル
/etc/apt/preferencesバージョンプリファレンスファイル。
ここに
"pin"の設定を行います。
つまり、別々の取得元や異なるディストリビューションのバージョンの、
どこからパッケージを取得するかを設定します。
設定項目: 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) コマンドをご覧ください。翻訳
倉澤 望 <[email protected]> (2003-2006,2009-2012), Takuma Yamada <[email protected]> (2016), Debian JP Documentation ML <[email protected]> この翻訳文書には未訳部分が含まれている可能性があることに 注意してください。 翻訳がオリジナルに追従できていない場合、 内容を失わないようにこのようにしています。著者
[FAMILY Given]注記
- 1.
- APT バグページ
03 1 月 2022 | APT 2.6.1 |