apt
apt-getは、パッケージをインストールするとき次のような動作をする。
- apt-lineを決定する
- apt-lineの候補が複数ある場合には、APT Priority*1の値が一番高いものを使う。一番高い値が複数存在し、ひとつに絞り込めない場合には、一番新しいパッケージバージョンを含むapt-lineを使う。一番新しいバージョンも複数存在する場合には、/etc/apt/sources.listで上の方に書いてあるものを使う。
- インストールするかどうか決定する
- 選択したapt-lineのAPT Priorityの値と、インストール済みのパッケージバージョン、apt-lineに含まれるパッケージバージョンなどによって、インストールするかどうか決める。
インストールする場合の条件は以下のいずれか
- APT Priorityが1001以上
- APT Priorityが101〜1000の範囲で、かつapt-lineに含まれるパッケージバージョンがインストール済みのパッケージより新しい(ダウングレードしない)
- APT Priorityが0〜100の範囲で、かつパッケージが未インストールの状態
パッケージのapt-lineのAPT Priorityを調べるには
$ apt-cache policy (package name)
APT Priorityのデフォルトの振られ方は
- apt-lineの配布バージョンがターゲットDebianバージョンである場合には、990
- apt-lineの配布バージョンがターゲットDebianバージョンでない場合には、500
- インストール済みの場合には、100
APT Priorityの振られ方に影響を及ぼす設定は
追記
apt.conf
APT::Default-Release "stable"; APT::Cache-Limit 100000000;
パッケージバージョン、配布バージョン(Debianバージョン)を指定してインストールする
場合には、APT Priorityは無視される。
# apt-get install (package name)=(version) # apt-get install (package name)/(destribution version)
apt-get upgrade で、更新対象から外したいパッケージがあるとき、PIN設定をいじるよ
りホールドした方が手軽
$ echo (package name) hold | dpkg --set-selections