DebianでAPTピン留めがどのように機能するかをマスターしようとしていますが、優先順位をどのように解決するかを理解するのに苦労しています。
source.list
ファイルがあります。このファイルには次のエントリが正確な順序で含まれています。
deb <repository> stretch main deb <repository> testing main deb <repository> unstable main
次のリポジトリにはブランチごとにこれらのパッケージが含まれています:
- ストレッチにはパッケージが含まれています
dependency version 1.0
; - テストにはパッケージ
;
- unstableにはパッケージ
program
とdependency version 2.0
;
パッケージprogram
はdependency version 2.0
に依存します。
インストールする必要がありますパッケージprogram
ですが、unstable
からインストールするパッケージをできるだけ少なくしたいので、次のこのブランチを固定するファイル:
Package: * Pin: release a=unstable Pin-Priority: -1
理解している場合正しく機能する場合は、APTに明示的に指示した場合にのみunstable
からパッケージをインストールする必要があります。
apt.conf
ブランチがデフォルトであることを確認するための
ファイル:
APT::Default-Release "stable";
コマンド
の場合、ブランチには次の優先順位が必要です。
stable: 990 testing: 500 unstable: -1
パッケージをインストールしますprogram
、これを行うには、次のコマンドを実行します。
apt-get install -t unstable program
ここで、私の質問は、APTがどのブランチからパッケージdependency version 2.0
? testing
とunstable
の両方に同じバージョンのパッケージがあるため、どちらが選択されますか?
正しく理解すると、-t unstable
オプションを指定したAPTは、unstable
に属するパッケージに990の優先度を設定しますが、私が経験したことから、testing
からプルします。
では、なぜAPTは優先度500のtesting
からパッケージをプルするのですか? unstable
は990に設定されていますか?また、unstable
からできるだけ少ないパッケージをインストールするための最適な方法は何ですか?
コメント
- バージョンが同じ場合、ファイルも同じです。Aptは最速または1番目を選択しますミラーを定義しましたが、ダウンロードしたファイルのURLは同じです。自分で確認してください。ディスク容量の問題により、Debianリポジトリは'パッケージの2つの同一ファイル/バージョンを保存しません。
回答
これは、 マンページ:
sources.list(5)ファイルを使用すると、パッケージのいくつかのバージョンをインストールできる場合があります。複数のディストリビューションへの参照が含まれています(たとえば、stableとtesting)。 APTは、使用可能な各バージョンに優先順位を割り当てます。依存関係の制約に従い、
apt-get
はインストールの優先度が最も高いバージョンを選択します。 APT設定は、APTがデフォルトでパッケージバージョンに割り当てる優先順位を上書きするため、インストール用に選択するものをユーザーが制御できます。同じバージョンのパッケージの複数のインスタンスは、ソースが.list(5)ファイルには、複数のソースへの参照が含まれています。この場合、
apt-get
は、sources.list(5)ファイルの最初にリストされているインスタンスをダウンロードします。 APT設定はインスタンスの選択に影響せず、バージョンの選択にのみ影響します。
優先度は、(バージョン番号で指定された)のバージョンのみを決定します。パッケージがインストールされます。それが決定されると、最初に利用可能なパッケージリポジトリを使用してダウンロードします。