"Die folgenden Pakete wurden zurückgehalten:" Warum und wie löse ich es?

877

Ich habe gerade ein PPA-Repository für die Entwicklungsversion von GIMP hinzugefügt, erhalte jedoch den folgenden Fehler:

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

Warum und wie kann ich es lösen, damit ich die neueste Version anstelle der jetzt verfügbaren verwenden kann?

jfoucher
quelle
17
Genau genommen würde ich sagen, dass dies eine Warnung und kein Fehler ist.
Kazark

Antworten:

904

Laut einem Artikel auf debian-administration.org ,

Wenn sich die Abhängigkeiten von einem der von Ihnen installierten Pakete geändert haben, sodass ein neues Paket installiert werden muss, um das Upgrade durchzuführen, wird dieses als "zurückgehalten" aufgeführt.

Vorsichtige Lösung 1:

Per Pablos Antwort können Sie ausführen sudo apt-get --with-new-pkgs upgrade, und es werden die zurückgehaltenen Pakete installiert.

Dies hat den Vorteil, dass die zurückgehaltenen Pakete nicht als "manuell installiert" gekennzeichnet werden, was weitere Benutzereingriffe erzwingen kann (siehe Kommentare).

Wenn die Lösung von Pablo für Sie funktioniert, stimmen Sie dieser bitte zu. Wenn nicht, kommentieren Sie bitte, was schief gelaufen ist.

Vorsichtige Lösung 2:

Die vorsichtige Lösung ist zu laufen sudo apt-get install <list of packages kept back>. In den meisten Fällen erhalten die zurückgehaltenen Pakete so das, was sie für ein erfolgreiches Upgrade benötigen.

Aggressive Lösung:

Es ist eine aggressivere Lösung sudo apt-get dist-upgrade, die die Installation dieser neuen Abhängigkeiten erzwingt.

Aber dist-upgrade kann sehr gefährlich sein . Im Gegensatz zu aktualisieren kann es entfernen Pakete bis hin zu komplexen Abhängigkeitssituationen zu lösen. Im Gegensatz zu Ihnen ist APT nicht immer schlau genug zu wissen, ob diese Hinzufügungen und Entfernungen Chaos anrichten könnten.

Wenn Sie sich also an einem Ort befinden, an dem die "vorsichtige Lösung" nicht funktioniert, funktioniert dies dist-upgrade möglicherweise. Sie sollten jedoch wahrscheinlich mehr über APT lernen und die Abhängigkeitsprobleme "von Hand" durch Installieren und Entfernen beheben Pakete von Fall zu Fall.

Stellen Sie sich das wie das Reparieren eines Autos vor. Wenn Sie Zeit haben und mit einem Schraubenschlüssel zurechtkommen, können Sie sich beruhigen, wenn Sie die Reparatur selbst durchführen. Wenn Sie Glück haben, können Sie Ihr Auto bei Ihrer Cousine abstellen dist-upgradeund hoffen, dass sie sich auskennt.

