[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ weiter ]


APT HOWTO
Kapitel 6 - Aus den Quellen bauen


6.1 Herunterladen von Quellpaketen

In der Welt der freien Software ist es üblich, den Quellcode zu studieren oder auch Korrekturen an fehlerhaftem Code vorzunehmen. Ein Paket aus den Quellen zu bauen kann auch nützlich sein, falls Sie Features aktivieren wollen, die im offiziellen Paket deaktiviert sind, oder welche deaktivieren wollen, die aktiviert sind. Um dieses zu tun, müssen Sie den Quellcode des Programms herunterladen. Das APT-System bietet eine einfache Möglichkeit, den Quellcode der vielen Programme der Distribution einschließlich aller für das Erstellen eines .deb des Programms nötigen Dateien zu beziehen.

Eine andere übliche Anwendung für Debian-Quellen ist es eine aktuellere Version eines Programms aus der Distribution »unstable« zum Beispiel in »stable« zu benutzen. Das Paket »gegen« »stable« zu kompilieren erzeugt ein Paket mit Abhängigkeiten, die auf die Pakete aus dieser Distribution ausgerichtet sind.

Hierfür sollte der deb-src-Eintrag in Ihrer /etc/apt/sources.list auf »unstable« zeigen. Es sollte außerdem aktiviert sein, d.h. eventuelle Kommentarzeichen vor der Zeile müssen entfernt werden (Siehe Abschnitt Die Datei /etc/apt/sources.list, Abschnitt 4.1).

aptitude, Debians Paketmanager, ist hauptsächlich auf Binär-Pakete ausgerichtet. Um Quellpakete zu benutzen müssen wir stattdessen apt-get benutzen. Um ein Quellpaket herunterzuladen, benutzen Sie folgenden Befehl:

     $ apt-get source Paketname

Dies lädt drei Dateien herunter: ein .orig.tar.gz, ein .dsc und ein .diff.gz. Im Falle von Debian-nativen Paketen fällt das letzte weg und das erste hat für gewöhnlich kein »orig« im Namen.

Die Datei .dsc wird von dpkg-source benutzt, um das Quellpaket in das Verzeichnis Paketname-Version zu entpacken. In jedem heruntergeladenen Quellpaket befindet sich ein Verzeichnis debian/, welches die für das Bauen des .deb-Paketes nötigen Dateien enthält.

Um das Paket beim Herunterladen automatisch zu erzeugen, fügen Sie einfach -b zur Befehlszeile hinzu:

     $ apt-get -b source Paketname

Wenn Sie sich dazu entscheiden, das Paket noch nicht beim Herunterladen zu erzeugen, können Sie dieses später nachholen, indem Sie den folgenden Befehl in dem Verzeichnis, in dem das Paket nach dem Herunterladen entpackt wurde, ausführen:

     $ dpkg-buildpackage -rfakeroot -uc -b

Beachten Sie, dass Sie zum Bauen der meisten Pakete zumindest die folgenden Pakete benötigen: devscripts, dpkg-dev, debhelper und fakeroot; werfen Sie einen Blick auf Installieren und Reinstallieren von Paketen, Abschnitt 5.4 und installieren Sie diese, bevor Sie fortfahren. Die meisten Pakete hängen auch von Kompilierungs-Werkzeugen ab, so dass es nützlich ist, auch das Paket build-essential zu installieren. Andere Pakete könnten gebraucht werden, werfen Sie einen Blick auf Für das Kompilieren eines Quellpaketes notwendige Pakete, Abschnitt 6.2 für weitere Informationen.

Um das von den obigen Befehlen erzeugte Paket zu installieren muss man den Paket-Manager direkt benutzen. Werfen Sie einen Blick auf Manuell heruntergeladene oder lokal erzeugte Debian-Pakete installieren, Abschnitt 5.5. Das Paket devscripts enthält ein nützliches Werkzeug: debi. Falls Sie debi innerhalb des Verzeichnisses des Quellpaket ausführen, sucht es nach der .changes-Datei im übergeordneten Verzeichnis, um herauszufinden, welche Binärpakete das Quellpaket erzeugt, und es führt dpkg aus, um diese zu installieren. Dies ist in den meisten Fällen nützlich, außer wenn das Quellpaket kollidierende Binärpakete erzeugt. Natürlich brauchen Sie Root-Rechte, um dies auszuführen.

Es besteht ein Unterschied zwischen apt-gets Methode source und seinen anderen Methoden. Die source-Methode kann von normalen Benutzern ohne Root-Rechte benutzt werden. Die Dateien werden in das Verzeichnis heruntergeladen, aus dem der Befehl apt-get source Paket aufgerufen wurde.


6.2 Für das Kompilieren eines Quellpaketes notwendige Pakete

