1. Contexto Técnico e Arquitetura do Protocolo EPP (Extensible Provisioning Protocol)#
A libepp-nicbr implementa o protocolo EPP para operações como:
- consulta de domínio;
- criação/alteração de objetos;
- interação com extensões específicas do registry.
No meu cenário, a biblioteca era requisito para automatizar provisionamento de domínio em processo interno de operações.
2. Preparação da Toolchain C++ e Dependências Mínimas no Linux#
Debian/Ubuntu#
sudo apt update
sudo apt install -y build-essential libssl-dev libreadline-dev libncurses5-dev libcppunit-dev pkg-config doxygen
RHEL/CentOS#
yum groupinstall -y "Development Tools"
yum install -y xerces-c-devel openssl-devel readline-devel ncurses-devel cppunit-devel pkgconfig doxygen
3. Compilação e Instalação Cirúrgica do Xerces-C 3.2.5#
Download e Verificação do Xerces-C#
cd /usr/local/src
wget http://archive.apache.org/dist/xerces/c/3/sources/xerces-c-3.2.5.tar.bz2
tar -xjvf xerces-c-3.2.5.tar.bz2
cd xerces-c-3.2.5
Se o ambiente exigir controle rígido, valide checksum do pacote antes de compilar.
Configuração do Build do Xerces-C#
./configure
Durante o configure, eu verifico especialmente:
- compilador C++ detectado;
- caminhos de include/lib coerentes;
- ausência de mensagens
not foundem libs críticas.
Compilação e Instalação no Sistema#
make -j"$(nproc)"
make install
make doc
ldconfig
make doc é opcional para runtime, mas útil para ambiente de engenharia.
4. Validação das Bibliotecas Compartilhadas do Xerces-C e ldconfig#
- validar se biblioteca foi registrada:
ldconfig -p | grep -i xerces
- validar path de cabeçalhos:
find /usr/local/include -iname '*xerces*' | head
- validar pkg-config (se aplicável):
pkg-config --cflags --libs xerces-c || true
5. Download e Configuração da lib-EPP do Registro.br (NIC.br)#
Download do Código-Fonte#
cd /usr/local/src
wget -O libepp.tar.gz https://ftp.registro.br/pub/libepp-nicbr/libepp-nicbr-1.20_1.tar.gz
tar -xvf libepp.tar.gz
cd libepp-*
Configuração de Build Vinculando ao Xerces-C#
Primeira execução padrão:
./configure
Se o ambiente estiver íntegro, prossiga para compilação. Se houver erro de header não encontrado, não force make; corrija dependências antes.
6. Compilação e Instalação da lib-EPP com Suporte a C++ Moderno#
make -j"$(nproc)"
make install
make doc
Após instalar, atualize cache de bibliotecas (quando aplicável):
ldconfig
7. Troubleshooting Real: Correção da Detecção de Readline e Símbolos XML#
No meu caso, o configure acusou:
checking for /usr/include/readline/readline/readline.h ... no
checking for /usr/include/readline/readline/history.h ... no
Mesmo com readline instalado:
find /usr/include -name readline.h
# /usr/include/readline/readline.h
A causa era diferença de caminho esperado pelo script de build.
Correção aplicada#
ln -s /usr/include/readline /usr/include/readline/readline
ln -s /usr/include/readline /usr/include/readline/history
./configure --with-readline-includes=/usr/include/readline
Nova validação esperada:
checking for /usr/include/readline/readline/readline.h ... yes
checking for /usr/include/readline/readline/history.h ... yes
Falhas Comuns de Linkagem do Xerces-C#
configure passa, make falha em linking#
Causa comum: bibliotecas duplicadas entre /usr/lib e /usr/local/lib.
Ação: revisar LD_LIBRARY_PATH, ldconfig, e limpar build anterior.
Headers em caminho inesperado#
Causa comum: distro com layout diferente do esperado pelo projeto consumidor.
Ação: padronizar include path no projeto dependente em vez de "forçar" cópias manuais de header.
Permissão insuficiente em diretórios de instalação#
Sintoma: make install falha com Permission denied.
Ação prática:
sudo make install
sudo ldconfig
Se o processo de build foi executado como usuário comum, mantenha a compilação sem privilégio e eleve somente na instalação.
8. Validação Funcional com o Shell Interativo shepp#
A validação final não é apenas "make passou". Eu testo o cliente shepp para confirmar que a cadeia de linking está íntegra:
shepp
Saída esperada:
Welcome to shepp version 1.25, an EPP shell client!
Type: 'help' for available commands.
shepp:
Se shepp não abre, revise LD_LIBRARY_PATH e ldconfig -p.
9. Hardening Operacional, Permissões e Cuidados em Produção#
Em produção, recomendo:
- compilar em staging idêntico ao host final;
- versionar
configureflags usadas na entrega; - evitar sobrescrever libs de sistema sem controle;
- manter rollback com tarball da versão anterior.
Governança de Bibliotecas Compiladas Manualmente#
- versionar o procedimento de build junto com o projeto consumidor;
- registrar versão exata (
3.2.5) para reprodutibilidade; - validar em staging antes de aplicar em host crítico;
- manter pacote-fonte e logs do build para auditoria técnica.
10. Checklist Completo de Homologação Pós-Build#
- validar binário:
which shepp
- validar bibliotecas carregadas:
ldd "$(which shepp)"
- registrar versão compilada para auditoria:
shepp --version || shepp <<<'quit'
- salvar output de
configureemakeno change log interno.
Conclusão e Próximos Passos#
Compilar libepp-nicbr é simples quando o ambiente C/C++ está coerente, mas fica instável quando paths de include divergem entre distribuição e script de build. O ponto que resolveu de forma definitiva no meu caso foi tratar a resolução de readline antes do make, validar com shepp e registrar o resultado como procedimento padrão de operação.
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