
我想在我的伺服器上保留軟體包的版本,以防止基礎設施中的重大更改破壞我們的程式碼(例如從 mongodb 2.4 到 2.6 的更改..)
例如,我知道我可以(例如)apt-mark hold package
,但後來我停止取得安全修補程式和小升級。
另外我想安裝帶有設定主要版本(但不是次要版本)的軟體包
例如我知道我可以:
sudo apt-get install -y rabbitmq-server=3.3.5
但我只想將安裝固定到主要版本 (3.*)
如何才能實現這個目標?
答案1
您可以固定一組通配符版本號。看man apt_preferences
舉個例子:
此特定形式為具有指定版本或版本範圍的一個或多個指定套件指派優先權(「引腳優先權」)。例如,以下記錄為版本號以「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,1001 足以在需要時強制 apt 降級:
P >= 1000 會導致安裝某個版本,即使這構成軟體包的降級。