Erstellen/Installieren von Programmen im Sourcecode

Beschreibung: Die Kandidaten sollen in der Lage sein, ein Programm aus dem Quellcode zu kompilieren und zu installieren. Das beinhaltet auch das Extrahieren von Quelldateien aus einem Archiv. Die Kandidaten sollen in der Lage sein, einfache Anpassungen am Makefile durch direktes Editieren oder mit Hilfe der configure-Werkzeuge vorzunehmen, etwa um Pfade anzupassen oder zusätzliche Include-Verzeichnisse aufzunehmen. 

Wichtigste Wissensgebiete:
Auspacken des Quellcodes aus einem Archiv mit den üblichen Pack-Programmen.
Vornehmen einfacher Anpassungen am Makefile, beispielsweise das Anpassen der Pfade oder das Hinzufügen weiterer Include-Verzeichnisse.
Hinzufügen weiterer Parameter zum configure-Script.
Wissen, wo Quelldateien standardmäßig gespeichert werden.
Kompilieren eines RPM- oder DPKG-Paketes aus den Quellen.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
RPM- und DPKG-Befehle
/usr/src/
gunzip
gzip
bzip2
tar
configure
make

Bunzip2

Das Tool bunzip2 wird dazu genutzt, um Tar-Archive in bz2-Archive und umgekehrt zu verwandeln. Der Befehl bunzip2 -z dhcpcd-3.0.0.tar komprimiert das Tar-File und erzeugt das bz2-Archiv dhcpcd-3.0.0.tar.bz2. Hier die wichtigsten Optionen:

   -d --decompress     entpacken
   -z --compress       komprimieren
   -t --test           test compressed file integrity
   -v --verbose        bunzip2 soll "sprechen"

Beispiele:
bunzip2 -z dhcpcd-3.0.0.tar = bz2-Archiv erstellen
bunzip2 -d dhcpcd-3.0.0.tar.bz2 = bz2-Archiv entpacken

Tar

Tar ist ein wichtiges Werkzeug zum Komprimieren und entpacken von tar-, gz- und bz2-Archiven. Mit ein wenig Übung kann man über die Shell Dateien in ein komprimiertes Archiv verpacken, komprimierte Archive entpacken oder sich die Inhalte eines solchen Archivs anzeigen lassen.

Es gibt folgende Archive:

datei.tar = Unkomprimiertes Tar-Archiv

datei.tar.gz, datei.tgz = gzip komprimiertes Archiv

datei.tar.bz2 = bzip2 komprimiertes Archiv

Wir müssen uns also ersteinmal merken, mit welchen Dateien wir arbeiten. Dazu geben wir tar als Option entweder -z (gzip) oder -j (bzip2) mit auf dem Weg. Wenn diese Frage beantwortet wurde, können wir Tar sagen, was mit diesem File getan werden soll. Hier eine Übersicht der wichtigsten Optionen:

-z = gzip-Kompression

-j = bzip2-Kompression

-x = Archiv entpacken (extract)

-c = Archiv erstellen (create)

-t = Inhalt anzeigen lassen (tree)

-u = Archiv updaten

-d = Archiv und Dateien vergleichen

-f = Angabe zur Datei, die bearbeitet werden soll (file)

-v = Tar soll anzeigen, was es macht (verbose)

-k = lokale Dateien nicht überschreiben

-p = Rechte beibehalten

-C = Entpacken nach...

Wichtig: Der Paramater -f muss immer am Ende der "Options-Kette"stehen. Ein tar -xfj datei.tar.bz2 führt zu einer Fehlermeldung.

Beispiele:

tar -xjf datei.tar.bz2 = Entpacken eines bzip2-Archivs

tar -xzf datei.tar.gz = Entpacken eines gzip-Archivs

tar -cjf datei.tar.bz2 icons/*.png = Erstellen eines bzip2-Archivs

tar -czf datei.tar.gz icons/*.png = Erstellen eines gzip-Archivs

tar -tf datei.tar.gz = Anzeigen des Inhaltes

Configure

Einfache Programme benötigen keine Libraries bzw. Bibliotheken und können daher einfach so kompiliert werden. Bei so gut wie allen Programmen werden aber solche Bibliotheken benötigt, die man in einem Makefile angeben muss. Damit man die Verzeichnisse, wo sich diese Bibliotheken befinden, manuell anlegen muss, gibt es das Programm configure. Configure durchsucht das Linux-System nach bestimmten Verzeichnissen und Dateien, die zur Kompilierung des Programms benötigt werden und erstellt dann das MAKEFILE.

Make

Nachdem das Makefile, indem unter anderem auch festgelegt wird, in welches Verzeichnis das Programm installiert wird, erstellt wurde, kann man mit make den Quellcode kompilieren. Make erstellt so genannte Objektdateien, welche auf .o enden, und das auführbare Programm. Für make gibt es bestimmte Optionen, die man kennen sollte:

make = übersetzt (kompiliert) das Programm
make install = installiert das Programm in die Verzeichnisse, die durch configure ermittelt wurden
make clean = löscht die Objektdateien, die beim vorherigen Kompilieren angelegt wurden. Somit geht man sicher, dass alles Programmteile neu kompiliert werden.
make dist-clean = Wie make clean, nur dass alle Dateien gelöscht werden, die nicht zum Originalarchiv gehören
make dep

make install

Mit make install werden die erstellten Objektdateien und ausführbaren Programme in die entsprechende Verzeichnisse kopiert (installiert).

Demzufolge installiert man ein Programm, welches als Sourcecode vorliegt, mit dem Dreisatz: ./configure - make - make install.

Statisch/Dynamisch gelinkte Programme

Bevor der Unterschied zwischen statisch und dynamisch gelinkten Programmen erklärt wird, sollte man überhaupt wissen, was Bibliotheken sind. Um häufig benutzte Programme nicht immer wieder neu erfinden zu müssen, liegen diese an einer zentralen Stelle als Bibliotheken. Diese können von mehreren Programmen gleichzeitig genutzt werden.

Statisch gelinkte Programme
Hier werden die oben genannten Bibliotheken bzw. Routinen fest in das Programm übernommen.

Übersicht:
- monolithisches Programm
- alleine lauffähig
- startet langsamer
- benötigt viel Speicher

Dynamisch gelinkte Programme
In diesem Fall werden die Bibliotheken nicht eingebunden, sondern nur ein Verweis auf diese Bibliotheken gesetzt. Diese müssen dann auf dem System vorhanden sein, ansonsten funktioniert das Programm nicht.

Übersicht:
- Bibliotheken werden nicht in das Programm eingebunden
- Geladene Routinen können von mehreren Programmen gleichzeitig genutzt werden
- Weniger Speicher wird benötigt
- Programme starten in der Regel schneller