Estou tentando atualizar o glibc em um sistema no qual não tenho acesso root. Portanto, estou instalando em um prefixo local. Eu gostaria de receber ajuda para entender as práticas recomendadas para configurar isso, além de ajudar a resolver um problema específico. (O resumo rápido do meu problema: quando incluo o caminho glibc lib recém-instalado no meu LD_LIBRARY_PATH
, cada programa que eu tentei executar, incluindo ls, vim, pwd, etc. segfault.)
Informações básicas:
$ uname -a
Linux 3.13.0-68-generic #111-Ubuntu SMP Fri Nov 6 18:17:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Compilador / toolchain: Estou executando um compilado localmente e instalado a partir da versão fonte do gcc 5.3.0. Parece funcionar bem. Isso é instalado em ~/toolchains/gcc_5.3.0
$ ls ~/toolchains/gcc_5.3.0
bin include lib lib32 lib64 libexec share
Tentativa de instalar: glibc-2.23
da origem com --prefix=~/local/
Eu não tenho sudo nesta máquina (é um cluster compartilhado; a política é instalar sua própria toolchain se você precisar de personalização, como eu).
$ echo $LD_LIBRARY_PATH
~/toolchains/gcc_5.3.0/lib:~/toolchains/gcc_5.3.0/lib64
A versão do glibc instalada pelo sistema é 2.19:
$ ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.7) 2.19
(Acima e abaixo, estou substituindo ~ por caminhos absolutos acima para maior clareza)
Problema:
Eu sou capaz de compilar e instalar o glibc-2.23 com o gcc 5.3.0, assim como o gcc 4.8.4 instalado pelo sistema. Compilação e instalação para ~ / local / funciona bem quando LD_LIBRARY_PATH
é definido como acima. No entanto, para alavancar as novas bibliotecas glibc (instaladas em ~ / local / lib), adicionei ~ / local / lib ao final do meu atual LD_LIBRARY_PATH
:
$ echo $LD_LIBRARY_PATH
~/toolchains/gcc_5.3.0/lib:~/toolchains/gcc_5.3.0/lib64:~/local/lib
Assim que faço isso, tudo eu tento executar segfaults. Eu não posso nem ls ou correr vim. Acabei de ver a impressão de bash "Falha de segmentação". Eu tenho que mudar meu LD_LIBRARY_PATH
, e então tudo funciona bem novamente.
Eu não consigo executar gdb ou strace nem nada para tentar descobrir o que está acontecendo (esses segmentos também).
Perguntas:
-
Alguma idéia sobre o que está acontecendo aqui?
-
Tenho a sensação de que minha abordagem para instalação e / ou configuração de LD_LIBRARY_PATH
não está correta. Qual é a prática recomendada para o gcc instalado localmente e o glibc instalado localmente? Preciso combinar versões mais cuidadosamente? Acabei de pegar as últimas fontes estáveis de cada uma.
-
Para meu próprio conhecimento para o futuro, dado que o gdb não funciona, existem outras maneiras de depurar esse tipo de coisa para que eu possa localizar com precisão onde o segfault está ocorrendo?
Obrigado por qualquer pensamento que você tenha.
Editar:
Eu geralmente estou tentando obter um conjunto atualizado de ferramentas no meu sistema, e
obter cabeçalhos e bibliotecas dev necessários, etc. Por exemplo, para usar
características avançadas de perf_events, eu preciso de um monte de outras coisas, tais
como libaudit. Isso, claro, precisa de ldap, berkeley db, etc., etc.
Em última análise, eu estou precisando de alguns cabeçalhos que parecem ser apenas
fornecido por versões mais modernas da glibc. Por exemplo,
aqui está um erro que recebo quando estou tentando compilar berkeley db;
esse tipo parece estar definido em dirent.h, que é um cabeçalho na glibc,
embora o sistema não esteja encontrando nos pacotes instalados
meu sistema:
-fPIC -DPIC -o .libs/os_dir.o
../src/os/os_dir.c: In function '__os_dirlist':
../src/os/os_dir.c:45:2: error: unknown type name 'DIR'
DIR *dirp;
^
Eu estaria interessado em saber se há abordagens alternativas aqui para obter acesso aos cabeçalhos e bibliotecas de desenvolvimento que meu sistema não está encontrando sozinho. O erro acima com DIR
talvez seja um bom exemplo.