Vraag "De volgende pakketten zijn achtergehouden:" Waarom en hoe los ik het op?


Ik heb zojuist een PPA-repository toegevoegd voor de ontwikkelingsversie van GIMP, maar ik krijg de volgende foutmelding:

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

Waarom en hoe kan ik het oplossen zodat ik de nieuwste versie kan gebruiken in plaats van degene die ik nu heb?


719
2017-07-31 21:59


oorsprong


Strikt genomen zou ik zeggen dat dit een waarschuwing is, geen fout. - Kazark


antwoorden:


Volgens een artikel over debian-administration.org,

Als de afhankelijkheden zijn gewijzigd in een van de pakketten die u hebt geïnstalleerd, zodat een nieuw pakket moet worden geïnstalleerd om de upgrade uit te voeren, wordt dat weergegeven als "bewaard".

Voorzichtige oplossing 1:

De voorzichtige oplossing is om te draaien sudo apt-get install <list of packages kept back>. In de meeste gevallen zal dit de teruggehouden pakketten geven wat ze nodig hebben om succesvol te upgraden.

Voorzichtige oplossing 2:

Per Pablo's antwoord, je kan lopen sudo apt-get --with-new-pkgs upgrade, en het zal de teruggehouden pakketten installeren.

Dit heeft als voordeel dat u de teruggehouden pakketten niet als "handmatig geïnstalleerd" markeert, waardoor meer gebruikersinterventies langs de lijn kunnen worden gedwongen (zie opmerkingen).

Als de oplossing van Pablo voor u werkt, kunt u hem overstemmen. Zo niet, geef dan commentaar wat er mis is gegaan.

Agressieve oplossing:

Een agressievere oplossing is om te draaien sudo apt-get dist-upgrade, wat de installatie van die nieuwe afhankelijkheden zal forceren.

Maar dist-upgrade  kan behoorlijk gevaarlijk zijn. In tegenstelling tot upgrade het kan verwijderen pakketten om complexe afhankelijkheidssituaties op te lossen. In tegenstelling tot u, is APT niet altijd slim genoeg om te weten of deze toevoegingen en verwijderingen grote schade kunnen aanrichten.

Dus als je merkt dat je op een plek bent waar de "voorzichtige oplossing" niet werkt, dist-upgrade  mei werk ... maar u kunt waarschijnlijk beter wat meer leren over APT en de afhankelijkheidskwesties "met de hand" oplossen door pakketten per geval te installeren en te verwijderen.

Zie het als het repareren van een auto ... als je tijd hebt en handig bent met een sleutel, zul je gemoedsrust krijgen door zelf te lezen en de reparatie uit te voeren. Als je geluk hebt, kun je je auto afzetten met je neef dist-upgrade en hoop dat ze haar dingen weet.


702
2017-07-31 22:15



Omdat dit een geaccepteerde antwoordbehoefte is, moet het echt worden bijgewerkt om te waarschuwen voor gebruik dist-upgrade op een stabiel systeem zoals veel van de andere antwoorden hieronder hebben aangegeven. Persoonlijk denk ik dat er een eenvoudiger / veiliger antwoord is dat gepromoot moet worden: apt-get install <lijst met pkg's> - Cas
Cas, moet ik gewoon toevoegen dat het gevaarlijk kan zijn om een ​​dist-upgrade uit te voeren op een stabiel systeem? Waarom is dat gevaarlijk? (Ik weet eerlijk gezegd niet zo goed wat ik bedoel.) - mac9416
Er is een Server Fout antwoord dat verklaart dist-upgrade in een beetje meer detail. Ik denk dat het de moeite waard is om te verduidelijken (niet gevaarlijk als zodanig) dat het het hele systeem kan upgraden, wat misschien verder gaat dan wat de gebruiker verwacht / wil, d.w.z. in het OP-voorbeeld vragen ze zich af waarom Gimp wordt tegengehouden. - Cas
Houd er rekening mee dat sudo apt-get dist-upgrade kan ook verwijderen pakketjes. Daarom is het het beste om altijd de lijst met wijzigingen te inspecteren die zullen worden gemaakt voordat u ermee instemt, wanneer u hardloopt sudo apt-get dist-upgrade. - Eliah Kagan
@EliahKagan Mag ik dat even toevoegen apt-get upgrade kan pakketten verwijderen? Het zal altijd dat doen wanneer er anders een versieconflict zou zijn. Denken aan llvm3.6 vs. llvm3.6v5 (waarbij de "v5" betekent dat deze is gecompileerd met gcc 5). Deze twee kan niet naast elkaar bestaan, alleen een van beide kan op het systeem worden bewaard. Dus ja dist-upgrade kan ook enkele pakketten verwijderen, maar dat is het niet alleen dist-upgrade dat zou dit doen; onder bepaalde omstandigheden, upgrade zou ook. - syntaxerror


