Programme kompilieren/Alternativen

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Paketen

  2. Arbeiten als Superuser

  3. Ein einzelnes Paket manuell installieren

  4. Grundlagen zum Homeverzeichnis

Inhaltsverzeichnis
  1. Die Debian Methode
    1. Konfiguration
    2. Kompilieren
    3. Installation
    4. Zusammenfassung
  2. Abweichende Methoden
    1. CMake
    2. qmake
    3. SCons
    4. Installationsskripte
    5. Programme in Skriptsprache
    6. Vorkompilierte Programme
  3. Links

Die Grundlagen des Kompilierung sind in Programme kompilieren beschrieben. Die Vorbereitungen wie Auflösung der Abhängigkeiten etc. gelten zum Großteil auch für die hier beschriebenen Verfahren.

Die Debian Methode

Bei dieser Alternative zur Ubuntu-Methode wird auf make und checkinstall verzichtet und stattdessen mit dh_make (siehe auch dh make) und fakeroot gearbeitet. Dazu müssen die beiden gleichnamigen Pakete installiert[1] sein:

Paketliste zum Kopieren:

sudo apt-get install dh-make fakeroot 

Oder mit apturl die Pakete installieren. Link: apt://dh-make,fakeroot

Der Unterschied zwischen den beiden Methoden besteht darin, dass man mit checkinstall auch abweichende Installationsarten abfangen kann, während mit der Debian-Methode lediglich der klassischen Dreisatz aus der Standard-Methode möglich ist. Dafür eignet sich die Debian-Methode besser, wenn man sich näher mit dem validen Paketbau beschäftigen möchte, weil man mit dieser Methode die nötigen Dateien wie z.B. /debian/control erhält, die man editieren kann, um z.B. Abhängigkeiten usw. anzugeben. Valide Pakete bedeutet in diesem Zusammenhang, dass man diese Pakete auch ohne Bedenken an andere Personen weitergeben oder über das Internet veröffentlichen kann.

Konfiguration

Die Konfiguration über das configure-Skript ist hierbei optional, weil es später mit fakeroot automatisch ausgeführt wird. Möchte man allerdings weitere Optionen an das Skript übergeben, dann muss man es im Vorfeld einmal durchlaufen lassen:

./configure --prefix=Pfad --enable-xyz --disable-xyz 

Anschließend dh_make ausführen, um die Debian-Paketinformationen erstellen zu lassen:

dh_make 

Für den Pakettyp nimmt man in der Regel "Single Binary", bestätigt also mit S . dh_make erstellt dann die Regeln für fakeroot und eine Sicherheitskopie des Quelltextverzeichnisses wird angelegt.

Sollte diese Sicherheitskopie nicht angelegt werden, kann das mit folgendem Befehl erzwungen werden:

dh_make --createorig 

Kompilieren

Abschließend wird das configure-Skript automatisch aufgerufen (sofern nicht vorher vom Anwender durchgeführt), das Programm kompiliert und ein Debian-Paket (.deb) ein Verzeichnis oberhalb des Quelltextverzeichnisses erstellt. Im Gegenensatz zu checkinstall wird dieses Paket von fakeroot aber nicht automatisch installiert, deshalb wird hierbei kein sudo[2] benötigt:

fakeroot debian/rules binary 

Installation

Das von "fakeroot" erstellte Paket ein Verzeichnis oberhalb vom Quelltextverzeichnis kann wie gewohnt installiert werden[3].

Zusammenfassung

Der klassische Dreisatz ändert sich für die Debian-Methode dahingehend:

./configure OPTIONS (optional)
dh_make
fakeroot debian/rules binary 

Abweichende Methoden

Nicht alle Programme verwenden für das Kompilieren und Installieren die oben genannten Methoden. In diesem Abschnitt werden einige gängige, abweichende Methoden beschrieben.

CMake

Die Variante über Cross-Platform Make ist recht ähnlich zu den bereits angesprochenen Methoden und wird zum Beispiel von der KDE Community und Compiz verwendet. Hierbei übernimmt cmake lediglich die Aufgabe des configure-Skriptes. Dazu muss das gleichnamige Paket installiert sein:[1]

Paketliste zum Kopieren:

sudo apt-get install cmake 

Oder mit apturl die Pakete installieren. Link: apt://cmake

cmake benötigt im Quelltextverzeichnis ein Unterverzeichnis als Arbeitsverzeichnis. Namen dieses Unterverzeichnisses, sowie weitere Optionen, die an "cmake" übergeben werden können, kann man der Dokumentation entnehmen. Würde beispielsweise das Unterverzeichnis build vorausgesetzt werden, sähe der Ablauf so aus:

mkdir build
cd build
cmake .. 

Kompilieren und Installieren können dann wieder so ausgeführt werden wie in der Standard- bzw. Ubuntu-Methode beschrieben mit dem Unterschied, dass auch diese im Unterverzeichnis für "cmake" aufgerufen werden müssen:

