Solução de problemas do APT no Ubuntu: corrigir pacotes quebrados, retenções e erros de GPG

Corrija o APT do Ubuntu sem palpites.

Conteúdo da página

Falhas no APT são comuns em máquinas Ubuntu de longa duração e geralmente surgem após uma atualização de versão, uma mudança em repositórios de terceiros, a remoção de um PPA, a instalação manual de um .deb ou uma instalação de pacote interrompida.

A mensagem de erro pode parecer dramática, mas a maioria dos problemas do APT não é misteriosa — são problemas de estado em que a visão do APT sobre repositórios, versões e pacotes instalados não está mais em consonância.

laptop ubuntu apt packages

O APT está tentando responder a quatro perguntas:

  1. Quais repositórios estão habilitados?
  2. Quais versões de pacotes estão disponíveis?
  3. Quais pacotes já estão instalados?
  4. Quais alterações de pacotes são permitidas?

Quando essas respostas conflitam, você obtém pacotes retidos (kept back), dependências quebradas, chaves públicas ausentes, erros de PPA inválido ou pacotes retidos durante a atualização. Este guia oferece uma sequência prática de solução de problemas para o APT no Ubuntu, escrita para desenvolvedores, engenheiros de DevOps e usuários de Linux que desejam corrigir o sistema sem colar cegamente comandos aleatórios de fóruns. Combine-o com o nosso guia rápido de APT e dpkg no Ubuntu para comandos diários de instalação e atualização, e explore a coleção mais ampla de Ferramentas de Desenvolvimento para fluxos de trabalho relacionados ao Linux.

A Versão Curta

Se o seu sistema estiver apenas ligeiramente danificado, comece aqui:

sudo apt update
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt update
sudo apt upgrade

Se os pacotes estiverem retidos (kept back):

apt list --upgradable
apt-mark showhold
sudo apt full-upgrade

Se um PPA ou repositório de terceiros estiver falhando:

ls /etc/apt/sources.list.d/
sudo apt update

Leia a linha do repositório que está falhando e, em seguida, desative ou corrija esse repositório. Se você vir NO_PUBKEY, não importe chaves aleatórias de um servidor de chaves — encontre as instruções oficiais do repositório, instale a chave do repositório em /etc/apt/keyrings e vincule-a a esse repositório com signed-by.

Antes de Corrigir Qualquer Coisa: Leia o Erro do APT Primeiro

Execute isto primeiro:

sudo apt update

Não pule esta etapa. apt update atualiza os metadados dos pacotes. Ele não atualiza os pacotes. Ele informa se o Ubuntu consegue ler todos os repositórios configurados e verificar seus metadados.

Em seguida, verifique a versão e o codinome do seu Ubuntu — um nome de versão desatualizado em /etc/apt/sources.list.d/ é uma causa frequente de erros 404 e de arquivo de lançamento (Release file). Se não tiver certeza de qual versão está usando, consulte como verificar sua versão do Ubuntu:

lsb_release -a

Ou:

cat /etc/os-release

Verifique também o que está disponível para atualização:

apt list --upgradable

E verifique se algum pacote está retido (held):

apt-mark showhold

Isso fornece a primeira divisão na árvore de decisão — identificar a classe de falha primeiro facilita a solução de problemas, pois cada classe tem uma correção inicial diferente:

  • Problema de repositório: apt update falha.
  • Problema de dependência: apt update funciona, mas a instalação ou atualização falha.
  • Problema de pacote retido (held): O APT se recusa a alterar pacotes específicos.
  • Problema de origem mista: Um PPA, .deb manual ou repositório antigo fornece versões incompatíveis.
  • Problema de instalação interrompida: dpkg tem pacotes extraídos que nunca foram configurados.

Tipos Comuns de Falha do APT no Ubuntu

Pacotes Retidos (Kept Back)

Um pacote retido (kept back) nem sempre é um erro; significa que o APT escolheu não atualizar um pacote usando o comando atual. Isso geralmente acontece quando a atualização requer a instalação de novas dependências, a remoção de pacotes antigos ou a alteração de um pacote de uma maneira que o apt upgrade simples não executará.

Verifique os detalhes:

apt list --upgradable
apt-cache policy nome-do-pacote

Tente uma atualização completa apenas após ler o que o APT deseja fazer:

sudo apt full-upgrade

