Domanda "I seguenti pacchetti sono stati tenuti indietro:" Perché e come 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 usare l'ultima versione invece di quella che ho adesso?


719
2017-07-31 21:59


origine


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


risposte:


Secondo un articolo su debian-administration.org,

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

Soluzione prudente 1:

La soluzione prudente è quella di correre sudo apt-get install <list of packages kept back>. Nella maggior parte dei casi questo darà ai pacchetti trattenuti ciò di cui hanno bisogno per aggiornare con successo.

Soluzione prudente 2:

Per La risposta di Pablo, puoi correre 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 imporre un maggiore intervento dell'utente lungo la linea (vedere i commenti).

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

Soluzione aggressiva:

Una soluzione più aggressiva è quella di correre sudo apt-get dist-upgrade, che costringerà l'installazione di quelle nuove dipendenze.

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

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

Pensa a come aggiustare un'auto ... se hai tempo e ti viene in aiuto una chiave inglese, avrai un po 'di tranquillità leggendo e facendo la riparazione da solo. Se ti senti fortunato, puoi lasciare la macchina con tuo cugino dist-upgrade e spero che lei conosca la sua roba.


702
2017-07-31 22:15



Poiché si tratta di una risposta accettata, è necessario un aggiornamento per avvertire sull'utilizzo dist-upgrade su 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
Cas, dovrei semplicemente aggiungere che potrebbe essere pericoloso eseguire un dist-upgrade su un sistema stabile? Perché è esattamente così pericoloso? (Sinceramente non lo so bene.) - mac9416
C'è un Risposta all'errore del server questo 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 oltre ciò che l'utente si aspetta / vuole che nell'esempio OP si chieda perché il gimp viene trattenuto. - Cas
Si prega di notare che sudo apt-get dist-upgrade possono anche rimuovere Pacchetti. Di conseguenza, è sempre meglio ispezionare l'elenco delle modifiche che verranno apportate prima di accettarle, durante l'esecuzione sudo apt-get dist-upgrade. - Eliah Kagan
@EliahKagan Posso aggiungere anche questo apt-get upgrade puoi rimuovere i pacchetti? Lo farà sempre quando ci sarebbe un conflitto di versione altrimenti. Pensa a llvm3.6 vs. llvm3.6v5 (con "v5" che significa che è stato compilato con gcc 5). Questi due non può coesistere, solo uno dei due può essere mantenuto nel sistema. Quindi sì dist-upgrade può rimuovere anche alcuni pacchetti, ma non solo dist-upgrade questo lo farebbe; In alcune circostanze, upgrade anche. - syntaxerror


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

The following packages have been kept back:

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


468
2017-09-08 09:14



Quando i pacchetti vengono tenuti indietro in questo modo e manualmente apt-get upgrade <list of packages>, se rifaccio apt-get upgrade, elencherà i pacchetti in questione come non più necessari e che posso usare apt autoremove per rimuoverli, cosa che faccio, e poi per ultimo apt-get upgrade e non sono più elencati come trattenuti ... Molto strano. qualche idea? - cram2208
fa apt-get install rimuovi anche i pacchetti quando necessario per risolvere situazioni di dipendenza nodale, o dovresti eseguirne uno separato apt-get remove comando per realizzare quella parte del processo di aggiornamento? - mac9416
@ cram2208 Credo che sia il comportamento previsto. I pacchetti che erano "installati automaticamente e non [...] più necessari" sono le versioni precedenti dei pacchetti aggiornati, che ora non sono più necessari. apt autoremove quindi rimuove queste dipendenze non utilizzate. - Alex
Se l'aggiornamento richiede l'installazione di un nuovo pacchetto, il pacchetto verrà "trattenuto". Innanzitutto considera l'utilizzo di: sudo apt-get --with-new-pkgs upgrade quale sarebbe non ha effetti collaterali sul fatto che i pacchetti vengano contrassegnati come installati manualmente - l --marc l
@ mac9416 sì, lo fa. - jarno


apt-get dist-upgrade è pericoloso per l'ambiente stabile,

  1. impostazione sbagliata di source.list e si finisce con ubuntu infranti.
  2. potresti ottenere l'intera applicazione aggiornata alla versione che non desideri.

Caso d'uso: l'aggiornamento del kernel è stato ripristinato, si desidera solo aggiornare il kernel, non si desidera aggiornare l'intera distribuzione.

Un modo migliore per gestire il pacchetto trattenuto:

sudo aptitude

Se hai trattenuto il pacchetto dovresti vedere i Pacchetti aggiornabili in cima alla lista.

  • Hit + su quella lista
  • Hit g due volte
  • Rispondi a debconf se richiesto
  • Premi Invio per continuare
  • Premere Q
  • Premere Sì

Il tuo pacchetto trattenuto installato.


170
2017-12-24 00:43