Wanneer je ontvangt van het commando apt-get upgrade de boodschap

The following packages have been kept back:

vervolgens om een ​​of alle teruggehouden pakketten te upgraden, zonder een distributie-upgrade uit te voeren (dit is wat dist-upgrade doet, als ik het me goed herinner) de opdracht te geven:

apt-get install <list of packages kept back>

dit zal de terughoudende problemen oplossen en vragen om extra pakketten te installeren, enz. zoals werd uitgelegd door andere antwoorden.


468
2017-09-08 09:14



Wanneer pakketten op deze manier worden achtergehouden en ik handmatig apt-get upgrade <list of packages>, als ik het opnieuw doe apt-get upgrade, zal het de pakketten in kwestie vermelden als niet langer vereist en die ik kan gebruiken apt autoremove om ze te verwijderen, wat ik doe, en dan nog een laatste apt-get upgrade en ze worden niet langer vermeld als achtergehouden ... Heel raar. Nog ideeën? - cram2208
Doet apt-get install verwijder ook pakketten wanneer dit nodig is om situaties van ernstige afhankelijkheid op te lossen, of zou u een afzonderlijk programma moeten uitvoeren apt-get remove opdracht om dat deel van het upgradeproces te voltooien? - mac9416
@ cram2208 Ik geloof dat dit het verwachte gedrag is. De pakketten die "automatisch werden geïnstalleerd en [...] niet langer nodig waren" zijn de vorige versies van de bijgewerkte pakketten, die nu niet langer nodig zijn. apt autoremove verwijdert vervolgens deze ongebruikte afhankelijkheden. - Alex
Als voor de upgrade een nieuw pakket moet worden geïnstalleerd, wordt het pakket "achtergehouden". Overweeg eerst om te gebruiken: sudo apt-get --with-new-pkgs upgrade welke zou geen neveneffect hebben van ervoor zorgen dat pakketten worden gemarkeerd als handmatig geïnstalleerd - l --marc l
@ mac9416 Ja dat doet het. - jarno


apt-get dist-upgrade is gevaarlijk voor een stabiele omgeving,

  1. verkeerde bron.lijst-instelling en je eindigt met kapotte ubuntu.
  2. mogelijk wordt de hele applicatie geüpgraded naar een versie die u niet wilt.

Use case: kernel-upgrade bleef achter, wil je gewoon de kernel upgraden, wil je niet de hele distributie upgraden.

Betere manier om teruggehouden pakketten af ​​te handelen:

sudo aptitude

Als u het pakket hebt achtergehouden, ziet u Upgradable Packages bovenaan de lijst.

  • Raak + in die lijst aan
  • Raak tweemaal g
  • Beantwoord debconf-dingen als daarom wordt gevraagd
  • Druk op Return om door te gaan
  • Druk op Q
  • Druk op Ja

Uw achtergehouden pakket is geïnstalleerd.


170
2017-12-24 00:43



apt-get dist-upgrade is alleen gevaarlijk als je slechte repositories hebt /etc/apt/sources.list*. Het is goed om dat te weten dist-upgrade upgrades alle pakketten, maar met de standaard repository's zou dat in orde moeten zijn. Niet gebruik makend van dist-upgrade kan gevaarlijk zijn, omdat u beveiligingsupdates misschien mist. - Flimm
apt-get dist-upgrade kan verwijderen evenals pakketten toevoegen, maar het is niet echt gevaarlijk. Elk pakket installatieopdracht kan ernstige schade veroorzaken als je problemen hebt met je sources.list het dossier! Een vaste klant apt-get upgrade commando zal elk pakket installeren vanuit elke softwarebron die is ingeschakeld; dist-upgrade is niet uniek op deze manier. Verder, met behulp van aptitude om welke bewerking dan ook uit te voeren, althans op amd64, is veel gevaarlijker dan rennen apt-get dist-upgrade, in een release waar bug 831768 staat niet vast. - Eliah Kagan
Voor mij was het gemakkelijker (lokale machine met X actief) om de synaptische software te openen en de upgrade van het pakket te forceren. Om de een of andere reden leek het helemaal niet op te staan ​​waar je het in synaptiek beschreef. - djvs
Ook sudo aptitude safe-upgrade - msanford