Michael Crenshaw
quelle
180
Da dies eine akzeptierte Antwort ist, muss es wirklich aktualisiert werden, um vor der Verwendung dist-upgradeauf einem stabilen System zu warnen , wie viele der anderen Antworten unten gezeigt haben. Persönlich denke ich, dass es eine einfachere / sicherere Antwort gibt, die beworben werden muss: apt-get install <Liste der pkgs>
Cas
7
Cas, sollte ich nur hinzufügen, dass es gefährlich sein könnte, ein Dist-Upgrade auf einem stabilen System durchzuführen? Warum genau ist das gefährlich? (Ich weiß ehrlich gesagt nicht so gut Bescheid.)
Michael Crenshaw
17
Es gibt eine Antwort auf einen Serverfehler, die das dist-upgrade etwas ausführlicher erklärt. Ich denke, es ist nur klärenswert (als solches nicht gefährlich), das gesamte System zu aktualisieren, was möglicherweise über das hinausgeht, was der Benutzer erwartet / wünscht, dh im OP-Beispiel wundern sie sich, warum Gimp zurückgehalten wird.
Cas
19
Bitte beachten Sie, dass sudo apt-get dist-upgradeauch Pakete entfernt werden können. Daher ist es am besten, immer die Liste der vorgenommenen Änderungen zu überprüfen, bevor Sie diesen zustimmen, wenn sie ausgeführt werden sudo apt-get dist-upgrade.
Eliah Kagan
6
@EliahKagan Darf ich hinzufügen, dass sogar apt-get upgradePakete entfernt werden können? Dies ist immer dann der Fall, wenn andernfalls ein Versionskonflikt auftritt. Denken Sie an llvm3.6vs. llvm3.6v5(wobei "v5" bedeutet, dass es mit kompiliert wurde gcc 5). Diese beiden können nicht nebeneinander existieren , nur einer von beiden kann auf dem System verbleiben. Ja, dist-upgradevielleicht werden auch einige Pakete entfernt, aber das würde nicht nur dist-upgradedazu führen. unter Umständen upgradeauch.
Syntaxfehler
500

Wann immer Sie vom Befehl apt-get upgradedie Nachricht erhalten

The following packages have been kept back:

dist-upgradeWenn Sie dann eines oder alle zurückgehaltenen Pakete aktualisieren möchten, ohne ein Distributions-Upgrade durchzuführen (dies ist , wenn ich mich richtig erinnere, das Gleiche), geben Sie den folgenden Befehl ein:

apt-get install <list of packages kept back>

Dadurch werden die zurückgehaltenen Probleme behoben, und Sie werden aufgefordert, zusätzliche Pakete usw. zu installieren, wie in anderen Antworten erläutert.

user88285
quelle
3
Wenn Pakete auf diese Weise zurückgehalten werden und ich sie manuell apt-get upgrade <list of packages>wiederhole apt-get upgrade, werden die betreffenden Pakete als nicht mehr erforderlich aufgeführt, und ich kann apt autoremovesie entfernen, was ich tue, und dann ein letztes, apt-get upgradeund sie werden nicht mehr als aufgeführt zurückgehalten ... Sehr seltsam. Irgendwelche Gedanken?
cram2208
Werden apt-get installauch Pakete entfernt, wenn dies zur Behebung von Abhängigkeiten erforderlich ist, oder muss ein separater apt-get removeBefehl ausgeführt werden, um diesen Teil des Aktualisierungsprozesses auszuführen ?
Michael Crenshaw
@ cram2208 Ich glaube das ist das erwartete Verhalten. Die Pakete, die "automatisch installiert und [...] nicht mehr benötigt" wurden, sind die Vorgängerversionen der aktualisierten Pakete, die jetzt nicht mehr benötigt werden. apt autoremoveDann werden diese nicht verwendeten Abhängigkeiten entfernt.
Alex
3
Wenn für das Upgrade ein neues Paket installiert werden muss, wird das Paket "zurückgehalten". Betrachten wir zuerst mit: sudo apt-get --with-new-pkgs upgradewas würde nicht Seite auswirken Pakete verursachen als manuell installiert werden markiert
l --marc l
@ mac9416 ja das tut es.
jarno
174

apt-get dist-upgrade ist gefährlich für stabile Umwelt,

  1. falsche source.list einstellung und du landest mit kaputtem ubuntu.
  2. Möglicherweise wird die gesamte Anwendung auf die Version aktualisiert, die Sie nicht möchten.

Anwendungsfall: Kernel-Upgrade zurückgehalten, Sie möchten nur den Kernel aktualisieren, nicht die gesamte Distribution aktualisieren.

Besserer Umgang mit zurückgehaltenen Paketen:

sudo aptitude

Wenn Sie das Paket zurückbehalten haben, sollten Sie die Option Upgradable Packages (Aktualisierbare Pakete) oben in der Liste sehen.

  • Hit + auf dieser Liste
  • Drücken Sie zweimal g
  • Beantworten Sie debconf stuff, wenn Sie gefragt werden
  • Drücken Sie die Eingabetaste, um fortzufahren
  • Drücken Sie Q
  • Drücken Sie auf Ja

