Aktualisieren Sie nur bestimmte Pakete über das getdeb-Repo

2

Ich bin ein bisschen verwirrt darüber, wie getdeb.net jetzt funktioniert. Das letzte Mal, dass ich ein Paket von dort bekommen habe, ist eine Weile her. Zu diesem Zeitpunkt bestand die Prozedur darin, für jedes Paket, das Sie installieren / aktualisieren möchten, einfach eine .deb-Datei herunterzuladen und anschließend mit zu installieren dpkg -i. Der unaufhaltsame Fortschritt hat jedoch auch diesem System seine Trompeten verliehen, und getdeb-Installationen werden jetzt über ihr Repo ausgeführt, das bei apt in registriert ist /etc/apt/sources.list.d, nachdem Sie ein einzelnes Paket installiert haben, das die Änderungen an der apt-Datenbank vornimmt.

Ich habe dieses Paket installiert und festgestellt, dass aptitude dist-upgradejetzt viele Pakete auf meinem System aktualisiert werden sollen, die vor der Installation des getdeb-Pakets nicht für Upgrades bereit waren. Wenn ich die Datei /etc/apt/sources.list.d/getdeb.listin eine Datei mit einer anderen Erweiterung umbenenne , möchte aptitude update && aptitude dist-upgradesie keine Pakete mehr aktualisieren.

Ich habe festgestellt, dass das Standardverhalten nun darin besteht, alle Pakete auf die bei getdeb verfügbare Version zu aktualisieren. Dies ist nicht besonders geeignet, da diese Pakete nicht so gut getestet sind wie die offiziell veröffentlichten Versionen.

Gibt es irgendwo eine Konfigurationseinstellung, die ein Upgrade von Paketen auf Versionen aus dem getdeb-Repo verhindert, sofern diese Aktion nicht speziell ausgewählt wurde? Ich möchte auswählen können, welche Pakete über getdeb aktualisiert werden.

Aktualisieren

Wie von @ ~ joaopinto empfohlen, habe ich /etc/apt/preferencesdie folgende Datei erstellt :

Package: *
Pin: release o=GetDeb
Pin-Priority: 50

Als ich dies erfuhr, stellte ich fest, dass es einen Fehler in apt gibt , der /etc/preferences.ddie Suche nach dem Verzeichnis verhindert . Also ... versuchen Sie nicht, dieses Verzeichnis zu verwenden.

aptitude dist-upgradeWenn die Voreinstellungsdatei wie angegeben eingerichtet ist, wird nicht versucht, Pakete auf ihre getdeb-Versionen zu aktualisieren. Die Priorität 50 bedeutet im Grunde, dass Pakete von getdeb nur dann installiert werden, wenn sie an keiner anderen Stelle verfügbar sind.

An dieser Stelle suche ich nach einer bequemen Möglichkeit, ein Paket auf die getdeb-Version oder die neueste Version zu aktualisieren (beides ist in Ordnung) und Abhängigkeiten nach Bedarf zu aktualisieren / installieren. Normalerweise mache ich das von der Kommandozeile aus, aber ich stellte fest, dass ich in die curses-Version von aptitudewechseln musste, um ein Paket auf eine bestimmte Version zu aktualisieren. Dies bedeutet nicht, dass es keine Möglichkeit gibt, dies über die Befehlszeile zu tun, aber wenn dies der Fall ist, ist dies in der Schnelldokumentation von aptitude nicht ohne weiteres erkennbar.

Innerhalb von aptitude musste ich die gewünschte Version des gewünschten Pakets für das Upgrade auswählen und mich dann mit 'Konflikten' befassen, die aufgrund der Abhängigkeiten dieser Paketversion von neueren Versionen anderer Pakete entstanden sind. Dies war leicht zu lösen - ich musste nur die von getdeb stammenden Versionen dieser Pakete auswählen -, aber es scheint ein unnötiger Aufwand zu sein. Gibt es eine bessere Möglichkeit, dies zu tun?

Update auch

Wie @Ryan Thompson erklärt, können Versionen an den Befehlszeilenmodus ( apt-getoder, wie ich herausgefunden habe, an den Paketnamen angehängt werden), wobei VERSION die gleiche Zeichenfolge ist, die durch oder aufgeführt wird .aptitude=VERSIONaptitudeapt-cache show

aptitude install rosegarden=1:10.04-1~getdeb1Wenn Sie also so etwas wie installieren, wird das Paket aus dem getdeb-Repository installiert, auch wenn GetDeb-Pakete wie oben beschrieben fixiert sind. Ich habe dies getan und wurde aufgefordert, das Upgrade des abhängigen Pakets rosegarden-dataauf die von getdeb bereitgestellte Version zu bestätigen.

