"I seguenti pacchetti sono stati conservati:" Perché e come posso risolverlo?


877

Ho appena aggiunto un repository PPA per la versione di sviluppo di GIMP, ma ottengo questo errore:

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

Perché e come posso risolverlo in modo da poter utilizzare l'ultima versione anziché quella che ho ora?


17
A rigor di termini, direi che è un avvertimento, non un errore.
Kazark

Risposte:


905

Secondo un articolo su debian-administration.org ,

Se le dipendenze sono cambiate su uno dei pacchetti installati in modo che sia necessario installare un nuovo pacchetto per eseguire l'aggiornamento, questo verrà elencato come "trattenuto".

Cauta soluzione 1:

Per la risposta di Pablo , è possibile eseguire sudo apt-get --with-new-pkgs upgradee installerà i pacchetti trattenuti.

Ciò ha il vantaggio di non contrassegnare i pacchetti trattenuti come "installati manualmente", il che potrebbe forzare un maggiore intervento dell'utente lungo la linea (vedere i commenti).

Se la soluzione di Pablo funziona per te, ti preghiamo di votarla. In caso contrario, si prega di commentare cosa è andato storto.

Cauta soluzione 2:

La soluzione cauta è eseguire sudo apt-get install <list of packages kept back>. Nella maggior parte dei casi ciò fornirà ai pacchetti conservati ciò di cui hanno bisogno per eseguire correttamente l'aggiornamento.

Soluzione aggressiva:

È in esecuzione una soluzione più aggressiva sudo apt-get dist-upgrade, che costringerà l'installazione di queste nuove dipendenze.

Ma dist-upgrade può essere abbastanza pericoloso . A differenza dell'aggiornamento , può rimuovere i pacchetti per risolvere situazioni di dipendenza complesse. A differenza di te, APT non è sempre abbastanza intelligente da sapere se queste aggiunte e rimozioni potrebbero causare il caos.

Quindi, se ti trovi in ​​un posto in cui la "soluzione cauta" non funziona, dist-upgrade potrebbe funzionare ... ma probabilmente stai meglio imparare un po 'di più su APT e risolvere i problemi di dipendenza "a mano" installando e rimuovendo pacchetti caso per caso.

Pensalo come riparare un'auto ... se hai tempo e sei a portata di mano con una chiave inglese, avrai un po 'di tranquillità leggendo e facendo la riparazione da solo. Se ti senti fortunato, puoi lasciare l'auto con tuo cugino dist-upgradee sperare che conosca le sue cose.


180
Poiché si tratta di una risposta accettata, è necessario aggiornarla per avvertire dell'utilizzo dist-upgradesu un sistema stabile, come hanno sottolineato molte delle altre risposte di seguito. Personalmente penso che ci sia una risposta più semplice / più sicura che deve essere promossa: apt-get install <elenco di pkgs>
Cas

7
Cas, dovrei solo aggiungere che potrebbe essere pericoloso eseguire un dist-upgrade su un sistema stabile? Perché è esattamente così pericoloso? (Onestamente non lo so molto bene.)
Michael Crenshaw,

17
C'è una risposta di errore del server che spiega dist-upgrade in modo un po 'più dettagliato. Penso che valga la pena di chiarire (non pericoloso in quanto tale) che potrebbe aggiornare l'intero sistema che potrebbe essere al di là di ciò che l'utente si aspetta / desidera, ad esempio nell'esempio di OP si stanno chiedendo perché gimp sia trattenuto.
Cas

19
Si noti che è sudo apt-get dist-upgradepossibile rimuovere anche i pacchetti. Di conseguenza, è sempre meglio controllare l'elenco delle modifiche che verranno apportate prima di accettarle, durante l'esecuzione sudo apt-get dist-upgrade.
Eliah Kagan,

6
@EliahKagan Posso aggiungere che apt-get upgradepuò anche rimuovere i pacchetti? Lo farà sempre quando altrimenti ci sarebbe un conflitto di versione. Pensa a llvm3.6vs. llvm3.6v5(con "v5" che significa che è stato compilato gcc 5). Questi due non possono coesistere , solo uno dei due può essere mantenuto sul sistema. Quindi sì, dist-upgradepotrebbe anche rimuovere alcuni pacchetti, ma non è solo dist-upgradequello che farebbe questo; in determinate circostanze, upgradeanche.
syntaxerror,

