Atualização da biblioteca GLIBC no CentOS 7 Linux

fonte da imagem: Threat Post

Nota: CentOS geralmente é critico para uso de versões estável da biblioteca GLIBC. Alguns programas precisam ser instalados dependendo da nova versão. A atualização da GLIBC precisa ser cautelosa, porque muitas pessoas falham na atualização e o sistema passa a não ser estável (utilizável) para uso.

Eu pessoalmente testei e atualizei várias máquinas, todas as quais foram atualizadas com sucesso. Seguindo este procedimento descrito a seguir. 

Lembrando: O motivo que tenho que fazer atualização da GLIBC é devido o TIMING do Asterisk® SCF™ explicado neste post.

RES_TIMING_TIMERFD:

  • está disponível apenas em Sistemas Operacionais, com o Linux (Kernel) usando uma versão de pelo menos 2.6.25 e uma versão do GLIBC de pelo menos 2.8;

Verificando este site, verificamos que para a versão atual do Asterisk® SCF™ (16 LTS) devemos usar a versão GLIBC 2.31 (2020-02-01) ou 2.32 (2020-02-05). Então este post tem como finalidade orientar você a atualizar essa biblioteca que é importante para o TIMING do Asterisk® SCF™.

Introdução ao GLIBC:

GLIBC é a biblioteca LIBC lançada pela GNU, que é a biblioteca de tempo de execução C. GLIBC é a API de nível mais baixo no Linux (kernel) e quase qualquer outro tempo de execução depende da GLIBC. Além de encapsular os serviços do sistema fornecidos pelo sistema operacional GNU/Linux (e seus forks), a própria GLIBC fornece muitas outras implementações dos serviços funcionais necessários. Como a GLIBC cobre quase todos os padrões comuns ao UNIX, você pode imaginar que ela é abrangente. Assim como outros sistemas UNIX, o grupo de arquivos contido nele está espalhado na estrutura em árvore do sistema, como um colchete para suportar todo o sistema operacional.

Para visualizar a versão da biblioteca GLIBC do sistema, use o seguinte comando:

$ strings /lib64/libc.so.6 |grep GLIBC_

Ao encontrar o problema da biblioteca GLIBC, você pode primeiro considerar por que deseja atualizar a biblioteca GLIBC e pode passar por outras maneiras relativamente insignificantes:

  • Compilar seu próprio produto em uma versão inferior do sistema, se o seu produto não exigir a nova versão para oferecer suporte a novos recursos;
  • Compile com um sistema de alto nível, como Ubuntu, e uma nova versão do CentOS 8 Linuux, mas pode ser necessário implantar para uma versão inferior, então você pode considerar o uso de uma simulação e outra tecnologia para fazer um pacote de instalação melhor e inserir a dependência no pacote.
  • Usando tecnologia de contêiner, como Docker, leve o isolamento de um ambiente de tempo de execução virtual para ajustar seu programa a uma versão inferior do sistema operacional.   

Confirmado que as opções passada não pode resolver seu problema de incompatibilidade de uso da biblioteca, então considere atualizar a biblioteca GLIBC, eu atualizei a biblioteca por causa do erro relatado no BUG #17255 do Asterisk® SCF™:

ImportError:  /lib64/libm.so.6: version `GLIBC_2.23' not found

Etapa de Atualização:

1, primeiro baixe a versão correspondente do pacote de instalação que deseje:

# wget https://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz

2, extrair, criar um novo diretório de diretório de compilação;

# tar xf glibc-2.23.tar.gz
# cd glibc-2.23/
# mkdir glibc-build
# cd glibc-build (deve estar no diretório recém-criado)

3, instalação;

# ../configure --prefix=/usr
# make
# make install

Pode haver um erro ao fazer a instalação (semelhante à versão errada do link simbólico)

gawk '/\.gnu\.glibc-stub\./ { \
          sub(/\.gnu\.glibc-stub\./, "", $2); \
          stubs[$2] = 1; } \
        END { for (s in stubs) print "#define __stub_" s }' > /root/glibc-2.23/glibc-build/math/stubsT
gawk: error while loading shared libraries: /lib64/libm.so.6: invalid ELF header
make[2]: *** [/root/glibc-2.23/glibc-build/math/stubs] Error 127
make[2]: Leaving directory `/root/glibc-2.23/math'
make[1]: *** [math/subdir_install] Error 2
make[1]: Leaving directory `/root/glibc-2.23'
make: *** [install] Error 2

Solução (executada em outra janela/terminal): 

# cd /lib64
# unlink libm.so.6
# ln -s libm-2.23.so libm.so.6

Em seguida, execute novamente; make install;
Veja a seguinte mensagem se a instalação foi bem sucedida;

LD_SO=ld-linux-x86-64.so.2 CC="gcc" /usr/bin/perl scripts/test-installation.pl /root/glibc-2.23/glibc-build/
Your new glibc installation seems to be ok.
make[1]: Leaving directory `/root/glibc-2.23'

4, verificação.

# ldd --version
ldd (GNU libc) 2.23
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

Parabéns atualização bem-sucedida!

Thats All FOLKS! (Isso é tudo, pessoal!)   

Fonte: Installing a newer version of glibc RHEL 7.6

 

Nenhum comentário

Tecnologia do Blogger.