Solucao de Problemas de Gerenciamento de Pacotes: Resolvendo Erros de Dependencia

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

  1. Atualize os metadados do repositorio primeiro: apt update / dnf makecache
  2. Execute reparo automatico: apt --fix-broken install / dpkg --configure -a
  3. 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

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

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.

Proximas Leituras