Ihr zurückgehaltenes Paket ist installiert.

Michael Crenshaw
quelle
34
apt-get dist-upgradeist nur gefährlich, wenn Sie schlechte Repositories haben /etc/apt/sources.list*. Es ist gut zu wissen, dass alle Pakete dist-upgradeaktualisiert werden, aber mit den Standard-Repositorys sollte dies in Ordnung sein. Nicht mit gefährlich sein könnte, wie Sie Sicherheitsupdates verpassen könnten. dist-upgrade
Flimm,
6
apt-get dist-upgradePakete können sowohl entfernt als auch hinzugefügt werden, aber es ist nicht wirklich gefährlich. Jeder Paketinstallationsbefehl kann schwerwiegende Schäden verursachen, wenn Sie Probleme mit Ihrer sources.listDatei haben ! Ein regulärer apt-get upgradeBefehl installiert jedes Paket von jeder aktivierten Softwarequelle. dist-upgradeist auf diese Weise nicht eindeutig. Darüber hinaus aptitudeist es apt-get dist-upgradein einer Version, in der der Fehler 831768 nicht behoben ist, viel gefährlicher, eine Operation auszuführen, zumindest auf amd64 .
Eliah Kagan
Für mich war es einfacher (lokaler Computer mit X), nur synaptic zu öffnen und das Upgrade des Pakets zu erzwingen. Aus irgendeinem Grund schien es überhaupt nicht zu erscheinen, wo Sie es in synaptic beschrieben haben.
DJVS
3
Alsosudo aptitude safe-upgrade
msanford
146

Warum versuchst du nicht diese Unix SE Antwort :

sudo apt-get --with-new-pkgs upgrade

Dadurch können neue Pakete installiert werden. Sie erfahren, welche Pakete installiert werden sollen, und werden vor der eigentlichen Installation dazu aufgefordert.

aptBefehl ( freundliche Alternative zu apt-get) teilen Sie diese Option.

Verwenden Sie apt install <pkg>stattdessen pkg als "manuell installiert" !! Um es wieder als "automatisch installiert" zu markieren, verwenden Sie apt-mark auto <pkg>(siehe auch Unterbefehl showmanual). Weitere Informationen zu dieser Antwort .

Pablo A
quelle
20
+1, da es keine Nebenwirkung hat, wenn Pakete als manuell installiert markiert werden.
Strg-Alt-Delor
1
Hinweis für alle, die meinen obigen Kommentar lesen: Es ist eine gute Sache, nicht den Nebeneffekt zu haben, als manuell installiert zu markieren. Ich mag diese Antwort.
Strg-Alt-Delor
1
Ja. apt-mark auto <pkg>sollte nur notwendig sein, um ein Paket als automatisch installiert zu markieren ( hier die Manpage ).
Pablo A
11
Aus irgendeinem Grund sudo apt-get --with-new-pkgs upgradewerden die Pakete immer noch als "zurückgehalten" angezeigt. Keine Fehlermeldung.
Franklin Yu
2
Ich möchte nur hinzufügen, dass dies für viele aktuelle Debian 9.6-Server-Instanzen die absolut sicherste Lösung war, ohne Dinge zu beschädigen. Vielen Dank dafür, Pablo, da ich zuvor zum Glück andere Optionen für Staging-Umgebungen getestet hatte und dank der neuen pkgs-Integration mit viel saubereren Ergebnissen für die allgemeine zukünftige Paketverwaltung viele Server bis zu Sicherheitsstandards verwalten konnte. Wirklich, diese UNIX SE Antwort sollte positiv bewertet werden!
Julius
34

Es gibt normalerweise zwei Gründe, warum diese Meldung angezeigt wird.

Wenn ein Upgrade des Programms (über sudo apt-get upgrade) dazu führen würde, dass Pakete hinzugefügt oder entfernt werden, wird das Programm zurückgehalten. Sie können sudo apt-get dist-upgradein diesem Fall verwenden, die dann anbieten, die zusätzlichen Programme hinzuzufügen oder zu entfernen.

