Sonntag, 3. Mai 2009

Quelltext kompilieren

Linux-Gegner führen häufig das Kompilieren von Quelltext (Source Code) als Beispiel ins Feld, wie kompliziert und Benutzer-unfreundlich Linux doch sei. Dabei ist die Chance gross, dass Sie als Linux-User nie in die Verlegenheit kommen, erst einen Quelltext kompilieren zu müssen, bevor Sie ein Programm verwenden können.

Aber falls es doch einmal notwendig werden sollte, erhalten Sie hier eine Anleitung. Sie werden sehen, es ist überhaupt nicht kompliziert und man muss auch nicht über besondere Hackerqualitäten verfügen, um einen Quellcode kompilieren zu können. Das macht nämlich das System für Sie. Alles was Sie tun müssen, ist ein Archiv zu entpacken und den Befehl zum Kompilieren zu geben.

Aber weshalb geben einige Programmierer Software in dieser, anscheinend unfertigen Form, ab? Jede Linux-Distribution hat ihre Eigenheiten, allen gemeinsam ist aber der Linux-Betriebssystemkern. Statt für jede Distribution und Versionsnummer ein eigenes Installationspaket (rpm, deb usw.) zu generieren, überlässt es der Entwickler Ihrem System, den Quelltext entsprechend zu interpretieren und ein lauffähigen Programm zu generieren. Sie geben lediglich das Startkommando dazu.

Quelltext wird in einer Datei mit dem Suffix .tar geliefert, die wiederum für den Transport im Internet im Format .gz oder .bz2 gepackt wird. Sie haben also nach dem Download eine Archiv-Datei vorliegen, die nach dem Schema programmname.tar.gz oder programmname.tar.bz2 benannt ist.

Öffnen Sie das Terminal, eignen Sie sich Rootrechte an und verzweigen Sie in den Ordner, in dem sich die o.g. Datei befindet. Sie kann zur weiteren Bearbeitung dort belassen werden. Überall, wo in den folgenden Befehlszeilen der Begriff programmname auftaucht, müssen Sie diesen Platzhalter natürlich mit der richtigen Bezeichnung Ihres Downloads ersetzen.

Zunächst muss das Archiv entpackt werden. Je nach Dateiformat variiert der Befehl dazu geringfügig:

tar xvzf programmname.tar.gz
oder
tar xvjf programmname.tar.bz2

Darauf hin wird ein neues Unterverzeichnis programmname erzeugt, in das Sie jetzt verzweigen:

cd programmname

Normalerweise befindet sich in diesem Verzeichnis ein Skript namens configure, mit dem eine Datei Makefile für Ihr System erzeugt wird. Dieses wird benötigt, um das Programm auf Ihr System anzupassen. Mit dem folgenden Befehl wird das Skript ausgelöst:

./configure

Dabei werden u.U. Meldungen auf dem Bildschirm ausgegeben, die Sie übergehen können - es sei denn, das Skript würde wegen eines Fehlers abgebrochen. Sollte sich im entpackten Archiv kein Skript configure befinden, überspringen Sie diesen Schritt einfach.

Nun geht es ans Kompilieren. Der Terminalbefehl dazu lautet schlicht make. Acer hat dieses Programm in Linpus Linux für den Aspire One unterschlagen. Sollten Sie es nicht bereits getan haben, so geben Sie jetzt yum install make ins Terminal ein. Andere Linux-Distributionen haben make normalerweise schon im Auslieferzustand mit an Bord. Stellen Sie sicher, dass Sie sich noch im Ordner programmname befinden und geben Sie dann ins Terminal ein:

make

Dieser Befehl benötigt die Datei Makefile, die entweder durch das Skript configure erzeugt wurde oder bereits im Ordner enthalten war. So kurz der Befehl ist, so lange braucht er -je nach Programmgrösse- zum Ausführen. Die Erzeugung der Installationsdaten wird durch eine Reihe von Meldungen begleitet - kein Grund, nervös zu werden.

Nachdem alle Daten erzeugt wurden, kann die Installation durchgeführt werden. Der Terminal-Befehl dazu lautet:

make install

Die erfolgreiche Installation wird im Terminal gemeldet. Darauf hin können Sie das Programm aufrufen. Es sollte im Desktop- bzw. Anwendungsmenü verzeichnet sein, anderenfalls rufen Sie das Programm Run mit den Tasten Alt und F2 auf und geben den Programmnamen ins Textfeld ein.

Jetzt könnten Sie die Archiv-Datei und das Installationsverzeichnis löschen, um Platz auf der Festplatte bzw. SSD zu schaffen Aber Halt! Wie bei anderen Paketen auch, sollten Sie die Installationsdaten behalten, um das Programm später in allen Bestandteilen löschen zu können. Es gibt einen Terminal-Befehl, der dafür sorgt, dass nur die benötigten Installationsdaten (inkl. Makefile) aufbewahrt und temporäre Daten gelöscht werden:

make clean

Für diesen Befehl müssen Sie sich noch im Ordner programmname befinden. Bewahren Sie diesen Ordner auf; um Platz zu sparen, können Sie die auch auf einem externen Medium tun. Das Archiv (.gz bzw. .bz2) können Sie löschen.

Um das Programm später korrekt zu deinstallieren, kopieren Sie den Ordner programmname wieder auf Ihren internen Massenspeicher, gehen als Root im Terminal in diesen Ordner und geben folgenden Befehl ein:

make uninstall

So, mit diesen Kenntnissen ausgerüstet, dürfen Sie jetzt vor Ihren Windows-Freunden angeben. Und die werden dann tuscheln, wie schrecklich kompliziert Linux doch sei. Aber es war doch gar nicht so schlimm, oder?