500

Ogni volta che ricevi dal comando apt-get upgradeil messaggio

The following packages have been kept back:

quindi aggiornare uno o tutti i pacchetti conservati, senza fare un aggiornamento di distribuzione (questo è ciò che dist-upgradefa, se ricordo bene) è emettere il comando:

apt-get install <list of packages kept back>

questo risolverà i problemi trattenuti e chiederà di installare pacchetti aggiuntivi, ecc. come spiegato da altre risposte.


3
Quando i pacchetti vengono mantenuti in questo modo e manualmente apt-get upgrade <list of packages>, se lo ripeterò apt-get upgrade, elencherò i pacchetti in questione come non più necessari e che posso usare apt autoremoveper rimuoverli, cosa che faccio, e poi un ultimo apt-get upgradee non sono più elencati come tenuto indietro ... molto strano. qualche idea?
cram2208,

Rimuove apt-get installanche i pacchetti quando necessario per risolvere situazioni di dipendenza nodose o dovresti eseguire un apt-get removecomando separato per completare quella parte del processo di aggiornamento?
Michael Crenshaw,

@ cram2208 Credo che sia il comportamento previsto. I pacchetti "installati automaticamente e [...] non più necessari" sono le versioni precedenti dei pacchetti aggiornati, che ora non sono più necessari. apt autoremovequindi rimuove queste dipendenze non utilizzate.
Alex,

3
Se l'aggiornamento richiede l'installazione di un nuovo pacchetto, il pacchetto verrà "trattenuto". Innanzitutto considera l'uso: sudo apt-get --with-new-pkgs upgradeche non avrebbe effetti collaterali nel far sì che i pacchetti vengano contrassegnati come installati manualmente
l --marc l

@ mac9416 sì.
jarno,

174

apt-get dist-upgrade è pericoloso per un ambiente stabile,

  1. impostazione source.list errata e si finisce con Ubuntu rotto.
  2. potresti ottenere l'intera applicazione aggiornata alla versione che non desideri.

Caso d'uso: aggiornamento del kernel trattenuto, vuoi solo aggiornare il kernel, non vuoi aggiornare l'intera distribuzione.

Un modo migliore per gestire il pacchetto di sicurezza:

sudo aptitude

Se hai mantenuto il pacchetto, dovresti vedere Pacchetti aggiornabili in cima all'elenco.

  • Premi + su quell'elenco
  • Premi g due volte
  • Rispondere a roba debconf se richiesto
  • Premi Invio per continuare
  • Premi Q
  • Premere Sì

Il pacchetto mantenuto indietro installato.


34
apt-get dist-upgradeè pericoloso solo se si dispone di archivi non validi /etc/apt/sources.list*. È bene essere consapevoli che dist-upgradeaggiorna tutti i pacchetti, ma con i repository predefiniti, dovrebbe andare bene. Non utilizzare dist-upgradepotrebbe essere pericoloso, poiché potresti perdere gli aggiornamenti di sicurezza.
Flimm,

6
apt-get dist-upgradepuò rimuovere e aggiungere pacchetti, ma non è davvero pericoloso. Qualsiasi comando di installazione del pacchetto può causare seri danni in caso di problemi nel sources.listfile ! Un apt-get upgradecomando regolare installa qualsiasi pacchetto da qualsiasi sorgente software abilitata; dist-upgradenon è unico in questo modo. Inoltre, l'utilizzo aptitudeper eseguire qualsiasi operazione, almeno su amd64, è molto più pericoloso che in esecuzione apt-get dist-upgrade, in una versione in cui il bug 831768 non è stato corretto.
Eliah Kagan,

Per me, è stato più semplice (macchina locale con X in esecuzione) semplicemente aprire synaptic e forzare l'aggiornamento del pacchetto. Per qualche motivo, non è apparso affatto nel modo descritto in sinaptico.
djvs,

