Razões e Soluções para o Erro “Não é possível bloquear (/var/lib/dpkg/)” no Ubuntu
Muitas vezes, ao instalar/atualizar um pacote pela linha de comando (usando apt-get ou apt) no Ubuntu, recebemos este erro: E: Não é possível bloquear o diretório de administração (/var/lib/dpkg/). Do ponto de vista de um iniciante, é um erro complexo, já que novos usuários geralmente não estão cientes do diretório “/var/lib/dpkg/” e do que ele tem a ver com a operação atual que estão realizando.
Tecnicamente, o erro é gerado pelo sistema em múltiplos cenários, e é importante ter cuidado ao tentar resolver esse problema. Neste artigo, discutiremos todos esses aspectos relacionados a esse erro e como você pode se livrar dele com segurança.
Não é possível bloquear (/var/lib/dpkg/) – diagnosticando o problema
Sempre que você encontrar esse erro, o primeiro passo deve ser ler a descrição do erro com atenção. Geralmente, ela contém algumas dicas cruciais e que economizam tempo. Como exemplo, as seguintes capturas de tela mostram o comando “apt-get install” gerando erros semelhantes.


No entanto, se você olhar mais de perto, observará que o texto entre parênteses na primeira linha e o texto após a vírgula na segunda linha são diferentes em ambos os cenários, deixando claro que o erro no primeiro cenário tem algo a ver com permissões de usuário, enquanto no segundo cenário está relacionado ao arquivo de bloqueio estar temporariamente indisponível.
Se você está enfrentando um erro relacionado a permissões (como mostrado na primeira imagem acima), é muito provável que o usuário que está executando o comando “apt-get” ou “apt” não tenha privilégios suficientes e o comando foi executado sem sudo. Uma vez que o comando é executado com privilégios de root, o erro desaparecerá.
No entanto, se for um erro relacionado ao bloqueio, isso requer uma investigação mais aprofundada.
Leia também: Corrigindo o erro “nome de usuário não está no arquivo sudoers. Este incidente será relatado” no Ubuntu
O que é /var/lib/dpkg/?
“/var/lib/dpkg/” pode ser pensado como o diretório de trabalho para o gerenciador de pacotes “dpkg”, que por sua vez é na verdade o motor por trás do “apt-get” (assim como das ferramentas “apt” e “aptitude”). Sempre que você usa essas ferramentas para instalar ou remover software, elas bloqueiam o banco de dados de pacotes (criando um arquivo de “bloqueio”) antes de realizar a operação real, algo que é feito ao obter o bloqueio para o diretório “/var/lib/dpkg/”. Essa etapa ajuda a evitar a corrupção de dados ou a interrupção de uma operação em andamento que está sendo realizada por algum outro processo.
Assumindo que você entendeu o conceito explicado acima, vamos agora discutir os passos de investigação.
Passo 1: Veja se há algum outro processo segurando o bloqueio
Isso agora deve parecer bastante lógico, certo? E para fazer isso, você pode usar a ajuda do bom e velho comando ps e canalizar sua saída para o comando grep, para que você passe menos tempo procurando o que deseja. Por exemplo, aqui está um comando que permite encontrar se algum processo “apt”, “apt-get” ou “aptitude” já está em execução:
ps aux |grep aptPasso 2: Espere um pouco e então tome uma ação
Se de fato há um comando que já adquiriu o bloqueio, você deve idealmente esperar que ele complete e libere o bloqueio. No entanto, se o comando está levando mais tempo do que o esperado e você tem certeza de que ele está preso em algum lugar, você pode prosseguir e matá-lo usando os comandos disponíveis kill ou killall (mais informações sobre eles aqui). Isso deve resolver o problema que você está enfrentando.
Uma coisa que vale a pena mencionar aqui é que matar um processo “dpkg” diretamente nunca é recomendado – isso pode corromper o banco de dados de pacotes. Estou enfatizando este ponto porque agora você sabe que ferramentas como “apt” e “apt-get” invocam “dpkg” internamente, então é bem possível que você pense em matar o processo “dpkg” se o avistar na saída do comando “ps”.
Matar processos iniciados pela execução de comandos apt, apt-get ou aptitude geralmente é muito mais seguro.
Passo 3: Quando a saída do comando “ps” não ajuda
Tenha em mente que, além de ferramentas de linha de comando como apt e apt-get, algumas aplicações baseadas em GUI, como o Centro de Software ou o Gerenciador de Atualizações, também adquirem esse bloqueio.
Nota: se você está recebendo o erro relacionado ao bloqueio logo após ter inicializado no Ubuntu, é bem possível que sua operação esteja se sobrepondo à pesquisa automática iniciada pelo gerenciador de atualizações. Esperar um pouco deve resolver o problema nesse caso.
Voltando às aplicações baseadas em GUI das quais estávamos falando, outra opção útil e que economiza tempo é usar o comando fuser.
Com “fuser” você só precisa saber o arquivo que está sendo acessado (“/var/lib/dpkg/lock” no nosso caso), e você pode matar o processo que está acessando esse arquivo mesmo que não saiba qual processo é. Por exemplo:
sudofuser-cuk/var/lib/dpkg/lockTenha em mente que o comando fuser não liberará o bloqueio adquirido pelo processo que você acabou de matar, então você terá que fazer isso manualmente:
sudorm-f/var/lib/dpkg/lockNota: “liberar o bloqueio” simplesmente significa deletar o arquivo “lock” para que outros processos possam “adquirir o bloqueio” recriando-o.
Você também pode precisar executar os seguintes dois comandos:
sudofuser-cuk/var/cache/apt/archives/lock; sudorm-f/var/cache/apt/archives/lockDica importante: nunca, jamais, delete arquivos de bloqueio como primeiro passo – isso deve ser apenas seu último recurso.
Conclusão
Em geral, é sempre bom entender a razão por trás do problema antes de prosseguir e resolvê-lo. Tentar soluções de forma cega para resolver um problema nunca ajudará você – você pode ter sucesso em alguns casos, mas na maioria das vezes você se encontrará em uma situação ainda pior, especialmente se o sistema operacional for Linux.
Você já enfrentou o erro que discutimos aqui? Como você resolveu? Deixe sua resposta nos comentários.
Leia também: Como corrigir o erro “O repositório não possui arquivo de lançamento”