.png)
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_preferences
zum 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-backports
die Standardpriorität 100 beträgt, debhelper
lautet 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 debhelper
noch 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.