it-swarm.it

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

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?

864
jfoucher

Secondo n 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".

Soluzione cauta 1:

Per risposta di Pablo , è possibile eseguire Sudo apt-get --with-new-pkgs upgrade e verranno installati i pacchetti conservati.

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

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

Soluzione cauta 2:

La soluzione prudente è 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:

Una soluzione più aggressiva consiste nell'eseguire Sudo apt-get dist-upgrade, che forzerà l'installazione di queste nuove dipendenze.

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

Quindi, se ti trovi in ​​un posto dove la "soluzione cauta" non funziona, dist-upgrade potrebbe funzionare ... ma probabilmente stai meglio imparando un qualcosa in più su APT e sulla risoluzione "manuale" dei problemi di dipendenza installando e rimuovendo i pacchetti caso per caso.

Pensala 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-upgrade e sperare che conosca le sue cose.

887
Michael Crenshaw

Ogni volta che ricevi dal comando apt-get upgrade il messaggio

The following packages have been kept back:

quindi aggiornare uno o tutti i pacchetti mantenuti, senza fare un aggiornamento della distribuzione (questo è ciò che fa dist-upgrade, 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.

497
user88285

apt-get dist-upgrade è pericoloso per l'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.

173
mudy

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.

apt command ( alternativa amichevole a apt-get ) condividi questa opzione.

L'uso di _apt install <pkg>_ invece contrassegnerà pkg come "installato manualmente" !! Per contrassegnarlo di nuovo come "installato automaticamente" usare apt-mark auto <pkg> (vedi anche sottocomando showmanual). Maggiori informazioni su questa risposta .

141
Pablo Bianchi

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-upgrade in questo caso, che offrirà quindi di aggiungere o rimuovere i programmi aggiuntivi.

Questo è abbastanza comune e di solito non è un problema. Occasionalmente (specialmente durante un Ubuntu alpha) un dist-upgrade offrirà di rimuovere molti altri programmi, nel qual caso probabilmente vorrai cancellarlo.

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.

33
jbowtie

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.

23
Afilu

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.

Edit:

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

21
txwikinger

Questo di solito è perché il pacchetto ha aggiunto una dipendenza e l'aggiornamento non vuole aggiungerlo 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.

9

Questo ha funzionato per me

Sudo aptitude full-upgrade
8
Singh

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

[email protected]:/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 di quale algoritmo venga 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.

6

Nel mio caso i pacchetti trattenuti erano quelli relativi a linux-headers e 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-upgrade né manuale apt-get install xxx .

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 includendo finalmente 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 tra cui gli aggiornamenti del kernel sono sensibili al letargo - Ho questo problema diverse volte e lo risolvo sempre riavviando la macchina ed eseguendo i passaggi sopra.

Quindi forse questo sarebbe appena sufficiente ?!

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

4
crysman

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).

3
Kazark

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", e poi 'q' per uscire dopo aver letto il messaggio, quindi le cose procedevano normalmente.

2
Elliptical view

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-progs è stato 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#post1347618

2

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? enter image description here

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. enter image description here

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.

1

Unbuntu 18.04 fornisce una sintassi più recente e semplificata tramite apt che può essere utilizzata al posto di _apt-get_.

_Sudo apt full-upgrade
_

Sudo apt upgrade viene 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 richiesto 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 svolge la funzione di aggiornamento ma rimuoverà i pacchetti attualmente installati se necessario per aggiornare il sistema nel suo insieme.

1
l --marc l

In realtà, lo switch necessario è dselect-upgrade che installa/rimuove le dipendenze per il particolare set di pacchetti in questione.

1
Johnny