build$ make
build$ sudo make install
bzw.
build$ sudo checkinstall 

Und optional:

build$ sudo make uninstall
build$ make clean 

Ausführlichere Informationen finden sich im Artikel CMake.

qmake

Programme, die in Qt verfasst sind, werden mit qmake erstellt. Dazu muss eine <programmname>.pro-Datei mit den Informationen zum Kompilieren vorliegen oder erstellt werden.

Mit den Befehlen

qmake-qt4 <programmname>.pro
qmake-qt4  

wird dann ein Makefile für die Kompilierung erstellt, das dann wie in den anderen Verfahren beschrieben weiterverarbeitet wird. qmake stellt insofern also nur eine "Vorstufe" zu make dar. Nähere Angaben finden sich im Artikel Qt.

SCons

Mit der Verwendung des Software Construction Tools wird ganz auf ein configure-Skript oder "make" verzichtet. Die Konfiguration wird dabei von "scons" selber automatisch über die Datei SConstruct abgewickelt. Dazu muss das gleichnamige Paket installiert sein:[1]

Paketliste zum Kopieren:

sudo apt-get install scons 

Oder mit apturl die Pakete installieren. Link: apt://scons

Auch mit "scons" wird im Quelltextverzeichnis gearbeitet und weitere Optionen, die man übergeben kann, können der Dokumentation entnommen werden. Kompiliert wird mit folgenden Befehl:

scons 

Die Installation eines Programms mit scons kann ebenfalls mit checkinstall erfolgen.

Statt:

sudo scons install 

also:

sudo checkinstall scons install 

Um ein Quelltextverzeichnis von kompilierten Programmteilen wieder zu säubern, verfügt scons über eine eigene Option:

scons -c 

Installationsskripte

Programme in Skriptsprachen wie Python, Perl, Ruby usw. bieten oftmals Installationsskripte an. Solche Programme müssen nicht kompiliert werden und die Skripte übernehmen lediglich die Aufgabe, die Dateien an den richtigen Ort zu kopieren, um das Programm systemweit verfügbar zu machen. So etwas ist auch für vorkompilierte Programme zutreffend.

Eine Installation ist meistens nicht zwingend erforderlich, worauf in folgenden Abschnitten zu Programmen in Skriptsprachen und Vorkompilierten Programmen näher eingegangen wird.

Für eine komfortable Installation solcher Skripte sollte man den Vorgang mit checkinstall abfangen. Zwei Beispiele anhand eines Shell- und eines Python-Skriptes:

Statt:

./install.sh
python setup.py install 

Also:

sudo checkinstall ./install.sh
sudo checkinstall python setup.py install 

Programme in Skriptsprache

Wie im Abschnitt Installationsskripte schon angesprochen, müssen Programme in Skriptsprachen eigentlich nicht kompiliert werden und eine Installation ist ebenfalls nicht zwingend. Solche Programme lassen sich ausführen, indem man im Quelltextverzeichnis ein entsprechendes Startskript aufruft.

Der Einfachheit halber sei hier empfohlen, solche Programme gar nicht erst über ein Installationsskript zu installieren, sondern sie entweder im Homeverzeichnis[4] abzulegen und einen Starter für das Programm einzurichten, oder von Hand systemweit verfügbar zu machen.

Für systemweite Verfügbarkeit kopiert man das Quelltextverzeichnis mit sudo nach /opt und erstellt einen Softlink für das Startskript nach /usr/local/bin:

sudo ln -s /opt/programmverzeichnis/startskript /usr/local/bin 

Möchte man so zwei Programmversionen parallel nutzen, also z.B. RedNotebook 🇬🇧 0.8.1 aus den Paketquellen und Version 0.9.0 in /opt muss man dafür nur den Namen des Softlinks anpassen:

sudo ln -s /opt/rednotebook-0.9.0/rednotebook/rednotebook /usr/local/bin/rednotebook-0.9.0 

Fehlermeldungen

Sollte ein Startskript nicht funktionieren, dann sollte man als erstes die Rechte der Datei prüfen. Wenn der Softlink in /usr/local/bin nicht funktionieren sollte, dann muss man sich ein kleines Shell-Skript mit dem Aufruf des Startskriptes im Quelltextverzeichnis schreiben und dieses dann nach /usr/local/bin verlinken.

Vorkompilierte Programme

Es gibt einige Programme für Linux, die mit vorkompilierten, ausführbaren Dateien (Binaries) angeboten werden. Das betrifft beispielsweise die meisten Mozilla-Projekte wie Firefox, Thunderbird und Blender 3D. Diese Programme lassen sich dann über den Aufruf der ausführbaren Datei oder einem darauf verlinkten Skriptes starten. Hierbei ist die Installation dann meistens auch nicht zwingend und man kann mit diesen Programmen ebenso verfahren wie in Programme in Skriptsprache beschrieben.