Hallo,
eins vorweg: Dies ist kein Debian-Thema, ich selbst bin zwar Debian-Fan aber sitze grade an einem Fedora 6 Rechner, und die anderen Systeme mit denen ich hier kämpfe sind Opensuse 10.2/10.3 und ältere Fedoras, eventuell ein paar Red Hats, soweit ich weiß.
Wir haben ein mittlerweile recht umfangreiches Programm geschrieben (nicht-kommerziell, also GPL), das auf Qt4 basiert und noch dazu VTK benutzt. Nun war vor zwei Wochen der Release, wir gaben das Binary-Package nichts ahnend raus, haben unsere Libraries die das Programm benötigte dazu getan (VTK, Qt4, und noch ein paar System-Libraries wie glibc). Gestartet wird mit einem Startscript das den LD_LIBRARY_PATH setzt und damit sollte alles laufen.
Tat's natürlich nicht, mittlerweile haben wir ein wenig mehr erfahren wie Libraries vom Linker eingelesen werden und unsere Fehler eingesehen. Allerdings haben wir immer noch keine Lösung gefunden.
Zwischenzeitlich wollten wir LSB nehmen, davon habe aber zumindest ich mittlerweile wieder sehr viel Abstand genommen.
Nun dachte ich mir, man müsste doch eigentlich "nur" ein chroot-System mit den benötigten Libaries aufsetzen, alle am besten in einer möglichst kleinen Version des Major-Releases, also z.B. glibc.2.0 oder so, das Binary darin kompilieren und es dann rausgeben. Dann setzt man einfach "glibc.2.x" vorraus und das Programm sollte dann endlich (Qt4 und VTK wird mitgegeben) überall laufen.
Ein erster Test (auf einem alten Fedora 4 Rechner mit z.B. glibc 2.3 kompiliert, lief auf einem Fedora 6 mit glibc.2.7) war erfolgreich, ist das der richtige Weg oder fällt jemandem etwas besseres ein? Sind da noch weitere Denk/-Verständnisfehler?
Für Hinweise aller Art wäre ich sehr dankbar.
Binary für alle Distributionen und -Versionen
Re: Binary für alle Distributionen und -Versionen
Nein, da fällt mir nichts besseres ein! Wenn man vom lsb-sdk absieht, ist das der einzige Weg der sicherstellt, daß die Programme auch auf dem "ältesten zu unterstütztenden System" laufen. Ob das jetzt durch ein Chroot, oder einen eigenen Generierungsserver, o.ä implementiert wird, ist ja eigentlich nebensächlich.BaGStone hat geschrieben:ist das der richtige Weg oder fällt jemandem etwas besseres ein?
Vom lsb-sdk habe ich auch Abstand genommen. Wir benötigen einige Libraries, die nicht vom lsb-sdk unterstützt werden. Diese könnten wir zwar statisch dazulinken, nachdem diese jedoch bei uns zu sehr vielen Shared Libraries dazugelinkt werden müßten, würde das ausführbare Programm ziemlich aufgebläht werden.
Die zusätzlich benötigten Libraries könnten zwar auch mittels lsb-sdk gebaut werden, das kann aber durchaus in Schwerarbeit ausarten.
Wenn du das Startscript mit dem LD_LIBRARY_PATH wegbekommen möchstest, könntest du auch ein "Relinken" auf dem Zielsystem in Erwägung ziehen ( mit der rpath Option ), oder wenn immer in das gleiiche Verzeichnis installiert werden soll, könntest du diese Option auch auf dem Generierungssystem setzen
Gruß
gms
Ich habe mal mit $LD_DEBUG=files das Programm gestartet und eine Liste aller Systembibliotheken erstellt, die das Programm aufruft.
Für's kompilieren haben wir einen Fedora 2 Rechner genommen, dort sind die Pakete erstellt worden. Laufen auf so ziemlich jedem Linux was wir getestet haben...
Nun stellt sich mir die Frage, welche Vorraussetzungen die Benutzer genannt bekommen sollen. Viele dieser Libraries sind untereinander ja so voneinander abhängig das es die eine Version kaum auf einem Rechner ohne der anderen gibt. Reicht sowas wie "gcc libs mindestens 3.3" nicht?libdl.so.2.3.3
libgcc_s-3.3.3-20040413.so.1
libnss_files-2.3.3.so
libc-2.3.3.so
librt-2.3.3.so
libpthread-0.61.so
libm-2.3.3.so
libpng12.so.0.1.2.8
libfontconfig.so.1.0.4
libfreetype.so.6.3.5
libz.so.1.2.1.2
libgthread-2.0.so.0.400.8
libglib-2.0.so.0.400.8
libstdc++.so.6.0.0
libexpat.so.0.5.0
libjpeg.so.62.0.0
UTF-16.so
libXt.so.6.0
libSM.so.6.0
libICE.so.6.3
libXcursor.so.1.0.2
libXrender.so.1.2.2
libXinerama.so.1.0
libGL.so.1.2
libXxf86vm.so.1.0
libXext.so.6.4
libX11.so.6.2
xlcUTF8Load.so.2
ximcp.so.2
xomGeneric.so.2
Für's kompilieren haben wir einen Fedora 2 Rechner genommen, dort sind die Pakete erstellt worden. Laufen auf so ziemlich jedem Linux was wir getestet haben...