• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

alte Glibc laden o. verlinken

Ich habe meinen Server derzeit auf ein neues Suse 10.2 geupdatet - was sehr gut läuft. Leider habe ich das Problem das eins der Programme nicht mit der neuen GLIBC Version klar kommt und mir reproduzierbar Fehler ausgibt.

Ich möchte aber nicht wieder auf ein altes Suse oder eine alte Glibc umsteigen. Gibt es eine Möglichkeit die alten Libary paralell zu betreiben und eventuell nur zu verlinken für dieses eine Programm ?
 
A

Anonymous

Gast
Ausgerechnet die glibc :evil:

Wenn es möglich ist (also Quellcode vorhanden und aus irgend einem Grund nicht mit der neuen glibc kompilierbar), dann das alte Programm statisch gegen die alten glibc verlinken, ansonsten die alte glibc und eventuelle alle anderen älten Librarys die auch gegen die alte glibc gelinkt sind, die das Programm laut ldd sonst noch benötigt, mal in ein eigenes Verzeichnis zB ~/lib/ legen und man ld.so lesen, speziell dort wo es um die Variable LD_LIBRARY_PATH geht.

Sollte es ein größeres Programmpaket sein, dann hilft eventuell folgender Trick
Um sein System nicht zu beschädigen besteht zusätzlich die Möglichkeit, eine auf einer anderen glibc basierende chroot-Umgebung aufzubauen, mit anderen Worten der Aufbau einer unabhängigen Linux-Umgebung innerhalb seines Systems - eine Sandbox. Dies erfordert allerdings genügend Diskspace und etwas Sachverstand beim Aufbau (Linux Documentation Projekt bzw. man chroot)

Wenn du überhaupt keinen Plan haben solltest, wie das ganze Library-System funktioniert, dann erst mal in das Thema einlesen zB. hier beginnen.
http://www.linux-club.de/faq/Library

robi
 
OP
T

tenshinhan10

Newbie
Erstmal vielen Dank für Deine Rückmeldung. An eine virtuelle Umgebung z.B: per XEN hatte ich auch schon gedacht - aber mangels Erfahrung vorerst nicht versucht.

Den anderen Tip hatte ich bereits ausprobiert und ein Verzeichniss erstellt in das ich alte GLIBC Versionen aus Suse 9.0 rein kopiert habe. Anschließend habe ich das vor Ausführung des Programms per:

LD_LIBRARY_PATH=" ... mein Pfad zu den Libarys" verlinkt.

Ich erhalte jedoch dann Fehler beim ausführen des Programms - das ein Versionskonflikt vorliegt. Gibt es irgendwo eventuell schon einen fertigen Satz alter Libarys, die ich direkt verlinken kann?
 
A

Anonymous

Gast
tenshinhan10 schrieb:
und ein Verzeichniss erstellt in das ich alte GLIBC Versionen aus Suse 9.0 rein kopiert habe. Anschließend habe ich das vor Ausführung des Programms per:
LD_LIBRARY_PATH

schau mal nach ob dein Programm noch mehr LIBs benötigt.
Code:
ldd /kompletter/path/zu/deinem/PROGRAMM

alle hier aufgelisteten LIBs müssen gegen die selbe glibc, also die alte gelinkt sein, und sich desshalb in der alten Version mit in diesem LD_LIBRARY_PATH befinden. Natürlich müssen auch alle Libs wiederum überprüft werden ob diese nicht auch noch auf andere Libs zurückgreifen (selber ldd Befehl) und solche Libs müssten auch noch in der alten Version dort hin. Mit der glibc habe ich solche Späßle auch noch nie selbst ausprobiert.


Eine chroot-Umgebung mußt nicht unbedingt bis auf XEN-Größe aufgeblasen werden. Hier müssen eben nur alle Dateien und Knoten rein, die dein Programm oder seine Bestandteile jemals anfassen könnten.
Das kann im Einzelfall nur ein paar wenige MB sein, kann aber auch schnell kompliziert werden, wenn dein Programm noch auf Resourcen oder Geräte zurückgreift, weil du dann zB bestimmte Bereiche zB. /sys /proc usw. noch mit mounten musst. Bei X-Anwendungen wirds dann schon ziemlich umfangreich, da müssen dann auch noch jede Menge Resourcen bereitgestellt werden. Dazu kommt dann immer noch eine ganze Menge Konfigurationsarbeit, da du ja meist dein Programm einfach zB mit

chroot /PATH PROGRAMMSTARTSCRIPT -OPTIONEN

aus deinem normalem Linux heraus aufrufen willst.
Ist also wirklich nicht so einfach, braucht man einiges an Erfahrungen und meist obendrein noch viel Zeit :wink:

Was ist denn das für ein geheimes Programm ? findest du da keinen Quellcode dazu ?

robi
 
OP
T

tenshinhan10

Newbie
Es handelt sich dabei eigentlich um nichts besonders. Das ist Bf1942 mit FH Mod. Speziell dieser Mod ruft bei neuen GLIBC diesen Fehler hervor. Quellcodes gibts dazu leider nicht.

Ich bin jetzt wie beschrieben vorgegangen und habe mal getestet welche Libs er lädt:

libdl.so.2 => /lib/libdl.so.2 (0xf7efb000)
libncurses.so.5 => /lib/libncurses.so.5 (0xf7eb4000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0xf7df8000)
libm.so.6 => /lib/libm.so.6 (0xf7dd2000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf7dc5000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf7dad000)
libc.so.6 => /lib/libc.so.6 (0xf7c7f000)
/lib/ld-linux.so.2 (0xf7f10000)

Die Libs verlinken auch nur untereinander - weitere Libs sind nicht nötig. Eventuell ist dies aber auch das Problem - welches dabei folgende Fehlermeldung produziert:

/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
 
Oben