Solucao de Problemas de Gerenciamento de Pacotes: Resolvendo Erros de Dependencia
O Que Sao Erros de Dependencia?
Erros de dependencia ocorrem quando "o Pacote A requer o Pacote B, mas B esta ausente ou em uma versao incompativel." A causa raiz e quase sempre uma de tres coisas: estado do repositorio desatualizado, instalacao interrompida ou repositorios de terceiros conflitantes.
Estrategia de resolucao
- Atualize os metadados do repositorio primeiro:
apt update/dnf makecache - Execute reparo automatico:
apt --fix-broken install/dpkg --configure -a - Apenas escale para correcoes manuais se essas nao funcionarem
Erros de Dependencia do apt e Correcoes
E: Unmet dependencies
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
Pacotes de dependencia ausentes. Tente nesta ordem:
sudo apt --fix-broken install
Reading package lists... Done Building dependency tree Correcting dependencies... Done The following packages will be installed: libfoo1 ...
Isso completa automaticamente dependencias ausentes e finaliza instalacoes interrompidas. Resolve a maioria dos casos.
Se nao for suficiente:
sudo dpkg --configure -a sudo apt-get install -f
E: Unable to locate package
E: Unable to locate package foo
O pacote nao existe nas suas listas de repositorios atuais.
# Atualize o indice de pacotes primeiro sudo apt update sudo apt install package-name
Executar apt update antes de instalar resolve a maioria dos erros "nao encontra pacote" causados por cache desatualizado.
Se o pacote esta no repositorio Universe (Ubuntu):
sudo add-apt-repository universe sudo apt update sudo apt install package-name
The following packages have been kept back
The following packages have been kept back: foo
O pacote precisa de uma mudanca de dependencia para atualizar — apt upgrade pula esses.
# Instale o pacote retido diretamente sudo apt install foo # Ou atualize todos os pacotes retidos de uma vez sudo apt full-upgrade
Recuperando de um Estado dpkg Quebrado
Quando dpkg e interrompido no meio da operacao (Ctrl+C, queda de energia, etc.), comandos subsequentes falham com:
dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
Recuperacao:
sudo dpkg --configure -a
Setting up libssl1.1:amd64 (1.1.1f-1ubuntu2.20) ... Processing triggers for libc-bin (2.31-13+deb11u7) ...
Se um pacote especifico ainda esta quebrado:
sudo dpkg --configure package-name
Forcar remocao e reinstalacao de um pacote travado:
sudo dpkg --remove --force-remove-reinstreq package-name sudo apt install package-name
dpkg --force-all pula todas as verificacoes de dependencia e deve ser o ultimo recurso absoluto — pode deixar o sistema em estado inconsistente.
Erros de Dependencia do yum / dnf
Transaction Check Error (conflito de arquivo)
Error: Transaction check error: file /path/to/file conflicts with file from package foo-1.0
Um arquivo no disco ja e reivindicado por um pacote diferente.
# Verifique qual pacote e dono do arquivo conflitante rpm -qf /path/to/file
foo-1.0-1.el9.x86_64
# Remova o pacote conflitante, depois instale o alvo sudo dnf remove conflicting-package sudo dnf install target-package
Dependency problems (incompatibilidade de versao)
Error: Problem: package foo-2.0 requires bar >= 2.0, but none of the providers can be installed
# Verifique quais versoes estao disponiveis dnf list --available bar # Sincronize pacotes instalados com as versoes atuais do repositorio sudo dnf distro-sync
dnf distro-sync alinha pacotes instalados as versoes disponiveis nos repositorios ativos. Para ambientes yum, yum distro-sync funciona da mesma forma.
Se um repositorio de terceiros (ex.: EPEL) esta causando o conflito:
# Desabilite o repositorio problematico temporariamente sudo dnf install package-name --disablerepo=epel
Problemas de Repositorio
Erros de Chave GPG
The following signatures were invalid: EXPKEYSIG XXXXXXXXXXXXXXXX
A chave de assinatura GPG do repositorio expirou.
# Ubuntu / Debian — reimporte a chave curl -fsSL https://repo-key-url | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/repo.gpg sudo apt update # CentOS / Fedora — importe a chave RPM sudo rpm --import https://repo-key-url
Conflitos de Arquivo de Lock
E: Could not get lock /var/lib/dpkg/lock-frontend
Outro processo apt esta em execucao, ou uma execucao anterior falhou sem liberar o lock.
# Verifique processos apt/dpkg em execucao ps aux | grep -E "apt|dpkg"
Se um processo existe: aguarde sua conclusao. Use sudo kill -9 PID apenas como ultimo recurso.
Se nenhum processo existe (execucao que falhou):
sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock sudo dpkg --configure -a
Apenas delete arquivos de lock apos confirmar que nenhum processo apt/dpkg esta em execucao com ps aux. Deletar locks enquanto um processo esta ativo corrompe o banco de dados de pacotes.
Para locks do yum / dnf:
# lock do yum sudo rm /var/run/yum.pid # lock do dnf sudo rm /var/cache/dnf/*.lock
Fluxo de Diagnostico
Quando voce encontrar um erro de dependencia, siga estes passos em ordem:
| Passo | Comando | Efeito |
|---|---|---|
| 1. Atualizar cache | apt update / dnf makecache |
Obter metadados atuais do repositorio |
| 2. Auto-correcao | apt --fix-broken install |
Preencher dependencias ausentes |
| 3. Completar dpkg | dpkg --configure -a |
Finalizar configuracoes pendentes |
| 4. Forcar correcao | apt-get install -f |
Forcar resolucao de dependencias |
| 5. Sincronizar | dnf distro-sync |
Alinhar pacotes ao estado do repositorio |
Opcoes --force sao ultimo recurso. Apenas considere-as apos os passos 1-4 falharem.