Anwendungen selber übersetzen

Linux Anwendungen selber übersetzen

Manche Programme bekommt man in den aktuellsten Versionen zunächst erstmal nur im [GLOSS:Quellcode]. Bei Linux und Unix ist es nicht sonderlich ungewöhnlich (aber auch nicht unbedingt notwendig), dass der Anwender sich auch mal ein Programm selbst übersetzt.

Dabei meint man mit dem Übersetzen das Erzeugen einer Programmbeschreibung in einer Maschinensprache aus einer oder mehreren Dateien, in denen die Anweisungen in einer für Menschen verständlichen Programmiersprache verfasst sind. Man hat also eine für Menschen lesbare Programmbeschreibung und möchte gern ein Programm daraus machen, welches der Computer verstehen und ausführen kann. Da diese Aufgabe nicht jedermanns Sache ist, gibt es auch hierfür Programme, die dies nicht nur bequem, sondern auch viel schneller erledigen. Diese Programme werden [GLOSS:Compiler] genannt. Neben dem Compiler werden aber meist noch Hilfsprogramme und spezielle, bereits in vorverdauter Version vorliegende universelle Programmteile benötigt, die als Programmbibliothek verschiedene Funktionen zur Verfügung stellen. Keine Angst. Dieses Dokument ist nicht so lang, weil dieser Vorgang so kompliziert ist, sondern weil ich versucht habe, alle möglichen und unmöglichen Probleme dabei anzusprechen und Tipps zu geben, wie man weiter kommt.

Was wird benötigt?

Wie gesagt, benötigt man einen Compiler. Bei Linux ist das in der Regel der gcc. Früher hieß gcc GNU C Compiler, war also ein Compiler für die Programmiersprache C. Heute heißt gcc GNU Compiler Collection und ist eigentlich eine Sammlung von Compilern für verschiedene Programmiersprachen. Trotzdem meint man meist den Compiler für die Sprache C, wenn man vom gcc spricht. Auf jeden Fall wird auch das Programm make benötigt, welches zu den Standardwerkzeugen zur Programmentwicklung unter Linux gehört. Man kann beide, gcc und make, je nach Distribution mit seinem Paketmanager installieren. Es gibt kaum eine Distribution, für die diese Programme nicht als Paket zur Verfügung stehen. Man sollte sich auch nicht wundern, wenn noch andere Programme und Bibliotheken automatisch mitinstalliert werden. Diese werden dann bestimmt auch benötigt.

Was ist zu tun?

Hat man ein Quellpaket von einer Software herunter geladen, dann sollte man es zunächst entpacken. Natürlich ist es komprimiert, um Download-Zeit zu sparen. In [DOC:START:76]diesem Dokument[DOC:END] wird erklärt, wie man die entprechenden Dateien entpacken kann. In der Regel entsteht dabei ein neues Verzeichnis, in dem die Quelldateien des Programmes und einige Hilfsdateien sowie Dokumentation zu finden sind. Hier soll dies am Programm Kaffe, einer Virtual Machine für Java Programme demonstriert werden:

tar xzvf kaffe-1.0.7.tar.gz

entpackt das Quellpaket und es entsteht ein Verzeichnis namens "kaffe-1.0.7". Nun wechselt man in das neu entstandene Verzeichnis:

cd kaffe-1.0.7

und schaut mit "ls" erstmal, was denn da so alles an Dateien rumdümpelt. In der Regel gibt es Dateien mit Namen wie INSTALL, README, COPYING, AUTHORS und vielleicht noch einige ähnliche mehr. Die Dateien COPYING, README und INSTALL sollte man sich auf jeden Fall erstmal anschauen. In COPYING wird die Lizenz stehen, unter der das Programm verbreitet wird. Hier macht es Sinn sich zu vergewissern, dass es sich um eine Lizenz handelt, die man akzeptieren will. Die Dateien README und INSTALL enthalten wichtige Informationen zur Software und deren Installation. Vor allem wird man dort Hinweise finden, wenn sich die Vorgehensweise von der hier beschriebenen unterscheidet. In der Regel besteht das Übersetzen des Programmes aus drei Schritten, deren Befehle hier aufgelistet sind:

./configure
make
make install

