Gibt es eine einfache Methode, um binäre Builds von glibc zu installieren?

13

Immer wieder sehe ich Fragen wie diese:

Und dies sind die Arten von Lösungen, die wir normalerweise vorantreiben:

Ist das wirklich das Beste, was wir tun können? Gibt es keine binären Builds von GLIBC, die wir einfach in ein Verzeichnis entpacken können, wie z. B. /opt/myglibc, und das $LD_LIBRARY_PATHoder was auch immer festlegen und die gewünschte Anwendung ohne Probleme ausführen können?

Eine Anwendung wie die neueren Versionen von Chrome (28+), für die anscheinend GLIBC 2.14 erforderlich ist?

HINWEIS: Dieser Thread mit dem Titel: Google Chrome 29 veröffentlicht - Auf RHEL / CentOS 6 und Fedora 19/15 auf tecmint.com installieren hat mich letztendlich dazu gebracht, darüber nachzudenken.

Verweise

slm
quelle

Antworten:

1

Wenn es eine andere Bibliothek gäbe, aber glibc ... Ich denke, es kann keine schnellen Wege geben, weil die glibc der Ort ist, an dem das Zeug "hart codiert" ist. Der glibc passt zu Ihrer Kernel-Version und sein Loader ist die Instanz, mit der tatsächlich das Richtige (TM) getan wird LD_LIBRARY_PATH.

Vielleicht ist der richtige Weg:

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

Ich bin mir jedoch nicht sicher, ob dies funktioniert.

Ich denke jedenfalls, dass die Verwendung einer alternativen glibc ein noch nicht implementiertes Framework erfordert, da Suchpfade manchmal verkabelt sind und die glibc immer zu Ihrem Betriebssystem / Kernel passen muss, sodass es keine generischen Binärdateien geben kann, IMO. Debians Multiarch zeigt, dass es nicht trivial ist, aber dennoch getan werden kann. Wenn man neben der Zielarchitektur noch andere Möglichkeiten hätte, Bibliotheken zu erkennen.

Die Website gab mir nur diesen anderen verwandten Thread:

Dort enthält die akzeptierte Antwort einen Link zu einem Programm namens rtldi , mit dem sich das Problem mit glibc zu lösen scheint. Es ist aus dem Jahr 2004, daher funktioniert es möglicherweise nicht mehr direkt mit dem Linker, aber es lohnt sich vielleicht, es zu untersuchen. Seine Quelle ist GPLv2.

Jehova, Jehova

Ein Freund von mir kam einmal auf die Idee, dass die tatsächliche Nutzung von Shared Libraries überbewertet wird. Und er hat einen Punkt: Shared Libraries sind gut, um den Arbeitsspeicher Ihres Computers nicht mit Duplikaten zu füllen, aber in Anbetracht der einzelnen Anwendungsinstanz sind dies nur einige MB.

Es gibt nur wenige Anwendungen, in denen wir auf Aktionen zurückgreifen würden, z. B. die Bereitstellung eines eigenen Glibc. Um uns eine lange Analyse zu ersparen, bezeichnen wir sie als "Sofortanwendungen", die für sich genommen von Nutzen sind, um die Arbeit zu erledigen. Beispielsweise ermöglichen Webbrowser, E-Mail-Benutzeragenten, Büroanzüge und Musikplayer dem Benutzer, das zu bekommen, was er will, und es gibt nur wenige Instanzen pro Benutzer. Um die andere Seite zu porträtieren, sind Systemdienste, Fenstermanager und sogar ganze Desktopumgebungen alle sehr wichtig, aber nur unterstützend und oft nicht ausreichend ungewöhnlich oder kritisch, so dass die Leute bereit wären, ihnen ihre ganz eigene Übersicht zu geben.