full-upgrade tem permissão para instalar novos pacotes e remover pacotes, se necessário, para concluir a atualização. Isso é útil, mas também é por isso que você deve ler as alterações propostas antes de aceitá-las. Em uma estação de trabalho, full-upgrade geralmente é aceitável após a revisão; em um servidor, leia as remoções duas vezes.

Pacotes Retidos (Held)

Um pacote retido (held) é diferente de um pacote que é apenas mantido (kept back). Um “hold” é uma instrução explícita que impede que o APT instale, atualize ou remova automaticamente esse pacote. Holds são úteis para fixar uma versão de kernel, banco de dados, driver ou runtime, e também são fáceis de esquecer.

Liste pacotes retidos (held):

apt-mark showhold

Retenha (hold) um pacote:

sudo apt-mark hold nome-do-pacote

Remova o hold de um pacote:

sudo apt-mark unhold nome-do-pacote

Se você vir erros de dependência envolvendo um pacote retido, decida se o hold ainda é intencional. Não remova holds automaticamente. Eles podem estar protegendo um serviço de produção, driver ou toolchain sensível à compatibilidade.

Dependências Quebradas

Dependências quebradas significam que o APT não pode encontrar um conjunto de pacotes válido, o que geralmente aponta para um conflito de versão em vez de um download corrompido.

As causas comuns incluem:

  • Um pacote requer uma versão que não está disponível.
  • Um PPA fornece uma biblioteca mais recente do que o Ubuntu espera.
  • Um .deb instalado manualmente depende de pacotes de outra versão.
  • Uma instalação de pacote foi interrompida.
  • Um repositório para a versão errada do Ubuntu está habilitado.
  • Pinagem de pacotes ou holds impedem a mudança de versão necessária.

Comece com:

sudo dpkg --configure -a
sudo apt --fix-broken install

Em seguida, inspecione o pacote:

apt-cache policy nome-do-pacote
apt-cache depends nome-do-pacote
apt-cache rdepends nome-do-pacote

Em seguida, use esses comandos para encontrar o conflito de versão de pacote que está bloqueando o APT, em vez de executar todos os comandos de reparo em sequência.

Erros de Chave GPG e NO_PUBKEY

Um erro NO_PUBKEY significa que o APT recebeu metadados do repositório, mas não pode verificar a assinatura porque a chave pública necessária está ausente — um problema de confiança, não apenas um problema de download.

Um erro típico se parece com isto:

As seguintes assinaturas não puderam ser verificadas porque a chave pública não está disponível: NO_PUBKEY ABCD1234EF567890

Instruções antigas frequentemente usavam apt-key add, mas evite isso para configurações de repositório novas. Sistemas Ubuntu modernos devem usar um keyring específico do repositório e signed-by.

Um padrão melhor se parece com isto:

sudo install -d -m 0755 /etc/apt/keyrings

curl -fsSL https://example.com/repo-key.gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/apt stable main" \
  | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

Substitua a URL e a linha do repositório pelas instruções oficiais do fornecedor.

A parte importante é esta:

signed-by=/etc/apt/keyrings/example.gpg

Essa linha signed-by vincula a chave a um repositório, o que é mais limpo e seguro do que colocar cada chave de terceiros em um armazenamento de confiança global.

Erros de PPA Inválido ou Arquivo de Lançamento

Falhas de PPA frequentemente se parecem com isto:

O repositório não possui um arquivo Release.

Ou:

404 Não Encontrado

Causas comuns:

  • O PPA não suporta sua versão do Ubuntu.
  • Você atualizou o Ubuntu, mas o PPA ainda aponta para o antigo codinome.
  • O PPA foi excluído.
  • O mantenedor parou de publicar pacotes.
  • Você adicionou um PPA destinado a uma versão diferente do Ubuntu.

Verifique seu codinome:

. /etc/os-release
echo "$VERSION_CODENAME"

Liste arquivos de origem de terceiros:

ls /etc/apt/sources.list.d/

Inspecione-os:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Desabilite uma fonte suspeita renomeando-a:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Se o APT funcionar após desativar o arquivo, você encontrou a fonte problemática e pode corrigi-la ou removê-la permanentemente.

Um Fluxo de Trabalho Seguro de Solução de Problemas do APT

Passo 1: Atualizar Metadados

sudo apt update

Se isso falhar, corrija os repositórios antes de tentar reparar pacotes. O APT não pode resolver dependências corretamente se seu índice de pacotes estiver desatualizado ou incompleto.

