Wie installiere ich nur Updates von einem bestimmten Repository?

39

Wie beschränke ich die installierten Updates auf Updates aus einem bestimmten Repository-Satz? Ist das überhaupt möglich?

Ton van den Heuvel
quelle
Möchten Sie das Repo zur Laufzeit festlegen können oder sollte es eher statisch sein? Die beiden folgenden Antworten gehen von der letztgenannten Option aus.
Tshepang
Ideal wäre es zur Laufzeit. Die statische Option ist jedoch ausreichend.
Ton van den Heuvel
2
Ihre Überschrift und die tatsächlich angeforderte Hilfe sind unterschiedlich.
Sundar

Antworten:

29

Verwenden Sie Pinning

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 aptRichtlinien vollständig zu entfernen :

Fügen repoSie eine Datei
/etc/apt/preferences.d/repomit 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_preferencesSie im Ubuntu Community Wiki .

kynan
quelle
3
Es ist eine Schande, dass die einzige Antwort von apt_preferences die letzte ist ...
Robert Siemer
wie finde ich heraus, welche version von welchem ​​repo stammt?
Max N
2
@ MaxN Sie würden in der Regel diese Informationen finden, indem Sieapt-cache policy package-name
Anwar
Dies erzwingt nicht, dass ein Repository beim Aktualisieren nicht berücksichtigt wird. da release n=repowird niemand zwischengespeichert
Anwar
35

Sie können ein Release mit der -tOption 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 iceweaselim 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, " -tgibt Release nicht Repository-Namen an. Es gibt keinen Repository-Namen in Ubuntu (im Gegensatz zu RedHat-basierten Linux wie RHEL, Fedora, CentOS, ...)".

Karikaturist
quelle
4
Geben Sie, wie Sie im apt-getHandbuch sehen, den -tNamen des Release und nicht des Repository an. Es gibt keine Repository - Name in Ubuntu ( im Gegensatz zu RedHat Linux - basierten wie RHEL, Fedora, CentOS, ...)
SuB
1
@SuB Ja, du hast recht! Ich habe den Repository-Namen mit der Freigabe verwechselt!
Cartoonist
-t xenialfunktioniert für ein einzelnes Paket. Aber alle Abhängigkeiten werden immer noch aus höheren Paketen geholt
Anwar
11

Kurze Antwort

Du musst die Repositories anheften möchten Sie nicht weniger von mit einer Priorität installieren als 100. Welche Mittel (von apt_preferenceMann - 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- ReleaseDatei. Wie archive, label, release, versionetc. 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 .


Lange Antwort

Bevor wir fortfahren, müssen wir einige wichtige Dinge über das Feststecken wissen. Das schließt ein

  1. Felder von ReleaseDateien und die Zuordnung zur apt-cache policyAusgabe

  2. Format der Apt-Einstellungsdateien

  3. Verwenden von ReleaseDateifeldern zum Festlegen der Priorität

1. Felder der ReleaseDatei und apt-cache policyAusgabe

Aus dem Debian-Wiki- Artikel

  • Beschreibung
  • Etikette
  • Ursprung
  • Ausführung
  • Suite
  • Code Name
  • Komponenten
  • Architekturen

Sie würden die Ausgabe von apt-cache policydiesen 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 ReleaseDateien.

  • Beschreibung legt die Beschreibung für ein Repository fest. Dies wird in der apt-cache policyAusgabe 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 Ubuntuals 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-securityetc. 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, universein Ubuntu. In der Ausgabe wird es als c=mainoder c=restrictedusw. angezeigt . Die meisten PPAs verwenden maindieses Feld, daher hilft es auch beim Fixieren nicht viel.

  • Bei Architektur geht es um die Betriebssystemarchitektur. Wird als b=i386oder b=amd64in 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 policyAusgabe als n=xenialoder 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 policyAusgabe, die mit beginnt origin, gibt den Internetursprung des Repositorys an. Es kann auch zum Fixieren verwendet werden. Sollte aber nicht mit ReleaseDateifeld 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_preferenceMan-Seite .

2. Pin-Dateiformat

Pin- oder Apt-Einstellungsdateien befinden sich im /etc/apt/preferences.dOrdner. 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 xenialhö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.0hier. 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.

3. Verwenden von ReleaseDateifeldern zum Festlegen der Priorität

Hier ist ein Beispiel

Package: *
Pin: release a=xenial
Pin-Priority: 1001

In diesem Beispiel erhalten Pakete aus xenialArchiven eine höhere Priorität als xenial-updatesund xenial-security.

Nach dem Fixieren apt-cache policy nautiluszeigt das Ausführen von an , dass eine niedrigere Version aus dem xenialArchiv tatsächlich Vorrang vor einer höheren Version aus dem xenial-updatesArchiv 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 xenialstandardmäßig denselben Archivnamen verwenden . Das Zuweisen einer Priorität zu a=xenialgilt 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 xenialArchiv des offiziellen Ubuntu-Repos und der PPA haben dieselbe Priorität 1001, da beide denselben Wert für die ArchiveRelease-Datei verwenden. Um erfolgreich zu pinnen, müssen wir mehr Felder in der Pin-Datei kombinieren.


Einige Beispiele

Pin ein PPA-Repository

Um Pakete aus einem Repository zu pinnen, müssen wir sie mit den Informationen aus dem apt-cache policyBefehl peilen . Wir haben gerade gesehen, dass a=xeniales 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 OriginWert 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-glxsagt, 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

Repository fixieren, wenn Versionsinformationen fehlen

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 origindieses 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_preferenceManpage für Details.

Anwar
quelle
7

Eine GUI-basierte Alternative wäre, das Software-Center zu öffnen und Bearbeiten> Softwarequellen zu wählen.

Softwarequellen mit ausgewählter Registerkarte Ubuntu-Software

Softwarequellen mit ausgewähltem Register "Andere Software"

Alles, was Sie tun müssen, ist das Deaktivieren der Repositorys, von denen Sie keine Aktualisierungen wünschen.

Hoffe das hilft

Allan
quelle
5

Offensichtlich können Sie /etc/apt/sources.listalle 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-getManpages 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).

Olli
quelle
1

Eine andere GUI-Option ist die Auswahl des Ursprungs in Synaptic Package Manager.

  1. Suchen Sie nach dem Paketnamen, den Sie installieren möchten
  2. Klicken Sie auf die Schaltfläche Origin
  3. Wählen Sie das Repository aus, aus dem Sie installieren möchten
  4. Wählen Sie die Pakete
  5. Anwenden
woot
quelle