Lista de dependências de um executável

1. Lista de dependências de um executável

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 04/11/2011 - 11:59h

Olá pessoal!

Desenvolvi um daemon em C/C++ que roda em sistemas Linux. Até ai tudo bem, o daemon está 100%.
Porém eu preciso instalar esse daemon em várias distribuições Linux, desde mais antigas até as mais novas. Para isso, estou compilando meu código em uma distro antiga (CentOS 4.8) por motivos de retrocompatibilidade.

O fato é que em alguns sistemas (Redhat principalmente) o daemon não sobe, acusando um erro na versão da GLIBC.

Logo, minha saída foi gerar um pacote que resolva as dependências para mim. O escolhido para um primeiro teste foi o .deb.

Pois bem, criei o pacote sem problemas, porém na configuração do pacote preciso definir as versões das bibliotecas da qual o meu daemon depende.

Para descobrir as dependencias, rodei um "ldd -v", para listar a arvore completa de dependencias:

linux-gate.so.1 => (0x00502000)
libssl.so.0.9.8 => /lib/i686/cmov/libssl.so.0.9.8 (0x00ae8000)
libcrypto.so.0.9.8 => /lib/i686/cmov/libcrypto.so.0.9.8 (0x001ca000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00e6d000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0031c000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x0085e000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x004db000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x005af000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00967000)
libz.so.1 => /lib/libz.so.1 (0x00d2b000)
/lib/ld-linux.so.2 (0x00ba4000)

Version information:
opt/MonitoraIT/LauncherAgent/bin/MonitoraITLauncherAgent:
libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1
libssl.so.0.9.8 (OPENSSL_0.9.8) => /lib/i686/cmov/libssl.so.0.9.8
libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.1.2) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
libcrypto.so.0.9.8 (OPENSSL_0.9.8) => /lib/i686/cmov/libcrypto.so.0.9.8
libstdc++.so.6 (CXXABI_1.3.1) => /usr/lib/libstdc++.so.6
libstdc++.so.6 (CXXABI_1.3) => /usr/lib/libstdc++.so.6
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib/libstdc++.so.6
libpthread.so.0 (GLIBC_2.1) => /lib/tls/i686/cmov/libpthread.so.0
libpthread.so.0 (GLIBC_2.0) => /lib/tls/i686/cmov/libpthread.so.0
libpthread.so.0 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libpthread.so.0
/lib/i686/cmov/libssl.so.0.9.8:
libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
libcrypto.so.0.9.8 (OPENSSL_0.9.8) => /lib/i686/cmov/libcrypto.so.0.9.8
/lib/i686/cmov/libcrypto.so.0.9.8:
libdl.so.2 (GLIBC_2.1) => /lib/tls/i686/cmov/libdl.so.2
libdl.so.2 (GLIBC_2.0) => /lib/tls/i686/cmov/libdl.so.2
libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.7) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
/lib/tls/i686/cmov/libpthread.so.0:
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.2) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_PRIVATE) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
/usr/lib/libstdc++.so.6:
libm.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libm.so.6
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
libgcc_s.so.1 (GCC_4.2.0) => /lib/libgcc_s.so.1
libgcc_s.so.1 (GLIBC_2.0) => /lib/libgcc_s.so.1
libgcc_s.so.1 (GCC_3.3) => /lib/libgcc_s.so.1
libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1
libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.2) => /lib/tls/i686/cmov/libc.so.6
/lib/tls/i686/cmov/libm.so.6:
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
/lib/libgcc_s.so.1:
libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.2.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
/lib/tls/i686/cmov/libc.so.6:
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
/lib/tls/i686/cmov/libdl.so.2:
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_PRIVATE) => /lib/tls/i686/cmov/libc.so.6
/lib/libz.so.1:
libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/tls/i686/cmov/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6


Minha dúvida agora é a seguinte: partindo dessa lista, como descrevo a tag "depends" na geracao do pacote deb?

Meu arquivo de configuracao do pacote, por enquanto, está assim:

Package: MeuDaemon
Version: 1.00
Section: non-free
Priority: optional
Architecture: all
Essential: no
Depends: GCC (>= 4.2.0), openssl (>= 0.9.8), GLIBC (>= 2.7), CXXABI (>= 3.4)
Maintainer: Fulano de Tal <foo@bar.com.br>
Description: Blablabla



Mas quando tento instalar o pacote deb gerado usando o comando

dpkg -i [meu_pacote.deb]


Ele acusa que TODAS as dependencias não foram satisfeitas. Ou seja, o sistema diz que o GCC não existe, que o openssl não existe, etc...

Alguém sabe como resolver isso?

Desde já, obrigado pela atenção de todos, e desculpem pelo post extenso. Tentei colocar o máximo de informações possíveis.


  


2. *.deb != *.rpm

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 04/11/2011 - 12:46h

Oi Mauricio,

Não tenho experiência com empacotamento, mas até onde sei, distros red hat trabalham apenas com pacotes *.rpm. Existe um conversor chamado alien, você o está usando?

http://www.vivaolinux.com.br/artigo/Utilizando-o-alien-para-a-conversao-de-pacotes

Abraço!


3. Re: Lista de dependências de um executável

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 04/11/2011 - 12:52h

Olá!

Sim, eu sei que Redhat trabalha com RPM e não deb, porém, como eu havia dito, esse é só um primeiro teste.

Meu objetivo é, por exemplo, tentar instalar meu pacote em um sistema que não tenha a libssl instalada, para ver se a falha de dependencia será tratada.

Se o deb resolver meu problema, criarei um pacote RPM em paralelo.


4. Testando dependências individualmente

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 04/11/2011 - 13:07h

Talvez o nome das dependências? Ou um problema de sintaxe?

Como não está funcionando, o melhor a fazer é testar uma dependência de cada vez. Devem haver membros no VOL com mais experiência no assunto, recordo um artigo sobre empacotamento no Debian.

Boa sorte!


5. Re: Lista de dependências de um executável

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 04/11/2011 - 13:09h

Os artigos postados no VoL são muito superficiais (assim como em toda a internet).

Eles não abordam a questão de dependências, apenas o empacotamento, que por si só é inútil.

Mas obrigado de qualquer forma!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts