Wie beschränke ich die installierten Updates auf Updates aus einem bestimmten Repository-Satz? Ist das überhaupt möglich?
Wie beschränke ich die installierten Updates auf Updates aus einem bestimmten Repository-Satz? Ist das überhaupt möglich?
Antworten:
Pinning ist ein Prozess, mit dem Sie auf einem stabilen Release von Ubuntu (oder einem anderen Debian-System) bleiben können, während Sie Pakete aus einer neueren Version herunterladen. - help.ubuntu.com
Sie können automatische Updates für bestimmte Repositorys deaktivieren, ohne sie über apt
Richtlinien vollständig zu entfernen :
Fügen repo
Sie eine Datei /etc/apt/preferences.d/repo
mit dem folgenden Inhalt hinzu, um automatische Updates aus dem Repository zu deaktivieren :
Package: *
Pin: release n=repo
Pin-Priority: 50
Damit erhalten alle Pakete aus diesem Repository eine niedrigere Priorität als bereits installierte Pakete (mit 100).
Weitere Informationen finden man apt_preferences
Sie im Ubuntu Community Wiki .
apt-cache policy package-name
release n=repo
wird niemand zwischengespeichert
Sie können ein Release mit der -t
Option angeben . Als Beispiel habe ich das folgende Repository hinzugefügt /etc/apt/sources.list
, um die neueste Version von Iceweasel zu installieren:
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release
Wie Sie wissen, gibt es dasselbe Paket iceweasel
im offiziellen Debian-Repository. Wenn ich Iceweasel von dieser speziellen Version installieren möchte, führe ich Folgendes aus:
apt-get install -t squeeze-backports iceweasel
von apt-get manual page:
-t, --target-release, --default-release
This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
apt_preferences(5) manual page.
Ich denke, das ist eine bessere Lösung.
UPDATE : Wie @SuB im Kommentar erwähnte, " -t
gibt Release nicht Repository-Namen an. Es gibt keinen Repository-Namen in Ubuntu (im Gegensatz zu RedHat-basierten Linux wie RHEL, Fedora, CentOS, ...)".
apt-get
Handbuch sehen, den -t
Namen des Release und nicht des Repository an. Es gibt keine Repository - Name in Ubuntu ( im Gegensatz zu RedHat Linux - basierten wie RHEL, Fedora, CentOS, ...)
-t xenial
funktioniert für ein einzelnes Paket. Aber alle Abhängigkeiten werden immer noch aus höheren Paketen geholt
Du musst die Repositories anheften möchten Sie nicht weniger von mit einer Priorität installieren als 100. Welche Mittel (von apt_preference
Mann - Seite)
100 <= P <500
bewirkt, dass eine Version installiert wird, es sei denn, eine Version einer anderen Distribution ist verfügbar oder die installierte Version ist aktueller
Um ein Repository zum Fixieren auszuwählen, verwenden Sie Felder aus der Repository- Release
Datei. Wie archive
, label
, release
, version
etc. Durch die Werte dieser Felder angeben, können Sie genau ein Repository auswählen und die gewünschte Priorität zuweisen. Weitere Informationen finden Sie auf der Seite apt_preference .
Bevor wir fortfahren, müssen wir einige wichtige Dinge über das Feststecken wissen. Das schließt ein
Felder von Release
Dateien und die Zuordnung zur apt-cache policy
Ausgabe
Format der Apt-Einstellungsdateien
Verwenden von Release
Dateifeldern zum Festlegen der Priorität
Release
Datei und apt-cache policy
AusgabeAus dem Debian-Wiki- Artikel
Sie würden die Ausgabe von apt-cache policy
diesen sehen
500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64
Die Werte in diesen Zeilen stammen aus Release
Dateien.
Beschreibung legt die Beschreibung für ein Repository fest. Dies wird in der apt-cache policy
Ausgabe nicht angezeigt
Beschriften sie das Etikett des Endlagers ist. Viele Repositorys haben leere Bezeichnungen. Es wird l=<label>
in der Ausgabe angezeigt .
Herkunft Dies gibt Auskunft über die Herkunft des Repositorys. Offizielles Ubuntu-Repository hat Ubuntu
als Wert. Dargestellt wie o=
in der Ausgabe
Version ist die Version einer Distribution. Es ist 16.04 für Xenial. Dargestellt wie v=
in der Ausgabe
Suite ist dasselbe wie Archive . Aus dem Debian- Wiki ist es Der Name der Debian-Distribution, zu der die Pakete in diesem Verzeichnis gehören (oder für die sie entwickelt wurden), dh stabil, testfähig oder instabil. . Für Ubuntu, sind diese release-updates
, release-security
etc. Zum Beispiel xenial-updates
, xenial-security
. Es wird in der Ausgabe als a=xenial
, angezeigt a=xenial-security
. PPAs verwenden hierfür nur den Release-Namen, weshalb es beim Pinning nicht viel hilft.
Komponente erzählt über die Lizenzsache. Es ist main
, multiverse
, restricted
, universe
in Ubuntu. In der Ausgabe wird es als c=main
oder c=restricted
usw. angezeigt . Die meisten PPAs verwenden main
dieses Feld, daher hilft es auch beim Fixieren nicht viel.
Bei Architektur geht es um die Betriebssystemarchitektur. Wird als b=i386
oder b=amd64
in der Ausgabe angezeigt
Codename ist der Release-Name der Distribution. Für den 16.04 ist es xenial
. Für 14.04 ist es trusty
. Wird in der apt-cache policy
Ausgabe als n=xenial
oder angezeigt n=trusty
. Dies gilt in der Regel für alle Repositorys einer einzelnen Distribution. Das ist der Grund, warum es beim Feststecken nicht viel hilft.
Die andere Zeile in der apt-cache policy
Ausgabe, die mit beginnt origin
, gibt den Internetursprung des Repositorys an. Es kann auch zum Fixieren verwendet werden. Sollte aber nicht mit Release
Dateifeld gemischt werden Origin
. Das sind andere.
Wir werden diese Werte verwenden, um ein Repository zu fixieren.
Wie verwenden wir Pinning 1 , um das Repository einzuschränken?
Es gibt verschiedene Möglichkeiten, das Fixieren zu steuern, und für Ubuntu ist nur eine kleine Teilmenge wirksam. Eine detaillierte Erklärung würde jedoch den Rahmen der Antwort sprengen. Bitte lesen Sie hierzu die apt_preference
Man-Seite .
Pin- oder Apt-Einstellungsdateien befinden sich im /etc/apt/preferences.d
Ordner. Jede Stecknadel enthält drei Zeilen.
Die erste Zeile beginnt mit Package:
einem durch Kommas getrennten Paketnamen. Reguläre Ausdrücke und Globs sind erlaubt
Die zweite Zeile beginnt mit Pin:
und wird verwendet, um auf eine Gruppe von Paketen abzuzielen.
Wenn wir Pakete von xenial
höher als anheften möchten xenial-updates
, verwenden wir release a=xenial
.
Wenn wir die Version 5.0 anheften möchten, verwenden wir diese version 5.0
hier. Glob Pattens sind erlaubt.
Oder wenn wir Pakete von Origin aus pinnen möchten http://archive.ubuntu.com
, verwenden wir origin "archive.ubuntu.com"
. Beachten Sie, dass wir dort kein http://
Protokoll schreiben .
Die dritte Zeile beginnt mit Pin-Priority:
und der Wert ist eine Zahl. Womit die Priorität der oben genannten Zielobjekte bezeichnet wird.
Release
Dateifeldern zum Festlegen der PrioritätHier ist ein Beispiel
Package: *
Pin: release a=xenial
Pin-Priority: 1001
In diesem Beispiel erhalten Pakete aus xenial
Archiven eine höhere Priorität als xenial-updates
und xenial-security
.
Nach dem Fixieren apt-cache policy nautilus
zeigt das Ausführen von an , dass eine niedrigere Version aus dem xenial
Archiv tatsächlich Vorrang vor einer höheren Version aus dem xenial-updates
Archiv hat. Beachten Sie die Candidate:
Linie.
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 100
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Wenn wir aber auch PPA-Paketen Vorrang einräumen möchten, funktioniert dies nicht. Da PPAs xenial
standardmäßig denselben Archivnamen verwenden . Das Zuweisen einer Priorität zu a=xenial
gilt also auch für diese Pakete. Zum Beispiel (nach aktiviertem PPA),
13:31 $ apt-cache policy nautilus
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.5-0ubuntu1~xenial1
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 1001
500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Jetzt ist die Kandidatenversion von einem PPA. Beide Pakete aus dem xenial
Archiv des offiziellen Ubuntu-Repos und der PPA haben dieselbe Priorität 1001
, da beide denselben Wert für die Archive
Release-Datei verwenden. Um erfolgreich zu pinnen, müssen wir mehr Felder in der Pin-Datei kombinieren.
Um Pakete aus einem Repository zu pinnen, müssen wir sie mit den Informationen aus dem apt-cache policy
Befehl peilen . Wir haben gerade gesehen, dass a=xenial
es nicht hilft, ein Repository zu lokalisieren. Wir müssen mehrere Felder zusammen mit einem Komma in einer Einstellungsdatei verwenden, um genau auf ein Repository abzielen zu können.
Um beispielsweise zu verhindern, dass alle Pakete http://ppa.launchpad.net/oibaf/graphics-drivers/
ppa-fähig sind, können wir verwenden
Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10
Hier verwenden wir den Codenamenwert sowie den Origin
Wert des PPA. (Obwohl der Codename hier eigentlich nicht benötigt wird). Manchmal kann das Repository diesen Wert verfehlen. In diesen Fällen sollten einige andere Techniken angewendet werden. Die Ausgabe von apt-cache policy libgl1-mesa-glx
sagt, dass es funktioniert. Es senkte die Priorität aller Pakete dieser PPA.
libgl1-mesa-glx:
Installed: 12.1~git1608200730.16ef7a~gd~x
Candidate: 12.1~git1608200730.16ef7a~gd~x
Version table:
*** 12.1~git1608200730.16ef7a~gd~x 100
-10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
11.2.0-1ubuntu2.1 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
11.2.0-1ubuntu2 500
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Ignorieren Sie die Tatsache, dass es sich um einen Kandidaten handelt. Dies geschah, weil es bereits in meinem System installiert ist . Überprüfen Sie die Priorität rechts
Wenn wir ein Repository anheften möchten, dessen Versionsinformationen fehlen, wie dieses http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04
, müssen wir eine andere Methode anwenden. Da kein anderes Repository diesen Ursprung verwendet, können wir origin
dieses Repository ohne Bedenken anpinnen.
Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10
Hinweis 1: Dieser Ursprung ist der Internetursprung und nicht derjenige, der den Hersteller in der Release-Datei angibt.
Anmerkung 2: Die Pin-Priority
Zahl hat eine besondere Bedeutung. Überprüfen Sie die apt_preference
Manpage für Details.
Offensichtlich können Sie /etc/apt/sources.list
alle anderen Repositorys ändern , auskommentieren und dann ausführen
apt-get update && apt-get upgrade && apt-get autoclean
Und dann entfernen Sie Kommentare aus sources.list
. Vielleicht nicht der beste Weg, aber zumindest in den apt-get
Manpages wird keine Möglichkeit angegeben, dies zu tun.
In Verbindung stehender Hinweis, zum Beispiel, der Ubuntu-Distributions-Upgrade-Prozess deaktiviert alle Repositorys von Drittanbietern während des Upgrades (und führt nicht nur eine Option aus, um diese vorübergehend auszuschließen).