
インフラストラクチャの重大な変更によってコードが破損するのを防ぐために、サーバー上でパッケージのバージョンを保持したいと考えています (たとえば、mongodb 2.4 から 2.6 への変更など)。
たとえば、そうできることはわかっていますapt-mark hold package
が、そうするとセキュリティ パッチやマイナー アップグレードが提供されなくなります。
また、メジャーバージョン(マイナーバージョンではない)を設定してパッケージをインストールしたいです。
たとえば、私は次のことができると知っています:
sudo apt-get install -y rabbitmq-server=3.3.5
しかし、インストールをメジャーバージョン (3.*) に固定したいだけです。
これを実現するにはどうすればよいでしょうか?
答え1
バージョン番号のワイルドカードセットを固定することができます。man apt_preferences
例:
特定の形式では、指定されたバージョンまたはバージョン範囲の 1 つ以上の指定されたパッケージに優先度 (「Pin-Priority」) が割り当てられます。たとえば、次のレコードは、バージョン番号が「5.10」で始まる perl パッケージのすべてのバージョンに高い優先度を割り当てます。複数のパッケージはスペースで区切ることができます。
Package: perl Pin: version 5.10* Pin-Priority: 1001
たとえば、Ubuntu 16.04 では、 のxenial-backports
デフォルトの優先度は 100 ですが、 の初期ポリシーは次debhelper
のようになります。
$ apt-cache policy debhelper
debhelper:
Installed: 9.20160115ubuntu3
Candidate: 9.20160115ubuntu3
Version table:
10.2.2ubuntu1~ubuntu16.04.1 100
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
*** 9.20160115ubuntu3 500
500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
100 /var/lib/dpkg/status
次に、バックポートをより高い優先度に固定しました。
$ cat /etc/apt/preferences.d/debhelper
Package: *
Pin: release v=16.04,o=Ubuntu,a=xenial-backports,n=xenial,l=Ubuntu,c=main,b=amd64
Pin-Priority: 600
$ apt-cache policy debhelper
debhelper:
Installed: 9.20160115ubuntu3
Candidate: 10.2.2ubuntu1~ubuntu16.04.1
Version table:
10.2.2ubuntu1~ubuntu16.04.1 600
600 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
*** 9.20160115ubuntu3 500
500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
再び、9.*
バージョンをdebhelper
さらに高い優先度に固定します。
$ cat /etc/apt/preferences.d/debhelper
Package: *
Pin: release v=16.04,o=Ubuntu,a=xenial-backports,n=xenial,l=Ubuntu,c=main,b=amd64
Pin-Priority: 600
Package: debhelper
Pin: version 9.*
Pin-Priority: 800
$ apt-cache policy debhelper
debhelper:
Installed: 9.20160115ubuntu3
Candidate: 9.20160115ubuntu3
Version table:
10.2.2ubuntu1~ubuntu16.04.1 600
600 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
*** 9.20160115ubuntu3 800
500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
100 /var/lib/dpkg/status
/etc/apt/preferences.d/
したがって、次の内容を含むファイルを作成する必要があります。
Package: rabbitmq-server
Pin: version 3.*
Pin-Priority: 1001
デフォルトでは、どのリポジトリも優先度が 1000 を超えていません。必要に応じて apt を強制的にダウングレードするには、1001 で十分です。
P >= 1000 の場合、パッケージのダウングレードであってもバージョンがインストールされます。