Quase nenhum comando funcionando - erro de realocação: símbolo __getrlimit, versão GLIBC_PRIVATE não definida em libc.so.6

Quase nenhum comando funcionando - erro de realocação: símbolo __getrlimit, versão GLIBC_PRIVATE não definida em libc.so.6

Estou conectado com SSH a uma máquina na qual não tenho acesso root. Para instalar algo, carreguei bibliotecas da minha máquina e coloquei-as no ~/libdiretório do host remoto.

Agora, para quase todos os comandos que executo, recebo o erro abaixo (o exemplo é para ls) ou uma Segmentation fault (core dumped)mensagem.

ls: relocation error: /lib/libpthread.so.0: symbol __getrlimit, version 
GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

Os únicos comandos que consegui executar com sucesso são cde pwdaté agora. Posso encontrar arquivos em um diretório usando TAB para autocomplete ls, para poder percorrer os diretórios.

uname -rtambém retorna a Segmentation fault (core dumped)mensagem, então não tenho certeza de qual versão do kernel estou usando.

Responder1

Como você pode fazer login, nada importante será quebrado; presumivelmente, os scripts de inicialização do seu shell são adicionados ~/libao LD_LIBRARY_PATH, e isso, junto com as bibliotecas ruins no ~/lib, é o que causa os problemas que você está vendo.

Para corrigir isso, execute

unset LD_LIBRARY_PATH

Isso permitirá que você execute rm, vimetc. para remover as bibliotecas problemáticas e editar seus scripts de inicialização, se apropriado.

Responder2

O problema é que você colocou uma cópia glibcem seu ~/libdiretório e essa biblioteca é incompatível com o sistema para o qual você a carregou. A biblioteca está sendo referenciada conforme ~/libespecificado em $LD_LIBRARY_PATH.

Para corrigir isso temporariamente, simplesmente unset LD_LIBRARY_PATH- isso funcionará como unsetum shell integrado. Você poderá então executar seu editor de texto favorito para remover tudo o que está em seus arquivos de inicialização que está configurando a variável em primeiro lugar.

Responder3

O que encontrei no Linux Yocto Sumo v4.14, mas deve ser idêntico a todos os kernels do Linux:

  • Você pode alternar entre 2 versões das principais bibliotecas, em /lib a padrão e /usr/lib a postagem do usuário instalada ou pós-anexada.
  • Para isso basta definir a variável LD_LIBRARY_PATH em cada comando. Ou, alternativamente, chame a exportação desde o início, ou seja
export LD_LIBRARY_PATH=/lib
# now everything should work again since there should 
be a valid backup version of glibc in /lib

# try use a command again 
ls ./

#if this works you can overwrite the broken version of glibc in /usr/lib
cp -faL /lib/libc.so* /usr/lib/
cp -faL /lib/libc-*so* /usr/lib/

#should be optional but for the sake of completeness, as the libc package 
# installs all of the following: 
# direct dependencies and are versioned using 
# the same version number as glibc
cp -faL /lib/ld*.so* /usr/lib/
cp -faL /lib/libdl*.so* /usr/lib/
cp -faL /lib/libm*.so* /usr/lib/
cp -faL /lib/libnsl*.so* /usr/lib/
cp -faL /lib/libnss*.so* /usr/lib/
cp -faL /lib/librt*.so* /usr/lib/
cp -faL /lib/libutil*.so* /usr/lib/
cp -faL /lib/libpthread*.so* /usr/lib/
cp -faL /lib/libcrypt*.so* /usr/lib/
cp -faL /lib/libresolv*.so* /usr/lib/







Isso deve funcionar!

informação relacionada