Waarom probeer je het niet dit antwoord van Unix SE:

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

Hiermee kunnen nieuwe pakketten worden geïnstalleerd. Het zal u laten weten welke pakketten zouden worden geïnstalleerd en u vragen voordat u daadwerkelijk de installatie uitvoert.

apt opdracht (vriendelijk alternatief naar apt-get) delen deze apt-get keuze.

Gebruik makend van apt install <pkg> in plaats daarvan markeert pkg als "handmatig geïnstalleerd" !! Om het opnieuw te markeren als "automatisch geïnstalleerd" gebruik apt-mark auto <pkg> (zie ook subopdracht showmanual). Meer informatie op dit antwoord.


60
2017-12-20 20:16



+1 omdat het geen neveneffect heeft van het veroorzaken dat pakketten worden gemarkeerd als handmatig geïnstalleerd. - ctrl-alt-delor
Opmerking voor wie ooit mijn opmerking hierboven leest: het niet goed vinden van het neveneffect van markeren als handmatig geïnstalleerd. Ik vind dit antwoord leuk. - ctrl-alt-delor
Dus als je het gebruikt sudo apt-get --with-new-pkgs upgrade  zonder lopend apt-mark auto <pkg>, komt alles goed? Is het tweede commando alleen nodig als u do kies om handmatig gehouden back-pakketten te installeren? - mac9416
Ja. apt-mark auto <pkg> moet alleen nodig zijn om een ​​pakket te markeren als zijnde automatisch geïnstalleerd (hier de manpagina). - Pablo Bianchi


Er zijn normaal gesproken twee redenen waarom u dit bericht zou kunnen zien.

Bij het upgraden van het programma (via sudo apt-get upgrade) veroorzaakt dat pakketten worden toegevoegd of verwijderd, waarna het programma wordt tegengehouden. Je kunt gebruiken sudo apt-get dist-upgrade in dit geval, dat vervolgens aanbiedt om de aanvullende programma's toe te voegen of te verwijderen.

Dit komt vrij veel voor en is meestal geen probleem. Af en toe (met name tijdens een Ubuntu-alfa) a dist-upgrade zal aanbieden om veel andere programma's te verwijderen, in welk geval je het waarschijnlijk wilt annuleren.

Als het programma afhankelijk is van pakketten of versies die niet beschikbaar zijn, wordt het programma tegengehouden. In dit geval kunt u eigenlijk niets anders doen dan wachten, omdat het pakket in principe niet te installeren is. Dit kan gebeuren wanneer pakketten niet in de juiste volgorde aan de repository worden toegevoegd, wanneer een pakket wordt hernoemd of wanneer een pakket stopt met het aanbieden van een virtueel pakket.


30
2017-07-31 22:16



Is er een manier om te bepalen of het vastgehouden pakket een afhankelijkheid nodig heeft die niet kan worden geïnstalleerd of dat deze wordt vastgehouden omdat andere pakketten ervan afhankelijk zijn. Ik heb veel pakketten in bezit en ik ben van mening dat beide gevallen van toepassing kunnen zijn op mijn systeem. - Jake
Bedankt, de tweede reden was het probleem voor mij. Zelfs apt-get dist-upgrade weigerde om het te installeren. Inspectie van het pakket met aptitude toonde aan dat dit afhangt van een pakket dat niet beschikbaar is. Ik denk dat ik moet wachten. - jlh


Hoogstwaarschijnlijk worden deze pakketten tegengehouden omdat hun installatie afhankelijkheidsinconsistenties zou creëren. Dit kan gebeuren omdat u archieven in actieve ontwikkeling gebruikt, ppas of omdat de mirror die u gebruikt niet volledig is bijgewerkt.

