Linux 15.032 Themen, 107.080 Beiträge

Programmversion

Jerry6 / 9 Antworten / Baumansicht Nickles

Hallo Leute,
ich habe kürzlich ein Programm von einer Heft-CD aus aktualisiert. Das Programm ließ sich anschließend nicht mehr starten. Möglicherweise lag es daran, dass die Heft-CD die 32-bit-Variante über die installierte 64-bit-Version des Programmes gespielt hat. Erst nachdem ich das *.i586-Paket deinstalliert hatte, ließ sich das *.x86_64-Paket installieren. Nun meine Frage: Wie kann ich ermitteln, ob ein besimmtes Programm (oder library o.ä.) in der 32- oder in der 64-bit-Variante vorliegt? Kann jemand eine entsprechende Ausgabe posten?
Ich nutze Suse 10.2.
Danke.
Jerry

bei Antwort benachrichtigen
KarstenW Jerry6 „Programmversion“
Optionen

Das ist relativ simple zu machen. Bei Linux (und Unix) gibt es den file Befehl:

/usr/bin$ file nero
nero: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, stripped

Bei Unix/Linux kann man auch viele Dateien am Dateiende oder Suffix erkennen. file ist aber besser programmiert. file "schaut" direkt in die Datei rein und erkennt bestimmt typische Dateigenschaften.

ELF ist das typische Binärformat von Linux,

"dynamically linked (uses shared libs)" bedeutet, das Programm ist auf Bibliotheken angewiesen die auch auf dem Rechner installiert sein müssen damit es funktioniert

"stripped" bedeutet das keine Debuginformationen in dieser Datei vom Complier gcc reingeschrieben worden sind, damit der Debugger gdb dieses Programm debuggen kann.
Bei Windows sagt man zu so einem Programm "Releaseversion" (das Gegenteil wäre Debugversion)

Das Problem bei 32 bit Programmen die in einer 64 bit Umgebung installiert werden ist nur die Registerbreite der Bibliotheken.
Der Betriebsystemkern selbst unterstützt die Ausführung eines 32 bit Programmes, aber die 64 bit Bibliotheken passen nicht zu einem 32 bit Programm.
Man kann solche 32 bit Programm in einer 32 bit Umgebung installieren, aber dazu muß eine chroot (change root) Umgebung eingerichtet werden. Mir ist der Konfigurationsaufwand zu groß.
Meist ist es leicher eine 32 bit Linuxversion in einem Emulator wie VMware zu installieren und dort die 32 bit Version zu starten.



PS: SUSE hat keinen Paketmanager wie apt bei Debian. Wenn du fremde Programme installieren willst, die unter einer anderen Linuxdistribution programmiert wurde, dann mußt du die notwendigen Bibliotheken noch selbst von deiner SUSE Distribution nachinstallieren:
Du kannst mit dem Programm ldd dir anzeigen lassen welche Bibliotheken das Programm braucht. Wenn da in einer Zeile stehen sollte, das die entsprechende Bibliothek noch nicht installiert ist, dann mußt du diese Datei noch selbst mit yast nachinstallieren:

Das Brennprogramm nero braucht diese Bibliotheken damit es richtig funktioniert. Ein paar von diesen Dateien mußt du von SUSE eventuell noch nachinstallieren.

/usr/bin$ ldd nero

linux-gate.so.1 => (0xffffe000)
libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb7bfc000)
libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb7b7a000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb7b60000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb7b4a000)
libpangoxft-1.0.so.0 => /usr/lib/libpangoxft-1.0.so.0 (0xb7b43000)
libpangox-1.0.so.0 => /usr/lib/libpangox-1.0.so.0 (0xb7b38000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb7afe000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb7ac3000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb7ac0000)
libdl.so.2 => /lib/tls/libdl.so.2 (0xb7abc000)
libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb7ab8000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb7a26000)
libNeroAPI.so => /usr/lib/libNeroAPI.so (0xb747a000)
libNeroSCSI.so => /usr/lib/libNeroSCSI.so (0xb743e000)
libNeroErr.so => /usr/lib/libNeroErr.so (0xb7409000)
libNeroCDR.so => /usr/lib/libNeroCDR.so (0xb736d000)
libNewTrf.so => /usr/lib/libNewTrf.so (0xb72cc000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb71e7000)
libm.so.6 => /lib/tls/libm.so.6 (0xb71c2000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb71b6000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb71a4000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7072000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb6f86000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb6f7e000)
libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb6f1c000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb6ef0000)
libXext.so.6 => /usr/lib/libXext.so.6 (0xb6ee2000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb6eda000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb6ed7000)
libXi.so.6 => /usr/lib/libXi.so.6 (0xb6ecf000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb6ecc000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb6ec2000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb6ebd000)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb6e92000)
libXft.so.2 => /usr/lib/libXft.so.2 (0xb6e7f000)
librt.so.1 => /lib/tls/librt.so.1 (0xb6e77000)
/lib/ld-linux.so.2 (0xb7ef9000)
libCDCopy.so => /usr/lib/libCDCopy.so (0xb6de1000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb6dde000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb6dd9000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb6d6f000)
libz.so.1 => /usr/lib/libz.so.1 (0xb6d5b000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb6d37000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb6d17000)





Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
Jerry6 KarstenW „Das ist relativ simple zu machen. Bei Linux und Unix gibt es den file Befehl:...“
Optionen

