Como Corrigir Pacotes Quebrados no Linux

Os gerenciadores de pacotes do Linux, como Apt e DNF, são extremamente poderosos e intuitivos, mas isso não significa que as coisas não possam dar errado. Ocasionalmente, uma instalação de pacote falha, e você fica responsável por consertar. Os gerenciadores de pacotes têm a capacidade de corrigir pacotes quebrados e ignorar atualizações quebradas para que seu sistema funcione novamente e evitar problemas no futuro.
Este artigo aborda como corrigir pacotes quebrados no Linux. Essas correções devem ajudá-lo a se desvencilhar na maioria das situações.
Índice
- Corrigindo Pacotes Quebrados no Ubuntu/Mint/Debian
- Corrigindo Pacotes Quebrados no Fedora/CentOS/RHEL
- Corrigindo Pacotes Quebrados no Arch
- Perguntas Frequentes
Corrigindo Pacotes Quebrados no Ubuntu/Mint/Debian
O Apt tem algumas opções para corrigir dependências ou pacotes ausentes que falharam por um motivo ou outro durante a instalação. Um uso comum aqui seria instalar um .deb de terceiros e descobrir que ele tinha dependências que você não conhecia. Essas dependências provavelmente não serão puxadas sozinhas, e o dpkg reclamará que não pode resolver as dependências. De qualquer forma, você pode tentar os seguintes passos:
Nota: aprenda como o Apt funciona antes de tentar qualquer uma das correções abaixo.

- Execute uma atualização para garantir que não há versões mais novas dos pacotes necessários:
sudo apt --fix-missing update- Force o Apt a procurar e corrigir quaisquer dependências ausentes ou pacotes quebrados quando você tentar instalar o pacote problemático novamente. Isso instalará quaisquer dependências ausentes e reparará instalações existentes:
sudo apt install-fCorrigindo Problemas de Configuração do DPKG
Outro lugar onde um erro pode surgir nas instalações de pacotes é o processo de configuração. Nos bastidores, o dpkg cuida dessa parte, então quando um pacote falha durante a configuração, o dpkg é a ferramenta para consertá-lo.

- Comece tentando forçar o dpkg a reconfigurar quaisquer pacotes quebrados ou parcialmente configurados:
sudo dpkg --configure -a- Se isso não resolver o problema, adote uma abordagem mais enérgica. Comece listando quaisquer pacotes que o dpkg marcou como necessitando de reinstalação:
sudo dpkg -l | grep ^..rO comando acima mostrará os pacotes que causam problemas. Para este próximo passo, verifique e certifique-se de que os pacotes marcados para reinstalação estão realmente quebrados. Faça um sudo apt reinstall e preste atenção em quais pacotes falham ao reinstalar.
- Para cada pacote que falhar na reinstalação, obtenha o nome e remova forçosamente o pacote quebrado:
sudo dpkg --remove --force-remove-reinstreq [nome do pacote]- O dpkg deve agora estar limpo. Faça uma limpeza com o Apt:
sudo apt clean && sudo apt updateCom um pouco de sorte, isso o levará de volta ao ponto onde você começou. Não recuperará os pacotes quebrados que você tentou instalar, mas pelo menos o Apt estará funcional novamente, e você poderá voltar a usá-lo para tentar instalar o pacote que estava originalmente tentando instalar e suas dependências.
Bloqueio Permanente do DPKG
Há um problema menos comum com bloqueios do dpkg que impedem você de fazer qualquer coisa. Toda vez que você tenta usar o Apt ou dpkg, recebe um erro dizendo que outro aplicativo já está usando … quando não está.
É fácil excluir o arquivo de bloqueio que impede você de usar o Apt e voltar a fazer o que precisa. Às vezes, esses arquivos de bloqueio permanecem no lugar após um erro de instalação ou queda de energia, desestabilizando o processo e impedindo que o arquivo seja removido automaticamente. Nesse caso, você precisará fazer isso manualmente.
sudo rm /var/lib/apt/lists/lockPara garantir, exclua o bloqueio no cache.
sudo rm /var/cache/apt/archives/lockAviso: Antes de remover esse bloqueio, certifique-se de que não está sendo usado. No Ubuntu, há um atualizador que inicia junto com o sistema que bloqueia o DPKG/APT quando está procurando atualizações. Se você não tiver certeza se o atualizador está em execução, pressione sua tecla Win para abrir o Centro de Atividades e digite “Atualizador de Software”, em seguida, pressione Enter para abri-lo.

Se o atualizador disser que não pode ser executado, e você não tiver terminais abertos com gerenciadores de pacotes em execução em segundo plano, siga as instruções acima.
Se, em vez do problema de pacotes quebrados, você estiver enfrentando um problema com o Centro de Software não funcionando, temos as correções.
Corrigindo Pacotes Quebrados no Fedora/CentOS/RHEL
Corrigir pacotes quebrados no Fedora/CentOS/RHEL é uma situação menos comum. O dnf faz um ótimo trabalho garantindo que os pacotes sejam instalados corretamente. Dito isso, ainda não é perfeito, e as coisas às vezes se misturam na gestão de pacotes.
Nota: aprenda as diferenças entre Fedora, CentOS e RHEL.
1. Listar Pacotes Problemáticos
O comando para resolver isso em sistemas baseados em RHEL, como Fedora, é:
sudo rpm -Va
A opção -V é para verificar, o que significa que ele irá percorrer e comparar informações sobre os arquivos instalados com as informações armazenadas no banco de dados rpm. Anexar -a a isso apenas verifica todos os pacotes principais. Isso é ligeiramente pouco útil, pois geralmente lhe dará uma longa lista de arquivos, mas pode lhe dar um ponto de partida se você estiver tendo problemas com um aplicativo específico.
Por exemplo, ver algo marcado como “ausente” no seu terminal dirá que há arquivos ausentes naquele pacote específico.
2. Tentar uma Reinstalação
Execute um dnf reinstall em quaisquer pacotes que você veja nessa lista que possam estar lhe dando problemas.
sudo dnf --refresh reinstall [nome do pacote]Isso definirá todos os metadados como expirados, então ele irá percorrer todos os repositórios que você tem habilitados e procurar uma nova versão daquele pacote. Se você descobrir que há dependências quebradas com aquele pacote, o DNF provavelmente reclamará e dirá para você usar a opção --skip-broken. Isso apenas ignorará aquele pacote completamente e permitirá que você atualize seu sistema normalmente.
3. O Último Recurso – Remover Pacotes
Se você chegou ao ponto em que precisa usar --skip-broken para completar suas atualizações, é mais higiênico para o seu sistema removê-lo completamente.
Lembrando o nome do pacote que você não conseguiu reinstalar corretamente, desinstale-o:
sudo dnf remove [nome do pacote]O pior que pode acontecer aqui é que você acabe removendo uma parte central do seu fluxo diário, como seu navegador, forçando você a encontrar uma alternativa.
Dica: aprenda a usar flatpak no Fedora para gerenciar melhor seus pacotes.
Corrigindo Pacotes Quebrados no Arch
Embora o gerenciador de pacotes do Arch tenha algumas semelhanças com os outros listados aqui (ou seja, ele tem um arquivo de bloqueio de banco de dados e puxa dependências de maneira semelhante), é uma besta completamente diferente quando se trata de como sua lógica é estruturada. O primeiro passo para diagnosticar seu problema é garantir que os repositórios estejam atualizados e tentar uma atualização completa:
sudo pacman -SyuSe suas tentativas de instalar seu pacote ou fazer uma atualização do sistema ainda terminarem em falha, precisamos isolar a causa de acordo com o que o terminal lhe disse:
Nota: aprenda como o pacman funciona antes de tentar consertá-lo.
“Pacote Inválido ou Corrompido”
Fazer alterações no “pacman.conf” de qualquer maneira pode causar problemas que fazem o pacman rotular incorretamente pacotes como corrompidos. O culpado mais provável aqui é um arquivo parcial (“.part”) no cache do gerenciador de pacotes, e sua solução é removê-lo:
sudo find /var/cache/pacman/pkg/ -iname "*.part" -deleteHá sempre a chance de que o pacote que você está tentando instalar esteja realmente corrompido e não forneça metadados válidos para o gerenciador de pacotes do Arch. Nesse caso, você terá que esperar que o mantenedor do pacote o atualize. Se o pacote estiver instalado em seu sistema e causando problemas durante uma atualização, remova-o com:
sudo pacman -Rns [nome do pacote]“Incapaz de Bloquear o Banco de Dados”
Assim como o apt do Debian, o gerenciador de pacotes do Arch cria um arquivo de bloqueio durante as operações. Se você experimentou uma queda de energia ou o pacman sofreu uma interrupção brusca e não conseguiu remover o bloqueio, é muito provável que tenha deixado para trás um arquivo de bloqueio.
Primeiro, descubra se algum processo no seu computador ainda está usando o arquivo:
sudo fuser /var/lib/pacman/db.lckNa imagem acima, um processo com ID 121497 está usando o bloqueio do arquivo. Se você estiver curioso sobre o processo e quiser mais informações, use ps:
ps -p [PID#]No meu caso, outra instância do pacman possui o arquivo de bloqueio. A maneira mais segura de remover o bloqueio é primeiro matar esse processo:
sudo kill [PID#]Agora que o processo está morto, remova o arquivo de bloqueio:
sudo rm /var/lib/pacman/db.lckVocê está livre agora!
“Arquivos Conflitantes/Arquivo Existe no Sistema de Arquivos”
Isso acontece durante as atualizações em que o pacman detecta um conflito de propriedade. Antes de corrigir qualquer coisa, preste atenção ao caminho do arquivo que o gerenciador de pacotes está reclamando.
Para descobrir quem possui o arquivo:
pacman -Qo [caminho para o arquivo]Se ele for de propriedade de um usuário e não de outro pacote, basta removê-lo:
sudo rm [caminho para o arquivo]Se ele for de propriedade de outro pacote, a coisa mais segura a fazer é esperar que o mantenedor do pacote resolva esse conflito por conta própria. Às vezes, essa não é uma opção, no entanto, e você quer resolver as coisas agora.
A maneira mais simples de conseguir isso é usar a opção --overwrite no pacman. Apenas saiba que isso é geralmente inseguro e pode levar a alguns aplicativos não funcionarem corretamente em seu sistema. Sugiro fazer um backup antes de executar isso.
A opção --overwrite permite que o gerenciador de pacotes do Arch ignore as regras de propriedade para um arquivo específico e simplesmente passe por cima da atualização. Exemplo:
sudo pacman -Syu --overwrite [nome do arquivo]Se o comando acima não funcionar, substitua o nome do arquivo pelo seu caminho absoluto. Alguns usuários relataram que remover a barra inicial (“/“) na frente do caminho faz o comando funcionar quando ele está sendo teimoso.
Alternativamente, você também pode simplesmente dizer ao pacman para sobrescrever tudo o que precisar:
sudo pacman -Syu --overwrite='*'“Pacote Inválido ou Corrompido (Assinatura PGP)”
Em alguns pacotes que são mal mantidos, o desenvolvedor pode não ter tempo ou disposição para atualizar corretamente a assinatura digital que certifica seu pacote. Isso eventualmente resultará em uma mensagem no seu terminal ao tentar instalá-lo, como, “assinatura de [alguém] é de confiança marginal”, seguida pelo gerenciador de pacotes perguntando se você gostaria de excluir o arquivo.
Como as atualizações de assinatura dependem inteiramente do mantenedor, não há nada que você possa realisticamente fazer para corrigir a situação a partir do seu terminal. Se você estiver fazendo uma atualização e quiser manter o pacote, use a opção --ignore para aquele pacote em particular:
sudo pacman -Syu --ignore [nome do pacote]Se você receber isso para muitos pacotes, seu keyring pode estar desatualizado. Atualize-o com:
sudo pacman -S archlinux-keyringPerguntas Frequentes
Posso aplicar as correções do Arch com um helper AUR?
Geralmente, sim. Substitua “pacman” pelo seu helper AUR nos comandos deste guia. Exemplo: yay -Qo /caminho/para/o/arquivo
O que devo fazer se eu interromper uma atualização?
Interromper um processo de atualização, seja pressionando Ctrl + C, matando o processo do gerenciador de pacotes ou fechando o terminal prematuramente, resultará em algum nível de corrupção em seu banco de dados de pacotes que pode complicar as coisas quando você tentar instalar algo mais. Para corrigir isso, limpe o cache e repita a atualização.
Crédito da imagem: Flickr. Todas as capturas de tela por Miguel Leiva-Gomez.