Come riparare pacchetti danneggiati in Linux

Pacchetti Linux rotti

I gestori di pacchetti Linux, come Apt e DNF, sono estremamente potenti e intuitivi, ma ciò non significa che le cose non possano andare male. Occasionalmente, un’installazione di un pacchetto va male e ti ritrovi a dover rimettere insieme i pezzi. I gestori di pacchetti hanno la capacità di riparare pacchetti danneggiati e saltare aggiornamenti rotti per far funzionare di nuovo il tuo sistema e evitare problemi in futuro.

Questo articolo tratta di come riparare pacchetti danneggiati in Linux. Queste soluzioni dovrebbero aiutarti a sbloccarti nella maggior parte dei casi.

Indice

  • Riparare pacchetti danneggiati in Ubuntu/Mint/Debian
  • Riparare pacchetti danneggiati in Fedora/CentOS/RHEL
  • Riparare pacchetti danneggiati in Arch
  • Domande frequenti

Riparare pacchetti danneggiati in Ubuntu/Mint/Debian

Apt ha un paio di flag per riparare dipendenze mancanti o pacchetti che si sono rotti per un motivo o per un altro durante l’installazione. Un uso comune qui sarebbe installare un .deb di terze parti e scoprire che aveva dipendenze di cui non eri a conoscenza. Quelle dipendenze probabilmente non verranno installate da sole e dpkg si lamenterà che non può risolvere le dipendenze. In ogni caso, puoi provare i seguenti passaggi:

Nota: impara come funziona Apt prima di tentare di applicare le soluzioni qui sotto.

Pacchetti Linux ripara mancante

  1. Esegui un aggiornamento per assicurarti che non ci siano versioni più recenti dei pacchetti richiesti:
sudo apt --fix-missing update
  1. Costringi Apt a cercare e correggere eventuali dipendenze mancanti o pacchetti danneggiati quando tenti di installare di nuovo il pacchetto problematico. Questo installerà eventuali dipendenze mancanti e riparerà le installazioni esistenti:
sudo apt install-f

Risolvere problemi di configurazione DPKG

Un altro luogo in cui può verificarsi un errore nelle installazioni di pacchetti è il processo di configurazione. Dietro le quinte, dpkg si occupa di questa parte, quindi quando un pacchetto fallisce durante la configurazione, dpkg è lo strumento da utilizzare per risolverlo.

Pacchetti Linux configurato dpkg

  1. Inizia cercando di forzare dpkg a riconfigurare eventuali pacchetti danneggiati o parzialmente configurati:
sudo dpkg --configure -a
  1. Se ciò non risolve il problema, adotta un approccio più deciso. Inizia elencando eventuali pacchetti che dpkg ha contrassegnato come richiedenti una reinstallazione:
sudo dpkg -l | grep ^..r

Il comando sopra ti mostrerà i pacchetti che causano problemi. Per questo passaggio successivo, controlla e assicurati che i pacchetti contrassegnati per la reinstallazione siano davvero danneggiati. Esegui un sudo apt reinstall e presta attenzione a quali pacchetti non riescono a reinstallarsi.

  1. Per ogni pacchetto che non riesce a reinstallarsi, prendi il nome e rimuovi forzatamente il pacchetto danneggiato:
sudo dpkg --remove --force-remove-reinstreq [nome pacchetto]
  1. Dpkg dovrebbe ora essere pulito. Esegui una pulizia con Apt:
sudo apt clean && sudo apt update

Con un po’ di fortuna, questo ti riporterà al punto in cui eri partito. Non ti riporterà i pacchetti danneggiati che hai tentato di installare, ma almeno Apt sarà di nuovo funzionante e potrai tornare a usarlo per tentare di installare il pacchetto che stavi cercando di installare e le sue dipendenze.

Blocco DPKG permanente

C’è un problema meno comune con i blocchi dpkg che ti impediscono di fare qualsiasi cosa. Ogni volta che provi a usare Apt o dpkg, ricevi un errore che dice che un’altra applicazione lo sta già utilizzando… quando non è così.

È facile eliminare il file di blocco che ti impedisce di usare Apt e tornare a fare ciò di cui hai bisogno. A volte questi file di blocco rimangono in posizione dopo un errore di installazione o un’interruzione di corrente, deragliando il processo e impedendo la rimozione automatica del file. In questo caso, dovrai farlo tu stesso.

sudo rm /var/lib/apt/lists/lock

Per sicurezza, elimina il blocco nella cache.

sudo rm /var/cache/apt/archives/lock