In het laatste geval, wacht maar af, wanneer de afhankelijkheden zijn opgelost, zal deze de volgende keer worden geïnstalleerd.

Bewerk:

Er is nog een andere mogelijkheid, pakketten kunnen worden tegengehouden als ze worden vastgehouden of als ze worden vastgezet.


18
2017-07-31 22:17



Waar baseer je die waarschijnlijkheid op, zonder te weten wat hij deed met een apt-get-upgrade of een apt-get dist-upgrade (de aptitude-equivalenten)? - andol
dit is het meest voorkomende probleem in ondersteuningsvragen en bugs - txwikinger
Akkoord. U moet waarschijnlijk wachten en uw apt_preferences bekijken. Dit wordt vaak veroorzaakt door ontwikkelingsarchieven waar de en beschikbare pakketafhankelijkheden zeer snel veranderen. Wacht tot ze zijn gaan hangen en misschien niet nodig dist-upgrade helemaal niet. Als je het nog steeds leuk zou vinden dist-upgrade, kijk dan naar de NIEUWE pakketten die moeten worden geïnstalleerd en de pakketten die moeten worden verwijderd voordat je verder gaat. - Umang
Dit is mijn geval omdat ik het "teruggehouden" bericht ontvang met dist-upgrade - Postadelmaga
In gevallen waar dit probleem te wijten is aan een vervuiling met apt-voorkeuren (pinning), vond ik het opnieuw installeren van de bewaarde pakketten mij geholpen: apt-get install --reinstall <packages>. - tanius


Je kunt ook proberen:

sudo aptitude safe-upgrade.

Het is veiliger dan full-upgrade (oorspronkelijk dist-upgrade genaamd) omdat "pakketten niet zullen worden verwijderd, tenzij ze niet worden gebruikt".

Van man aptitude:

safe-upgrade

Upgrades van geïnstalleerde pakketten naar hun meest recente versie. geïnstalleerd   pakketten worden niet verwijderd tenzij ze ongebruikt zijn /.../ pakketten   die momenteel niet zijn geïnstalleerd, kunnen worden geïnstalleerd om te verhelpen   afhankelijkheden, tenzij de opdrachtregeloptie --no-new-installs is   geleverd.


18
2017-08-12 08:02





Dit komt meestal omdat het pakket een afhankelijkheid heeft toegevoegd en een upgrade het niet zonder toestemming voor u wil toevoegen.

Als je loopt:

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

Vervolgens moeten de nieuwe versies worden geïnstalleerd samen met hun nieuwe afhankelijkheid.


9
2017-12-27 19:20



Upgrades van specifieke pakketten (en hun afhankelijkheden) zonder de verplichting (risico's) van een dist-upgrade. - John Mee


Ik heb geconstateerd dat aptitude beter werkt bij het upgraden van pakketten als de versies maar weinig verschillen. Ik had een situatie als deze:

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

Dit maakte apt-get de update tegenhouden, maar aptitude heeft het prima bijgewerkt. Ik weet niet zeker welk algoritme wordt gebruikt om te bepalen of een pakket moet worden bijgewerkt of niet. Ik vermoed dat deze twee dezelfde versie hadden, alleen een andere 'qualifier'. Maar apt-get zou het in elk geval niet updaten, maar aptitude wel.


7
2018-05-02 20:48





Dit werkte voor mij

sudo aptitude full-upgrade

7
2018-03-22 11:40



Zelfs aptitude upgrade werkte voor mij. - Bibhas
Ik gebruik het Ubuntu 14.04 en ik heb het niet aptitude opdrachtregel - ahmed hamdy
apt-get dist-upgrade gaf me dezelfde boodschap, maar dit loste het voor mij op. Ik had een pakket dat de upgrade van een ander pakket verbrak. Ik had die niet nodig die ik had geïnstalleerd, dus aptitude full-upgradegaf me de optie om het te verwijderen, zodat het al het andere kon upgraden. - f.ardelian


Ik kwam dit probleem tegen toen een nieuwe kernel werd vrijgegeven. (Mogelijk omdat ik onstabiele updates heb ingeschakeld.) Ik vond de eenvoudigste manier om de installatie uit te voeren, was via het grafische installatieprogramma van Ubuntu (update-manager).


3
2017-11-16 20:07