intuitiert
quelle
Verwenden Sie apt-cache policy PACKAGE-NAMEin der Befehlszeile, um die verfügbaren Versionen eines Pakets anzuzeigen. Verwenden Sie zum Installieren einer bestimmten Version apt-get install PACKAGE-NAME=SPECIFIC-VERSION.
Ryan Thompson
Genial, danke @Ryan. Ich hatte ein bisschen Bedenken, dass a) dies nicht funktionieren würde aptitude, was ich vorziehen würde, weil es explizite oder automatische Installationen verfolgt, und b) aptitudenicht erkennen würde, dass es fixierte Abhängigkeiten installieren sollte. Allerdings habe ich es gerade ausprobiert und es scheint ganz gut zu funktionieren.
Intuition
Wenn Sie den Trick PACKAGE = VERSION verwenden, wird das System Sie natürlich nicht davon abhalten, ein Upgrade durchzuführen. Sie möchten also auf lange Sicht immer noch herausfinden, ob Sie ein Pinning durchführen. Außerdem verfolgt apt-get die manuelle und automatische Installation, da ich nicht weiß, wann. man apt-mark.
Ryan Thompson
@ Ryan Thompson: Ich verwende PACKAGE = VERSION in Kombination mit Pinning. Das bedeutet natürlich, dass ich manuell upgraden muss, wenn ich neuere Versionen dieser Pakete von den angehefteten Repos haben möchte, aber das ist in Ordnung. Wenn es alt wird, kann ich ein höheres Pinning für diese spezifischen Pakete einstellen. \n\n Hat die Verwendung keinen Vorteil aptitude? Mir scheint, ich habe die neuesten Ratschläge gelesen, die empfehlen, sie zu verwenden apt-*.
Eingebildet
Der Fehler in apt re: /etc/apt/preferences.d wurde behoben. Vielen Dank für Ihre Frage und die kuratierten Antworten - dies ist für mich jetzt die "richtige" Art, GetDeb zu verwenden - ich möchte nicht alle angebotenen Apps pauschal aktualisieren.
Adrian

Antworten:

4

apt bietet keine benutzerfreundliche Möglichkeit, dies zu erreichen. Sie müssen apt pinning verwenden. Überprüfen Sie die folgende URL: http://jaqque.sbih.org/kplug/apt-pinning.html

Um zu verhindern, dass ein Paket von getdeb aktualisiert wird, müssen Sie / etc / apt_preferences mit folgendem Befehl erstellen: Package: * Pin: release o = GetDeb Pin-Priorität: 50

user35810
quelle
Genial. Ich habe festgestellt, dass es einen Fehler gibt, der verhindert , dass Einstellungen /etc/apt/preferences.derkannt werden: bugs.launchpad.net/ubuntu/+source/aptitude/+bug/… ... aus diesem Grund richtet getdeb das nicht mit dem Installationspaket ein. Es scheint zu funktionieren, obwohl ich hoffe, dass es eine bequeme Möglichkeit gibt, sowohl das Fixieren für ein bestimmtes Paket zu überschreiben als auch seine Abhängigkeiten zu aktualisieren, soweit dies für die neueste Version dieses bestimmten Pakets erforderlich ist. Siehe meine Bearbeitung.
Intuition
Ich habe festgestellt, dass meine Frage noch nicht vollständig beantwortet ist, deshalb werde ich das Häkchen vorerst anhalten. Entschuldigung für den Tease :)
intuited
1

es sollte so aussehen, aber ohne die leere Zeile nach den Sternchen. Leerzeilen zwischen package, pin und pin-priority in / etc / apt / preferences sind nicht zulässig. Ich weiß nicht warum, diese Seite hat das Layout automatisch geändert.

Paket: *

Pin: origin archive.getdeb.net
Pin-Priorität: -1

dummerlinuxuser
quelle
0

Du suchst nach etwas, das man Feststecken nennt. Ich habe es selbst nie herausgefunden, also lasse ich mich von anderen in die richtige Richtung weisen.

Ryan Thompson
quelle
Mein Verständnis von Pinning ist, dass es eine Möglichkeit ist, bestimmte Pakete auf einer bestimmten Version zu halten. Mein Ziel ist es zu verhindern, dass eine bestimmte Quelle verwendet wird, außer in bestimmten Fällen. Ist das ein Aspekt der Fixierung?
intuited
-1

Nachdem ich es stundenlang versucht hatte, bekam ich endlich die Lösung:

Package: *
Pin: origin archive.getdeb.net       
Pin-Priority: -1
dummerlinuxuser
quelle
Können Sie erklären, was dies bewirkt, und weitere Informationen hinzufügen?
bwDraco,