Jetzt hab ich so ein tolles Programm gefunden, welches leider in meinem Paketformat (auf den Installations-CDs, oder in anderen Quellen, die für meine LinuxDistribution geeignet sind) nicht erhältlich ist (das sollte man vorher unbedingt prüfen, es erspart eine Menge Mühe, siehe PaketManager), und es ist noch nicht kompiliert. Mist.

Vorraussetzungen

Kein Mist. Vorraussetzung: Man hat den GCC und die diversen Tools (make, autotools, etc.) installiert -- alles, was man auch benötigt, um einen Kernel zu kompilieren. Dürfte kein Problem sein, die meisten Distributionen liefern den Kram so mit, dass sich das "Installieren" der Compiler(-tools) wirklich auf "Klick+fertig" beschränkt.

Warum muss ich überhaupt etwas kompilieren?

In der UNIX-Welt ist es eigentlich unüblich, freie Software als binary (d.h. fertig ausführbare Programmdatei) zu verteilen. Das liegt daran, dass fast jedes UNIX -- auch Linux! -- auf mindestens 20 verschiedenen (Hardware-)Plattformen läuft, und man als Programmierer selten die Zeit, Möglichkeit und Lust hat, sämtliche Plattformen selbst zu kompilieren und konfigurieren. Und da ja sowieso (fast) jedes Programm unter der GPL vertrieben wird und damit frei verfügbar ist, ist es dann sinnvoll, gleich den Sourcecode zu verteilen, so kann auch jeder, der Lust hat, am Code basteln und das eine oder andere Feature einbauen. Der Autor freut sich, wenn er Unterstützung bekommt! ;-)

In der Regel reicht es völlig, sich mal die README oder INSTALL Datei innerhalb des Archives durchzugucken, da steht fast immer eine sehr detaillerte Installationsanleitung drin. Es reicht allerdings fast immer auch folgendes (das sollte man vorher aber unbedingt prüfen!):

Vorgehensweise (normalerweise)

Als normaler Benutzer eingeloggt:

./configure

(falls vorhanden)

configure guckt sich das System an und stellt bestimmte Systemvariablen fest (Prozessortyp, Kerneltyp, usw.). configure --help listet mögliche Optionen, z.B. Installationspfade. (zwischen /opt/ und /usr/local/ als Installationspfad läßt sich streiten) Die Ausgabe von ./configure sollte man sich genau ansehen, da dort eventuell fehlende, aber benötigte Bibliotheken angezeigt werden. Bei den meisten Distributionen werden die Bibliotheken und die dazugehörigen Header-Files, die man benötigt um eigene Programme kompilieren zu können, in unterschiedlichen Paketen angeboten. Meldet ./configure, dass es eine Bibliothek vermisst, dann sollte man nachschauen, ob zum einen die Bibliothek selbst und die dazugehörigen Header-Files installiert sind. Danach sollte man mit

rm config.cache

Die Ergebnisse des letzten configure-Durchlaufs löschen, damit auch wirklich nach den neu installierten Dateien gesucht wird.

Wenn kein configure vorhanden ist, kann man auch das Makefile editieren. Wenn es weder ein configure noch ein Makefile gibt, könnte es noch sein, dass es ein Makefile.cvs gibt. Dies ist bei einigen OpenSource-Projekten der Fall, deren Sourcen man sich über das CVS besorgt hat.

make -f Makefile.cvs

erzeugt dann eine entsprechende configure-Datei.

make

kompiliert, erzeugt also das ausführbare Programm.

Als "root":

make install

kopiert Dateien an ihren Platz, fragt ggf. nach Einstellungen, ändert eigentlich nie irgend etwas anderes außerhalb des Installationsverzeichnisses (wenn, wird darauf in der README hingewiesen -- oder es ist ein (fieser) Bug!)

Ein paar Tips noch zur Sicherheit

Insbesondere wenn mehrere Benutzer mit Deinem System arbeiten: Es ist sinnvoll, dazu siehe auch VerzeichnisBaum, sämtliche Sourcen von Programmen, die nicht zur Distribution gehören, unterhalb z.B. von /usr/local/src/ zu installieren, und einer Gruppe von Usern (z.B. src, notfalls anlegen) Schreibzugriff auf dieses Verzeichnis zu geben. Dann macht man sämtliche Kompilationsarbeiten als ein User dieser Gruppe.

Dahinter steckt im Grunde nur eins: Ich möchte sicher sein, dass nicht schon die Kompiliation eines Programms irgendwelche Konfigurationen meines Rechners ändert. Und deshalb kompiliere ich Programme grundsätzlich in einem Account, das sonst auf fast gar nix Zugriff hat. Hier spielt die Multiuserfaehigkeit von Programmen eine Rolle: man sollte sie nutzen, wenn man schon die Chance dazu hat. :)

Einzig das make install kopiert (i.d.R.) einiges unterhalb von /usr/local/ oder /opt/, und dafür braucht man normalerweise root-Rechte, außer man "schenkt" die komplette /usr/local/ Hierarchie, außer /usr/local/sbin/ (da gehören selbstkompilierte Programme für den Systemadministrator rein), einem bestimmten (Pseudo-)User, als welcher man dann die Installationen durchführt. Das mag kompliziert klingen, so kann man aber effektiv verhindern, dass ein Programm auch nur das darf, was es können soll: Führe es unter einem Account aus, welches eben nur diese Zugriffe besitzt.

Es funktioniert nicht!

Sollte etwas nicht laufen, ist meistens irgendeine Pfadangabe im Makefile kaputt oder falsch, oder es fehlt schlicht ein Paket, eine Library oder ähnliches. Deshalb: INSTALL bzw. README genau lesen! Und wenn man ein Problem hat, und den Autor an"mailt": genaue Fehlermeldungen zitieren!

Sauberes Entfernen von selbst kompilierten und installierten Programmen:

Will man die Sourcen von dem Programm sowieso erstmal auf Platte behalten, reicht (fast) immer ein make uninstall oder ähnliches (siehe Doku des Programmes). Ansonsten siehe hier: InstallierteSoftwareEntfernen.

SourceCodeKompilieren (zuletzt geändert am 2007-12-23 22:45:33 durch localhost)