apt-mark 將軟體包保存到主要版本(不是特定的次要版本)

apt-mark 將軟體包保存到主要版本(不是特定的次要版本)

我想在我的伺服器上保留軟體包的版本,以防止基礎設施中的重大更改破壞我們的程式碼(例如從 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 會導致安裝某個版本,即使這構成軟體包的降級。

相關內容