Existe-t-il une méthode simple pour installer des versions binaires de glibc?


13

Maintes et maintes fois je vois des questions comme celles-ci:

Et ce sont les types de solutions que nous proposons généralement:

Est-ce vraiment ce que nous pouvons faire de mieux? N'y a-t-il pas des versions binaires de GLIBC que nous pouvons simplement décompresser dans un répertoire tel que /opt/myglibc, et définir le $LD_LIBRARY_PATHou quoi que ce soit et exécuter n'importe quelle application que nous voulons, sans problèmes?

Une application, comme les nouvelles versions de Chrome (28+) qui semblent nécessiter GLIBC 2.14?

REMARQUE: Ce fil intitulé: Google Chrome 29 publié - Installer sur RHEL / CentOS 6 et Fedora 19/15 sur tecmint.com est ce qui m'a finalement fait penser à cela.

Les références

Réponses:


1

Si c'était pour n'importe quelle autre bibliothèque, mais la glibc ... Je suppose qu'il ne peut pas y avoir de moyens rapides, car la glibc est l'endroit où les choses sont "codées en dur". La glibc correspond à votre version du noyau et son chargeur est l'instance qui fait réellement la bonne chose (TM) avec LD_LIBRARY_PATH.

Peut-être que la bonne façon est de:

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

Je ne sais pas si cela fonctionne, cependant.

En tout cas, je pense que l'utilisation d'une glibc alternative nécessite un cadre encore à implémenter, car les chemins de recherche sont parfois câblés et la glibc doit toujours s'adapter à votre OS / noyau, donc il ne peut pas y avoir de binaires génériques, IMO. Le multiarch de Debian montre que ce n'est pas anodin, mais peut encore être fait. Si l'on devait avoir d'autres moyens de discerner les bibliothèques en plus de l'architecture cible.

Le site Web vient de me donner cet autre fil conducteur:

Là, la réponse acceptée comprend un lien vers un programme appelé rtldi , qui semble résoudre le problème de la glibc. C'est à partir de 2004, donc cela peut ne plus fonctionner directement de l'éditeur de liens, mais cela vaut peut-être la peine d'être examiné. Sa source est GPLv2.

Jehova, Jehova

Un de mes amis est venu une fois avec l'idée que l'utilisation réelle des bibliothèques partagées est surfaite. Et il a un point: les bibliothèques partagées sont bonnes pour ne pas remplir la mémoire de votre ordinateur avec des doublons, mais compte tenu de l'instance d'application individuelle, cela ne représente que quelques Mo.

Il n'y a que quelques applications où nous recourrions à des actions telles que leur fournir leur propre glibc. En nous épargnant une longue analyse, appelons-les des "applications immédiates", qui sont utiles par elles-mêmes, dans le sens de faire du travail. Par exemple, les navigateurs Web, les agents d'utilisateur de messagerie, les combinaisons de bureau et les lecteurs de musique permettent à l'utilisateur d'obtenir ce qu'il veut et il n'y a que quelques instances par utilisateur. Pour dresser le portrait de l'autre côté, les services système, les gestionnaires de fenêtres, même des environnements de bureau entiers sont tous très importants, mais ils ne font que prendre en charge et souvent pas assez rares ou critiques, de sorte que les gens seraient prêts à leur donner leur propre glibc.

Le nombre "d'applications immédiates" est plutôt faible, absolument par utilisateur et relativement comparé à ce que les OS et DE "basiques" engendrent de nos jours. Si des applications immédiates, comme Chrome, Firefox étaient compilées statiquement, la mémoire supplémentaire requise pour le système moyen serait de quelques 100 Mo. Un argument qui ne va pas très loin sur les nombreux systèmes GB actuels, donc la liaison statique pour les applications immédiates peut être une option.

Il existe également les concepts d'espace de swap et de SSD qui permettent un swapin / -out extrêmement rapide, ce qui aide également à gérer les besoins en mémoire augmentés.

Le problème de la glibc discuté ici n'est pas vraiment résolu par une liaison statique, mais pour des applications comme le navigateur Web, une sorte de format de distribution autonome est envisageable, où le protocole X, certains démons sonores et certaines méthodes de noyau sont la seule interface. L'avantage serait moins d'incompatibilités de version de bibliothèque.


2
"nous parlons de quelques 100 Mo ici" Euh, non. Bien que la majeure partie des bibliothèques elles-mêmes ne soit pas beaucoup (mais probablement un ordre de grandeur ou deux de plus de 100 Mo - essayez du -h /lib), gardez à l'esprit que si elles étaient compilées de manière statique, cette quantité de RAM serait nécessaire pour chaque et chaque application compilée avec eux. Donc si, par exemple. vous avez deux applications utilisant la même pile de bibliothèque, vous aurez maintenant besoin de deux fois plus de mémoire. Trois applications? Trois fois plus. Sans oublier que cela annulerait largement les avantages de la mise en cache ...
goldilocks

2
... puisque, bien sûr, vous ne pouvez pas simplement mettre en cache la glibc - vous devez mettre en cache des copies de toutes les applications exécutées (== ridicule). En bref, les systèmes d'exploitation modernes seraient tout simplement et totalement impossibles sur du matériel moderne sans les techniques modernes telles que les objets partagés. Vous n'auriez pas besoin d'un peu plus de mémoire - vous auriez besoin de 10 ou 100 fois plus de mémoire.
goldilocks

Mon Debian a 235 Mo /lib, dont 202 Mo sont des modules du noyau. Oui, /usr/libc'est 4 Go, mais cela ne permet précisément aucune conclusion sur la quantité requise par le programme individuel. Les caches des processeurs ne sont que de quelques Mo. Avec la consommation de mémoire de quelque chose comme un navigateur Web récent, l'impact des binaires liés statiquement sur la mise en cache n'est pas non plus aussi important et diminue avec la quantité de programmes exécutés simultanément; également en raison de caches relativement petites. Mes estimations semblent plus précises que les vôtres. Euh, oui.
Bananguin

Sans parler de l'autre énorme problème avec la liaison statique - les mises à jour sont un PITA. S'il y a un problème de sécurité dans la glibc, ce n'est pas grave: mettez à niveau la glibc, redémarrez vos programmes. OTOH, si vos programmes étaient liés statiquement, vous devriez télécharger une nouvelle version de chaque programme. Et votre distribution aurait dû recompiler (ou au moins se reconnecter, si elle conservait tous les fichiers .o, peu probable en raison de la taille énorme) de la distribution entière.
derobert

1
@derobert: Semble juste. De toute évidence, mes affirmations étaient hyperboliques - ici, avec 1,8 Go engagé qui a craché 521 Mo. Ce serait donc une augmentation de 30%. Bien sûr, ce n'est pas encore un argument de vente pour une stratégie qui n'a aucun avantage (mais "ne nécessite que 30% de RAM en plus").
goldilocks
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.