Centos 7, eu pensei que "yum install

4

Eu quero instalar o Trillian na minha caixa do CentOS 7. Fui a www.trillian.im/get/linux/6.1/linux.html e baixei o pacote rpm trillian-6.1.0.5-1.fc25.x86_64.rpm.

Entendi que usar:

$ yum install trillian-6.1.0.5-1.fc25.x86_64.rpm

instalaria o pacote e também verificaria e recuperaria quaisquer outros arquivos necessários para resolver dependências. Aparentemente não encontrou nenhum:

Marking trillian-6.1.0.5-1.fc25.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package trillian.x86_64 0:6.1.0.5-1.fc25 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package    Arch     Version            Repository                         Size
================================================================================
Installing:
 trillian   x86_64   6.1.0.5-1.fc25     /trillian-6.1.0.5-1.fc25.x86_64    30 M

Transaction Summary
================================================================================
Install  1 Package

.
.
.

Installed:
  trillian.x86_64 0:6.1.0.5-1.fc25                                              

Complete!

No entanto, quando tento executar o programa, recebo isso:

$ trillian
trillian: /lib64/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found (required by trillian)
trillian: /lib64/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found (required by trillian)

Eu tentei encontrar uma maneira de baixar essas bibliotecas específicas.

    
por cbullard 10.08.2018 / 00:08

3 respostas

6

Comentário sobre o YUM & deps

O YUM faz isso. Mas é tão bom quanto o RPM especifica. Nesse caso, seu RPM informa que ele funcionará com qualquer GLIBC > 2.13 mas foi claramente construído com uma versão específica do GLIBC, e só funcionará se os símbolos GCC apropriados estiverem disponíveis no sistema:

$ rpm -qpR trillian-6.1.0.5-1.fc25.x86_64.rpm
atkmm >= 2.22.0
cairo >= 1.12.0
cairomm >= 1.10.0
gdk-pixbuf2 >= 2.26.0
glib2 >= 2.30.0
glibc >= 2.13
glibmm24 >= 2.32.0
gtk3 >= 3.4.0
gtkmm30 >= 3.4.0
libX11 >= 1.5.0
libXScrnSaver >= 1.2.0
libnotify >= 0.7.5
librsvg2-tools >= 2.36.0
libsigc++20 >= 2.2.10
libzip >= 0.10.0
openssl-libs >= 1:1.0.1
pango >= 1.30.0
pangomm >= 2.28.0
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
zlib >= 1.2.0

Você pode usar rpm -qpR <rpm> para determinar quais dependências são necessárias.

Mais sobre o seu problema

O ponto central do seu problema é que você está tentando usar um pacote que foi criado usando uma versão diferente do compilador do GCC e quais bibliotecas de tempo de execução estão realmente disponíveis em seu sistema operacional.

No seu caso você está no CentOS 7.xe você realmente não pode misturar RPMs através do Fedora & CentOS assim, ou pelo menos você não deveria.

Se você observar qual pacote possui essa biblioteca compartilhada:

$ rpm -qf /lib64/libstdc++.so.6
libstdc++-4.8.5-28.el7_5.1.x86_64

Você também pode investigar a própria biblioteca compartilhada para ver quais símbolos do GCC ela suporta:

$ nm -D /lib64/libstdc++.so.6 | grep -i GLIBC | head -5
0000000000000000 A GLIBCXX_3.4
0000000000000000 A GLIBCXX_3.4.1
0000000000000000 A GLIBCXX_3.4.10
0000000000000000 A GLIBCXX_3.4.11
0000000000000000 A GLIBCXX_3.4.12

E, finalmente, olhe para ver se inclui os que os binários deste RPM estão procurando:

$ nm -D /lib64/libstdc++.so.6 | grep -iE '3\.4\.20|3\.4\.21'
$

Sem surpresas, essa biblioteca .so não inclui os símbolos para nenhuma dessas versões do GCC, daí o erro.

O que fazer?

As formas típicas de lidar com isso são:

  1. Obtenha um binário criado contra as definições de símbolo do seu GCC
  2. Obtenha apenas a biblioteca libstdc++.so.6 de alguma outra ferramenta (muitos aplicativos optam por incluir bibliotecas para implantação / instalação / instalação mais fáceis) e aponte para ela por meio de LD_LIBRARY_PATH . Você normalmente faz assim:

    $ LD_LIBRARY_PATH=/path/to/lib trillian
    
  3. Execute o aplicativo em uma VM

  4. Execute o aplicativo em um contêiner do Docker
  5. Obtenha uma versão do RPM que tenha binários criados usando símbolos consistentes com a configuração do GCC do sistema operacional.

Dadas as semelhanças entre o Fedora & CentOS Eu tive um bom sucesso com muitos dos itens acima. Você poderia tentar # 5 e tentar um dos mais antigos RPMs do Fedora em seu site para ver se ele foi construído com a versão do CentOS dos símbolos do GCC.

Referências

por 10.08.2018 / 00:50
3

yum resolve dependências relativas a outros pacotes. Em outras palavras, ele instala pacotes dos quais o pacote está tentando instalar.

O erro que você está recebendo se deve ao fato de que o arquivo de biblioteca, /lib64/libstdc++.so.6, não inclui GLIBCXX_3.4.20 ou GLIBCXX_3.4.21 . Normalmente, /usr/lib64/libstdc++.so.6 é um link simbólico para /usr/lib64/libstdc++.so.6.0.# onde # é a versão mais alta do GLIBCXX dentro.

Se você executar este comando, verá as versões do GLIBCXX que estão incluídas:

strings /usr/lib64/libstdc++.so.6 | grep -i ^glibcxx_

Como você não tem, você precisará instalar um pacote que contenha essas bibliotecas.

O pacote mais fácil de instalar que fornece é:

Anaconda3

Você pode baixá-lo do site do Anaconda e há um passo a passo para instalá-lo. Depois que ele estiver instalado, você poderá colocar a biblioteca do Anaconda no seu LD_LIBRARY_PATH. Por exemplo, se você instalou em / opt / anaconda3, você adicionará essa linha ao seu ~/.bash_profile ou ~/.bashrc :

export LD_LIBRARY_PATH=/opt/anaconda3/lib:$LD_LIBRARY_PATH

Você pode então iniciar uma nova sessão de shell e executar o trillian novamente.

Você também pode compilar o GCC6, GCC7 ou GCC8, que fornecerá as bibliotecas corretas que você pode adicionar ao seu caminho, mas também terá que compilar o GMP, MPC e MPFR, o que, no seu caso, é mais problemático do que vale a pena.

    
por 10.08.2018 / 01:01
0

Obrigado a ambos - suas respostas foram muito úteis.

Eu não tive sucesso em localizar apenas a biblioteca libstdc ++ para instalar, então fui com a instalação do Anaconda3. Isso me fez passar por essa questão específica, apenas para me apresentar outra:

$ trillian trillian: erro de pesquisa de símbolo: trilião: símbolo indefinido: _ZN4Glib25filename_display_basenameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

Então, agora vou procurar uma solução para esse problema. Todas as sugestões são bem-vindas, e agradeço a vocês novamente por me ajudarem a chegar até aqui!

    
por 10.08.2018 / 18:03