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

4

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

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

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 foram executados com sucesso são cd e pwd até agora. Eu posso encontrar arquivos em um diretório usando TAB para autocompletar ls , para que eu possa navegar pelos diretórios.

uname -r também retorna a mensagem Segmentation fault (core dumped) , por isso não sei qual versão do kernel estou usando.

    
por devil0150 27.05.2017 / 16:32

2 respostas

22

Como você pode efetuar login, nada grave está quebrado; presumivelmente, os scripts de inicialização do seu shell adicionam ~/lib a LD_LIBRARY_PATH , e isso, junto com as bibliotecas ruins em ~/lib , é o que causa os problemas que você está vendo.

Para corrigir isso, execute

unset LD_LIBRARY_PATH

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

    
por 27.05.2017 / 17:13
24

O problema é que você colocou uma cópia de glibc em seu diretório ~/lib , e essa biblioteca é incompatível com o sistema para o qual você fez o upload. A biblioteca está sendo referenciada como ~/lib está especificado em $LD_LIBRARY_PATH .

Para corrigir isso temporariamente, basta unset LD_LIBRARY_PATH - isso funcionará como unset é um shell interno. Você poderá, então, executar seu editor de texto favorito para remover o que estiver em seus arquivos de inicialização, definindo a variável em primeiro lugar.

    
por 27.05.2017 / 17:17