5 Kommentare:

  1. Hallo viva,

    ersteinmal vielen Dank für diesen hilfreichen Blog, meiner Meinung nach die am besten beschriebene und vollständigste Sammlung an Informationen für einen AA1.

    Jetzt kommt aber meine Frage:
    Es geht um die Installation von unrar-free, was ich hier (http://download.gna.org/unrar/unrar-0.0.1.tar.gz) gefunden habe. Kleine Anmerkung: Ich habe vorher probiert mit yum install unrar eine Möglichkeit zu bekommen RAR-Archive zu entpacken, da kam jedoch die Meldung, ein solches Paket sei nicht verfügbar.
    Aber zurück zu dem Kompilierproblem: Nach dem entpacken habe ich das Terminal in dem neuem Ordner geöffnet und ./configure eingegeben(das Skript configure war im Ordner enthalten).
    Daraufhin spuckt mir das Terminal folgende Zeilen aus:

    checking for a BSD-compatible install... ./install-sh -c
    checking whether build environment is sane... yes
    checking for gawk... gawk
    checking whether make sets $(MAKE)... yes
    checking for gcc... no
    checking for cc... no
    checking for cc... no
    checking for cl... no
    configure: error: no acceptable C compiler found in $PATH
    See `config.log' for more details.

    wenn ich diese Meldungen einfach übergehe und mit dem Befehl make fortfahre, klappt das, wie der Fehler erwarten lässt, natürlich nicht ("make: *** Keine Targets angegeben und keine »make«-Steuerdatei gefunden. Schluss.").

    Die Datei config.log macht mich persönlich auch nicht schlauer. Da sie etwa sieben Bildschirmhöhen lang ist, erspare ich sie Ihnen hier.

    Vielen Dank noch einmal und alles Gute

    Johannes

    AntwortenLöschen
  2. Hallo,

    dieses Installationsscript setzt das Vorhandensein eines vollständigen C-Kompilers voraus. C ist eine Programmiersprache. Die monierten Module müssen also zunächst installiert werden, mit 'yum install gcc' im Terminal. Und so weiter, falls gcc (Gnome C Compiler) nicht alle im Skript benötigten Bibliotheken mit installiert hat.

    Viel Glück!

    AntwortenLöschen
  3. Hallo viva,

    Vielen Dank für die schnelle Antwort und die Analyse des Fehlers.

    Tatsächlich installiert gcc nicht alle Bibliotheken mit.
    Die installation wir abgebrochen mit dem Hinweis:

    Fehler: Fehlende Abhängigkeit: glibc-common = 2.7-2 wird benötigt von Paket glibc-2.7-2.i686 (fedora)

    Also versuche ich das Paket glibc-common extra zu instalieren. Dabei stoße ich jedoch auf folgendes Problem: glibc-common habe ich bereits, jedoch nicht in der erforderlichen Version. Ich habe mir auch die Version 2.7-2 als rpm heruntergeladen, wenn ich diese ausführen will, verweigert er mir dies jedoch, da schon eine neuere Version installiert sei. Ich habe auch überlegt glibc-common erst zu deinstallieren und dann die rpm auszuführen, jedoch habe ich dies mit "N" abgebrochen, als yum mich noch einmal nachgefragt hatte. Zuvor hatte es etwa 270 Abhängigkeiten festgestellt, wovon ich darauf geschlossen habe, glibc-common könnte recht wichtig sein. Da hatte ich dann doch etwas Angst, das einfach mal runterzuschmeißen und anschließend neu zu installieren.

    Gibt es da eine Lösung des Problems? Haben Sie eine Idee, oder muss ich ich mich damit abfinden, dass es nicht geht, weil es einfach keine Kompatibilität mehr gibt, weil der Kernel nicht aktualisiert wird?

    Das Problem habe ich ja nicht nur bei unrar, sondern bei allen Programmen, die ich Kompilieren muss.

    Viele Grüße und vielen Dank

    Johannes

    AntwortenLöschen
  4. Nun, wenn ich die Fehlermeldung im ersten Kommentar richtig interpretiere, dann sind alle vier genannten mögliche C-Compiler. Wenn es mit gcc nicht klappt, dann versuchen Sie einfach, cc zu installieren.

    Zugrunde liegt dem aber ein ganz anderes Problem: Acer's Linpus Linux basiert auf Fedora 8, dessen Repositories nicht mehr aktualisiert werden, weil mittlerweile Version 10 aktuell ist. Deshalb gibt es für Linpus viele Software nicht mehr in der aktuellen Version, sondern nur als ältere Ausgabe (Amarok, Digikam, sunbird um nur einige zu nennen). Auch das Durcheinander mit den Bibliotheken wird mit der Zeit eher zunehmen.

    Bei einem normalen Linux wäre das kein Problem, ein Update auf die aktuelle Version geht vollautomatisch. Bei Acer's Linpus: keine Chance. Deshalb kann langfristig die Empfehlung nur lauten, auf eine grosse, gut gepflegte Distribution umzusteigen. Mein Favorit, das ahnen Sie schon, ist Ubuntu. Und ich habe fast alle ausprobiert ;-)

    AntwortenLöschen
  5. Hallo viva,

    Was ich vor zwei Tagen noch nicht geglaubt hätte, weil ich da eigentlich sehr zufrieden mit Linpus war, ist gestern eingetreten. Den gestrigen Sonntag habe ich damit verbracht Ubuntu zu installieren. Ich bin sehr zufrieden. Vielen Dank fürs gute zureden und die ausführlichen, anschaulichen Anleitungen

    Viele Grüße

    Johannes

    AntwortenLöschen

Kommentare werden erst nach einer inhaltlichen Unbedenklichkeitsprüfung zur Veröffentlichung freigegeben.