3
Inoltresudo aptitude safe-upgrade
msanford,

146

Perché non provi questa risposta Unix SE :

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

Ciò consente l'installazione di nuovi pacchetti. Ti farà sapere quali pacchetti verrebbero installati e ti chiederà prima di fare effettivamente l'installazione.

aptcomando ( alternativa amichevole a apt-get) condividere questa opzione.

Usando apt install <pkg>invece si contrassegna pkg come "installato manualmente" !! Per contrassegnarlo nuovamente come "installato automaticamente" utilizzare apt-mark auto <pkg>(vedere anche il sottocomando showmanual). Maggiori informazioni su questa risposta .


20
+1 perché non ha effetti collaterali sul fatto che i pacchetti vengano contrassegnati come installati manualmente.
ctrl-alt-delor,

1
Nota a chi ha mai letto il mio commento sopra: non avere l'effetto collaterale di contrassegnare come installato manualmente è una buona cosa. Mi piace questa risposta.
ctrl-alt-delor

1
Sì. apt-mark auto <pkg>dovrebbe essere necessario solo per contrassegnare un pacchetto come installato automaticamente ( qui la pagina man ).
Pablo A

11
Per qualche motivo sudo apt-get --with-new-pkgs upgrademostra ancora i pacchetti come "trattenuti". Nessun messaggio di errore
Franklin Yu,

2
Voglio solo aggiungere che per molte istanze del server debian 9.6 aggiornate questa è stata la soluzione più sicura senza rompere le cose. Grazie per questo, Pablo, poiché per fortuna avevo precedentemente testato altre opzioni sugli ambienti di gestione temporanea e ho potuto amministrare molti server secondo gli standard di sicurezza grazie all'inclusione --with-new-pkgs con risultati molto più puliti per la gestione generale dei pacchetti futuri. Davvero, questa risposta UNIX SE dovrebbe essere votata!
Giulio

34

Normalmente ci sono due motivi per cui potresti vedere questo messaggio.

Se l'aggiornamento del programma (tramite sudo apt-get upgrade) comporterebbe l'aggiunta o la rimozione di pacchetti, il programma verrà trattenuto. È possibile utilizzare sudo apt-get dist-upgradein questo caso, che offrirà quindi di aggiungere o rimuovere i programmi aggiuntivi.

Questo è abbastanza comune e di solito non è un problema. Occasionalmente (in particolare durante un alpha di Ubuntu) dist-upgradesi offrirà di rimuovere molti altri programmi, nel qual caso probabilmente si desidera annullarlo.

Se il programma dipende da pacchetti o versioni non disponibili, il programma verrà trattenuto. Non puoi fare altro che aspettare in questa circostanza, dal momento che il pacchetto è praticamente non installabile. Ciò può accadere quando i pacchetti vengono aggiunti al repository fuori servizio, quando un pacchetto viene rinominato o quando un pacchetto smette di fornire un pacchetto virtuale.


5
Esiste un modo per determinare se il pacchetto trattenuto necessita di una dipendenza che non può essere installata o se viene trattenuto perché altri pacchetti dipendono da esso. Ho molti pacchetti detenuti e credo che entrambi questi casi possano applicarsi al mio sistema.
Jake,

Grazie, il secondo motivo è stato il problema per me. Si è perfino apt-get dist-upgraderifiutato di installarlo. Ispezionare il pacchetto con aptitude ha mostrato che dipende da un pacchetto che non è disponibile. Immagino che dovrò aspettare.
jlh

23

Puoi anche provare:

sudo aptitude safe-upgrade.

È più sicuro di full-upgrade(originariamente chiamato dist-upgrade) perché "i pacchetti non verranno rimossi se non vengono inutilizzati".

Da man aptitude:

safe-upgrade

Aggiorna i pacchetti installati alla versione più recente. I pacchetti installati non verranno rimossi a meno che non siano inutilizzati /.../ I pacchetti che non sono attualmente installati possono essere installati per risolvere le dipendenze a meno che non venga fornita l'opzione della riga di comando --no-new-installs.


21