Procure por linhas contendo:

NO_PUBKEY
Release file
404 Not Found
does not have a Release file
The repository is not signed

Estes são problemas de repositório ou confiança e devem ser corrigidos antes de tentar qualquer reparo de pacote.

Passo 2: Finalizar Configuração de Pacotes Interrompida

Se uma instalação de pacote foi interrompida, o dpkg pode ter extraído arquivos, mas não configurado o pacote.

Execute:

sudo dpkg --configure -a

Se isso tiver sucesso, continue:

sudo apt --fix-broken install

Se falhar, leia o nome do pacote e o erro cuidadosamente. O pacote nomeado na parte inferior do erro geralmente é mais importante do que o pacote que você originalmente tentou instalar.

Passo 3: Pedir ao APT para Reparar Dependências

sudo apt --fix-broken install

Este comando pede ao APT para corrigir problemas de dependência instalando dependências ausentes ou removendo pacotes que não podem ser satisfeitos. Leia a ação proposta cuidadosamente, especialmente quaisquer remoções.

Tenha cuidado se o APT quiser remover:

  • ubuntu-desktop
  • ubuntu-server
  • linux-generic
  • pacotes do gerenciador de exibição
  • pacotes de rede
  • pacotes de banco de dados
  • pacotes de runtime de contêiner
  • pacotes de ambiente de desktop

Às vezes, remover um metapacote é inofensivo. Às vezes, é um sinal de alerta de que suas fontes de pacotes estão misturadas de forma inadequada. Não aceite remoções grandes sem entendê-las.

Passo 4: Verificar Pacotes Retidos (Held)

apt-mark showhold

Se um pacote retido estiver bloqueando a atualização, inspecione-o:

apt-cache policy nome-do-pacote

Se o hold não for mais necessário:

sudo apt-mark unhold nome-do-pacote
sudo apt update
sudo apt upgrade

Se o hold for intencional, não lute contra o APT — corrija o repositório ou a seleção de pacotes em torno do hold, em vez de remover a proteção.

Passo 5: Inspecionar Versões de Pacotes

Para um pacote com problemas de dependência:

apt-cache policy nome-do-pacote

Isso mostra:

  • Versão instalada
  • Versão candidata
  • Versões disponíveis
  • Qual repositório fornece cada versão

apt-cache policy é um dos comandos de depuração do APT mais úteis porque mostra de onde vem cada versão disponível.

Exemplo:

apt-cache policy docker-ce

Se a versão candidata vier de um PPA inesperado ou repositório antigo, você encontrou a causa provável do conflito de dependência.

Passo 6: Procurar por Repositórios Mistos

Liste fontes habilitadas:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Procure por:

  • Codinomes antigos do Ubuntu
  • Repositórios Debian no Ubuntu
  • PPAs para outra versão do Ubuntu
  • Repositórios de fornecedor duplicados
  • Instruções Snap e APT misturadas para a mesma ferramenta
  • Arquivos .list antigos deixados para trás após desinstalar software

Um anti-padrão comum é instalar uma ferramenta de um repositório de fornecedor e, posteriormente, adicionar um PPA ou .deb manual que forneça bibliotecas sobrepostas. O APT pode lidar com muitas fontes, mas não pode conciliar intenções conflitantes a menos que você alinhe os repositórios você mesmo.

Passo 7: Tentar uma Instalação ou Atualização Simulada

Antes de fazer alterações, simule:

apt -s install nome-do-pacote

Ou:

apt -s full-upgrade

A opção -s simula a operação. É útil quando você deseja ver o que o APT faria sem alterar o sistema.

Corrigindo Pacotes Retidos (Held)

Listar Pacotes Retidos (Held)

apt-mark showhold

Se nada for impresso, nenhum pacote está retido com apt-mark e você pode prosseguir para verificações de dependência ou repositório.

Retenção Intencional de um Pacote

sudo apt-mark hold nome-do-pacote

Boas razões para reter um pacote:

  • Uma versão do kernel é conhecida por funcionar com seu hardware.
  • Uma atualização de banco de dados precisa de planejamento.
  • Uma atualização de driver quebra sua GPU.
  • Uma versão de runtime deve corresponder à produção.
  • Um pacote de fornecedor não é compatível com a dependência mais recente.

Más razões para reter um pacote:

  • Você copiou um comando de um guia antigo.
  • Você esqueceu por que ele foi retido.
  • Você está evitando um erro de dependência sem entendê-lo.

