[[Vorlage(Getestet, general)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Paketen] [:sudo: Arbeiten als Superuser] [:Paketinstallation_DEB: Ein einzelnes Paket manuell installieren] [:Homeverzeichnis: Grundlagen zum Homeverzeichnis] }}} [[Inhaltsverzeichnis(2)]] 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 [:Programme_kompilieren#Allgemeines-Vorgehen: 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: {{{#!vorlage Paketinstallation dh-make fakeroot }}} Der Unterschied zwischen den beiden Methoden besteht darin, dass man mit `checkinstall` auch [#Abweichende-Methoden abweichende Installationsarten] abfangen kann, während mit der Debian-Methode lediglich der klassischen Dreisatz aus der [:Programme_kompilieren#Die-Standard_Methode: 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 [:Programme_kompilieren#Weitere-Optionen: weitere Optionen] an das Skript übergeben, dann muss man es im Vorfeld einmal durchlaufen lassen: {{{#!vorlage Befehl ./configure --prefix=Pfad --enable-xyz --disable-xyz }}} Anschließend `dh_make` ausführen, um die Debian-Paketinformationen erstellen zu lassen: {{{#!vorlage Befehl dh_make }}} Für den Pakettyp nimmt man in der Regel ''"Single Binary"'', bestätigt also mit [[Vorlage(Tasten, 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl fakeroot debian/rules binary }}} == Installation == Das von "`fakeroot`" erstellte Paket ein Verzeichnis oberhalb vom Quelltextverzeichnis kann wie gewohnt installiert werden[3]. == Zusammenfassung == Der [:Programme_kompilieren#dreisatz: klassische Dreisatz] ändert sich für die Debian-Methode dahingehend: {{{#!vorlage Befehl ./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 [wikipedia:CMake:Cross-Platform Make] ist recht ähnlich zu den bereits angesprochenen Methoden und wird zum Beispiel von der [:KDE:KDE Community] und [:Compiz:] verwendet. Hierbei übernimmt `cmake` lediglich die Aufgabe des '''configure'''-Skriptes. Dazu muss das gleichnamige Paket installiert sein:[1] {{{#!vorlage Paketinstallation 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 [:Programme_kompilieren#Dokumentation: Dokumentation] entnehmen. Würde beispielsweise das Unterverzeichnis '''build''' vorausgesetzt werden, sähe der Ablauf so aus: {{{#!vorlage Befehl mkdir build cd build cmake .. }}} Kompilieren und Installieren können dann wieder so ausgeführt werden wie in der [:Programme_kompilieren#Die-Standard-Methode: Standard-] bzw. [:Programme_kompilieren#Allgemeines-Vorgehen: Ubuntu-Methode] beschrieben mit dem Unterschied, dass auch diese im Unterverzeichnis für "`cmake`" aufgerufen werden müssen: {{{#!vorlage Befehl build$ make build$ sudo make install bzw. build$ sudo checkinstall }}} Und optional: {{{#!vorlage Befehl 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 '''.pro'''-Datei mit den Informationen zum Kompilieren vorliegen oder erstellt werden. Mit den Befehlen {{{#!vorlage Befehl qmake-qt4 .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:]. ##== GNU Build System aka Autotools == ##'''FIX ME'''... Hier fehlt noch die Erklärung zur Konfiguration des Quelltextes mit den Autotools über `./autogen.sh`. Wann `./configure`, wann nicht? Ist es die Regel, dass `./configure` automatisch durch `./autogen.sh` aufgerufen wird? Übergeben weiterer `configure`-Optionen nur beim manuellen Aufruf möglich? Was genau machen die Autotools eigentlich? [wikipedia:GNU_Build_System:] ##Benötigte Pakete voraussichtlich: ## *'''autoconf''' ## *'''automake''' == SCons == Mit der Verwendung des [wikipedia:SCons: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] {{{#!vorlage Paketinstallation scons }}} Auch mit "`scons`" wird im Quelltextverzeichnis gearbeitet und weitere Optionen, die man übergeben kann, können der [#Dokumentation Dokumentation] entnommen werden. Kompiliert wird mit folgenden Befehl: {{{#!vorlage Befehl scons }}} Die Installation eines Programms mit `scons` kann ebenfalls mit `checkinstall` erfolgen. Statt: {{{#!vorlage Befehl sudo scons install }}} also: {{{#!vorlage Befehl sudo checkinstall scons install }}} Um ein Quelltextverzeichnis von kompilierten Programmteilen wieder zu säubern, verfügt `scons` über eine eigene Option: {{{#!vorlage Befehl scons -c }}} == Installationsskripte == Programme in [wikipedia:Skriptsprache: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 [#Programme-in-Skriptsprache Programmen in Skriptsprachen] und [#Vorkompilierte-Programme 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: {{{#!vorlage Befehl ./install.sh python setup.py install }}} Also: {{{#!vorlage Befehl sudo checkinstall ./install.sh sudo checkinstall python setup.py install }}} == Programme in Skriptsprache == Wie im Abschnitt [#Installationsskripte Installationsskripte] schon angesprochen, müssen Programme in [wikipedia:Skriptsprache: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''': {{{#!vorlage Befehl sudo ln -s /opt/programmverzeichnis/startskript /usr/local/bin }}} Möchte man so zwei Programmversionen parallel nutzen, also z.B. [http://digitaldump.wordpress.com/projects/rednotebook/ RedNotebook] {en} 0.8.1 aus den Paketquellen und Version 0.9.0 in '''/opt''' muss man dafür nur den Namen des Softlinks anpassen: {{{#!vorlage Befehl 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 Programme in Skriptsprache] beschrieben. = Links = * [:Grundlagen_der_Paketerstellung:] * [:Open_Build_Service:] - Dienst zur Paketerstellung und -verwaltung * [http://www.linux-user.de/ausgabe/2006/07/047-checkinstall/ Checkinstall - Pakete bauen ohne Mehraufwand] {de} - LinuxUser, 07/2006 * [http://www.linux-user.de/ausgabe/2005/07/086-kompilieren/ Programme selber kompilieren] {de} - LinuxUser, 07/2005 * [http://openbook.rheinwerk-verlag.de/ubuntu/1945_13_004.html#dodtpea30fe08-c78a-4c66-9fae-c29d980ebc56 Sekundärsoftware aus Quellen] {de} - aus "Ubuntu GNU/Linux" von Marcus Fischer, Rheinwerk #tag: System, Installation, Programmierung, Paketbau