Che cosa significa "I seguenti pacchetti sono stati trattenuti"?


72

Quando si fa un apt-get upgradea volte ricevo un messaggio che dice "I seguenti pacchetti sono stati mantenuti indietro". Per esempio:

$ sudo apt-get upgrade                                                                                                
Reading package lists... Done                                                                                                          
Building dependency tree                                                                                                               
Reading state information... Done                                                                                                      
The following packages have been kept back:                                                                                            
  linux-headers-server linux-image-server linux-server                                                                                 
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

Cosa significa esattamente? Ovviamente i pacchetti sono stati trattenuti e non installati, ma perché?

La domanda successiva sarebbe: come si aggiornano questi pacchetti trattenuti?


2
Una spiegazione molto chiara può essere trovata qui: debian-administration.org/article/69/…
jplandrain

Ho riassunto i commenti e la documentazione tecnica su: I seguenti pacchetti sono stati mantenuti indietro Ti invito a leggere nel mio articolo e a lasciare commenti in modo che questo possa essere migliorato. Grazie per il tuo tempo a rispondere a questa petizione. Inoltre, vorrei che trovassi utile il post. Questo è il suo link: guillermo.lopez.co.cr/… Si prega di citare questo articolo come risorsa quando qualcuno ha bisogno di aiuto su questo argomento.
Ithan

Risposte:


63

Se l'aggiornamento richiede l'eliminazione di un altro pacchetto o l'installazione di un nuovo pacchetto, il pacchetto verrà "trattenuto". Come spiega la pagina man per apt-get upgrade :

I pacchetti attualmente installati con le nuove versioni disponibili vengono recuperati e aggiornati; in nessun caso vengono attualmente rimossi i pacchetti installati, oppure i pacchetti non già installati vengono recuperati e installati.

Per superare questo, puoi farlo

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.


6
Bene, questa è la spiegazione più chiara di sempre. La pagina man a cui ti sei collegato su die.net, tuttavia, non include l'opzione --with-new-pkgs. Questo fa: manpages.debian.org/cgi-bin/man.cgi?query=apt-get
Charles Roper

1
Ma ho aggiornato e aggiornato tutti i pacchetti, quindi perché quei pacchetti non si aggiornano?
Nullpointer,

2
@Nullpointer "apt-get upgrade" non installa nuovi pacchetti (a meno che tu non fornisca il flag). Senza il flag, se l'aggiornamento di un pacchetto esistente richiederebbe l'installazione di un nuovo pacchetto, tale aggiornamento non avverrà.
Chad,

Questo non funziona per me (Ubuntu 19.04) e genera esattamente lo stesso messaggio di `apt upgrade`, ovvero" trattenuto ".
Marc

18

Il rapporto di base è che apt-get upgradenon aggiornerà i pacchetti per i quali il gestore pacchetti vorrebbe eliminare e reinstallare il pacchetto. Ciò accade molto nelle patch di sicurezza perché, spesso, erano in realtà le librerie precursore della compilazione distribuibile finale che erano state patchate. La funzionalità "vai avanti ed elimina le cose" vive apt-get dist-upgradema assicurati di eseguirla per apt-get updateprima nel caso in cui i ragazzi a monte abbiano capito qualcosa dall'ultima volta che hai provato. A volte mancano le cose e le risolvono rapidamente.


3

Prova apt-get dist-upgrade. Dalla pagina man:

dist-upgrade

dist-upgradeoltre a svolgere la funzione di upgrade, gestisce anche in modo intelligente il cambiamento delle dipendenze con le nuove versioni dei pacchetti; apt-get ha un sistema "intelligente" di risoluzione dei conflitti e tenterà di aggiornare i pacchetti più importanti a spese di quelli meno importanti, se necessario. Quindi, il dist-upgradecomando potrebbe rimuovere alcuni pacchetti. Il /etc/apt/sources.listfile contiene un elenco di posizioni da cui recuperare i file del pacchetto desiderati. Vedi anche apt_preferences(5)per un meccanismo per sovrascrivere le impostazioni generali per i singoli pacchetti.

Mentre questo comando viene utilizzato per eseguire l'aggiornamento a una nuova versione principale del sistema operativo, non lo fa per impostazione predefinita. Il file /etc/apt/sources.listdeve essere modificato per la nuova versione e poi un dist-upgradeviene utilizzato.


1

Basta fare

sudo apt-get install linux-headers-server linux-image-server linux-server

per aggiornare i pacchetti trattenuti.

Quindi corri apt-get upgradee starai bene.


5
Questo non è corretto apt-get dist-upgradesarà NON aggiornare il sistema operativo a una nuova versione. man apt-getper vedere le differenze.
BT643,

@ BT643 (e coloro che hanno votato a favore del commento) per favore ridimensiona le risposte sbagliate invece di lasciare un commento. Risposte particolarmente palesemente sbagliate come questa che perpetuano un malinteso comune. Dipendiamo dai voti per portare buoni contenuti in primo piano ma anche per ridurre i contenuti sbagliati.
terdon

1
@terdon Ho provato ma non ho abbastanza rappresentante :) (ho bisogno di 125 per votare).
BT643,

La prima parte (installa / aggiorna solo i pacchetti trattenuti) non è una buona risposta? Quindi procedere con l'aggiornamento. Rimuovere i consigli offensivi su dist-upgrade suona come un'idea migliore del semplice downvoting di una risposta parzialmente corretta ...
Xen2050

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