Informações do usuário para o glibc UNIX

A biblioteca C é um dos componentes mais importantes de todos os sistemas UNIX, pois é responsável pela interação suave entre o aplicativo e processos kernel.

As dicas e informações básicas abaixo ajudarão você a determinar:

  • se o verificador AntiVir instalado corresponde ao ambiente de computador e
  • onde as atualizações serão disponibilizadas caso ocorram inconsistências

Visão geral

Praticamente todos os componentes de um sistema UNIX (o sistema operacional propriamente dito, os programas do sistema e a grande maioria dos aplicativos) são gravados diretamente em C ou baseiam-se em componentes que foram gravados em C.


As rotinas básicas, nas quais os aplicativos se baseiam durante a operação, normalmente encontram-se no chamado libc. Isso inclui a operação com arquivos, armazenamento de memória, rede, gerenciamento de processos e acesso a todos os serviços executados pelo sistema operacional.


Por razões lógicas, essas rotinas não são criadas e fornecidas repetidas vezes em cada programa. Elas são instaladas em uma posição central no sistema e estão sempre disponíveis para os programas. Como o UNIX tem oferecido suporte ao conceito de bibliotecas compartilhadas (comparáveis aos DLLs em outras plataformas), é comum dividir os aplicativos correspondentes em binários vinculados de modo dinâmico. O sistema base subjacente primeiro fornece a biblioteca C vinculada quando o programa é iniciado.


A implementação mais frequente em Linux desse libc é glibc. Esse código está em desenvolvimento e revisão constantes, assim como todos os projetos de código aberto populares e amplamente usados. Os bugs estão sendo corrigidos, o número de funções está aumentando e os aprimoramentos estão sendo implementados. Um ajuste permanente é feito nesse processo dinâmico com os padrões gerais que também sempre estão sendo alterados e desenvolvidos.


É praticamente inevitável a ocorrência de algumas inconsistências aqui e ali. Essa situação pode ser aparentemente homogênea e convergente, mas novos desvios podem resultar em requisitos de aplicativo diferentes. A consequência de uma semântica alterada pode ser, por exemplo, a sujeição repentina de uma interface, usada para interpretar os dados de determinada maneira a outros procedimentos. Outro efeito possível: as interfaces assumem outra forma por meio da modificação de seus parâmetros e do método operacional causada, por exemplo, pelo aprimoramento da funcionalidade.


A biblioteca (seu estado atual de desenvolvimento e, portanto, seu comportamento) tem várias versões devido a esses motivos. No entanto, nem todas as versões são “totalmente” compatíveis entre si. A compatibilidade com versões anteriores e posteriores normalmente é a intenção. Mas isso só será possível (se for) por meio de versões intimamente relacionadas. Em outras palavras, a compatibilidade não permite fazer literalmente nenhuma grande alteração.


O que resta fazer então? Uma conversão do sistema inteiro seria útil, se as origens do sistema operacional e dos aplicativos existissem, para se atingir um estado consistente. Se os aplicativos forem obtidos como binários, a versão correta deverá ser escolhida durante o download. Não se esqueça de que, com atualizações de componentes básicos, podem existir dependências nos componentes pertencentes a versões superiores e sujeitos a uma atualização. Se, por exemplo, um componente essencial do sistema como o libc for substituído ou atualizado para outra versão, talvez seja absolutamente necessário atualizar não só o sistema operacional, mas também todo o aplicativo de software.


Como determinar a versão da biblioteca que deve ter suporte do AntiVir

Embora pareça estranho, um aplicativo em execução não pode determinar a versão do libc instalado nem especificar se é possível executá-lo nesse ambiente, devido a razões de compatibilidade e interoperabilidade. No design da biblioteca, não houve nem mesmo a intenção de determinar a versão (caso exista alguma implementação individual que ofereça esse recurso, isso não significa que o procedimento não funcionará em todos os outros sistemas e plataformas). Ao mesmo tempo, não sabemos realmente qual é a origem do problema: como um aplicativo pode ser iniciado e testar sua própria capacidade operacional se não consegue ser executado porque as versões necessária e disponível são incompatíveis?


Infelizmente, não podemos aliviar o fardo de nossos usuários com relação ao trabalho descrito abaixo e facilitar as coisas como gostaríamos. A situação mencionada acima requer que o administrador esteja sempre atento à compatibilidade do software instalado - nenhuma outra pessoa pode realizar essa tarefa. Mas, finalmente, podemos fornecer uma orientação para o reconhecimento e a solução do problema.


Solução do problema

Os problemas a seguir estão relacionados ao Linux e à biblioteca GNU-C. Obviamente, os aspectos mencionados acima também se aplicam a outras plataformas, mas a tarefa de escolher uma das versões oferecidas até agora só tem sido realizada no Linux junto com o libc GNU.


A biblioteca glibc reside no disco rígido em um formato que permite seu uso como um “programa normal”. Isso não só é útil durante o estágio de desenvolvimento, mas também permite a extração de informações fundamentais.


Ao executar,
/lib/libc.so.6 | head -1
, é possível ver o número da versão (na realidade, a saída exibe muito mais informações, mas somente a primeira linha é considerada porque contém o número da versão). Se esse comando gerar um erro como “Permissão negada” ou se o arquivo não for reconhecido como um “programa” devido a outros motivos, tente iniciá-lo com o seguinte comando:
/lib/ld-linux.so.2 /lib/libc.so.6 | head -1
Se o número da versão começar com 2.0 ou 2.1, os arquivos marcados com glibc20 em nosso software precisarão ser usados. Se o número da versão começar com 2.2 ou 2.3, os arquivos marcados com glibc22 deverão ser usados. A biblioteca libc também está disponível na versão 1 (interna) e, consequentemente, tem o nome de arquivo libc.so.5. Embora essa implementação não seja atual e não contenha muitos recursos, normalmente é inserida em sistemas incorporados devido ao escopo explicitamente reduzido (está faltando a internacionalização) e também onde a economia é necessária ou uma atualização não está em jogo.


Existem outras implementações da biblioteca libc que visam outros objetivos, como “tamanho reduzido” ou “portabilidade máxima”, além da versão da libc GNU. Mas, como a aplicação desse software é o resultado de decisões deliberadas (e não acontece “por acaso” nem por meio de uma instalação de distribuição padrão), acreditamos que os administradores afetados estão bastante familiarizados com seus sistemas. Eles levam em consideração os pontos discutidos e devem saber exatamente qual a melhor glibc para sua implementação. Em outras palavras, eles já devem saber qual arquivo de software Avira terão de usar.


O administrador deve saber onde esse arquivo pode ser encontrado, caso o arquivo com a implementação libc não seja incluído, excepcionalmente, no diretório lib. O carregador sabe onde os objetos compartilhados são encontrados em um sistema em execução. Na dúvida, é possível executar o comando:
ldd /bin/ls (ou outro programa vinculado de modo dinâmico)
e pesquisar linhas com libc (ou ld-linux, caso a biblioteca não seja iniciada como um programa, conforme descrito acima).

Resumo

Os programas externos incluem “só” a lógica de nível superior do aplicativo, enquanto recorrem a componentes do sistema como o libc para funções de nível inferior. Se esses dois componentes não forem correspondentes, o software não funcionará corretamente (e os possíveis resultados podem variar de “aparentemente, funciona” para “funciona de vez em quando, mas não sempre”, “não funciona normalmente, não faz nada” e “formata meu disco rígido, me deixa de cabelo em pé e, consequentemente, meu gato assustado”).


Um aplicativo não é capaz de realizar, sozinho, o teste de compatibilidade de forma satisfatória. Por isso, é indispensável a colaboração do usuário, que é responsável pela consistência e operabilidade do sistema. Como as versões para Linux do nosso software são oferecidas de diferentes formas para ambientes diferentes, é necessário tomar uma decisão com base na biblioteca C respectiva instalada.


O caminho de arquivo completo para a biblioteca C instalada no disco rígido e a versão da implementação instalada podem ser determinados com os seguintes comandos:


$ ldd /bin/ls /bin/bash /usr/bin/vi/bin/ls:

librt.so.1 => /lib/librt.so.1 (0x4001e000)
libc.so.6 => /lib/libc.so.6 (0x40030000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40160000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

/bin/bash:

libdl.so.2 => /lib/libdl.so.2 (0x4001e000)
libc.so.6 => /lib/libc.so.6 (0x40022000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

/usr/bin/vi:

libncurses.so.5 => /lib/libncurses.so.5 (0x4001e000)
libgpm.so.1 => /usr/lib/libgpm.so.1 (0x40066000)
libdl.so.2 => /lib/libdl.so.2 (0x4006c000)
libperl.so.1 => /usr/lib/libperl.so.1 (0x4006f000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4016f000)
libutil.so.1 => /lib/libutil.so.1 (0x4019c000)
libpthread.so.0 => /lib/libpthread.so.0 (0x4019f000)
libm.so.6 => /lib/libm.so.6 (0x401f0000)
libc.so.6 => /lib/libc.so.6 (0x40213000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

$ /lib/libc.so.6 | head -1

GNU C Library stable release version 2.3.1, by Roland McGrath et al.

Os arquivos adequados do software Avira devem ser instalados dependendo da biblioteca C instalada. Nossos programas AntiVir para Linux foram criados para funcionar junto com a GNU-libc nas versões 2.2 ou 2.3. Há versões correspondentes disponíveis para sistemas com recursos limitados ou em que a libc5 é usada por outros motivos. Os administradores que não usam a implementação GNU em seus sistemas devem escolher um arquivo com a melhor correspondência possível.

Produtos afetados

  • Avira AntiVir MailGate [Linux]
  • Avira AntiVir MailGate [Solaris]
  • Avira MailGate Suite [Linux]
  • Avira WebGate Suite [Linux]
  • Avira WebGate Suite [Solaris]
  • Avira AntiVir Professional [Linux]
  • Avira AntiVir Professional [Solaris]
  • Avira AntiVir Server [Linux]
  • Avira AntiVir Server [Solaris]
  • Data de criação : quarta-feira, 14 de março de 2007
  • Última atualização: segunda-feira, 21 de março de 2011
  • Classifique este artigo
Isto lhe ajudou?