13.3. Konfiguration

Eine rein technische Facette der Tatsache, dass Sie den Quellcode besitzen, ist die Portierbarkeit der Software. Freie Software, die für ein bestimmtes Unix-System entwickelt wurde, kann meist mit geringfügigen Änderungen auf vielen anderen Unix-Systemen (frei oder proprietär) eingesetzt werden.

Es gibt verschiedene Konfigurationssysteme unter denen ein Software-Autor eines auswählen kann. Manchmal sind auch mehrere nach­einan­der erforderlich. Normalerweise können Sie:

13.3.1. Autoconf

13.3.1.1. Das Prinzip

Autoconf konfiguriert ein Softwarepaket. Es erstellt alle Dateien, die bei der Kompilation gebraucht werden (die Makefiles beispielsweise) und greift manchmal direkt auf den Quellcode zu (etwa mittels config.h.in).

Das Prinzip von Autoconf ist einfach:

  • Der Entwickler oder die Entwicklerin einer Software weiß, welche Anforderungen sein/ihr Programm an ein System stellt (etwa: ,,Wel­che Version dieser Programmbibliothek wird gebraucht?``). Diese Anforderungen werden, einer festgelegten Syntax folgend, in eine Datei namens configure.in geschrieben.

  • Durch ausführen des Programms Autoconf wird ein Konfigurations­skript namens configure aus den Daten in configure.in erstellt. Dieses Skript wird auf dem Rechner des Endbenutzers die nötigen Konfigurationstests durchführen.

  • Der Endnutzer lässt das Skript configure laufen. Sofern dieses korrekt arbeitet wird die Konfiguration der Kompilationsparameter für ihn durchgeführt.

13.3.1.2. Ein Beispiel

Es folgt ein Beispiel für die Verwendung 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

Einige Optionen erlauben eine bessere Kontrolle über den Befehl configure, wie etwa:

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

Verwenden Sie Bash als Shell, sollte der Aufruf folgendermaßen aussehen:

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

oder:

$ CC=gcc CFLAGS=-O2 ./configure

13.3.1.3. Was wenn... es nicht klappt?

Meist bekommen Sie als Resultat eine Fehlermeldung wie diese:

configure: error: Cannot find library guile