Dies ist ziemlich häufig und normalerweise kein Problem. Gelegentlich (besonders während eines Ubuntu-Alphas) dist-upgradebietet a an, viele andere Programme zu entfernen. In diesem Fall möchten Sie es wahrscheinlich abbrechen.

Wenn das Programm von Paketen oder Versionen abhängt, die nicht verfügbar sind, wird das Programm zurückgehalten. Sie können unter diesen Umständen wirklich nichts anderes tun, als zu warten, da das Paket im Grunde genommen deinstallierbar ist. Dies kann passieren, wenn Pakete nicht mehr in der richtigen Reihenfolge zum Repository hinzugefügt werden, wenn ein Paket umbenannt wird oder wenn ein Paket kein virtuelles Paket mehr bereitstellt.

jbowtie
quelle
5
Gibt es eine Möglichkeit zu bestimmen, ob das angehaltene Paket eine Abhängigkeit benötigt, die nicht installiert werden kann, oder ob es angehalten wird, weil andere Pakete davon abhängen. Ich habe viele gehaltene Pakete und ich glaube, dass beide Fälle auf meinem System zutreffen können.
Jake
Danke, der zweite Grund war das Problem für mich. Auch apt-get dist-upgradeweigerte sich, es zu installieren. Die Prüfung des Pakets mit Eignung ergab, dass es von einem Paket abhängt, das nicht verfügbar ist. Ich muss wohl warten.
2.
23

Sie können auch versuchen:

sudo aptitude safe-upgrade.

Es ist sicherer als full-upgrade(ursprünglich als dist-upgrade bezeichnet), da "Pakete nur entfernt werden, wenn sie nicht verwendet werden".

Von man aptitude:

sicheres Upgrade

Aktualisiert installierte Pakete auf die neueste Version. Installierte Pakete werden nur entfernt, wenn sie nicht verwendet werden. /.../ Derzeit nicht installierte Pakete können installiert werden, um Abhängigkeiten aufzulösen, sofern nicht die Befehlszeilenoption --no-new-installs angegeben ist.

Afilu
quelle
21

Höchstwahrscheinlich werden diese Pakete zurückgehalten, da ihre Installation zu Abhängigkeitsinkonsistenzen führen würde. Dies kann entweder passieren, weil Sie Archive in der aktiven Entwicklung (ppas) verwenden oder weil der von Ihnen verwendete Spiegel nicht vollständig aktualisiert wurde.

Warten Sie im letzten Fall einfach, bis die Abhängigkeiten aufgelöst sind und beim nächsten Mal installiert werden.

Bearbeiten:

Es gibt eine andere Möglichkeit, dass Pakete zurückgehalten werden, wenn sie zurückgehalten werden oder wenn sie angeheftet sind.

txwikinger
quelle
Worauf gründen Sie diese Wahrscheinlichkeit, ohne zu wissen, was er für ein Apt-Get-Upgrade oder ein Apt-Get-Dist-Upgrade ausgeführt hat (alternativ die Aptitude-Äquivalente)?
Andol
Dies ist das häufigste Problem bei Support-Fragen und Fehlern
txwikinger
Einverstanden. Sie sollten wahrscheinlich warten und überprüfen Sie apt_preferences. Dies wird häufig durch Entwicklungsarchive verursacht, bei denen sich die Abhängigkeiten der und der verfügbaren Pakete sehr schnell ändern. Warten Sie, bis sie sich beruhigt haben, und Sie müssen es möglicherweise überhaupt nicht dist-upgrade. Wenn Sie dies dennoch dist-upgrademöchten, lesen Sie die zu installierenden NEUEN Pakete und die zu entfernenden Pakete, bevor Sie fortfahren.
Umang
Dies ist mein Fall, weil ich die Nachricht "
Zurückgehalten
In den Fällen , in denen dieses Problem auf eine messup mit apt Präferenzen zurückzuführen ist (Pinning), fand ich die Neuinstallation der gehaltenen Pakete half mir: apt-get install --reinstall <packages>.
Tanius
9

