Come appare il messaggio
$ sudo apt upgrade
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.Cause frequenti
- L'esecuzione precedente di apt o dpkg è stata interrotta: sessione SSH persa, riavvio, mancanza di corrente o processo terminato.
- Uno script del pacchetto (postinst) è fallito e il pacchetto è rimasto configurato a metà.
- Il disco o
/varsi è riempito durante l'installazione. - Gli aggiornamenti automatici sono stati interrotti da uno spegnimento.
Verifica
- apt o dpkg sono ancora in esecuzione? Se sì, aspetta.
ps -eo pid,etime,cmd | grep -E '[a]pt|[d]pkg' - Quali pacchetti sono in stato rotto?
sudo dpkg --audit - C'è spazio libero?
df -h / /var /boot - Cosa è successo nell'ultima esecuzione?
tail -n 30 /var/log/dpkg.log
Soluzione
- Assicurati che nessun processo apt o dpkg sia in esecuzione. Non cancellare mai i file di lock mentre uno lavora.
- Completa il lavoro interrotto:
sudo dpkg --configure -a. - Poi ripara le dipendenze:
sudo apt --fix-broken install. - Se un pacchetto continua a fallire, leggi il suo errore. Se il disco era pieno, libera prima spazio e ripeti i due comandi.
- Ultima risorsa per un pacchetto che non si configura: rimuovilo con
sudo dpkg --remove --force-remove-reinstreq PACCHETTOe reinstallalo. Attenzione ai pacchetti di sistema.
Domande frequenti
Posso semplicemente cancellare il file di lock?
No. Il messaggio non riguarda un lock. Esegui dpkg --configure -a. Cancellare i lock mentre un processo lavora può corrompere il database dei pacchetti.
È sicuro eseguire dpkg --configure -a su un server di produzione?
Sì, completa solo ciò che era iniziato. Controlla prima lo spazio libero e avvialo in screen o tmux, così una connessione persa non lo interrompe di nuovo.