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例如:

特定格式为具有指定版本或版本范围的一个或多个指定软件包分配优先级(“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,如果需要,1001 足以强制 apt 降级:

P >= 1000 会导致安装某个版本,即使这会导致软件包降级。

相关内容