wobei man beim letzten der drei Aufrufe die Rechte des Administrators "root" haben muss. Sollte es in diesem Verzeichnis keine Datei mit dem Namen "configure" geben, entfällt der erste Schritt. Zumindest wird dann keine automatische Konfiguration zur Verfügung gestellt. Hier hilft nur das Lesen der beigefügten Dateien, um herauszufinden, ob man einfach mit "make" weiter machen kann, oder ob man eventuell an einigen Dateien noch Änderungen vornehmen muss.

./configure

Beim ersten dieser drei Schritte wird ein Shell-Script (Siehe auch: [DOC:START:150]Was ist ein Shell-Script?[DOC:END]) gestartet, welches am aktuellen Linux-System ein paar Tests ausführt, um eine passende Konfiguration für das Programm zu finden. Es schaut einfach nach bestimmten Programmen und Dateien, die für den Übersetzungsvorgang benötigt werden. Erst wenn dieser Schritt erfolgreich und ohne Fehler durchläuft, kann man zum nächsten Schritt über gehen. Sollte es beim Aufruf von configure zu einem Fehler kommen, dann fehlt meistens ein Programm oder eine Datei. Es gibt dabei einige wenige Szenarien, die man abklopfen sollte:

 

  • Die Datei/das Programm ist vorhanden, aber an einer anderen Stelle als erwartet.
  • Die Datei/das Programm ist nicht installiert und muss noch installiert werden.
  • Die Datei/das Programm ist vorhanden, liegt aber in einer falschen/veralteten Version vor.

 

Grundsätzlich hilft es, die Ausgabe des configure Scriptes genau zu lesen und so erstmal herauszufinden, woran es nun hapert. Wenn man statt des einfachen "./configure" nun

./configure 2> fehler.txt

eingibt, dann werden alle Fehlerausgaben in die Datei fehler.txt geschrieben, so dass man Zeit hat, sie nach dem Ablauf des Scriptes zu lesen. Dazu kann man less verwenden:

less fehler.txt

Das Programm less kann man mit "q" beenden. Navigiert wird mit den Pfeil-Tasten. Wird das Fehlen einer Datei oder eines Programmes bemängelt, so macht es Sinn, erstmal danach zu suchen. "find" ist hier das Werkzeug der Wahl. Es gibt aber auch grafische Suchprogramme, die nicht selten auf find aufbauen dürften. Wenn man eine Datei mit Namen auf den Partitionen des Linux Systems suchen will, kann man das so machen:

find / -type f -name "dateiname.txt"

Find wird dabei bei einigen Verzeichnissen meckern, dass es diese nicht lesen kann, wenn man nicht als root arbeitet. Dies ist aber ok so. Wer wirklich sicher sein will, dass diese Datei nicht auf dem Rechner ist, der kann sich ja kurz als root anmelden (und danach gleich wieder abmelden). Ist die Datei nicht gefunden worden, dann gilt es herauszufinden, welches Paket man installieren muss, um diese Datei zu bekommen. Bei Debian basierten Systemen kann man zum Beispiel auf der [LINK:START:255]Webseite[LINK:END] nach Paketen Suchen, die eine bestimmte Datei enthalten sollen. Wer ein Linux mit dem RedHat Paketformat verwendet, der findet [DOC:START:39]hier[DOC:END] eine Anleitung, wie man zu einer Datei das passende Paket findet. Es gibt aber auch im Netz eine [LINK:START:279]Suchmaschine[LINK:END] für RPM und Debian Pakete. Hat man nun das Paket zur benötigten Datei gefunden, muss man es selbstverständlich installieren.

Sollte die Datei beim Aufruf von find gefunden werden, dann ist es wahrscheinlich, dass diese einfach nicht da ist, wo das configure Script diese Datei erwartet. In diesem Fall kann man eigentlich keine allgemeine Lösung angeben. Es gibt einen gewissen Standard, der angibt, wo welche Dateien zu sein haben. In [DOC:START:16]diesem Dokument[DOC:END] findest du eine kurze Erklärung zur Verzeichnisstruktur. Sicherlich wäre es am einfachsten herauszufinden, wo das Script die Datei erwartet, um dann mit

ln -s /pfad/zu/original/datei /pfad/zur/erwarteten/datei

einen symbolischen Link anzulegen, der dem configure Script den Weg zur echten Datei weist. Nach dem Übersetzen der Programmes kann man den Link ganz einfach löschen.