Das heißt, dass das configure-Skript nicht in der Lage war, eine bestimmte Programmbibliothek zu finden (in diesem Beispiel guile). Das configure-Skript kompiliert für jede benötigte Bibliothek ein kurzes Testprogramm. Schlägt diese Testkompilation fehl, gibt configure eine Fehlermeldung aus, da dann auch nicht die komplette Software übersetzt werden kann.

  • Schauen Sie sich die letzten Zeilen der Datei config.log an. Diese Datei verzeichnet alle Konfigurationsschritte. Der C-Kompilierer gibt recht verständliche Fehlermeldungen aus. Das sollte Ihnen hel­fen.

  • Stellen Sie sicher, dass die gesuchte Bibliothek installiert ist. Wenn nicht, installieren Sie sie. Starten Sie /sbin/ldconfig, löschen Sie die Datei config.cache und starten Sie configure erneut. Eine effiziente Möglichkeit, eine Bibliothek zu überprüfen, ist nach der Datei zu suchen, die ihre Symbole enthält. Ihr Name hat immer folgendes Muster: lib<name>.so. Zum Beispiel,

    $ find / -name 'libguile*'

    oder auch:

    $ locate libguile
  • Überprüfen Sie, ob der Kompilierer auf die Bibliothek zugreifen kann. Dazu sollte sie sich in einem dieser Verzeichnisse befinden: /usr/lib, /lib, /usr/X11R6/lib oder in einem Verzeichnis, das in der Umgebungsvariable LD_LIBRARY_PATH (erklärt in Abschnitt 13.4.5 5.ii) zu finden ist, bzw. in einem Verzeichnis, das in der Datei /etc/ld.so.conf aufgeführt ist. Überprüfen Sie, ob es sich bei dieser Datei um eine Bibliothek handelt, indem Sie file libguile.so eingeben. Sie erhalten meistens eine Ausgabe, dass diese Datei auf die aktuelle Version der Bibliothek verweist. Beach­ten Sie bitte, dass Sie sich entweder in dem Verzeichnis befinden, in dem die Bibliothek liegt, oder aber bei dem file-Kommando den vollständigen Pfad angeben.

  • Überprüfen Sie ob die der Bibliothek entsprechenden Kopfdateien am richtigen Ort installiert worden sind (gewöhnlich /usr/include, /usr/local/include oder /usr/X11R6/include). Das tun Sie am besten, indem Sie mittels rpm nachprüfen, ob die Entwicklungs­version der entsprechenden Bibliothek (<lib-name>-devel) installiert worden ist. Die Entwicklungsversion stellt die notwendigen ,,include``-Dateien für die Kompilation von Software bereit, die diese Bibliothek benötigt.

  • Überprüfen Sie mittels df -k ob Ihnen genug Festplattenplatz zur Verfügung steht (configure braucht einigen Platz für temporäre Dateien. Vermeiden Sie (nahezu) volle Partitionen.

Wenn Sie mit der Fehlermeldung in der config.log-Datei nichts anfangen können, fragen Sie andere Benutzer (siehe Abschnitt 13.6.2)!

Wenn configure fehlschlägt, obwohl Sie sich absolut sicher sind, die benötigten Dateien installiert zu haben, sollten Sie überprüfen, welche Optionen configure Ihnen zur Verfügung stellt: geben Sie mal ./configure --help ein! Manchmal können Sie bestimmte Tests einfach abstellen oder auf die Einbeziehung bestimmter Bibliotheken verzichten. Es ist aber auch möglich, dass die Variable, die den Pfad zu den Bibliotheken enthalten kann (LD_LIBRARY_PATH), falsch gesetzt ist.

13.3.2. Imake

Imake stellt nach einfachen Regeln ein Makefile her. Diese Regeln sind in der Datei Imakefile festgelegt und bestimmen, welche Dateien zur Kompilation gebraucht werden.

Imake verwendet architektur-spezifische Informationen. Das ist besonders nützlich bei Anwendungen die X Window System verwenden. Aber Imake wird auch für andere Anwendungen verwendet.

Am einfachsten gebrauchen Sie Imake, indem Sie sich in das Wurzelverzeichnis des Softwarepakets begeben und dann das xmkmf-Skript aufrufen, welches dann Imake aufruft:

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

Sollte das nicht klappen, sollten Sie Ihre Imake-Installation überprüfen.

13.3.3. Verschiedene Shell-Skripte

Lesen Sie die Datei INSTALL oder README für weitere Informationen. Für gewöhnlich heißt das Installationsskript install.sh oder configure.sh. Das Skript läuft dann entweder automatisch ab oder bittet Sie, Systeminformationen anzugeben (wie etwa Pfade).

Wenn Sie nicht feststellen können, welche Datei das Installationsprogramm startet, tippen Sie ./ (in der Bash) und betätigen dann zweimal die TAB-Taste (Tabulator). Bash sucht dann nach einer ausführbaren Datei im aktuellen Verzeichnis und gibt Ihnen bei mehreren Dateien eine Auswahlliste an, Sie müssen dann nur noch die richtige auswählen.

 

 

Ein besonderer Fall ist die Installation von Perl-Modulen: Die Installation wird vom einem Perl-Skript durchgeführt, das Sie folgendermaßen starten:

$ perl Makefile.PL

13.3.4. Andere Möglichkeiten

Einige – vor allem ältere und kleinere-Softwarepakete erfordern die Einstellung systemrelevanter Parameter direkt in der Datei Makefile (siehe Abschnitt 13.4.1) oder config.h. Lesen Sie dazu die bereits erwähnten Dateien README und INSTALL.

Änderungen dieser Art können die ersten paar Male ziemlich frustrierend sein, doch nach und nach werden Sie Übung darin bekommen :-) Sie sollten das Software-Building-HOWTO konsultieren, falls Sie weitere Informationen benätigen.


Tux on Star from MandrakeSoft Linux ist ein eingetragenes Warenzeichen von Linus Torvalds. Alle anderen Warenzeichen und Copyrights sind das Eigentum ihrer Inhaber.
Sofern nichts anderes Angaben ist, unterliegen die Inhalte der Seiten sowie alle Bilder dem Copyright von MandrakeSoft S.A. und MandrakeSoft Inc. 2000.
http://www.linux-mandrake.com/