Dissecando o subsistema do APT: duplicidade no deb822, falhas de idempotência e multiarch
Voltar para blog

Dissecando o subsistema do APT: duplicidade no deb822, falhas de idempotência e multiarch

08/09/2026 · 3 min · Linux

Ao executar um simples apt update em uma máquina Debian ou Ubuntu, é comum ver uma série de avisos no terminal: alertas de alvos configurados múltiplas vezes (Target configured multiple times) somados a notas informando o salto de aquisição de arquiteturas (Skipping acquisition...).

Embora avisos do tipo W: (Warning) e N: (Notice) não interrompam a atualização como um erro fatal (E:), eles indicam redundância de processamento, listas de fontes corrompidas e quebra de idempotência em scripts de instalação.

Abaixo, compartilho o funcionamento do parser do APT, como inspecionar o formato moderno deb822 e o procedimento exato para limpar a base de repositórios.

1. O sintoma no terminal#

Durante a sincronização de índices do APT:

W: O alvo Packages (main/binary-amd64/Packages) está configurado várias vezes em /etc/apt/sources.list.d/editor-apparmor.sources:1 e /etc/apt/sources.list.d/editor.sources:1
W: O alvo Packages (main/binary-arm64/Packages) está configurado várias vezes em /etc/apt/sources.list.d/editor-apparmor.sources:1 e /etc/apt/sources.list.d/editor.sources:1
W: O alvo Translations (main/i18n/Translation-pt_BR) está configurado várias vezes em /etc/apt/sources.list.d/editor-apparmor.sources:1 e /etc/apt/sources.list.d/editor.sources:1
N: Pulando a aquisição do arquivo configurado 'main/binary-i386/Packages', pois o repositório 'https://region-apt.pkg.example.com/projects/updater-dev repo-debian InRelease' não tem suporte à arquitetura 'i386'

Identifiquei dois problemas distintos:

  1. Colisão de alvos (Target collision): Múltiplos arquivos declarando exatamente os mesmos metadados (Packages, Translations).
  2. Conflito de multiarch: O APT tentando baixar índices i386 em repositórios remotos que oferecem apenas pacotes de 64 bits (amd64 e arm64).

2. A mecânica do parser do APT e o formato deb822#

O utilitário apt varre sequencialmente o arquivo mestre /etc/apt/sources.list e todos os arquivos .list ou .sources dentro de /etc/apt/sources.list.d/.

Internamente, o parser da biblioteca do APT constrói uma tupla estruturada para cada entrada:

Alvo = (URI, Distribuição/Suite, Componente, Arquitetura)

Quando dois arquivos distintos registram a mesma tupla exata, o parser não realiza um merge silencioso. Ele emite um aviso para evitar processamento duplicado de arquivos de índice (Packages.gz).

Inspecionando a estrutura deb822#

Ao verificar os arquivos apontados no erro:

cat /etc/apt/sources.list.d/editor-apparmor.sources
cat /etc/apt/sources.list.d/editor.sources

Ambos continham a mesma estrutura no formato deb822:

Types: deb
URIs: https://downloads.example.com/aptrepo
Suites: stable
Components: main
Architectures: amd64,arm64
Signed-By: /usr/share/keyrings/example-keyring.gpg

A causa: uma atualização automática do software gerou um novo arquivo (editor-apparmor.sources) sem remover o arquivo anterior (editor.sources).

3. Rastreando repositórios legados e multiarch (i386)#

Para entender a nota sobre a arquitetura i386, verifiquei as arquiteturas estrangeiras registradas no DPKG:

dpkg --print-foreign-architectures
# Saída: i386

Com o multiarch habilitado no sistema operacional (frequente por conta de pacotes como Wine ou Steam), o APT tenta buscar índices i386 em todos os repositórios cadastrados.

Buscando de onde vinha o repositório antigo mencionado na nota:

grep -rE "updater-dev|pkg.example.com" /etc/apt/sources.list*

Resultado:

/etc/apt/sources.list.d/updater-legacy.list:deb [signed-by=/etc/apt/keyrings/legacy-key.gpg] https://region-apt.pkg.example.com/projects/updater-dev/ repo-debian main

O arquivo legado usava a sintaxe antiga de linha única sem especificar [arch=amd64,arm64]. Ao tentar baixar binary-i386/Packages, o servidor remoto retornava 404.

4. Passo a passo para limpeza e reconstrução#

Passo 1: Eliminar o arquivo duplicado#

Remova o arquivo redundante:

sudo rm /etc/apt/sources.list.d/editor-apparmor.sources

Passo 2: Remover o repositório legado obsoleto#

Como o software migrou para a URL consolidada presente em editor.sources:

sudo rm /etc/apt/sources.list.d/updater-legacy.list

(Caso precisasse manter o repositório legado, bastaria adicionar a flag de arquitetura: deb [arch=amd64,arm64 signed-by=...] https://...).

Passo 3: Reconstrução limpa do cache do APT#

Para eliminar índices órfãos persistidos em disco:

# Limpar índices antigos baixados
sudo rm -rf /var/lib/apt/lists/*

# Limpar cache de pacotes locais
sudo apt clean

# Reconstruir o mapa de alvos
sudo apt update

Boas práticas para manter o APT limpo#

  1. Especifique arquiteturas explicitamente: Em repositórios de terceiros, utilize sempre Architectures: amd64,arm64 no formato deb822 ou [arch=amd64] no formato legadão para evitar tentativas inúteis de download em máquinas multiarch.
  2. Garanta idempotência em automações: Ao criar playbooks do Ansible ou scripts de provisionamento, certifique-se de que a adição de um repositório substitua o anterior sem deixar arquivos duplicados em /etc/apt/sources.list.d/.
  3. Limpeza atômica com /var/lib/apt/lists/: Quando o APT insistir em referenciar arquivos inexistentes, limpar a pasta de listas força um download integral e consistente.

Conclusão#

Avisos W: e notas N: no APT não chegam a impedir a execução do apt update, mas revelam duplicidades de fontes e desperdício de I/O em repositórios que não suportam sua configuração multiarch. Adotar o formato deb822 com escopos declarativos e auditar periodicamente o diretório /etc/apt/sources.list.d/ garante consistência e previsibilidade na gestão de pacotes do Debian e Ubuntu.

Este artigo foi útil?

Deixe uma reação rápida para apoiar o conteúdo:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários