Existe um método fácil para instalar compilações binárias da glibc?

13

Vez após vez, vejo perguntas como estas:

E estes são os tipos de soluções que normalmente oferecemos:

Isso é realmente o melhor que podemos fazer? Não há compilações binárias do GLIBC que podemos simplesmente descompactar em um diretório como /opt/myglibc, e definir o $LD_LIBRARY_PATHou o que quer que seja e executar o aplicativo que queremos, sem problemas?

Um aplicativo, como as versões mais recentes do Chrome (28+) que parecem exigir o GLIBC 2.14?

NOTA: Este tópico intitulado: Lançamento do Google Chrome 29 - Instalação no RHEL / CentOS 6 e Fedora 19/15 no tecmint.com é o que me fez pensar sobre isso.

Referências

slm
fonte

Respostas:

1

Se fosse para qualquer outra biblioteca, mas a glibc ... suponho que não possa haver maneiras rápidas, porque a glibc é o lugar onde as coisas são "codificadas". O glibc se adapta à sua versão do kernel e seu carregador é a instância que realmente faz a coisa certa (TM) LD_LIBRARY_PATH.

Talvez a maneira correta seja:

LD_LIBRARY_PATH="/opt/myglibc/;..." /opt/myglibc/ld-linux.so.2 the_program`

Não tenho certeza se isso funciona, no entanto.

De qualquer forma, acho que o uso de um glibc alternativo exige uma estrutura ainda a ser implementada, porque os caminhos de pesquisa às vezes são conectados e o glibc sempre precisa se ajustar ao seu OS / kernel, para que não haja binários genéricos, IMO. O multiarch do Debian mostra que não é trivial, mas ainda pode ser feito. Se alguém tiver outros meios de discernir as bibliotecas além da arquitetura de destino.

O site acabou de me fornecer outro tópico relacionado:

Lá, a resposta aceita inclui um link para um programa chamado rtldi , que parece resolver o problema da glibc. É de 2004, então pode não funcionar mais com o vinculador, mas talvez valha a pena investigar. Sua fonte é GPLv2.

Jehova, Jehova

Um amigo meu teve a ideia de que o uso real de bibliotecas compartilhadas é superestimado. E ele tem razão: as bibliotecas compartilhadas são boas para não encher a memória do computador com duplicatas, mas considerando a instância individual do aplicativo, são apenas alguns MBs.

Existem apenas algumas aplicações nas quais recorreríamos a ações como fornecer a elas sua própria glibc. Economizando uma longa análise, vamos chamá-los de "aplicativos imediatos", que são úteis por eles mesmos, no sentido de concluir o trabalho. Por exemplo, navegadores da web, agentes de usuários de email, roupas de escritório e tocadores de música permitem que o usuário obtenha o que deseja e há apenas algumas instâncias por usuário. Para retratar o outro lado, serviços de sistema, gerenciadores de janelas e até ambientes de desktop inteiros são todos muito importantes, mas meramente suportam e geralmente não são suficientemente incomuns ou críticos, para que as pessoas estejam dispostas a dar a eles seu próprio olhar.

O número de "aplicativos imediatos" é bastante pequeno, absolutamente por usuário e relativamente comparado ao que os SOs e DEs "básicos" geram atualmente. Se aplicativos imediatos, como o Chrome, o Firefox fossem compilados estaticamente, o requisito de memória adicional para o sistema médio seria de alguns 100 MB. Um argumento que não leva muito longe nos muitos sistemas atuais de GB, portanto a vinculação estática para aplicativos imediatos pode ser uma opção.

Existem também os conceitos de espaço de troca e SSDs que permitem troca / saída rediculamente rápida, o que também ajuda a lidar com os requisitos de memória aumentada.

O problema glibc discutido aqui não é realmente resolvido através da vinculação estática, mas para aplicativos como o navegador da web é possível conceber um tipo de formato de distribuição independente, onde o protocolo X, algum daemon de som e alguns métodos de kernel são a única interface. A vantagem seria menos incompatibilidades da versão da biblioteca.

Bananguin
fonte
2
"estamos falando de alguns 100 MB aqui" Uh, não. Embora a maior parte das bibliotecas em si possa não ser tão grande (mas provavelmente uma ordem de magnitude ou duas a mais que 100 MB - tente du -h /lib), lembre-se de que, se essas fossem compiladas estaticamente, essa quantidade de RAM seria necessária para cada e todos os aplicativos compilados com eles. Então, se, por exemplo. você tem dois aplicativos usando a mesma pilha de bibliotecas, agora precisará de duas vezes mais memória. Três apps? Três vezes mais. Sem mencionar que, em grande medida negar os benefícios do cache ...
Goldilocks
2
... desde que, é claro, você não poderia apenas armazenar em cache o glibc - seria necessário armazenar em cache cópias de todos os aplicativos executados (== ridículos). Em resumo, os sistemas operacionais modernos seriam totalmente impossíveis no hardware moderno, se não fossem técnicas modernas, como objetos compartilhados. Você não precisaria de apenas um pouco mais de memória - precisaria de 10 ou 100 vezes mais memória.
goldilocks
Meu Debian possui 235 MB /lib, dos quais 202 MB são módulos do kernel. Sim, /usr/libtem 4 GB, mas isso não permite conclusões precisas sobre quanto o programa individual exige. Os caches dos processadores têm apenas alguns MB. Com o consumo de memória de algo como um navegador da Web recente, o impacto de binários vinculados estaticamente no cache também não é tão grande e diminui com a quantidade de programas em execução simultaneamente; também pelo motivo de caches relativamente pequenos. Minhas estimativas parecem mais precisas que as suas. Sim.
Bananguin
Sem mencionar o outro grande problema com a vinculação estática - as atualizações são uma PITA. Se houver um problema de segurança na glibc, não é grande coisa: atualize a glibc, reinicie seus programas. OTOH, seus programas estavam vinculados estaticamente, você teria que baixar uma nova versão do cada programa. E sua distribuição precisaria recompilar (ou pelo menos reconectar, se eles mantivessem todos os arquivos .o, improvável devido ao tamanho enorme) de toda a distribuição.
derobert
1
@derobert: Parece justo. Claramente, minhas alegações eram hiperbólicas - aqui, com 1,8 GB comprometido, que cuspiam 521 MB. Então isso seria um aumento de 30%. Obviamente, isso ainda não é um ponto de venda para uma estratégia que não tem vantagens (mas "requer apenas 30% mais RAM").
Goldilocks