Dies liegt normalerweise daran, dass das Paket eine Abhängigkeit hinzugefügt hat und das Upgrade diese nicht ohne Erlaubnis für Sie hinzufügen möchte.

Wenn du läufst:

sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0

Dann sollten die neuen Versionen zusammen mit ihrer neuen Abhängigkeit installiert werden.

John Lawrence Aspden
quelle
Aktualisiert bestimmte Pakete (und deren Abhängigkeiten), ohne die Verpflichtung (Risiken) eines Dist-Upgrades einzugehen.
John Mee
8

Das hat bei mir funktioniert

sudo aptitude full-upgrade
Singh
quelle
Hat sogar aptitude upgradefür mich gearbeitet.
Bibhas
Ich benutze Ubuntu 14.04und ich habe keine aptitudeKommandozeile
ahmed hamdy
apt-get dist-upgradegab mir die gleiche Nachricht, aber das löste es für mich. Ich hatte ein Paket, das das Upgrade eines anderen Pakets brach. Ich brauchte den von mir installierten nicht, also aptitude full-upgradegab ich die Option, ihn zu entfernen, damit alles andere aktualisiert werden konnte.
f.ardelian
6

Ich habe festgestellt, dass aptitude das Upgraden von Paketen besser macht, wenn sich die Versionen nur geringfügig unterscheiden. Ich hatte eine Situation wie diese:

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Installed: 1.3.5-15
  Candidate: 1.3.5-15+etch1
  Version table:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Packages
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status

Dies hat apt-get dazu gebracht, das Update zurückzuhalten, aber aptitude hat es in Ordnung gebracht. Ich bin nicht sicher, welcher Algorithmus verwendet wird, um zu bestimmen, ob ein Paket aktualisiert werden soll oder nicht. Ich denke, diese beiden hatten die gleiche Version, nur einen anderen "Qualifier". Aber in jedem Fall würde apt-get es nicht aktualisieren, aber aptitude würde es aktualisieren.

Alexander Torstling
quelle
4

In meinem Fall waren zurückgehaltene Pakete solche, die sich auf Linux-Header und Kernel bezogen. Ich habe versucht, ein Problem zu lösen, bei dem im Infobereich ein rotes Ausrufezeichen angezeigt wird und Pakete nicht aktualisiert werden können.

Um das Problem zu lösen, musste ich weder dist-upgrade noch manual apt-get install xxx verwenden .

Was ich getan und geholfen habe, war einfach und sauber :

sudo apt-get update
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get upgrade

Ich musste das Grub-Update und seine Konfiguration manuell bestätigen.

Dann habe ich nur eine Weile mit dem Computer gearbeitet und dann ist wieder der Standard-Update-Dialog erschienen, der endlich den Abschnitt "Ubuntu Base" mit Kernel und verwandten enthält. Das Update verlief problemlos und ich sehe keine zurückgehaltenen Pakete mehr.

Es ist auch sehr wichtig zu beachten, dass diese * buntu-Updates, einschließlich der Kernel-Updates, für den Ruhezustand empfindlich sind. Ich habe dieses Problem mehrmals und löse es immer, indem ich den Computer neu starte und die obigen Schritte durchführe.

Also vielleicht wäre das gerade genug ?!

(Die hier beschriebene Situation bezieht sich auf mein Xubuntu 15.10 Ende Dezember 2015)

Crysman
quelle
3

Ich bin auf dieses Problem gestoßen, als ein neuer Kernel veröffentlicht wurde. (Möglicherweise, weil ich instabile Updates aktiviert habe.) Ich fand, dass die Installation am einfachsten über das grafische Installationsprogramm von Ubuntu ( update-manager) erfolgt.

Kazark
quelle
2

Ich bin auf dieses Problem mit synaptic gestoßen, weil es anscheinend hängen geblieben ist. Um dies zu beheben, habe ich es neu gestartet und erneut versucht.