Molto probabilmente questi pacchetti vengono trattenuti perché la loro installazione creerebbe incoerenze nelle dipendenze. Ciò può accadere perché si utilizzano archivi in ​​sviluppo attivo, ppas o perché il mirror utilizzato non è completamente aggiornato.

Nell'ultimo caso, basta attendere, quando le dipendenze vengono risolte, verrà installato la volta successiva.

Modificare:

Esiste un'altra possibilità, i pacchetti potrebbero essere trattenuti in caso di blocco o se bloccati.


Su cosa basi quella probabilità, senza sapere qualunque cosa abbia eseguito un apt-get upgrade o un apt-get dist-upgrade (alt. Gli equivalenti aptitude)?
andol

questo è il problema più
frequente

Concordato. Probabilmente dovresti aspettare e controllare apt_preferences. Ciò è spesso causato da archivi di sviluppo in cui le dipendenze dei pacchetti disponibili e stanno cambiando molto rapidamente. Aspetta che si stabilizzino e potresti non averne bisogno dist-upgrade. Se vuoi ancora farlo dist-upgrade, dai un'occhiata ai NUOVI pacchetti da installare e ai pacchetti da rimuovere prima di andare avanti.
Umang,

Questo è il mio caso perché ricevo il messaggio "trattenuto" usando dist-upgrade
Postadelmaga,

Nei casi in cui questo problema è dovuto a un messup con le preferenze APT (pinning), ho trovato reinstallazione dei pacchetti custoditi mi ha aiutato: apt-get install --reinstall <packages>.
tanius,

9

Questo di solito è perché il pacchetto ha aggiunto una dipendenza e l'aggiornamento non vuole aggiungerlo per te senza autorizzazione.

Se corri:

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

Quindi le nuove versioni dovrebbero essere installate insieme alla loro nuova dipendenza.


Aggiorna pacchetti specifici (e le loro dipendenze) senza l'impegno (rischi) di un dist-upgrade.
John Mee,

8

Questo ha funzionato per me

sudo aptitude full-upgrade

Ha persino aptitude upgradelavorato per me.
Bibhas,

Sto usando Ubuntu 14.04e non ho la aptituderiga di comando
ahmed hamdy

apt-get dist-upgrademi ha dato lo stesso messaggio, ma questo mi ha risolto. Ho avuto un pacchetto che stava interrompendo l'aggiornamento di un altro pacchetto. Non avevo bisogno di quello che ho installato, quindi aptitude full-upgrademi ha dato la possibilità di rimuoverlo in modo che potesse aggiornare tutto il resto.
f.ardelian,

6

Ho scoperto che aptitude fa un lavoro migliore nell'aggiornamento dei pacchetti se le versioni differiscono leggermente. Ho avuto una situazione come questa:

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

Questo ha reso apt-get trattenere l'aggiornamento, ma aptitude lo ha aggiornato bene. Non sono sicuro dell'algoritmo utilizzato per determinare se un pacchetto deve essere aggiornato o meno. Immagino che questi due avessero la stessa versione, solo un 'qualificatore' diverso. Ma in ogni caso, apt-get non lo aggiornerebbe, ma aptitude lo farebbe.


4

Nel mio caso i pacchetti trattenuti erano quelli relativi alle intestazioni di Linux e al kernel. Sono arrivato a questo cercando di risolvere un problema con un punto esclamativo rosso nell'area di notifica e non essere in grado di aggiornare i pacchetti.

Per risolverlo, non ho dovuto usare né dist-upgradeapt-get install xxx manuale .

Quello che ho fatto e che ha aiutato è stato semplice e pulito :

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

Ho dovuto confermare manualmente l'aggiornamento di Grub e la sua configurazione.

Poi ho appena lavorato con il computer per un po 'e poi sono tornati a comparire i dialoghi di aggiornamento standard, tra cui la sezione "Ubuntu base" con kernel e relativi. L'aggiornamento è stato eseguito senza problemi e non vedo più alcun pacchetto trattenuto.