Normalerweise müssen sich spezielle Header-Dateien und Bibliotheken auf dem System befinden, um ein Quellpaket zu kompilieren. Alle Quellpakete haben ein Feld mit Namen »Build-Depends:« in ihrer Kontrolldatei, welches die Namen der zusätzlichen Pakete enthält, die für das Erzeugen des Paketes aus dem Quellcode nötig sind. Einige grundlegende Pakete werden ebenfalls benötigt, siehe Herunterladen von Quellpaketen, Abschnitt 6.1, bevor Sie fortfahren.

APT bietet eine einfache Möglichkeit diese Pakete herunterzuladen. Führen Sie einfach apt-get build-dep Paket aus, wobei »Paket« für den Namen des Pakets, welches Sie erzeugen wollen, steht. Beispiel:

     # apt-get build-dep gmc
     Paketlisten werden gelesen... Fertig
     Abhängigkeitsbaum wird aufgebaut... Fertig
     Die folgenden NEUEN Pakete werden installiert:
       comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev
       libgpmg1-dev 
     0 aktualisiert, 7 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.
     Es müssen 1069kB Archive geholt werden. Nach dem Auspacken werden 3514kB
     benutzt.
     Möchten Sie fortfahren? [J/n]

Die Pakete, die installiert werden, werden gebraucht, um gmc korrekt zu erzeugen. Es ist wichtig zu beachten, dass dieser Befehl nicht das Quellpaket des zu bauenden Programms herunterlädt. Sie müssen hierfür zusätzlich apt-get source ausführen.

Falls Sie nur feststellen möchten, welche Pakete zum Bau eines bestimmten Paketes benötigt werden, gibt es eine Methode showpkg des Befehls apt-cache (siehe Informationen über Pakete bekommen, Kapitel 7), die neben anderer Informationene die Zeile Build-Depends aufführt, die ihrerseits die erforderlichen Pakete auflistet.

     # apt-cache showsrc Paket

6.3 Ein Paket zur Fehlersuche bauen

Wenn Sie ein Paket zum Zwecke der Fehlersuche bauen wollen, zum Beispiel um einen Fehler zu melden -- oder zu reparieren, können Sie einfache Umgebungsvariablen benutzen, die von den meisten Debian-Paketen unterstützt werden.

Um ein Paket zu bauen, das ungestrippte[6] Binärdateien enthält, müssen Sie dem Bau-Befehl nur DEB_BUILD_OPTIONS=nostrip voranstellen. Optimierungen können ebenfalls die Fehlersuche erschweren, deshalb können Sie sie durch Hinzufügen von noopt zu der Variablen DEB_BUILD_OPTIONS ebenfalls deaktivieren. Ein Beispiel:

     $ DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -rfakeroot -uc -b

6.4 Anpassen von Optionen des Paket-Baus

Wenn Sie die Art und Weise anpassen wollen, wie das Paket gebaut wird, müssen Sie daran gehen, die Datei debian/rules zu editieren. Dies heißt: Innerhalb des Hauptverzeichnisses, das erzeugt wird wenn das Quellpaket entpackt wird, ist ein Verzeichnis debian, das viele Dateien enthält. Eine davon ist besonders: Die Datei rules.

Diese Datei ist für gewöhnlich ein Makefile, das Ziele hat zum Konfigurieren, Bauen, Installieren und Erzeugen des Pakets. Falls Sie zum Beispiel das Paket luola[7] ohne Sound bauen wollen, kann ich, nachdem ich seine Quellen heruntergeladen und entpackt habe, die Datei debian/rules editieren, die wie folgt aussieht:

     [...]
     configure: configure-stamp
     configure-stamp:
     	dh_testdir
     	# Add here commands to configure the package.
     	./configure $(confflags) \
     		--prefix=/usr \
     		--mandir=share/man \
     		--infodir=share/info \
     		--datadir=share/games \
     		--bindir=games \
     		--enable-sound
     #		 --enable-sdl-gfx	
     
     	touch configure-stamp
     [...]

Sehen Sie den Schalter --enable-sound? Falls ich ihn entferne oder durch --disable-sound ersetze und dann das Paket unter Benutzung der in Herunterladen von Quellpaketen, Abschnitt 6.1 beschriebenen Technik neu baue, habe ich ein luola-Paket, das ohne Sound gebaut wurde.

Wenn Sie wirklich auf einer täglichen Basis mit Quellpaketen arbeiten möchten, würde ich hauptsächlich das Lesen des Debian New Maintainers Guide (Führer für neue Debian-Betreuer) und des Debian Policy (Debian-Richtlinien-Handbuch) vorschlagen. Andere in der Debian Developers Corner (Debians Entwicklerecke) verfügbare Dokumentation mag ebenfalls nützlich sein.


6.5 Aber heh, ich will den Debian-Kram nicht benutzen!

Manchmal will man spezielle Versionen eines Programms benutzen, die nur als Quellcode verfügbar sind und nicht als Debian-Paket. Hier kann es allerdings Probleme mit dem Paket-System geben. Angenommen Sie wollen eine neue Version Ihres Mailservers kompilieren und alles klappt, aber viele Pakete in Debian hängen von einem MTA (Mail Transfer Agent) ab. Da etwas installiert wurde, was Sie selbst kompiliert haben, weiß das Paketsystem darüber nicht Bescheid.