Dann entdeckte ich eine informative Nachricht als Teil des Pakets mit einigen Nachinstallationsanweisungen für mich.

Ich musste " Details " drücken und dann " q ", um die Nachricht zu beenden, und dann ging es normal weiter.

Elliptische Ansicht
quelle
2

Dies sieht nach dem richtigen Weg aus, das zurückgehaltene Paket erneut zu installieren:

apt-get install --reinstall libjpeg-progs

Zumindest hat das bei mir libjpeg-progsgeklappt, als nach dem Upgrade von Ubuntu 14.04 auf 16.04 feststeckte. Ich bin sicher, dass Sie das gleiche mit jeder anderen zurückgehaltenen App tun können, z gimp.

Quelle: https://ubuntuforums.org/showthread.php?t=2321702&p=13476183#post13476183

Stephan Henningsen
quelle
1
Sie könnten es auch ohne tun --reinstall.
jarno
Lustige Sache ist, dass es das libjpeg-turbo-progs-Paket entfernt.
jarno
1

In der Tat ist der Schalter, den Sie benötigen, dselect-upgradeder Abhängigkeiten für die jeweilige betroffene Paketgruppe installiert / entfernt.

Johnny
quelle
1

Ich habe alle Beiträge gelesen und festgestellt, dass es viele interessante Erklärungen gibt. Ich habe alle ausprobiert, aber keine vollständigen Ergebnisse erzielt. Ich habe ein Problem mit mysql-utilities, das ich nicht aktualisieren konnte. Die Aktualisierung wurde vom System vorgeschlagen. Also möchte ich einige Schritte zeigen, um es zu tun. Natürlich werde ich in einigen Augenblicken alle oben genannten Beiträge wiederholen. Hier ist mein Fehler, ja ich habe ihn durch bereits vorhandene Beiträge gefunden, aber was soll ich als nächstes tun? Bildbeschreibung hier eingeben

Der nächste Schritt ist:

sudo apt-get --purge remove mysql-utilities

Die Ergebnisse sehen Sie im Bild unten. Ich entferne das Paket und überprüfe dies per Befehl:

sudo apt-get -f install

Ergebnisse - Gut! Später habe ich diese neue Version des Pakets korrekt installiert. Bildbeschreibung hier eingeben

Auf diese Weise können wir meiner Meinung nach mehr neuen Leuten helfen, da wir mit anderen Paketen die gleichen Schritte ausführen können.

Einmal tut es mir leid, als ich an einigen Stellen andere Beiträge wiederholte.

Vasyl Lyashkevych
quelle
5
Bitte verwenden Sie keine Screenshots für Terminal-Text, da dieser für Google nicht durchsuchbar und für einige Leute nicht lesbar ist. Fügen Sie stattdessen den Terminaltext in Ihre Antwort ein, wählen Sie diesen Text aus und drücken Sie die {}Taste im Editor, um ihn richtig zu formatieren.
Chai T. Rex
@ ChaiT.Rex Danke für die Bemerkungen, ich werde es für die Zukunft in Betracht ziehen.
Vasyl Lyashkevych
1

Ubuntu 18.04 bietet eine neuere, optimierte Syntax, über aptdie anstelle von verwendet werden kann apt-get.

sudo apt full-upgrade

sudo apt upgradewird verwendet, um verfügbare Upgrades aller derzeit auf dem System installierten Pakete von den über sources.list (5) konfigurierten Quellen zu installieren. Bei Bedarf werden neue Pakete installiert, um Abhängigkeiten zu erfüllen. Vorhandene Pakete werden jedoch niemals entfernt. Wenn ein Upgrade für ein Paket das Entfernen eines installierten Pakets erfordert, wird das Upgrade für dieses Paket nicht durchgeführt.

sudo apt full-upgrade Führt die Funktion des Upgrades aus, entfernt jedoch aktuell installierte Pakete, wenn dies für das Upgrade des gesamten Systems erforderlich ist.

l - marc l
quelle