Inoltre, è molto importante tenere presente che quegli aggiornamenti di * buntu, inclusi gli aggiornamenti del kernel, sono sensibili al letargo : ho questo problema diverse volte e lo risolvo sempre riavviando la macchina ed eseguendo i passaggi precedenti.

Quindi forse questo sarebbe appena sufficiente ?!

(la situazione qui descritta è correlata al mio Xubuntu 15.10 alla fine di dicembre 2015)


3

Ho riscontrato questo problema quando è stato rilasciato un nuovo kernel. (Forse perché ho abilitato gli aggiornamenti instabili.) Ho trovato il modo più semplice per eseguire l'installazione era tramite il programma di installazione grafico di Ubuntu ( update-manager).


2

Ho riscontrato questo problema utilizzando Synaptic perché sembrava bloccarsi e per provare a risolvere il problema ho riavviato e riprovato.

Poi ho scoperto un messaggio informativo come parte del pacchetto con alcune istruzioni post-installazione per me.

Ho dovuto premere " dettagli ", quindi " q " per uscire dopo aver letto il messaggio, quindi le cose procedevano normalmente.


2

Questo sembra il modo corretto di reinstallare il pacchetto mantenuto indietro:

apt-get install --reinstall libjpeg-progs

Almeno questo ha funzionato per me quando è libjpeg-progsstato bloccato dopo l'aggiornamento da Ubuntu 14.04 a 16.04. Sono sicuro che puoi fare lo stesso con qualsiasi altra app trattenuta, ad es gimp.

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


1
Potresti farlo anche senza --reinstall.
jarno,

La cosa divertente è che rimuove il pacchetto libjpeg-turbo-progs.
jarno,

1

In realtà, lo switch di cui hai bisogno è quello dselect-upgradeche installa / rimuove le dipendenze per il particolare set di pacchetti in questione.


1

Ho letto tutti i post e ho scoperto che ci sono molte spiegazioni interessanti. Li stavo provando tutti ma non ho ottenuto risultati completamente. Ho un problema con mysql-utilities che non ho potuto aggiornare. L'aggiornamento è stato proposto dal sistema. Quindi, voglio mostrare alcuni passaggi per farlo. Certo, ripeterò tra qualche momento tutti i suddetti post. Ecco il mio errore, sì l'ho trovato da post già esistenti, ma cosa dovrei fare dopo? inserisci qui la descrizione dell'immagine

Il prossimo passo è:

sudo apt-get --purge remove mysql-utilities

I risultati che possiamo vedere nell'immagine qui sotto. Rimuovo il pacchetto e lo controllo tramite comando:

sudo apt-get -f install

Risultati - Bene! Successivamente ho installato correttamente questa nuova versione del pacchetto. inserisci qui la descrizione dell'immagine

In questo modo, penso che possa aiutare più nuove persone perché avendo altri pacchetti possiamo fare gli stessi passi.

Una volta, mi dispiace, quando ho ripetuto in alcuni posti altri post.


5
Non utilizzare schermate per il testo del terminale, poiché ciò lo rende non ricercabile da Google e illeggibile da alcune persone. Invece, incolla il testo del terminale nella tua risposta, seleziona quel testo e premi il {}pulsante nell'editor per formattarlo correttamente.
Chai T. Rex,

@ ChaiT.Rex Grazie per le osservazioni, lo prenderò in considerazione per il futuro.
Vasyl Lyashkevych,

1

Ubuntu 18.04 fornisce una sintassi più recente e semplificata tramite la aptquale può essere utilizzata al posto di apt-get.

sudo apt full-upgrade

sudo apt upgradeviene utilizzato per installare gli aggiornamenti disponibili di tutti i pacchetti attualmente installati sul sistema dalle fonti configurate tramite sources.list (5). Nuovi pacchetti verranno installati se necessario per soddisfare le dipendenze, ma i pacchetti esistenti non verranno mai rimossi. Se un aggiornamento per un pacchetto richiede la rimozione di un pacchetto installato, l'aggiornamento per questo pacchetto non viene eseguito.

sudo apt full-upgrade esegue la funzione di aggiornamento ma rimuoverà i pacchetti attualmente installati se è necessario per aggiornare il sistema nel suo insieme.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.