Die Anzahl der "Sofortanwendungen" ist eher gering, absolut pro Benutzer und im Vergleich zu den heutigen "grundlegenden" Betriebssystemen und DEs relativ gering. Wenn Sofortanwendungen wie Chrome oder Firefox statisch kompiliert würden, würde der zusätzliche Speicherbedarf für ein durchschnittliches System einige 100 MB betragen. Ein Argument, das auf den heutigen vielen GB-Systemen nicht sehr weit verbreitet ist, sodass eine statische Verknüpfung für sofortige Anwendungen eine Option sein kann.

Es gibt auch die Konzepte von Swap Space und SSDs, die ein extrem schnelles Auslagern ermöglichen, wodurch auch der gestiegene Speicherbedarf bewältigt werden kann.

Das hier diskutierte Problem mit glibc ist durch statisches Verknüpfen nicht wirklich gelöst, aber für Anwendungen wie Webbrowser ist eine Art eigenständiges Distributionsformat denkbar, bei dem das X-Protokoll, ein Sound-Daemon und einige Kernel-Methoden die einzige Schnittstelle sind. Der Vorteil wäre weniger Inkompatibilitäten der Bibliotheksversion.

Bananguin
quelle
2
"Wir sprechen hier von ein paar 100 MB" Äh, nein. Obwohl der Großteil der Bibliotheken selbst möglicherweise nicht so groß ist (aber wahrscheinlich eine Größenordnung oder zwei mehr als 100 MB - Versuch du -h /lib), bedenken Sie, dass, wenn diese statisch kompiliert würden, diese RAM-Menge für jede erforderlich wäre und jede mit ihnen kompilierte Anwendung. Wenn also z. Sie haben zwei Apps, die denselben Bibliotheksstapel verwenden. Jetzt benötigen Sie doppelt so viel Speicher. Drei Apps? Dreimal so viel.
Ganz
2
... da Sie natürlich nicht nur glibc zwischenspeichern konnten - Sie müssten Kopien aller Anwendungen zwischenspeichern, die ausgeführt werden (== lächerlich). Kurz gesagt, moderne Betriebssysteme wären auf moderner Hardware schlicht und einfach unmöglich, wenn es keine modernen Techniken wie gemeinsame Objekte gäbe. Sie würden nicht nur ein bisschen mehr Speicher benötigen - Sie würden 10- oder 100-mal so viel Speicher benötigen.
Goldlöckchen
Mein Debian hat 235 MB /lib, von denen 202 MB Kernel-Module sind. Ja, /usr/libist 4GB, aber das erlaubt absolut keine Aussage darüber, wie viel das einzelne Programm benötigt. Die Caches der Prozessoren betragen nur wenige MB. Angesichts des Speicherverbrauchs eines neueren Webbrowsers ist die Auswirkung statisch verknüpfter Binärdateien auf das Caching ebenfalls nicht so groß und nimmt mit der Anzahl der gleichzeitig ausgeführten Programme ab. auch wegen relativ kleiner caches. Meine Schätzungen scheinen genauer zu sein als Ihre. Äh ja
Bananguin
Ganz zu schweigen von dem anderen großen Problem mit statischen Verknüpfungen - Updates sind eine PITA. Wenn es eine Sicherheitslücke in glibc gibt, ist das keine große Sache: aktualisiere glibc, starte deine Programme neu. OTOH, wären Ihre Programme statisch verknüpft, müssten Sie von jedem Programm eine neue Version herunterladen . Und Ihre Distribution hätte die gesamte Distribution neu kompilieren (oder zumindest neu verknüpfen müssen, wenn sie alle .o-Dateien behalten hätte, was aufgrund der enormen Größe unwahrscheinlich ist).
Derobert
1
@derobert: Scheint fair. Offensichtlich waren meine Behauptungen hyperbolisch - hier mit 1,8 GB, die 521 MB ausspuckten. Das wäre also eine Steigerung um 30%. Das ist natürlich immer noch kein Verkaufsargument für eine Strategie, die keine Vorteile hat (sondern "nur 30% mehr RAM benötigt").
Goldlöckchen