Konfiguration

Für die technisch Interessierten: der Grund, warum Entwickler ihre Software als Quellcode weitergeben, ist die Portierbarkeit der Software. Für ein UNIX®-System entwickelte Software kann mit mehr oder weniger Änderungen auf allen existierenden UNIX®-Systemen (frei oder proprietär) eingesetzt werden. Daher ist vor dem Durchbauen eine Konfiguration erforderlich.

Es existieren mehrere verschiedene Konfigurationssysteme. Sie müssen jeweils das System verwenden, das der Autor der Software vorschreibt (das können manchmal auch mehrere sein). Im Allgemeinen können Sie:

Autoconf

Das Prinzip

AutoConf wird zur korrekten Einrichtung des Programms benutzt. Es erstellt die für das Durchbauen des Programms nötigen Dateien (u. A. Makefile) und kann unter Umständen den Quellcode direkt beeinflussen (beispielsweise durch eine Datei config.h.in).

Die Arbeitsweise von AutoConf ist einfach:

  • Der Entwickler weiß genau, welche Tests zur Konfiguration seiner Software benötigt werden (etwa: „welche Version dieser oder jener Bibliothek benutzen Sie?“). Er schreibt diese Tests nach einer präzisen Syntax in eine Datei namens configure.in.

  • Dann führt er das Programm AutoConf aus, das aus dieser Datei ein Konfigurationsscript configure erstellt. Dieses Script führt die nötigen Tests bei der Konfiguration der Software durch.

  • Der Benutzer startet das Script und AutoConf konfiguriert nun alles, was zum Durchbauen notwendig ist.

Beispiel

Ein Beispiel der Arbeitsweise von AutoConf:

$ ./configure
loading cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc  ) works... yes
checking whether the C compiler (gcc  ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for main in -lX11... yes
checking for main in -lXpm... yes
checking for main in -lguile... yes
checking for main in -lm... yes
checking for main in -lncurses... yes
checking how to run the C preprocessor... gcc -E
checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include
checking for ANSI C header files... yes
checking for unistd.h... yes
checking for working const... yes
updating cache ./config.cache
creating ./config.status
creating lib/Makefile
creating src/Makefile
creating Makefile

Zur besseren Kontrolle über das, was configure generiert, können über die Kommandozeile oder die Umgebungsvariablen einige Optionen hinzugefügt werden. Beispiel:

$ ./configure --with-gcc --prefix=/opt/GNU

oder (durch die shell – unter der bash etwa):

$ export CC=`which gcc`
$ export CFLAGS=-O2
$ ./configure --with-gcc

oder:

$ CC=gcc CFLAGS=-O2 ./configure

Was tun... wenn es nicht funktioniert?

Eine typische Fehlermeldung sieht so aus: configure: error: Cannot find library guile (die meisten Fehlermeldungen des configure-Skripts sehen so aus).

Das bedeutet, dass das configureSkript eine Bibliothek nicht finden konnte (im Beispiel die Bibliothek guile). Vereinfacht gesagt, kompiliert das configure-Skript ein kurzes Testprogramm, das diese Bibliothek benötigt. Kann das Testprogramm nicht kompliliert werden, wird auch das Durchbauen der Software misslingen. Daher wird eine Fehlermeldung ausgegeben.

  • Den Grund für die jeweilige Fehlermeldung finden Sie am Ende der Datei config.log, in der alle Schritte der Konfiguration protokolliert werden. Da der C-Compiler in seinen Meldungen sehr klar und deutlich ist, wird die Logdatei Ihnen normalerweise bei der Behebung des Problems helfen können.

  • Prüfen Sie, ob die gesuchte Bibliothek richtig installiert ist. Falls nicht, installieren Sie sie (aus dem Quellcode oder einer Binärdatei) und starten Sie configure neu. Sie können bei der Suche nach der Bibliothek effizient vorgehen indem Sie nach der Datei mit den Symbolen der Bibliothek suchen (eine Datei mit dem Namen lib<name>.so). Geben Sie z.B. ein

    $ find / -name 'libguile*'

    oder:

    $ locate libguile
  • Prüfen Sie ob die Bibliothek zugänglich für den Compiler ist. D.h., sie sollte in den Verzeichnissen /usr/lib, /lib oder /usr/X11R6/lib liegen (oder in denen, die in der Umgebungsvariablen LD_LIBRARY_PATH angegeben sind, siehe „Was tun ... wenn es nicht funktioniert?“, b). Prüfen Sie, ob diese Datei eine Bibliothek ist: file libguile.so.

  • Prüfen Sie, ob die zu der Bibliothek passenden Header an der richtigen Stelle installiert sind (normalerweise in /usr/include, /usr/local/include oder /usr/X11R6/include). Sind Sie nicht sicher, welche Header Sie benötigen, prüfen Sie einfach, ob Sie die Entwicklungs-Version der entsprechenden Bibliothek installiert haben (beispielsweise libgtk+2.0-devel anstelle von libgtk+2.0). Diese Entwicklungs-Version beinhaltet die „include“-Dateien der Bibliothek, die für die Kompilierung benötigt werden.

  • Schließlich prüfen Sie noch, ob auf der Festplatte noch genug freier Platz vorhanden ist (das configure-Skript benötigt etwas Platz für temporäre Dateien). Lassen Sie sich mit df -h die Partitionen Ihres Systems anzeigen und achten Sie auf belegte oder fast belegte Partitionen.

Falls Sie die Fehlermeldungen der Datei config.log nicht verstehen, wenden Sie sich vertrauensvoll an die Benutzergemeinschaft der freien Software, wo Sie jederzeit Hilfe finden (siehe „Technische Unterstützung“).

Falls configure darauf besteht, dass eine Bibliothek nicht vorhanden ist, sollten Sie trotzdem prüfen, ob die entsprechende Datei tatsächlich nicht exisitert (es wäre z.B. sehr ungewöhnlich, dass auf Ihrem System keine curses-Bibliothek vorhanden ist). In diesem Fall kann es auch sein, dass die Variable LD_LIBRARY_PATH unvollständig oder falsch ist!

Imake

imake ermöglicht die Konfiguration freier Software durch die Erstellung einer Makefile-Datei nach einfachen Regeln. Diese Regeln legen fest, welche Dateien zur Kompilierung der Binärdatei benötigt werden. imake generiert die entsprechende Makefile-Datei. Die Regeln werden in einer Datei namens Imakefile festgelegt.

Das Interessante an imake ist seine Fähigkeit, Informationen zu verwerten, die site-dependent (architektur-abhängig) sind. Das ist sehr hilfreich, für Anwendungen unter X Window System. imake wird jedoch auch für Anwendungen auf anderen Systemen benutzt.

Man nutzt imake auf die einfachste Art, indem man in das Hauptverzeichnis des entpackten Archivs wechselt und dort das Skript xmkmf aufruft. Dieses startet das imake-Programm:

$ xmkmf -a
$ imake -DUseInstalled -I/usr/X11R6/lib/X11/config
$ make Makefiles

Falls ein Fehler auftritt, rekompilieren und installieren Sie X11R6 neu!

Verschiedene Shell-Skripte

Die nötigen Informationen finden Sie in den Dateien INSTALL oder README. Normalerweise müssen Sie ein Skript mit dem Namen install.sh oder configure.sh starten. Das dann ablaufende Skript ist entweder autonom (es sucht sich selbst, was es braucht) oder interaktiv, d.h., es fragt Sie nach Informationen über Ihr System (z.B. nach Pfaden).

Wenn Sie die Datei, die gestartet werden soll, nicht finden, geben Sie in der bash einfach die Zeichen ./ ein und drücken dann zweimal auf TAB. Die bash wird (in der Standardeinstellung) dann den angefangenen Befehl automatisch mit einer möglichen ausführbaren Datei (also auch einem möglichen Konfigurationsskript) aus dem aktuellen Verzeichnis vervollständigen. Falls es in dem Verzeichnis mehrere ausführbare Dateien existieren bekommen Sie eine Liste gezeigt, aus der Sie nur noch die richtige Datei auswählen müssen.

Ein weiterer Sonderfall ist die Installation von perl-Modulen. Das geschieht durch die Ausführung eines in perl geschriebenen Konfigurationsskripts. Normalerweise lautet der dazu nötige Befehl:

$ perl Makefile.PL

Alternativen

Es gibt auch Pakete mit freier Software, die schlecht strukturiert sind, speziell in den ersten Phasen der Entwicklung (der Benutzer wird jedoch davor gewarnt!). Sie verlangen manchmal das „manuelle“ Ändern der Konfigurationsdateien. Meist sind das die Dateien Makefile (siehe „Make“) und config.h (dieser Name ist nur eine Konvention).

Wir raten Ihnen von diesen Manipulationen ab, es sei denn, Sie wissen genau, was Sie tun. Dazu gehört eine Menge Wissen und etwas Motivation, aber auch hier macht die Übung den Meister.