apt-get dist-upgrade è pericoloso solo se hai cattivi repository in /etc/apt/sources.list*. È bello essere consapevoli di questo dist-upgrade aggiornamenti tutti pacchetti, ma con i repository di default, dovrebbe andare bene. Non utilizzando dist-upgrade potrebbe essere pericoloso, in quanto potresti perdere gli aggiornamenti di sicurezza. - Flimm
apt-get dist-upgrade può rimuovere così come aggiungere pacchetti, ma non è molto pericoloso. Qualsiasi comando di installazione del pacchetto può causare seri danni se hai problemi nel tuo sources.list file! Un normale apt-get upgrade comando installerà qualsiasi pacchetto da qualsiasi sorgente software abilitata; dist-upgrade non è unico in questo modo. Inoltre, utilizzando aptitude eseguire qualsiasi operazione, almeno su amd64, è molto più pericoloso che correre apt-get dist-upgrade, in una versione in cui bug 831768 non è stato risolto - Eliah Kagan
Per me è stato più semplice (macchina locale con X in esecuzione) aprire solo Synaptic e forzare l'aggiornamento del pacchetto. Per qualche motivo non sembra che si sia presentato a tutti dove hai descritto sinapsi. - djvs
Anche sudo aptitude safe-upgrade - msanford


Perché non ci provi questa risposta Unix SE:

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

Ciò consente l'installazione di nuovi pacchetti. Ti farà sapere quali pacchetti saranno installati e ti chiederanno prima di effettuare l'installazione.

apt comando (alternativa amichevole a apt-get) Condividere Questo apt-get opzione.

utilizzando apt install <pkg> invece segnerà pkg come "installato manualmente" !! Per contrassegnarlo nuovamente come "installato automaticamente" utilizzare apt-mark auto <pkg> (vedi anche sottocomando showmanual). Ulteriori informazioni su questa risposta.


60
2017-12-20 20:16



+1 perché non ha alcun effetto collaterale sul fatto che i pacchetti vengano contrassegnati come installati manualmente. - ctrl-alt-delor
Nota a chi legge mai il mio commento sopra: non avere l'effetto collaterale di marcatura come installato manualmente è una buona cosa. Mi piace questa risposta. - ctrl-alt-delor
Quindi se usi sudo apt-get --with-new-pkgs upgrade  senza in esecuzione apt-mark auto <pkg>, andrà tutto bene? Il secondo comando è necessario solo se tu fare scegliere di installare manualmente i pacchetti trattenuti? - mac9416
Sì. apt-mark auto <pkg> dovrebbe essere necessario solo per contrassegnare un pacchetto come installato automaticamente (qui la pagina man). - Pablo Bianchi


Di solito ci sono due motivi per cui potresti vedere questo messaggio.

Se si aggiorna il programma (tramite sudo apt-get upgrade) causerebbe l'aggiunta o la rimozione di pacchetti, quindi il programma verrà trattenuto. Puoi usare sudo apt-get dist-upgrade in questo caso, che offrirà poi di aggiungere o rimuovere i programmi aggiuntivi.

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

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


30
2017-07-31 22:16



C'è un modo per determinare se il pacchetto tenuto ha bisogno di una dipendenza che non può essere installata o se viene trattenuta perché altri pacchetti dipendono da esso. Ho molti pacchetti in attesa e credo che entrambi questi casi possano essere applicati al mio sistema. - Jake
Grazie, il secondo motivo è stato il problema per me. Anche apt-get dist-upgrade rifiutato di installarlo. Ispezionare il pacchetto con aptitude ha dimostrato che dipende da un pacchetto che non è disponibile. Immagino che dovrò aspettare. - jlh


Molto probabilmente questi pacchetti vengono trattenuti perché la loro installazione creerebbe inconsistenze di dipendenza. Questo può accadere perché stai usando gli archivi con lo sviluppo attivo, ppas o perché il mirror che usi non è completamente aggiornato.

Nell'ultimo caso, aspetta, quando le dipendenze saranno risolte verrà installato la volta successiva.

Modificare:

Esiste un'altra possibilità: i pacchetti potrebbero essere trattenuti se vengono bloccati o se sono bloccati.


18
2017-07-31 22:17



Su cosa basi questa verosimiglianza, senza sapere che cosa ha eseguito un aggiornamento apt-get o un apt-get dist-upgrade (alt. Gli equivalenti aptitude)? - andol
questo è il problema più ricorrente nelle domande di supporto e bug - txwikinger
Concordato. Probabilmente dovresti aspettare e controllare apt_preferences. Questo è spesso causato da archivi di sviluppo in cui le dipendenze dei pacchetti disponibili e stanno cambiando molto rapidamente. Aspetta che si sistemino e potresti non aver bisogno di farlo dist-upgrade affatto. Se ti piacerebbe ancora dist-upgrade, quindi guarda i NUOVI pacchetti da installare e i pacchetti da rimuovere prima di andare avanti. - Umang
Questo è il mio caso perché ottengo il messaggio "keep back" usando dist-upgrade - Postadelmaga
Nei casi in cui questo problema è dovuto a un disordine con le preferenze apt (pinning), ho trovato che la reinstallazione dei pacchetti mantenuti mi ha aiutato: apt-get install --reinstall <packages>. - tanius


Puoi anche provare:

sudo aptitude safe-upgrade.

È più sicuro di full-upgrade (originariamente chiamato dist-upgrade) perché "i pacchetti non verranno rimossi a meno che non siano inutilizzati".

A partire dal man aptitude:

safe-upgrade

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


18
2017-08-12 08:02





Questo di solito è dovuto al fatto che 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.


9
2017-12-27 19:20



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