Compilando a lib-EPP do Registro.br e Xerces-C no Linux: Toolchain C++, Dependências e Troubleshooting
Voltar para blog

Compilando a lib-EPP do Registro.br e Xerces-C no Linux: Toolchain C++, Dependências e Troubleshooting

07/06/2026 · 3 min · Infraestrutura

1. Contexto Técnico e Arquitetura do Protocolo EPP (Extensible Provisioning Protocol)#

A libepp-nicbr implementa o protocolo EPP para operações como:

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:

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#

  1. validar se biblioteca foi registrada:
ldconfig -p | grep -i xerces
  1. validar path de cabeçalhos:
find /usr/local/include -iname '*xerces*' | head
  1. 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:

Governança de Bibliotecas Compiladas Manualmente#

10. Checklist Completo de Homologação Pós-Build#

  1. validar binário:
which shepp
  1. validar bibliotecas carregadas:
ldd "$(which shepp)"
  1. registrar versão compilada para auditoria:
shepp --version || shepp <<<'quit'
  1. salvar output de configure e make no 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:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários