PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (g)libc-2.2 verwenden für 1 programm (psyBNC)?



sECuRE-
25.08.05, 21:03
Hi,

ich habe hier in diesem Forum mehrere Threads gefunden, die besagen, dass psyBNC nach einiger Zeit "abstürzt", das heißt, der Prozess läuft noch, aber psyBNC ist nicht mehr verbunden und man kann sich auch nicht mehr verbinden. Dieses Problem ist den Entwicklern wohlbekannt, es fühlt sich allerdings keiner verpflichtet, sich diesem Problem anzunehmen (sagten sie selbst!). Es scheint an der neuen libc-2.3.2 zu liegen, das ist die Sache, die alle Systeme, auf denen der Fehler auftritt, gemeinsam haben. Bei mir war das genauso, erst lief auf meinem Server eine alte Debian-version, da lief alles problemlos über ein Jahr. Danach habe ich ein upgrade gemacht und nun klappt es kaum länger als ein paar Wochen.

Durch ein "ldd psybnc" habe ich erfahren, dass die Datei libc.so.6 in /lib/tls liegt. Hat das irgendetwas mit SSL zu tun? Müsste es dann helfen, psyBNC ohne SSL-support zu kompilieren?

Und nun die eigentliche Frage: ist es möglich, für psybnc die ältere Version dieser Datei zu verwenden und wenn ja, woher krieg' ich die? (Ich weiß leider nicht mal den Debian-packagename.)

Vielen Dank schonmal,
sECuRE

PS: Mein System:
Linux debian 2.6.8-2-386 #1 Thu May 19 17:40:50 JST 2005 i686 GNU/Linux
mit psyBNC 2.3.2-7

traffic
25.08.05, 21:22
Wo Du die alte Bibliothek herbekommst? Na dort, wo die alte eben herkam. Aus den alten Debian-Repositories, falls es die noch gibt.

Spielereien an der systemeigenen glibc wirst Du schön bleiben lassen, weil solche sicher zur Zerstörung des gesamten Systems führen werden. Wenn überhaupt, wirst Du die Umgebungsvariable LD_LIBRARY_PATH nutzen, um für dieses eine Programm eine ältere glibc zu benutzen.

Du solltest allerdings wissen, dass Du von diesem einen Programm dann auch ein altes Binary brauchst. Wenn es gegen eine glibc > 2.3 gebaut wurde, wird es mit einer glibc < 2.2 nicht laufen.

sECuRE-
25.08.05, 23:29
Hi,

danke für die Antwort. Mit Spielereien an der Libc hab ich schon schmerzhafte Erfahrungen gemacht *g*. Deswegen frage ich ja hier.

Was ich also tun muss ist folgendes:
1) alte glibc (2.2) auftreiben
2) LD_LIBRARY_PATH setzen
3) psyBNC mithilfe der alten Library kompilieren und ausführen

Nun meine fragen dazu:
1) Wie lautet der Debianpackagename, in dem die glibc enthalten ist? Ich dachte da an libstdc++-glibc-2.2 oder so ähnlich. Nach dem ich diese via apt-get installierte, konnte ich aber keine glibc/libc finden?

2) Gilt eine Umgebungsvariable nicht für alle Programme? Das heißt, was passiert mit Programmen, die gestartet werden, nachdem diese Variable gesetzt wurde, die aber nicht für diese Library kompiliert wurden? Oder soll ich sie nur zum Zeitpunkt des psyBNC-starts setzen?

3) Braucht es dazu etwas spezielles? Oder langt hier auch die Variable LD_LIBRARY_PATH?

Vielen Dank schonmal,
sECuRE

traffic
25.08.05, 23:56
Der Reihe nach:

Zu 1.: Sorry, weiß ich nicht.

Zu 2.: Nein, nicht wenn man es richtig macht. Du setzt die Umgebungsvariable nicht global, sondern erstellst einen Shell-Wrapper.

Angenommen, die ausführbare Datei wäre /usr/bin/beispiel, dann wäre folgendes zu tun:

a) Die ausführbare Datei umbenennen:

mv /usr/bin/beispiel /usr/bin/beispiel.bin
b) Den Shell-Wrapper unter dem Namen /usr/bin/beispiel mit folgendem Inhalt erstellen:

#!/bin/sh

if [ LD_LIBRARY_PATH ] ; then
LD_LIBRARY_PATH=/pfad/zur/alten/glibc:$LD_LIBRARY_PATH
else
LD_LIBRARY_PATH=/pfad/zur/alten/glibc
fi

exec /usr/bin/beispiel.bin "$@"
Zu 3.: Sorry, ich weiß gar nicht, ob das überhaupt geht. Es wäre auf jeden Falls kompliziert, weil man ja auch die alten Header braucht, wer weiß, ob die mit einem neuen gcc überhaupt noch funktionieren. Einfacher wäre es, aus derselben Quelle, aus der die alte glibc kommt, ein altes Binary zu nehmen.

sECuRE-
26.08.05, 00:01
Hi,


Der Reihe nach:

Zu 1.: Sorry, weiß ich nicht.
Könnte ich diese Datei einfach aus meiner anderen Debianinstallation kopieren?


Zu 2.: Nein, nicht wenn man es richtig macht. Du setzt die Umgebungsvariable nicht global, sondern erstellst einen Shell-Wrapper. [...]

OK, den Teil habe ich verstanden. Danke.


Zu 3.: Sorry, ich weiß gar nicht, ob das überhaupt geht. Es wäre auf jeden Falls kompliziert, weil man ja auch die alten Header braucht, wer weiß, ob die mit einem neuen gcc überhaupt noch funktionieren. Einfacher wäre es, aus derselben Quelle, aus der die alte glibc kommt, ein altes Binary zu nehmen.
Wenn also 1) funktioniert, könnte ich die psyBNC-version dort kompilieren und kopieren?

Danke schonmal,
sECuRE

traffic
26.08.05, 00:18
Probier es einfach aus. Ja, es kann gut sein, dass es geht, aber ich weiß es nicht. Achte aber am Ende darauf, dass Du die selbstkopierten Dateien schön getrennt vom System verwaltest, also /usr/local/bin statt /usr/bin, der Rest lässt sich durch Probieren herausfinden.

sECuRE-
26.08.05, 11:46
Hi,

also, mit dynamischem Compilen/Linken hat es nicht geklappt, oder ich hab mich zu doof angestellt ;).

Ich hab dann im Web einen Trick gefunden, wie man auch neuere psyBNC-versionen statisch kompilieren kann. Eine auf einem System mit glibc-2.2 statisch kompilierte Version läuft dann auch recht gut - bis zum DNS auflösen. Das funktioniert nämlich erstmal gar nicht. Fügt man statt dem Hostnamen direkt die IP des Servers hinzu, klappt es. Nachdem man dann von BLOCKDNS auf asynchrone DNS-auflösung umschaltet (beim Compilen) hängt psyBNC beim Verbinden kurze Zeit (sowohl Client -> psyBNC als auch psyBNC -> Server), grundsätzlich funktioniert es aber (bisher).

Woran kann das nun liegen, dass normales (BLOCKDNS) DNS-auflösen (meiner Meinung nach in der Library lresolv-2.3 bzw 2.2.5 (die "alte")) nicht funktioniert? Ich hab die Library auch schon rüberkopiert und sogar den symlink auf die alte Version zeigen lassen (Verzeichnis stimmt auch überein), aber es hat nichts genützt.

Danke & cu