apt

Debian GNU/Linux徹底入門第3版 Sarge対応
CHAPTER3を読んで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の振られ方に影響を及ぼす設定は

  • /etc/apt/apt.conf (ターゲットDebianバージョンの指定)
  • /etc/apt/preferences (PIN設定*2 )

追記
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

*1:パッケージを含むapt-lineに振られる優先度。数値が大きいほど優先度が高い。

*2:パッケージごとに、APT Priorityの振られ方をカスタマイズできる。