/
/

Come risolvere i pacchetti Debian danneggiati: guida passo passo

di Team Ninja
How to Fix Broken Debian Packages: A Step-by-Step Guide blog image

Riepilogo

Questo post del blog NinjaOne offre un elenco completo di comandi CMD di base e un’analisi approfondita dei comandi di Windows con oltre 70 comandi cmd essenziali sia per i principianti che per gli utenti avanzati. La guida si propone si piegare in modo pratico i comandi del prompt dei comandi per la gestione dei file, la navigazione nelle directory, la risoluzione dei problemi di rete, le operazioni su disco e l’automazione, con esempi reali per migliorare la produttività. Che tu voglia imparare i comandi cmd fondamentali o padroneggiare gli strumenti avanzati della CLI di Windows, questa guida ti aiuterà a utilizzare il Prompt dei comandi in modo più efficace.

Punti chiave

  • I pacchetti Debian danneggiati e l’errore “you have held broken packages” derivano di solito da pacchetti in conflitto, repository di terze parti o aggiornamenti interrotti.
  • Il primo passo per capire quali pacchetti causano il problema è usare i comandi del gestore di pacchetti APT sudo apt-get check o sudo apt-mark showhold.
  • Risolvi la maggior parte dei problemi di pacchetti danneggiati e dipendenze non soddisfatte eseguendo il comando sudo apt install –fix-broken dopo aver aggiornato tutti gli elenchi dei pacchetti con sudo apt update.
  • Per risolvere i conflitti persistenti, usa da terminale il comando sudo apt remove –purge package_name per rimuovere completamente il pacchetto problematico e poi esegui sudo apt autoremove.
  • Mantieni la stabilità dei sistemi Linux nel tempo eliminando con regolarità i file di dipendenze inutili e le cache dei pacchetti, attività gestibili su larga scala con la soluzione NinjaOne per la gestione degli endpoint Linux.

Vuoi sapere come risolvere i pacchetti Debian danneggiati? Questa guida ti mostra come fare su Debian e sulle distribuzioni Linux basate su Debian come Ubuntu. Spiega come risolvere l’errore “Unable to correct problems, you have held broken packages” e come individuare la causa dei problemi dei pacchetti in Debian.

Puoi guardare la versione video dell’articolo Come risolvere i pacchetti Debian danneggiati per una guida visiva passo passo.

Che cosa significa l’errore “you have held broken packages”

Un pacchetto “held” è stato bloccato dal gestore di pacchetti di Debian: non verrà quindi aggiornato nemmeno se è disponibile una versione più recente, per evitare possibili problemi di compatibilità o di stabilità. I pacchetti vengono bloccati automaticamente quando hanno dipendenze non soddisfatte o danneggiate. Per esempio, un pacchetto può richiedere una versione diversa di un altro pacchetto già installato. Anche gli amministratori di sistema possono bloccare manualmente i pacchetti che non vogliono vengano aggiornati in automatico.

Per la maggior parte degli utenti che non mettono mano alla configurazione del sistema, l’errore “Unable to correct problems, you have held broken packages” ha quasi sempre una di queste due cause: hai installato da un PPA o da un repository di terze parti pacchetti in conflitto tra loro, oppure un aggiornamento da un repository ufficiale si è interrotto senza completarsi.

Come diagnosticare gli errori dei pacchetti bloccati in Debian e Ubuntu

Per risolvere gli errori di dipendenze non soddisfatte o danneggiate in Debian e Ubuntu devi prima capire quali pacchetti generano il messaggio.

Per farlo puoi usare il gestore di pacchetti apt e verificare la presenza di pacchetti danneggiati con questo comando:

sudo apt-get check

Il comando controlla il database dei pacchetti alla ricerca di pacchetti danneggiati e li elenca. Se viene rilevato un problema, l’output di apt sarà simile a questo:

Reading package lists… Done
Building dependency tree
Reading state information… Done
The following packages have unmet dependencies:
package_1 : Depends: package_2 (>= 1.0.0) but it is not installed
package_3 : Depends: package_4 but it is not installed

E: Unmet dependencies. Try using -f.

In questo modo sai esattamente quali pacchetti potrebbero essere bloccati e impedire ulteriori aggiornamenti. Puoi cercare in modo specifico i pacchetti bloccati con questo comando:

sudo apt list –upgradable

I pacchetti bloccati mostrano [held back] accanto alla propria voce:

Listing… Done
package_1/stable 1.2.3-4 amd64 [upgradable from: 1.2.2-3]
package_2/stable 2.3.4-5 amd64 [held back]
package_3/stable 3.4.5-6 amd64 [upgradable from: 3.4.4-5]

Puoi anche usare apt-mark per elencare tutti i pacchetti bloccati:

sudo apt-mark showhold

Anche il comando apt che stai usando per aggiornare o installare il software può indicarti quali pacchetti stanno causando il problema:

$ sudo apt install package_1
Reading package lists… Done
Building dependency tree
Reading state information… Done

Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming.

The following information may help to resolve the situation:

The following packages have unmet dependencies:

package_1 : Depends: package_2 (>= 2.0) but it is not going to be installed

E: Unable to correct problems, you have held broken packages.

Nota l’elenco dei pacchetti con dipendenze non soddisfatte verso la fine dell’output.

Puoi ottenere informazioni più dettagliate su un pacchetto e sulle sue dipendenze con il comando apt search:

sudo apt search package_name

Il comando restituisce informazioni sulle versioni del pacchetto e sulle sue dipendenze:

package_name/focal 1.2.3-4 amd64

Per scoprire quali versioni del pacchetto bloccato sono disponibili in tutti i tuoi repository, esegui:

sudo apt list -a package_name

L’output sarà simile a questo:

package_name/focal 1.2.3-4 amd64
package_name/focal-updates 1.2.3-5 amd64
package_name/focal-backports 1.2.3-6 amd64

A questo punto puoi esaminare le dipendenze del pacchetto:

sudo apt-cache depends package_name

Una volta individuati i pacchetti che generano errori di dipendenze non soddisfatte o danneggiate e capito perché sono bloccati, puoi passare alla risoluzione.

Come risolvere i pacchetti danneggiati in Debian e Ubuntu

Per correggere i problemi con i pacchetti bloccati in Debian e Ubuntu, incluso l’errore “You have held broken packages”, puoi provare i metodi seguenti.

Per prima cosa aggiorna gli elenchi dei pacchetti e i pacchetti installati con questi comandi:

sudo apt update
sudo apt upgrade

Dopodiché riprova l’installazione. Spesso, soprattutto quando usi repository software di terze parti, assicurarsi che tutti gli elenchi dei pacchetti siano aggiornati basta a risolvere il problema.

Puoi anche provare a installare manualmente le dipendenze:

sudo apt install dependency_name

Se devi rimuovere dipendenze in conflitto, esegui:

sudo apt remove package_name

…e se vuoi rimuovere completamente un pacchetto, inclusi tutti i file di configurazione, esegui:

sudo apt remove –purge package_name

È consigliabile eseguire apt autoremove subito dopo, per eliminare le dipendenze che potrebbero essere state installate automaticamente durante i tentativi precedenti e ripartire da una situazione pulita.

Come sempre, prima di eseguire un comando verifica che cosa fa e valuta il suo possibile impatto sul sistema. Se hai dubbi su un comando apt, puoi simularlo con il parametro –dry-run per esaminare l’output senza apportare modifiche reali al sistema:

sudo apt install package_name –dry-run

Se nient’altro funziona, puoi provare a sbloccare manualmente il pacchetto, anche se non è consigliabile: di solito i pacchetti restano bloccati per un motivo preciso e dovresti fare il possibile per risolvere i problemi di dipendenze tramite il gestore di pacchetti.

Usare dpkg come ultima risorsa

Se i comandi apt falliscono del tutto a causa di uno stato delle dipendenze gravemente compromesso, potresti dover aggirare apt e usare direttamente il gestore di pacchetti di livello più basso, dpkg. Esegui il comando sudo dpkg –configure -a per elaborare i pacchetti installati o configurati solo parzialmente. Al termine, esegui subito sudo apt install -f (abbreviazione di –fix-broken) per permettere ad apt di sistemare l’albero delle dipendenze risultante.

Per sbloccare manualmente un pacchetto bloccato, esegui:

sudo apt-mark unhold package_name

Prima di provare a installare di nuovo il pacchetto, chiedi ad apt di correggere eventuali dipendenze mancanti e problemi di dipendenze residui con questo comando:

sudo apts install –fix-broken

Tieni presente che –fix-broken non installa i pacchetti bloccati se restano tali.

Dopo qualsiasi intervento di diagnosi o riparazione dovresti testare a fondo il sistema: riprova a eseguire apt update e apt upgrade e verifica che entrambi i comandi terminino senza errori. Negli ambienti mission-critical dovresti testare anche il funzionamento del sistema (per esempio, se stai lavorando su un server web, assicurati che le applicazioni web siano raggiungibili e funzionanti). Inoltre dovresti tenere d’occhio i log di sistema e i log degli errori per avere la certezza che tutti i problemi siano stati risolti e che non siano state introdotte incompatibilità.

Misure preventive contro le dipendenze non soddisfatte

