Motivi e soluzioni per l'errore “Impossibile bloccare (/var/lib/dpkg/)” in Ubuntu
Spesso, durante l’installazione/aggiornamento di un pacchetto dalla riga di comando (utilizzando apt-get o apt) in Ubuntu, riceviamo questo errore: E: Impossibile bloccare la directory di amministrazione (/var/lib/dpkg/). Dal punto di vista di un principiante, è un errore complesso, poiché i nuovi utenti non sono generalmente a conoscenza della directory “/var/lib/dpkg/” e di cosa abbia a che fare con l’operazione attuale che stanno eseguendo.
Tecnicamente, l’errore viene generato dal sistema in più scenari, e si dovrebbe davvero prestare attenzione a come si procede per risolvere questo problema. In questo articolo discuteremo tutti questi aspetti relativi a questo errore e come puoi liberartene in modo sicuro.
Impossibile bloccare (/var/lib/dpkg/) – diagnosticare il problema
Ogni volta che incontri questo errore, il primo passo dovrebbe essere leggere attentamente la descrizione dell’errore. Di solito contiene alcuni suggerimenti cruciali e che fanno risparmiare tempo. Ad esempio, gli screenshot seguenti mostrano il comando “apt-get install” che genera errori simili.


Tuttavia, se guardi più da vicino, noterai che il testo tra parentesi nella prima riga e il testo dopo la virgola nella seconda riga sono diversi in entrambi gli scenari, rendendo chiaro che l’errore nel primo scenario ha a che fare con i permessi dell’utente, mentre nel secondo scenario è relativo al file di blocco che è temporaneamente non disponibile.
Se stai affrontando un errore relativo ai permessi (come mostrato nella prima immagine sopra), è molto probabile che l’utente che esegue il comando “apt-get” o “apt” non abbia privilegi sufficienti e il comando sia stato eseguito senza sudo. Una volta che il comando viene eseguito con privilegi di root, l’errore scomparirà.
Tuttavia, se si tratta di un errore relativo al blocco, allora richiede ulteriori indagini.
Leggi anche: Risolvere l’errore “l’username non è nel file sudoers. Questo incidente sarà segnalato” in Ubuntu
Cos’è /var/lib/dpkg/?
“/var/lib/dpkg/” può essere considerato come la directory di lavoro per il gestore di pacchetti “dpkg,” che a sua volta è effettivamente il motore dietro “apt-get” (così come gli strumenti “apt” e “aptitude”). Ogni volta che utilizzi questi strumenti per installare o rimuovere software, bloccano il database dei pacchetti (creando un file di “blocco”) prima di eseguire l’operazione effettiva, qualcosa che viene effettivamente fatto ottenendo il blocco per la directory “/var/lib/dpkg/”. Questo passaggio aiuta a evitare la corruzione dei dati o l’interruzione di un’operazione in corso che viene eseguita da un altro processo.
Assumendo che tu abbia compreso il concetto spiegato sopra, discutiamo ora i passaggi di indagine.
Passo 1: Controlla se c’è qualche altro processo che tiene il blocco
Questo dovrebbe ora sembrare abbastanza logico, giusto? E per farlo, puoi utilizzare l’aiuto del buon vecchio comando ps e inviare il suo output al comando grep in modo da trascorrere meno tempo a cercare ciò che desideri. Ad esempio, ecco un comando che ti consente di scoprire se qualche processo “apt,” “apt-get,” o “aptitude” è già in esecuzione:
ps aux |grep aptPasso 2: Aspetta un po’ e poi agisci
Se effettivamente c’è un comando che ha già acquisito il blocco, dovresti idealmente aspettare che completi e rilasci il blocco. Tuttavia, se il comando sta impiegando più tempo del previsto e sei sicuro che sia bloccato da qualche parte, puoi procedere e terminarlo utilizzando i comandi disponibili kill o killall (maggiori informazioni su di essi qui). Questo dovrebbe risolvere il problema che stai affrontando.
Una cosa degna di nota qui è che terminare un processo “dpkg” direttamente non è mai raccomandato – potrebbe corrompere il database dei pacchetti. Sto sottolineando questo punto perché ora sai che strumenti come “apt” e “apt-get” invocano “dpkg” internamente, quindi è molto possibile che tu possa pensare di terminare il processo “dpkg” se lo vedi nell’output del comando “ps”.
Terminare i processi avviati eseguendo comandi apt, apt-get o aptitude è generalmente molto più sicuro.
Passo 3: Quando l’output del comando “ps” non aiuta
Tieni presente che oltre agli strumenti da riga di comando come apt e apt-get, alcune applicazioni basate su GUI come il Software Center o il Gestore Aggiornamenti acquisiscono anche questo blocco.
Nota: se stai ricevendo l’errore relativo al blocco subito dopo aver avviato Ubuntu, è molto probabile che la tua operazione si sovrapponga con il polling automatico avviato dal gestore aggiornamenti. Aspettare un po’ dovrebbe risolvere il problema in questo caso.
Tornando alle applicazioni basate su GUI di cui stavamo parlando, un’altra opzione utile e che fa risparmiare tempo è utilizzare il comando fuser.
Con “fuser” devi solo conoscere il file a cui si sta accedendo (“/var/lib/dpkg/lock” nel nostro caso), e puoi terminare il processo che accede a quel file anche se non sai quale processo sia. Ad esempio:
sudofuser-cuk/var/lib/dpkg/lockTieni presente che il comando fuser non rilascerà il blocco acquisito dal processo che hai appena terminato, quindi dovrai farlo manualmente:
sudorm-f/var/lib/dpkg/lockNota: “ rilasciare il blocco ” significa semplicemente eliminare il file “lock” in modo che altri processi possano “ acquisire il blocco ” ricreandolo.
Potresti anche dover eseguire i seguenti due comandi:
sudofuser-cuk/var/cache/apt/archives/lock; sudorm-f/var/cache/apt/archives/lockSuggerimento importante: non eliminare mai i file di blocco come primo passo – questo dovrebbe essere solo il tuo ultimo ricorso.
Conclusione
In generale, è sempre bene comprendere il motivo dietro il problema prima di procedere a risolverlo. Provare soluzioni alla cieca per risolvere un problema non ti aiuterà mai – potresti avere successo in alcuni casi, ma più spesso di quanto non pensi ti troverai in un pasticcio ancora più grande, specialmente se il sistema operativo è Linux.
Hai mai affrontato l’errore di cui abbiamo discusso qui? Come lo hai risolto? Lascia la tua risposta nei commenti.
Leggi anche: Come risolvere l’errore “Il repository non ha un file di rilascio”