[ 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-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.
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.orgnetzwurm@debian.org