Eu escrevi um playbook ansible que deve instalar uma ferramenta chamada kafkacat.
A maioria das tarefas do playbook funciona, exceto uma (a mais importante).
Estou compilando a ferramenta a partir do código-fonte e a instalei manualmente usando as etapas que estou construindo no ansible.
A parte relevante do manual é:
- name: Install kafkacat (configure)
command: chdir={{ kafkacat_installdir }} {{ kafkacat_installdir }}/configure --enable-json --enable-static
sudo: yes
- name: Install kafkacat (make)
command: chdir={{ kafkacat_installdir }} make
environment:
CPPFLAGS: ' -Itmp-bootstrap/usr/local/include'
STATIC_LIB_yajl: ' tmp-bootstrap/usr/local/lib/libyajl_s.a'
STATIC_LIB_rdkafka: ' tmp-bootstrap/usr/local/lib/librdkafka.a'
LIBS: ' -lpthread -lrt '
sudo: yes
- name: Install kafkacat (make install)
command: chdir={{ kafkacat_installdir }} make install
sudo: yes
É necessário que o processo "make" funcione, para saber as exportações que especifiquei na tarefa, mas por algum motivo parece que os valores não são exportados corretamente e isso faz com que o playbook falhe:
failed: [kafka-1] => {"changed": true, "cmd": ["make"], "delta": "0:00:00.422669", "end": "2016-04-25 15:10:16.085697", "rc": 2, "start": "2016-04-25 15:10:15.663028", "warnings": []}
stderr: /usr/bin/ld: cannot find -lyajl
/usr/bin/ld: cannot find -lyajl
collect2: error: ld returned 1 exit status
make: *** [kafkacat] Error 1
stdout: gcc -MD -MP -Itmp-bootstrap/usr/local/include -g -O2 -Wall -Wfloat-equal -Wpointer-arith -g -O2 -Wall -Wfloat-equal -Wpointer-arith -c kafkacat.c -o kafkacat.o
gcc -MD -MP -Itmp-bootstrap/usr/local/include -g -O2 -Wall -Wfloat-equal -Wpointer-arith -g -O2 -Wall -Wfloat-equal -Wpointer-arith -c format.c -o format.o
gcc -MD -MP -Itmp-bootstrap/usr/local/include -g -O2 -Wall -Wfloat-equal -Wpointer-arith -g -O2 -Wall -Wfloat-equal -Wpointer-arith -c json.c -o json.o
A razão pela qual -lyajl não foi encontrado é porque a exportação não está funcionando.
Eu também tentei fazer algo assim:
- name: Install kafkacat (configure)
command: chdir={{ kafkacat_installdir }} CPFLAGS='CPPFLAGS= -Itmp-bootstrap/usr/local/include' STATIC_LIB_yajl='tmp-bootstrap/usr/local/lib/libyajl_s.a' STATIC_LIB_rdkafka='tmp-bootstrap/usr/local/lib/librdkafka.a' LIBS=' -lpthread -lrt' {{ kafkacat_installdir }}/configure --enable-json --enable-static
Sua ajuda é muito apreciada e obrigado antecipadamente,
Parece que seus valores STATIC_LIB_... são prefixados por um espaço que fará com que a verificação da lib estática falhe.
Seus env vars não foram disponibilizados durante a
configure
fase, portanto, não foram usados durante omake
. Dê uma olhada na fonte configure.base para kafkacat.De
configure
:De
configure.base
:Em outra situação, você poderia ter verificado que o ansible estava configurando o env corretamente fazendo uma depuração rápida