Ci sono diverse misure preventive da adottare per evitare errori di dipendenze non soddisfatte e pacchetti danneggiati in Debian e Ubuntu Linux:

  • Mantieni i pacchetti aggiornati: aggiorna regolarmente il software eseguendo apt update e apt upgrade.
  • Mantieni aggiornati gli elenchi e le fonti dei pacchetti: oltre a eseguire apt update per tenere aggiornate le fonti software, controlla il file /etc/apt/sources.list e la directory /etc/apt/sources.list.d/ per individuare voci inattese o obsolete.
  • Gestisci con attenzione i repository software: oltre a mantenere sicuri i tuoi server Linux, aggiungere al sistema solo repository di terze parti affidabili (e verificare con attenzione qualsiasi altro programma che scarichi) aiuta a non introdurre problemi con i pacchetti.
  • Attenzione ai PPA (Personal Package Archive): non aggiungere mai un PPA o un altro repository di terze parti senza averne verificato a fondo l’affidabilità e la stabilità. Le fonti software non verificate sono la causa più comune in assoluto del cosiddetto “dependency hell” e di gravi instabilità di sistema sulle distribuzioni basate su Debian.
  • Adotta strumenti di gestione automatizzata dei pacchetti: se gestisci un parco macchine Linux, valuta l’adozione di strumenti che ti permettano da remoto di monitorare, prevenire e risolvere i potenziali problemi di stabilità e compatibilità del sistema.
  • Backup: esegui regolarmente backup completi dei tuoi sistemi Linux, così da poter tornare a uno stato funzionante noto se qualcosa va gravemente storto.

Dovresti anche assicurarti di fare pulizia dopo il gestore di pacchetti, rimuovendo con regolarità le dipendenze lasciate dai pacchetti disinstallati e svuotando la cache dei pacchetti. Puoi svolgere queste attività con i comandi seguenti:

sudo apt autoremove
sudo apt autoclean
sudo apt clean

Il comando apt autoremove rimuove i pacchetti installati automaticamente (per esempio quelli installati per soddisfare le dipendenze di altri pacchetti) che non servono più. Il comando apt autoclean elimina i file obsoleti, inclusi i pacchetti installati parzialmente, mentre il comando apt clean rimuove gli altri file di pacchetto non necessari, compresi quelli dei pacchetti attualmente installati.

Dopo la pulizia esegui sempre apt update per assicurarti di avere gli elenchi dei pacchetti più recenti.

Come garantire la stabilità nel tempo delle tue installazioni Linux

Risolvere definitivamente l’errore “Unable to correct problems, you have held broken packages” e gli altri problemi di dipendenze non soddisfatte o danneggiate su Debian e Ubuntu Linux ti rimette in carreggiata, ma è utile riflettere anche sulle tue pratiche complessive di gestione dei sistemi Linux e su come il problema possa essersi presentato in primo luogo.

Risolvere i pacchetti danneggiati non è l’unica attività di manutenzione necessaria per mantenere la tua infrastruttura Linux online e sicura, e queste attività non sono sempre semplici come eseguire qualche comando da terminale. NinjaOne offre una soluzione collaudata per la gestione degli endpoint Linux che ti permette di gestire, applicare patch e proteggere gli endpoint Linux su larga scala.

FAQs

Questo errore indica che il gestore di pacchetti (APT) sta impedendo un aggiornamento perché il pacchetto ha dipendenze non soddisfatte: richiede cioè una versione specifica di un altro pacchetto che non è disponibile oppure è in conflitto con una già presente. Le cause più comuni sono aggiornamenti interrotti o repository di terze parti in conflitto.

La soluzione più rapida è chiedere ad APT di correggere il problema con il comando sudo apt install –fix-broken. È consigliabile eseguire prima sudo apt update per assicurarti di avere gli elenchi dei pacchetti più recenti da tutte le fonti software.

Per diagnosticare il problema usa il comando sudo apt-get check, che analizza il database dei pacchetti ed elenca quelli con dipendenze non soddisfatte. Per vedere nello specifico i pacchetti bloccati manualmente e quindi esclusi dagli aggiornamenti, usa il comando sudo apt-mark showhold.

Per prevenire i problemi di dipendenze esegui regolarmente sudo apt update e sudo apt upgrade, così da mantenere aggiornato tutto il software. Evita inoltre di aggiungere repository software di terze parti (PPA) non affidabili o instabili, che potrebbero introdurre pacchetti in conflitto.

Sbloccare manualmente un pacchetto in genere non è consigliabile perché mette a rischio la stabilità del sistema, ma si può fare con sudo apt-mark unhold package_name. Conviene provarci solo dopo aver esaurito tutte le altre soluzioni offerte dal gestore di pacchetti.

Ti potrebbe interessare anche

Pronto a semplificare le parti più complesse dell'IT?