Introdução: quando a compilação Rust se torna uma aventura
\n\nVocê decidiu compilar o Parity (ou qualquer outro projeto Rust complexo) a partir do código fonte. O comando cargo build foi executado, o terminal fica em silêncio e, após um minuto, você vê a mensagem familiar para muitos:
Blocking waiting for file lock on the registry index\n\nA compilação trava completamente. Ctrl+C não adianta, reiniciar o terminal também não. Familiar? Este problema é um dos mais populares no Stack Overflow (milhares de visualizações), e hoje vamos dissecá-lo por completo.
\n\nNeste artigo, eu, como seu guia no mundo do Rust, explicarei:
\n- Por que esse erro ocorre?
\n- Como corrigi-lo em 30 segundos?
\n- Como evitar que ele aconteça?
\n- E vamos dar uma olhada nos bastidores do Cargo.
Vamos lá! 🚀
\n\nDe onde vem o "Blocking waiting for file lock on the registry index"?
\n\nPrimeiro, vamos traduzir esse erro da linguagem do Cargo para o português:
\n\n«Eu, Cargo, quero baixar ou atualizar a lista de pacotes do registro (registry), mas não consigo — o arquivo de bloqueio já está ocupado por outro processo. Aguardando...»
\n\nNo ecossistema Rust, o cargo usa bloqueios de arquivo (arquivos .lock) para evitar que dois processos tentem escrever no cache do registro (~/.cargo/registry) ao mesmo tempo. Isso protege contra corrupção de dados, mas às vezes o bloqueio "gruda".
Principais causas da trava
\n- \n
- Encerramento abrupto de uma compilação anterior — você fechou o terminal, o computador desligou ou o
cargo buildfalhou com erro, mas o arquivo de bloqueio permaneceu. \n - Duas instâncias do Cargo no mesmo projeto — você iniciou a compilação em duas janelas de terminal simultaneamente. \n
- Compilação do Parity a partir do código fonte — este projeto puxa uma quantidade enorme de dependências (centenas de crates), e o Cargo pode travar na fase de indexação, especialmente em máquinas fracas ou com internet lenta. \n
- Problemas de permissão de acesso — raro, mas acontece quando o diretório
~/.cargopertence a outro usuário. \n - Sistema de arquivos sem suporte a bloqueios — por exemplo, alguns compartilhamentos de rede ou WSL sem configuração adequada. \n
5 maneiras de resolver (da rápida à confiável)
\n\n🔧 Método 1: Matar o processo Cargo (o mais rápido)
\nSe você tem certeza de que nenhuma outra compilação está em execução, basta finalizar o processo que está segurando o bloqueio.
\n\nLinux/macOS:
\npkill cargo\n# ou de forma mais agressiva:\nkillall -9 cargo\n\nWindows (PowerShell):
\nGet-Process cargo | Stop-Process -Force\n\nDepois disso, execute cargo build novamente. Em 80% dos casos, isso é suficiente.
🔧 Método 2: Remover o arquivo de bloqueio manualmente
\nSe o primeiro método não funcionar, vá até o diretório do registro e remova o arquivo de bloqueio.
\n\nCaminho:
\n# Linux/macOS\nrm -f ~/.cargo/registry/.cache-lock\nrm -f ~/.cargo/registry/.package-cache\n\n# Windows (cmd)\ndel %USERPROFILE%\\.cargo\\registry\\.cache-lock\ndel %USERPROFILE%\\.cargo\\registry\\.package-cache\n\nApós isso, o Cargo criará um novo arquivo de bloqueio na próxima execução. Importante: certifique-se de que nenhum outro processo Cargo está em execução, caso contrário, você corre o risco de danificar o cache.
\n\n🔧 Método 3: Cargo clean — a opção nuclear
\nSe nada mais funcionar, limpe tudo o que foi acumulado. Isso removerá a pasta target e redefinirá o cache de dependências para o projeto atual. A próxima compilação será mais demorada, mas será limpa.
cargo clean\n\nDepois disso, tente compilar o projeto novamente:
\ncargo build\n\nEste método é especialmente útil se você estava compilando o Parity ou outro projeto com uma árvore de dependências enorme.