Attenzione: prima di rimuovere questo blocco, assicurati che non sia in uso. In Ubuntu, c’è un aggiornamento che si avvia insieme al sistema e blocca DPKG/APT quando cerca aggiornamenti. Se non sei sicuro che l’aggiornamento sia in esecuzione, premi il tasto Win per aprire il Centro Attività e digita “Aggiornamento Software”, quindi premi Invio per aprirlo.

Pacchetti Linux aggiornamento Ubuntu

Se l’aggiornamento dice che non può essere eseguito e non hai terminali aperti con gestori di pacchetti in esecuzione in background, procedi con le istruzioni sopra.

Se invece di un problema con i pacchetti danneggiati stai affrontando un problema con il Centro Software che non funziona, abbiamo le soluzioni.

Riparare pacchetti danneggiati in Fedora/CentOS/RHEL

Riparare pacchetti danneggiati in Fedora/CentOS/RHEL è un affare meno comune. dnf fa davvero un ottimo lavoro per assicurarsi che i pacchetti siano installati correttamente. Detto ciò, non è ancora perfetto e a volte le cose si mescolano nella gestione dei pacchetti.

Nota: impara le differenze tra Fedora, CentOS e RHEL.

1. Elenca i pacchetti problematici

Il comando per risolvere questo problema su sistemi basati su RHEL come Fedora è:

sudo rpm -Va

Pacchetti Linux verifica rpm

L’opzione -V serve a verificare, il che significa che passerà in rassegna e confronterà le informazioni sui file installati con le informazioni memorizzate nel database rpm. Allegare -a a questo verifica semplicemente tutti i pacchetti core. Questo è leggermente poco utile, poiché di solito ti darà un lungo elenco di file, ma può darti un punto di partenza se hai problemi con un’applicazione particolare.

Ad esempio, vedere qualcosa contrassegnato come “mancante” nel tuo terminale ti dirà che ci sono file mancanti in quel particolare pacchetto.

2. Tentare una reinstallazione

Esegui un dnf reinstall su qualsiasi pacchetto che vedi in quell’elenco che potrebbe darti problemi.

sudo dnf --refresh reinstall [nome pacchetto]

Questo imposterà tutti i metadati come scaduti, quindi esaminerà ogni repository che hai abilitato e cercherà una nuova versione di quel pacchetto. Se scopri che ci sono dipendenze danneggiate con quel pacchetto, DNF probabilmente si lamenterà e ti dirà di usare il flag --skip-broken. Questo salterà semplicemente quel pacchetto del tutto e ti permetterà di aggiornare il tuo sistema normalmente.

3. L’ultima risorsa – Rimuovere pacchetti

Se sei arrivato al punto in cui devi usare --skip-broken per completare i tuoi aggiornamenti, è più igienico per il tuo sistema rimuoverlo completamente.

Ricordando il nome del pacchetto che non sei riuscito a reinstallare correttamente, disinstallalo:

sudo dnf remove [nome pacchetto]

Il peggio che potrebbe succedere qui è che finisci per rimuovere una parte fondamentale del tuo flusso quotidiano, come il tuo browser, costringendoti a trovare un’alternativa.

Suggerimento: impara a usare flatpak in Fedora per gestire meglio i tuoi pacchetti.

Riparare pacchetti danneggiati in Arch

Sebbene il gestore di pacchetti di Arch abbia alcune somiglianze con gli altri elencati qui (cioè, ha un file di blocco del database e recupera le dipendenze in modo simile), è una bestia completamente diversa quando si tratta di come è strutturata la sua logica. Il primo passo per diagnosticare il tuo problema è assicurarti che i repository siano aggiornati e tentare un aggiornamento completo:

sudo pacman -Syu

Se i tuoi tentativi di installare il pacchetto o di eseguire un aggiornamento di sistema terminano ancora in un fallimento, dobbiamo isolare la causa in base a ciò che il terminale ti ha detto:

Nota: impara come funziona pacman prima di tentare di risolverlo.

“Pacchetto non valido o danneggiato”

Apportare modifiche a “pacman.conf” in qualsiasi modo può causare problemi che portano pacman a etichettare erroneamente i pacchetti come corrotti. Il colpevole più probabile qui è un file parziale (“.part”) nella cache del gestore di pacchetti, e la tua soluzione è rimuoverlo:

sudo find /var/cache/pacman/pkg/ -iname "*.part" -delete

C’è sempre la possibilità che il pacchetto che stai cercando di installare sia effettivamente corrotto e non fornisca metadati validi al gestore di pacchetti di Arch. In tal caso, dovrai aspettare che il manutentore del pacchetto lo aggiorni. Se il pacchetto è installato sul tuo sistema e causa problemi durante un aggiornamento, rimuovilo con:

sudo pacman -Rns [nome pacchetto]

“Impossibile bloccare il database”

Come l’apt di Debian, il gestore di pacchetti di Arch crea un file di blocco durante le operazioni. Se hai subito un’interruzione di corrente o pacman ha subito un’interruzione dura e non è riuscito a rimuovere il blocco, è molto probabile che rimanga un file di blocco.

Per prima cosa, scopri se qualche processo sul tuo computer sta ancora utilizzando il file:

sudo fuser /var/lib/pacman/db.lck

Nell’immagine sopra, un processo con ID 121497 sta utilizzando il file di blocco. Se sei curioso riguardo al processo e desideri ulteriori informazioni, usa ps:

ps -p [PID#]

Nel mio caso, un’altra istanza di pacman possiede il file di blocco. Il modo più sicuro per rimuovere il blocco è prima terminare quel processo:

sudo kill [PID#]

Ora che il processo è morto, rimuovi il file di blocco:

sudo rm /var/lib/pacman/db.lck

Ora sei a posto!

“File in conflitto/File esistente nel filesystem”

Questo accade durante gli aggiornamenti in cui pacman rileva un conflitto di proprietà. Prima di risolvere qualsiasi cosa, presta attenzione al percorso del file di cui il gestore di pacchetti si sta lamentando.

Per scoprire chi possiede il file:

pacman -Qo [percorso del file]

Se è di proprietà di un utente e non di un altro pacchetto, rimuovilo semplicemente:

sudo rm [percorso del file]

Se è di proprietà di un altro pacchetto, la cosa più sicura da fare è aspettare che il manutentore del pacchetto risolva questo conflitto da solo. A volte, però, questa non è un’opzione e vuoi portare a termine le cose ora.

Il modo più semplice per farlo è utilizzare il flag --overwrite in pacman. Sappi solo che questo è generalmente non sicuro e potrebbe portare a malfunzionamenti di alcune applicazioni nel tuo sistema. Ti consiglio di fare un backup prima di eseguire questo.

Il flag --overwrite consente al gestore di pacchetti di Arch di ignorare le regole di proprietà per un particolare file e di procedere con l’aggiornamento. Esempio:

sudo pacman -Syu --overwrite [nome file]

Se il comando sopra non funziona, sostituisci il nome del file con il suo percorso assoluto. Alcuni utenti hanno segnalato che rimuovere la barra iniziale (“/“) davanti al percorso fa funzionare il comando quando è ostinato.

In alternativa, puoi anche semplicemente dire a pacman di sovrascrivere tutto ciò di cui ha bisogno:

sudo pacman -Syu --overwrite='*'

“Pacchetto non valido o danneggiato (firma PGP)”

In alcuni pacchetti che sono poco mantenuti, lo sviluppatore potrebbe non avere il tempo o la volontà di aggiornare correttamente la firma digitale che certifica il loro pacchetto. Questo porterà infine a un messaggio nel tuo terminale mentre cerchi di installarlo, come “firma di [qualcuno] è di fiducia marginale”, seguito dal gestore di pacchetti che chiede se desideri eliminare il file.

Poiché gli aggiornamenti delle firme dipendono interamente dal manutentore, non c’è nulla che tu possa realisticamente fare per risolvere la situazione dal tuo terminale. Se stai eseguendo un aggiornamento e desideri mantenere il pacchetto, usa il flag --ignore per quel pacchetto in particolare:

sudo pacman -Syu --ignore [nome pacchetto]

Se ricevi questo per molti pacchetti, il tuo portachiavi potrebbe essere obsoleto. Aggiorna con:

sudo pacman -S archlinux-keyring

Domande frequenti

Posso applicare le soluzioni di Arch con un helper AUR?

In generale, sì. Sostituisci “pacman” con il tuo helper AUR nei comandi di questa guida. Esempio: yay -Qo /path/to/file

Cosa devo fare se interrompo un aggiornamento?

Interrompere un processo di aggiornamento premendo Ctrl + C, uccidendo il processo del gestore di pacchetti o chiudendo prematuramente il terminale comporterà un certo livello di corruzione nel tuo database di pacchetti che potrebbe complicare le cose quando cerchi di installare qualcos’altro. Per risolvere questo, svuota la cache e ripeti l’aggiornamento.

Crediti immagine: Flickr. Tutti gli screenshot di Miguel Leiva-Gomez.