Bricht das configure Script wegen eines nicht gefunden Programmes ab, welches benötigt wird, dann hat man es in der Regel besonders einfach festzustellen, ob dieses Programm installiert ist und welches Paket man benötigt.

which Programmname

gibt nur dann etwas aus, wenn das Programm existiert (und aufrufbar ist). Fehlt das Programm, kann man zum Beispiel bei Debian ganz einfach mit

apt-cache search Programmname

nach einem entsprechenden Paket suchen und dies danach installieren. Bei RPM ist das ganz ähnlich. Fehlende Bibliotheken sind einfach wie alle anderen fehlenden Dateien zu behandeln. Hier kann ich noch den Hinweis geben, dass zumindest bei Debian die für das Übersetzen benötigten Pakete für Bibliotheken auf "-dev" enden. Wenn eine Datei/ein Programm in einer veralteten Version vorliegt, wird das configure Script dies normalerweise auch direkt sagen. In diesem Fall ist nach einer aktuelleren Version zu suchen. Gibt es keine neuere Version als Paket für die benutze Distribution, ist zu überlegen, ob es Sinn macht, ein weiteres Programm "von Hand" zu übersetzen. Denn dann ist man bald dabei, immer mehr Programme auf diese Weise zu installieren und umgeht so den Luxus und die Sicherheit der Paketverwaltung.

make

Ist der configure Aufruf fehlerfrei durchgelaufen, kann man "make" aufrufen. Sollte hierbei etwas schief gehen, ist dies normalerweise nicht ohne Programmierkenntnisse zu beheben. Allerdings wird es sich dann auch um einen Konfigurations- oder Programmierfehler handeln, bei dem man sich entweder an andere Linux-Anwender oder auch gern an denjenigen wenden darf, der diese Software in dieser Form angeboten hat. Ich würde jedem Anwender raten, hier nicht zu verzweifeln und lieber mal jemanden zu fragen, der sich damit auskennt. Manche Programmierer sind in der Tat auch froh, wenn die Anwender nicht nur den Kopf schütteln und verwzeifeln, sondern einen Fehler melden, so dass er ausgebügelt werden kann.

make install

Hier werden nun root Rechte benötigt. Mit dem Aufruf von "make install" werden die erzeugten Programmdateien an bestimmte Stellen im Linux System kopiert und mit den entsprechenden Rechten versehen, so dass sie ausgeführt werden können. Dabei wird meist das kleine aber feine Programm "install" benutzt, welches auf dem Rechner installiert sein sollte. Dies sollte aber von Natur aus der Fall sein. In der Regel wird die Existenz dieses Programmes auch von configure Script abgefragt (genauso wie der Compiler und make).

Fertig

Nun ist man fertig und das Programm kann benutzt werden. Allerdings kann ich nur empfehlen, das Verzeichnis, in dem das Programm übersetzt wurde, nicht einfach zu löschen. Wenn man es auf eine CD-Rom sichert, kann man später noch ein "make uninstall" machen, um das Programm zu deinstallieren. Leider wird die uninstall Funktion nicht immer zur Verfügung gestellt. Besser ist da eine Installation mit stow, wie ich es in einem [DOC:START:103]Artikel[DOC:END] mit Abiword vorgestellt habe. Dazu wird schon beim Aufruf von configure ein anderes Installationsverzeichnis angegeben und stow verlinkt dann dieses Verzeichnis so, dass der Inhalt im normalen Linux System an den üblichen Stellen auftaucht.

Probleme?

Wer ersthafte Probleme mit einem Quellpaket hat und die Software partout nicht übersetzt bekommt, der kann, darf und sollte sich an den Autor der Software wenden. Eine eMail Adresse findet man oft in einer Datei namens "AUTHORS", die in dem Archiv enthalten ist. Alternativ schaut man sich in anderen Dateien und auf der Website um, wo man das Zeug runtergeladen hat. Dabei gilt aber wie immer: Seid [LINK:START:108]nett[LINK:END] zueinander und ganau in der [DOC:START:184]Fehlerbeschreibung[DOC:END]. Es versteht sich von selbst, dass man zunächst andere [DOC:START:186]Informationsquellen[DOC:END] befragt, bevor man den Programmierer damit in Atem hält.

Artikelbewertung: 
No votes yet
War dieser Artikel hilfreich?