Hier kommt das equivs ins Spiel. Um es zu benutzen, installieren Sie das Paket mit diesem Namen. Es erstellt ein leeres Paket, das die Abhängigkeiten erfüllt und dem Paketsystem mitteilt, so dass es keine Probleme mit Abhängigkeiten gibt.

Bevor wir näher darauf eingehen, ist es wichtig, Sie darauf hinzuweisen, dass es sicherere Möglichkeiten gibt, Programme, für die in Debian schon Pakete existieren, mit anderen Optionen zu kompilieren und man equivs nicht benutzen sollte, um Abhängigkeiten zu entfernen, ohne genau zu wissen, was man tut. Siehe Herunterladen von Quellpaketen, Abschnitt 6.1 für nähere Informationen.

Lassen Sie uns mit dem MTA-Beispiel fortfahren. Sie haben also gerade Ihren frisch kompilierten postfix installiert und wollen nun mutt (ein Mailprogramm) installieren. Plötzlich stellen Sie fest, dass mutt einen anderen MTA installieren möchte, obwohl Sie schon Ihren selbstkompilierten laufen haben.

Wechseln Sie in irgendein Verzeichnis (z.B. /tmp), und führen Sie folgendes aus:

     # equivs-control Name

Ersetzen Sie Name durch den Namen der Kontrolldatei, die Sie erstellen wollen. Die Datei wird wie folgt erstellt:

     Section: misc
     Priority: optional
     Standards-Version: 3.0.1
     
     Package: <Paketname; wenn nicht angegeben: equivs-dummy>
     Version: <Versionsnummer; wenn nicht angegeben: 1.0>
     Maintainer: <Ihr Name mit E-Mail-Adresse; wenn nicht angegeben: Benutzername >
     Pre-Depends: <Pakete>
     Depends: <Pakete>
     Recommends: <Pakete>
     Suggests: <Pakete>
     Provides: <(virtuelles) Paket>
     Architecture: all
     Copyright: <copyright Datei; normalerweise GPL2>
     Changelog: <changelog file; normalerweise ein generisches Changelog>
     Readme: <README.Debian file; wenn nicht angegeben, ebenfalls ein generisches>
     Extra-Files: <Zusätzliche Dateien für das doc-Verzeichnis, durch Komma getrennt>
     Description: <kurze Beschreibung; Standard ist "some wise words">
      Lange Beschreibung und Info
      .
      Zweiter Absatz

Nun muss das so angepaßt werden, dass es tut, was wir wollen. Gucken Sie sich die Felder und ihre Beschreibungen an, es ist nicht nötig, jedes einzelne hier zu erklären, lassen Sie uns stattdessen ein Beispiel ansehen:

     Section: misc
     Priority: optional
     Standards-Version: 3.0.1
     
     Package: mta-local
     Conflicts: mail-transport-agent
     Replaces: mail-transport-agent
     Provides: mail-transport-agent

Das war es schon. mutt hängt von mail-transport-agent ab, was ein virtuelles Paket ist, was alle MTAs liefern; mta-local meldet sich selbst unter Benutzung des Feldes »Provides« (Liefert) als ein mail-transport-agent an.

Die Felder Conflicts (Kollidiert) und Replaces (Ersetzt) werden ebenfalls benötigt, so dass APT und dpkg wissen, dass sie das aktuell installiert MTA-Paket zugunsten des neuen, das Sie installieren, entfernen sollten.

Nun muss das Paket nur noch gebaut werden:

     # equivs-build name
     dh_testdir
     touch build-stamp
     dh_testdir
     dh_testroot
     dh_clean -k
     # Add here commands to install the package into debian/tmp.
     touch install-stamp
     dh_testdir
     dh_testroot
     dh_installdocs
     dh_installchangelogs
     dh_compress
     dh_fixperms
     dh_installdeb
     dh_gencontrol
     dh_md5sums
     dh_builddeb
     dpkg-deb: Baue Paket »Name« in »../Name_1.0_all.deb«.
     
     The package has been created.
     Attention, the package has been created in the current directory,

Und installieren Sie das erzeugte .deb (siehe Manuell heruntergeladene oder lokal erzeugte Debian-Pakete installieren, Abschnitt 5.5.

Wie man erkennen kann, gibt es verschiedene Anwendungen für equivs. Man könnte sogar ein Favoriten-Paket erstellen, was von den Paketen abhängt, die Sie normalerweise installieren. Lassen Sie Ihren Vorstellungen einfach freien Lauf, aber seien Sie vorsichtig.

Es ist wichtig zu erwähnen, dass es in /usr/share/doc/equivs/examples einige Beispiel-Kontrolldateien gibt. Werfen Sie mal einen Blick darauf.


[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ weiter ]


APT HOWTO

2.0.2 - Oktober 2006

Gustavo Noronha Silva kov@debian.org
Deutsche Übersetzung: David Spreen netzwurm@debian.org