Symlink no PATH faz o auditor achar o render no diretório errado

[!NOTE] Resumo Executivo (DEV-2026-061): Depois do install, o comando no PATH apontava para um symlink e o script resolvia SCRIPT_DIR como a pasta do binário, não a da lib. O relatório só voltou a gerar quando o install passou a usar um wrapper com exec no .sh real.


🚨 O Desafio Técnico / Contexto

O pacote instalava o shell em /usr/local/lib/… e criava um symlink em /usr/local/bin. Na execução, BASH_SOURCE ficava no caminho do symlink. dirname + pwd apontavam para bin/, onde o Python do renderizador não existe. Em paralelo, o probe TLS com openssl e -servername igual ao IP literal travava a auditoria antes de gravar JSON/HTML.


💡 Principais Lições Aprendidas & Descobertas

  • 💡 BASH_SOURCE[0] no symlink resolve o path usado na invocação, não o alvo final. SCRIPT_DIR derivado só de dirname quebra o achado do .py irmão.
  • 💡 install.sh com wrapper (exec /usr/local/lib/…/infra-report.sh) fixa BASH_SOURCE no arquivo real; resolver a cadeia de readlink no próprio script é a segunda linha de defesa.
  • 💡 openssl s_client com -servername em IPv4 literal pode pendurar o probe. Usar SNI localhost (ou o domínio do cert) e timeout -k evita o hang.
  • 💡 Relatórios de frota com achados de porta e SSH não devem ir para o GitHub: vps/.json e vps/.html no .gitignore, com cópia só local.

🛠️ Especificação Técnica & Código-Chave

# Wrapper em /usr/local/bin/infra-report
#!/usr/bin/env bash
exec /usr/local/lib/infra-report/infra-report.sh "$@"

# TLS: SNI amigável quando o host é IP
sni=localhost
echo | timeout -k 2 5 openssl s_client -connect 127.0.0.1:443 -servername "$sni"

📈 Impacto no Ecossistema & Valor Prático

sudo infra-report volta a achar o renderizador após o install, o job termina e a frota local em vps/ atualiza sem subir JSON sensível no remoto.

  • Projetos Relacionados: infra-report, ai-projects
  • Registro de Origem: _data/daily.dev-06.yml

Publicado originalmente como parte do Diário de Desenvolvimento 2026 do ecossistema Artes do Sul & Araguaci.