Remover um Hold

sudo apt-mark unhold nome-do-pacote

Em seguida, atualize e faça upgrade:

sudo apt update
sudo apt upgrade

Se o pacote ainda não atualizar, não era apenas um problema de hold. Verifique a política:

apt-cache policy nome-do-pacote

Corrigindo Dependências Quebradas

A Sequência Padrão de Reparo

Use esta sequência quando a instalação ou atualização de pacotes falhou no meio:

sudo apt update
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt upgrade

Esta ordem importa porque cada etapa prepara o terreno para a próxima: apt update atualiza os metadados do repositório, dpkg --configure -a finaliza a configuração de pacotes extraídos, apt --fix-broken install permite que o APT concilie dependências ausentes ou conflitantes e apt upgrade retoma as atualizações normais de pacotes.

Remover um Pacote Local Instalado Mal

Se o problema começou após instalar um .deb baixado, inspecione-o:

dpkg -l | grep nome-do-pacote
apt-cache policy nome-do-pacote

Remova-o:

sudo apt remove nome-do-pacote

Se os arquivos de configuração também estiverem causando problemas:

sudo apt purge nome-do-pacote

Em seguida, repare:

sudo apt --fix-broken install

Reinstalar um Pacote Danificado

Se um pacote está instalado, mas quebrado:

sudo apt install --reinstall nome-do-pacote

Isso é útil quando arquivos estão ausentes ou corrompidos, mas as fontes do pacote são, de outra forma, saudáveis e você deseja atualizar os arquivos instalados sem alterar as versões.

Corrigindo Problemas de PPA e Repositórios de Terceiros

Encontrar PPAs e Repositórios de Terceiros

ls /etc/apt/sources.list.d/

Mostre linhas de repositório ativas:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Em sistemas Ubuntu mais novos, você também pode ver arquivos .sources usando o formato deb822:

ls /etc/apt/sources.list.d/*.sources

Exibá-los:

cat /etc/apt/sources.list.d/*.sources

Desativar um PPA com Segurança

Renomeie o arquivo de origem:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Para arquivos deb822:

sudo mv /etc/apt/sources.list.d/example.sources /etc/apt/sources.list.d/example.sources.disabled
sudo apt update

Renomear o arquivo de origem é reversível e mais seguro do que excluir a configuração do repositório imediatamente, pois você pode renomeá-lo de volta se desativar a fonte errada.

Remover Pacotes de um PPA

Desativar um PPA interrompe o download futuro de pacotes dele. Ele não rebaixa automaticamente os pacotes já instalados desse PPA.

Se o PPA causou conflitos de biblioteca, você pode precisar rebaixar pacotes para as versões do Ubuntu.

Instale ppa-purge:

sudo apt install ppa-purge

Em seguida, purge o PPA:

sudo ppa-purge ppa:owner/name

Use ppa-purge com cuidado e leia as alterações propostas antes de aceitá-las, pois ele pode remover ou rebaixar vários pacotes relacionados.

Após uma Atualização de Versão

Após atualizar o Ubuntu, PPAs antigos são uma fonte comum de erros.

Verifique codinomes antigos:

grep -R "jammy\|noble\|oracular\|plucky" /etc/apt/sources.list /etc/apt/sources.list.d/

Ajuste os codinomes para o seu sistema real. Por exemplo, se você estiver no Ubuntu 24.04, seu codinome é noble. Se uma fonte de terceiros ainda apontar para um codinome mais antigo, verifique se esse fornecedor suporta sua versão atual do Ubuntu. Se você estiver configurando uma nova máquina em vez de reparar uma atualização, nosso guia de instalação do Ubuntu 24.04 orienta sobre a adição de repositórios de fornecedores com signed-by desde o início.

Não apenas edite o codinome e espere pelo melhor — alguns repositórios não publicam pacotes para cada versão do Ubuntu, portanto, verifique o suporte do fornecedor para sua versão primeiro.

Corrigindo Erros GPG e NO_PUBKEY

O Que NO_PUBKEY Significa

Os repositórios do APT publicam metadados assinados e sua máquina precisa da chave pública correspondente para verificar esses metadados. Se a chave estiver ausente, o APT se recusa a confiar no repositório, o que é o comportamento desejado — não desative as verificações de assinatura apenas para fazer o erro desaparecer.

O Padrão Moderno de Keyring

Crie o diretório do keyring:

sudo install -d -m 0755 /etc/apt/keyrings

Baixe e remova a armadura da chave do fornecedor:

curl -fsSL https://example.com/repository-key.gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

Defina permissões de leitura:

sudo chmod 0644 /etc/apt/keyrings/example.gpg

Adicione o repositório com signed-by:

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/linux/ubuntu noble stable" \
  | sudo tee /etc/apt/sources.list.d/example.list

Em seguida, atualize:

sudo apt update

Substitua noble pelo codinome do seu Ubuntu, se necessário:

. /etc/os-release
echo "$VERSION_CODENAME"

Por Que apt-key É o Hábito Errado

Guias antigos frequentemente usam:

curl -fsSL https://example.com/key.gpg | sudo apt-key add -

Evite apt-key add para novas configurações. O estilo antigo apt-key adiciona chaves a uma área de confiança ampla, o que torna mais difícil raciocinar sobre qual chave é confiável para qual repositório, enquanto o estilo moderno signed-by delimita a chave a um repositório específico e é uma higiene básica de cadeia de suprimentos.

Encontrar Chaves Confiadas Legadas

Você ainda pode ter chaves antigas em:

/etc/apt/trusted.gpg
/etc/apt/trusted.gpg.d/

Liste arquivos:

ls -l /etc/apt/trusted.gpg.d/

Não exclua chaves aleatoriamente — primeiro mapeie cada chave para um repositório e, em seguida, migre um repositório de cada vez para /etc/apt/keyrings e signed-by.

Erros Comuns de GPG

Não use servidores de chaves aleatórios como sua primeira escolha ao corrigir erros NO_PUBKEY.

Ordem melhor:

  1. Use a documentação oficial de instalação do fornecedor.
  2. Baixe a chave da URL HTTPS oficial do fornecedor.
  3. Armazene-a em /etc/apt/keyrings.
  4. Vincule-a com signed-by.
  5. Execute sudo apt update.

Evite estes atalhos:

sudo apt update --allow-unauthenticated
sudo apt install --allow-unauthenticated nome-do-pacote

Eles podem funcionar temporariamente, mas removem a verificação de assinatura que o protege contra metadados de repositório adulterados.

Corrigindo “O Repositório Não Está Assinado”

Este erro geralmente significa uma dessas coisas:

  • O repositório não publica metadados assinados.
  • A URL do repositório está incorreta.
  • O repositório não suporta mais sua versão do Ubuntu.
  • Um proxy ou espelho está retornando o conteúdo errado.
  • Você está usando HTTP onde o fornecedor agora espera HTTPS.
  • O arquivo de origem tem o suite ou componente errado.

Encontre a fonte falha:

sudo apt update

O APT imprimirá a URL. Em seguida, pesquise por ela:

grep -R "example.com" /etc/apt/sources.list /etc/apt/sources.list.d/

Desabilite-a temporariamente:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Se o APT funcionar novamente após desativar o arquivo, reinstale esse repositório a partir das instruções oficiais atuais do fornecedor em vez de reativar a configuração antiga.

Corrigindo Avisos de Repositório Duplicado

O APT pode avisar que um alvo está configurado várias vezes.

Liste entradas correspondentes:

grep -R "repo-url-or-domain" /etc/apt/sources.list /etc/apt/sources.list.d/

Repositórios duplicados frequentemente aparecem após executar scripts de instalação de fornecedores várias vezes.

Mantenha um arquivo de origem. Desabilite os outros:

sudo mv /etc/apt/sources.list.d/duplicate.list /etc/apt/sources.list.d/duplicate.list.disabled
sudo apt update

Avisos de duplicação nem sempre são fatais, mas são um sinal de configuração desleixada, portanto, mantenha um arquivo de origem e desabilite os duplicados.

Corrigindo Pacotes da Versão Errada do Ubuntu

Um dos piores problemas do APT é misturar versões do Ubuntu — por exemplo, uma máquina no Ubuntu 24.04 não deve casualmente puxar pacotes do Ubuntu 22.04 ou Debian testing. Às vezes, funciona por um tempo, mas eventualmente o gráfico de dependência se torna um quebra-cabeça que o APT não consegue resolver limpa e facilmente.

Verifique sua versão:

. /etc/os-release
echo "$VERSION_CODENAME"

Pesquise fontes:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Procure por codinomes estrangeiros nas fontes habilitadas e, em seguida, inspecione o pacote afetado:

apt-cache policy nome-do-pacote

Se a versão instalada veio de um repositório antigo ou estrangeiro, desabilite esse repositório e rebaixe ou reinstale o pacote afetado dos repositórios do Ubuntu.

Um caminho de reparo conservador é:

sudo apt update
sudo apt install --reinstall nome-do-pacote

Para conflitos mais profundos, você pode precisar remover o pacote e reinstalá-lo da fonte correta, em vez de forçar uma atualização sobre uma versão estrangeira.

Limpando o Cache do APT e Pacotes Não Utilizados

A limpeza do cache do APT não é uma correção de dependência por si só, mas pode ajudar após muitas instalações falhas ao recuperar espaço em disco e limpar arquivos de pacote obsoletos.

Remova pacotes que foram instalados automaticamente e não são mais necessários:

sudo apt autoremove

Limpe os arquivos de pacote baixados:

sudo apt clean

Ou remova apenas arquivos de pacote obsoletos:

sudo apt autoclean

Use autoremove com cuidado em servidores e desktops com pilhas de driver instaladas manualmente e leia a lista de remoções antes de aceitar.

Receitas Práticas de Solução de Problemas do APT

Receita: Pacote Retido (Kept Back)

sudo apt update
apt list --upgradable
apt-mark showhold
sudo apt full-upgrade

Se o APT propor alterações razoáveis após a simulação, aceite-as. Se propor grandes remoções, pare e inspecione:

apt-cache policy nome-do-pacote

Receita: Pacote Retido (Held) Bloqueia Atualização

apt-mark showhold
apt-cache policy nome-do-pacote
sudo apt-mark unhold nome-do-pacote
sudo apt upgrade

Desfaça o hold de um pacote apenas se o hold não for mais intencional, pois remover um hold que protege software de produção pode desencadear uma atualização quebrada.

Receita: Instalação Interrompida

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt upgrade

Receita: Erro NO_PUBKEY

  1. Identifique o repositório a partir de sudo apt update.
  2. Encontre as instruções oficiais de instalação atuais do fornecedor.
  3. Instale a chave em /etc/apt/keyrings.
  4. Use signed-by no arquivo de origem.
  5. Execute sudo apt update.

Estrutura de exemplo:

sudo install -d -m 0755 /etc/apt/keyrings

curl -fsSL https://example.com/key.gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

sudo chmod 0644 /etc/apt/keyrings/example.gpg

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/ubuntu noble main" \
  | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

Receita: PPA Não Tem Arquivo Release

sudo apt update
ls /etc/apt/sources.list.d/
grep -R "ppa.launchpadcontent.net\|launchpad" /etc/apt/sources.list.d/

Desabilite o PPA:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Em seguida, decida se deseja remover, substituir ou purgar pacotes desse PPA.

Receita: .deb Manual Quebrou Dependências

dpkg -l | grep nome-do-pacote
apt-cache policy nome-do-pacote
sudo apt remove nome-do-pacote
sudo apt --fix-broken install

Se você ainda precisar do software, prefira o repositório APT atual do fornecedor em vez de instalações manuais repetidas de .deb, que tendem a acumular conflitos de dependência ao longo do tempo.

Comandos Essenciais de Solução de Problemas do APT

Repositório e Metadados

sudo apt update
grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/
ls /etc/apt/sources.list.d/

Estado do Pacote

apt list --installed
apt list --upgradable
apt-mark showhold
dpkg -l | grep nome-do-pacote

Política de Pacote e Dependências

apt-cache policy nome-do-pacote
apt-cache depends nome-do-pacote
apt-cache rdepends nome-do-pacote

Reparo

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt install --reinstall nome-do-pacote
sudo apt full-upgrade

Limpeza

sudo apt autoremove
sudo apt autoclean
sudo apt clean

Simulação

apt -s install nome-do-pacote
apt -s full-upgrade

O Que Não Fazer

Não Exclua Aleatoriamente /var/lib/dpkg

Se você vir conselhos para excluir arquivos de estado do dpkg, seja cético. O banco de dados do dpkg é o registro de pacotes instalados e excluir partes dele pode transformar um problema de pacote reparável em um projeto completo de recuperação do sistema.

Não Desative a Verificação de Assinatura

Evite:

--allow-unauthenticated

Se um repositório não puder ser verificado, corrija a chave ou desative o repositório em vez de contornar a autenticação.

Não Misture Versões do Ubuntu Casualmente

Não adicione repositórios para outra versão do Ubuntu a menos que você entenda a pinagem do APT e as consequências de dependência.

Isso se aplica especialmente a:

  • ambientes de desktop
  • drivers de gráficos
  • pilhas Python
  • runtimes de contêiner
  • pacotes Kubernetes
  • pacotes de banco de dados

Não Trate PPAs Como Inofensivos

PPAs são úteis, mas ainda são repositórios de pacotes que podem substituir bibliotecas e pacotes do sistema — o que pode ser exatamente o que você deseja, ou exatamente por que sua próxima atualização quebra. Prefira PPAs para aplicativos específicos, não para fundações de sistema amplas, a menos que você confie no mantenedor e entenda o caminho de atualização.

Árvore de Decisão de Solução de Problemas do APT

Use este modelo mental:

flowchart TD A["O sudo apt update falha?"] -->|sim| B["Corrija repositórios, chaves GPG, PPAs, rede ou arquivos de lançamento"] A -->|não| C["Uma instalação ou atualização foi interrompida?"] C -->|sim| D["Execute dpkg --configure -a, então apt --fix-broken install"] C -->|não| E["Os pacotes estão retidos (held)?"] E -->|sim| F["Inspecione apt-mark showhold e decida se deseja desfazer o hold"] E -->|não| G["Os pacotes estão retidos (kept back)?"] G -->|sim| H["Inspecione a simulação do apt full-upgrade e a política do pacote"] G -->|não| I["Uma fonte de terceiros está envolvida?"] I -->|sim| J["Inspecione apt-cache policy e arquivos de origem"] I -->|não| K["Inspecione o erro específico de dependência do pacote"]

A maioria dos problemas do APT se torna gerenciável uma vez que você para de tratá-los como um grande erro e começa a separar a saúde do repositório, o estado do pacote, a resolução de dependências e a configuração de confiança — a árvore de decisão acima é um atalho para essa disciplina.

Linha de Base Recomendada para Máquinas de Desenvolvedor

Para uma estação de trabalho de desenvolvedor Ubuntu limpa, prefiro esta linha de base:

  • Mantenha os repositórios do Ubuntu padrão.
  • Use repositórios APT de fornecedores apenas quando forem oficiais e mantidos.
  • Use /etc/apt/keyrings e signed-by para repositórios de terceiros.
  • Evite instruções antigas de apt-key.
  • Evite misturar PPAs que substituem bibliotecas de sistema principais.
  • Use contêineres, uv, pipx, asdf, mise ou ferramentas nativas da linguagem para dependências de desenvolvedor de rápida evolução.
  • Mantenha o APT responsável pelo sistema operacional, drivers, serviços e ferramentas CLI estáveis.

Para software de desktop, prefira Flatpak ou Snap em vez de PPAs quando um pacote universal sandboxed atender às suas necessidades. O APT é excelente quando gerencia o sistema base, mas torna-se doloroso quando é forçado a se comportar como um gerenciador de dependências de desenvolvedor universal para ecossistemas de linguagem de rápida evolução.

Lista de Verificação Final de Solução de Problemas do APT

Quando o APT estiver quebrado no Ubuntu, passe por esta lista de verificação:

[ ] Execute sudo apt update e leia o primeiro erro real.
[ ] Verifique o codinome do Ubuntu com /etc/os-release.
[ ] Finalize instalações interrompidas com dpkg --configure -a.
[ ] Repare dependências com apt --fix-broken install.
[ ] Verifique pacotes retidos (held) com apt-mark showhold.
[ ] Inspecione versões de pacotes com apt-cache policy.
[ ] Desabilite PPAs quebrados ou repositórios de terceiros.
[ ] Substitua repositórios no estilo apt-key por keyrings signed-by.
[ ] Simule operações de risco com apt -s.
[ ] Leia as remoções antes de aceitar full-upgrade ou autoremove.

O APT não é frágil, mas é rigoroso, e esse rigor é um recurso: impede que repositórios não assinados, conjuntos de dependências impossíveis e substituições acidentais de pacotes alterem seu sistema silenciosamente. A maneira calma de corrigir o APT é preservar esse rigor, encontrar o estado conflitante e reparar a menor coisa que está realmente errada.

Assinar

Receba novos artigos sobre sistemas, infraestrutura e engenharia de IA.