Vielen Dank für die schnelle und ausführliche Hilfe! Das Dateiende war in diesem Falle nicht hilfreich. Der Name und die Version der lib-Datei sind in diesem Falle identisch, werden aber in den Verzeichnissen /usr/lib bzw. /usr/lib64 gepeichert. Deshalb hatte ich es (erfolglos) mit einem Link versucht.
Ich sitze nicht an dem betreffenden Rechner, deshalb kann ich keine näheren Infos geben. In diesem Falle handelte es sich um DigiKam

Du schreibst "SUSE hat keinen Paketmanager wie apt bei Debian." Worin bestehen die prinzipiellen Unterschiede zwischen apt und smart, zypper ...?

bei Antwort benachrichtigen
KarstenW Jerry6 „Vielen Dank für die schnelle und ausführliche Hilfe! Das Dateiende war in...“
Optionen

ldd prüft nur den Dateinamen der benötigten Bibliotheken , nicht den Inhalt !

Also ob das jeweilige Programm dann auch läuft hängt ab ob die Bibliotheken der beiden Systeme auch wirklich gleich sind.
Auf dem einen System wird das Programm geschrieben und auf dem anderen System läuft es dann.
Um die Kompatibilität der Distributionen untereinander zu gewährleisten gibt es die Linux Standard Base.
Wenn man öfter Programme von fremden Distributionen installieren will, sollte die verwendte Distribution kompatible sein zur Linux Standard Base:

http://de.wikipedia.org/wiki/Linux_Standard_Base




Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
Jerry6 KarstenW „ldd prüft nur den Dateinamen der benötigten Bibliotheken , nicht den Inhalt !...“
Optionen

Hallo KarstenW,
ich dachte, ich kann nicht viel falsch machen. Die Heft-CD stammt von der aktuellen EasyLinux. Das erste Problem trat auf , als die DVD nicht automatisch (per autorun-Script) als Installationsquelle eingerichtet wurde. Das habe ich dann manuell in YAST erledigt. Dann habe ich DigiKam aktualisiert. Mit kipi hat mit den Abhängigkeiten nicht funktioniert, deshalb habe ich das nicht aktualisiert. Anschließend ließ sich DigiKam nicht mehr starten. Daraufhin habe ich es komplett deinstalliert und von der Suse-DVD die "alte" Version neu installiert. Danach ließ es sich auch nicht starten. Daraufhin wollte ich es über Packman aktualisieren, aber das hat auch nicht funktioniert. Dann habe ich mir die Pakete von Packman 'runtergeladen (per Modem(!)), auf die Fehlermeldungen beim rpm -hiv geachtet, weitere Pakete nachgeladen und bin auf die beschriebenen Probleme gestoßen. Leider habe ich vergessen, welches Paket das war, welches deinstallieren musste.
Kurz:
1. Irgendwann habe ich es geschafft, DigiKam zu aktualisieren und
2. Ich hatte Probleme, nachdem ich ein Suse 10.2-Paket installiert hatte - ärgerlich.

Trotzdem habe ich dabei und durch Deine Antwort eine Menge gelernt. Vielen Dank nochmal.
Gruß Jerry

bei Antwort benachrichtigen
KarstenW Jerry6 „Hallo KarstenW, ich dachte, ich kann nicht viel falsch machen. Die Heft-CD...“
Optionen

Was bei SUSE rpm macht ist bei Debian dpkg.
apt startet dpkg um die Programm zu installieren und löst dabei noch alle Abhängigkeiten automatisch auf.
Das hat früher bei SUSE gefehlt.

Wenn dieses Digikam Programm unter Red Hat programmiert wurde und dann in deiner SUSE Distribution installiert wird, müssen alle beide Distributionen kompatibel zueinander sein.
Das betrifft hauptsächlich die Bibliotheken und die Installationsscripte mit denen verschiedene Konfigurationsdateien automatisch bearbeitet werden.

Deshalb gibt es auch die Linux Standard Base, die die Distributionen untereinander kompatibel machen soll.

Debian etch 4.0 ist kompatibel zur Linux Standard Base Version 3.1 (momentan aktuell) und deshalb kann ich fremde Programme installieren die unter einer anderen Linux Standard Base kompatiblen Distribution programmiert wurden.

Beispielsweise kann ich Star Office 8 in Debian etch 4 installieren, obwohl Star Office 8 wahrscheinlich mit SUSE Enterprise oder Red Hat Enterprise programmiert wurde.
Mit dem Programm alien kann ich sogar rpm Programmarchive in Debian installieren. alien funktionert aber leider nicht immer, weil alien die rpm Installationsscripte manchmal nicht richtig nach Debian konvertieren kann.






Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
KarstenW Jerry6 „Vielen Dank für die schnelle und ausführliche Hilfe! Das Dateiende war in...“
Optionen

