apt-mark Hält ein Paket auf einer Hauptversion fest (nicht auf einer bestimmten Nebenversion)

apt-mark Hält ein Paket auf einer Hauptversion fest (nicht auf einer bestimmten Nebenversion)

Ich möchte Paketversionen auf meinen Servern vorhalten, um zu verhindern, dass Änderungen in der Infrastruktur unseren Code beschädigen (z. B. Änderungen von MongoDB 2.4 auf 2.6).

Ich weiß, dass ich das (zum Beispiel) kann apt-mark hold package, aber dann bekomme ich keine Sicherheitspatches und kleineren Upgrades mehr.

Außerdem möchte ich Pakete mit der Einstellung einer Hauptversion installieren (aber nicht einer Nebenversion).

Ich weiß zum Beispiel, dass ich Folgendes kann:

sudo apt-get install -y rabbitmq-server=3.3.5

Ich möchte die Installation aber nur auf eine Hauptversion (3.*) festlegen.

Wie kann dies erreicht werden?

Antwort1

Sie können einen Platzhaltersatz für Versionsnummern festlegen. Sieheman apt_preferenceszum Beispiel:

Die spezifische Form weist einem oder mehreren angegebenen Paketen mit einer angegebenen Version oder einem angegebenen Versionsbereich eine Priorität (eine „Pin-Priorität“) zu. Beispielsweise weist der folgende Datensatz allen Versionen des Perl-Pakets, deren Versionsnummer mit „5.10“ beginnt, eine hohe Priorität zu. Mehrere Pakete können durch Leerzeichen getrennt werden.

Package: perl
Pin: version 5.10*
Pin-Priority: 1001

Unter Ubuntu 16.04 beispielsweise, wo xenial-backportsdie Standardpriorität 100 beträgt, debhelperlautet die anfängliche Richtlinie:

$ 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

Dann habe ich Backports eine höhere Priorität zugewiesen:

$ 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

Erneut werden 9.*Versionen mit debhelpernoch höherer Priorität versehen:

$ 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

Sie müssen also nur eine Datei erstellen, /etc/apt/preferences.d/die Folgendes enthält:

Package: rabbitmq-server
Pin: version 3.*
Pin-Priority: 1001

Kein Repository hat standardmäßig eine höhere Priorität als 1000, 1001 reicht aus, um Apt bei Bedarf zu einem Downgrade zu zwingen:

P >= 1000 bewirkt, dass eine Version installiert wird, auch wenn dies ein Downgrade des Pakets darstellt.

verwandte Informationen