[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ weiter ]
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-get
s 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.
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
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
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.
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 2006kov@debian.org
netzwurm@debian.org