"Du schreibst "SUSE hat keinen Paketmanager wie apt bei Debian." Worin bestehen die prinzipiellen Unterschiede zwischen apt und smart, zypper ...?"

Ich nutze SUSE schon lange nicht mehr. Ich wußte nicht das SUSE nun einen Paketmanager hat (wurde auch langsam Zeit)
Ich kenne nur apt welches speziell für die deb Programmpakete von Debian entwicklet worden ist.

In den deb Paketen sind Informationen enthalten welche Programme und /oder Bibliotheken ein zu installierendes Programm braucht.
apt wertet diese Informationen aus und installiert die entsprechenden Pakete automatisch nach.
Man braucht nur die Internetserver von Debian und eventuell ein paar CDs in die Konfigurationsdatei /etc/apt/sources.lst eintragen lassen.
Ist ein bestimmtes Paket nicht auf der CD dann wird es automatisch vom Debian Internetserver heruntergeladen (man braucht DSL dafür, analoge Modems oder ISDN sind einfach zu langsam)
Man muß also nicht alle CDs von Debian installieren, es reicht nur die erste CD von Debian (spart Bandbreite bei den Internetservern von Debian)

cat /etc/apt/sources.list


deb http://ftp.de.debian.org/debian/ etch main non-free contrib
deb-src http://ftp.de.debian.org/debian/ etch main non-free contrib

deb http://security.debian.org/ etch/updates main contrib non-free
deb-src http://security.debian.org etch/updates main contrib non-free

Ich habe momentan keine CDs von Debian installiert.
Alle Programme werden bei mir in diesem Fall ausschließlich von den Internetservern mit apt, aptitude oder auch synaptic installiert.
apt hat eine Paketdatenbank in der alle Paketinformationen eingetragen sind (wird mit dem Befehl "apt-get update" aktualisiert)
Dadurch weiß apt wo das zu installierende Programmpaket ist. Wenn es nicht auf der CD ist wird es automatisch vom Internetserver heruntergeladen.


Ich weiß nicht welcher Paketmanager besser ist.
apt ist jedenfalls sehr gut programmiert.
aptitude ist ein Frontend (Benutzeroberfläche) zu apt, genau so synaptic.








Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
Jerry6 KarstenW „ Du schreibst SUSE hat keinen Paketmanager wie apt bei Debian. Worin bestehen...“
Optionen

Danke für die Infos. Ich habe bisher Updates per rpm erledigt, smart kenne ich nur vom Hörensagen. Ich hoffe, dass ich auch bald in den Genuss eines DSL-Anschlusses komme, dann wird sich sicher einiges ändern, vor allem lasse ich dann die Finger von Heft-CDs.
Aber ich habe im Zusammenhang mit dem Update erstmalig den Linux-Dreisatz ausprobiert (./configure, make und make (check)install) - und siehe da, es ist doch ganz einfach. Nun habe ich die Scheu vor Programmen verloren, die nicht in einem rpm-Paket für "meine" Distribution, aber als Source vorliegen :-).
Gruß Jerry

bei Antwort benachrichtigen
Miro6 Jerry6 „Danke für die Infos. Ich habe bisher Updates per rpm erledigt, smart kenne ich...“
Optionen

hallo,
ich will ja nicht ketzerisch sein, aber wenn ich diesen Thread hier verfolge bin ich heilfroh mich in der MS-Welt zu bewegen. ;-)
Greetings
miro

Mehrheiten sind Unsinn, denn Verstand haben nur wenige. (Timothy Leary)
bei Antwort benachrichtigen
KarstenW Miro6 „hallo, ich will ja nicht ketzerisch sein, aber wenn ich diesen Thread hier...“
Optionen

Da hast du vollkommen recht ;-).
Bei Unix gibt es immer noch keine Standards im Desktopbereich. Der POSIX Standard bei Unix reicht nur für Serveranwendungen oder Programme die in der Konsole laufen.
Desktopanwendungen sind auf Bibliotheken angewiesen.
Und diese Bibliotheken müssen auf beiden Systemen gleich sein, nicht nur der Dateiname.
Die Mitglieder der Linux Standard Base haben den POSIX Standard von Unix genommen und ihn um fehlende Bibliotheken erweitert (und damit den Fehler bei Unix und seinen vielen Derivaten korrigiert).
Wenn man also eine Linux Standard Base kompatible Distribution installiert, kann man auch Programme von einer anderen Linux Standard Base kompatiblen Distribution installieren.
Wobei natürlich auch die Version übereinstimmen muß.
Momentan ist LSB 3.1 aktuell.

PS:
Ich glaube Microsoft hat das Chaos bei Unix und seinen Derivaten ausgenutzt und sein Windows großzügig verteilt bis Windows das Standardbetriebsystem im Desktopbereich wurde.
Aber jetzt gibt es Linux mit den notwendigen Standards für den Desktopbereich :-).

Kannst du hier nochmal nachlesen:

http://de.wikipedia.org/wiki/Linux_Standard_Base

PPS: Vielleicht gibt es irgendwann einmal ein Linux Standard Base kompatibles Solaris 10 oder AIX Unix oder HP Unix oder... :-).


Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen