Ao rodar consoles de administração (como Cockpit, PackageKit/pkcon) ou ferramentas de gerenciamento de pacotes (como dnf e yum) no terminal de um servidor Linux, você pode se deparar com a mensagem: Cannot refresh cache whilst offline.
Embora pareça apenas um aviso genérico de falta de internet, a falha geralmente decorre de um descompasso entre a expiração de metadados locais e a tentativa do binário de abrir conexões de rede com os mirrors remotos.
Abaixo, compartilho o comportamento por baixo do capô, as chamadas de sistema envolvidas, o roteiro de diagnóstico e as formas de resolver ou contornar o erro.
1. O que acontece por baixo do capô?#
O erro se manifesta quando o gerenciador de pacotes precisa atualizar metadados expirados, mas não consegue completar o handshake TCP com os repositórios.
A sequência de chamadas de sistema (syscalls) ilustra o fluxo:
socket(AF_INET, SOCK_STREAM, 0): O binário cria o socket TCP para consultar os mirrors.connect(): O kernel tenta estabelecer a conexão. Se a rota padrão estiver indisponível ou o DNS falhar, o kernel retorna erros comoEHOSTUNREACH("No route to host") ouETIMEDOUT.openat()efstat(): Paralelamente, o DNF lê os arquivos de metadados em/var/cache/dnf/. Se a diretivametadata_expiretiver expirado, ele é forçado a tentar a atualização remota. Recebendo o erro de transporte, o utilitário aborta a execução com o aviso de offline.
2. Roteiro de diagnóstico via terminal#
Para isolar se o problema é de rede, DNS ou integridade de cache:
A. Validação de rota de saída e resolução de nomes#
# Checar gateway padrão
ip route show
# Validar resolução DNS
cat /etc/resolv.conf
getent hosts google.com
B. Rastreamento de chamadas com strace#
Para identificar onde o processo recebe a recusa:
strace -e trace=network,open,stat dnf makecache
Retornos rápidos de ECONNREFUSED ou EHOSTUNREACH logo após o connect() indicam problemas diretos de firewall ou tabela de rotas.
C. Inspeção de sockets ativos#
lsof -i -P -n | grep dnf
3. Formas de resolver e contornar o problema#
Dependendo da sua necessidade no momento, existem três abordagens práticas:
Método 1: Forçar a operação em modo offline (cache-only)#
Se o servidor estiver temporariamente sem acesso externo e você precisar apenas consultar ou instalar pacotes já baixados localmente:
# No DNF:
dnf -C list installed
# No YUM:
yum -C check-update
A flag -C (ou --cacheonly no DNF/YUM) instrui o gerenciador a ler estritamente a base local em /var/lib/dnf/ ou /var/cache/, ignorando qualquer tentativa de conexão com mirrors remotos.
Método 2: Limpeza e reconstrução de metadados#
Se a rede já estiver normalizada mas o banco SQLite do cache estiver inconsistente:
rm -rf /var/cache/dnf/*
dnf clean all
dnf makecache
Método 3: Ajuste de timeout e tempo de expiração do cache#
Para evitar que oscilações temporárias de rede causem falhas constantes, configure limites mais tolerantes no /etc/dnf/dnf.conf:
[main]
timeout=30
retries=3
metadata_expire=86400 # Mantém os metadados válidos por 24 horas
4. Casos de borda frequentes#
- Proxy inativo em variáveis de ambiente: Se houver um proxy offline configurado em
http_proxyouhttps_proxy, o DNF falhará ao tentar conectar. Cheque comenv | grep -i proxy. - Atributo imutável (
chattr +i): Se diretórios de cache estiverem protegidos contra escrita por políticas de hardening, a atualização falha. Verifique comlsattr -d /var/cache/dnf. - Esgotamento de Inodes: Se a partição
/varestiver com 100% de inodes ocupados, novos arquivos temporários de metadados não poderão ser criados. Valide comdf -i.
5. Depuração com nível máximo de detalhes#
Para descobrir a URL exata do mirror que está falhando:
dnf -d 10 makecache
O nível de debug 10 imprime todos os cabeçalhos HTTP, rotas de mirrors e a pilha completa de exceções geradas pelo motor Python.
Lições práticas sobre o cache de pacotes#
- Use -C (--cacheonly) para consultas rápidas: Quando a rede externa oscilar, a flag de cache local permite continuar operando sem bloqueios.
- Entenda o ciclo de metadata_expire: Aumentar o tempo de expiração do cache reduz chamadas de rede desnecessárias em pipelines e scripts de rotina.
- Valide a cadeia de rede antes de limpar caches: Muitas vezes o erro é apenas uma falha transitória de resolução DNS no
/etc/resolv.conf.
Este artigo foi útil?
Deixe uma reação rápida para apoiar o conteúdo:
Este post está licenciado sob CC BY-NC.



Comentários
Participe da discussão abaixo.
0 comentários