Product SiteDocumentation Site

Kapitel 15. Ein Debian-Paket erstellen

15.1. Ein Paket aus seinen Quellen neu erstellen
15.1.1. Die Quellen besorgen
15.1.2. Änderungen vornehmen
15.1.3. Die Neuerstellung beginnen
15.2. Ihr erstes Paket erstellen
15.2.1. Meta-Pakete oder vorgetäuschte Pakete
15.2.2. Einfaches Dateiarchiv
15.3. Ein Paket-Depot für APT erstellen
15.4. Paketbetreuer werden
15.4.1. Lernen Pakete zu erstellen
15.4.2. Annahmeverfahren
Für einen Administrator, der regelmäßig mit Debian-Paketen umgeht, ist es durchaus normal, dass er eines Tages das Bedürfnis hat, seine eigenen Pakete zu erstellen oder ein vorhandenes Paket zu ändern. In diesem Kapitel sollen die häufigsten Fragen zu diesem Thema beantwortet und die Komponenten vorgestellt werden, die erforderlich sind, um die Vorteile der Debian-Infrastruktur möglichst gut zu nutzen. Mit etwas Glück könnten Sie, nachdem Sie sich an lokalen Paketen versucht haben, sogar das Bedürfnis verspüren, weiter zu gehen und sich am Debian-Projekt selbst zu beteiligen!

15.1. Ein Paket aus seinen Quellen neu erstellen

Unter verschiedenen Umständen ist es erforderlich, ein Binärpaket neu zu erstellen. In manchen Fällen benötigt der Administrator eine Programmfunktion, für die das Programm mit einer bestimmten Kompilierungsoption aus den Quellen kompiliert werden muss; in anderen Fällen ist das Programm, das in der installierten Debian-Version gebündelt ist, nicht aktuell genug. Im zweiten Fall erstellt der Administrator gewöhnlich ein aktuelleres Paket aus einer neueren Debian-Version wie zum Beispiel Testing oder sogar Unstable, so dass dieses neue Paket dann in seiner Stable-Distribution läuft; dieser Vorgang wird „Backporting“ genannt. Wie immer sollte man, bevor man eine solche Aufgabe beginnt, überprüfen, ob sie nicht bereits erledigt worden ist. Ein kurzer Blick auf den Debian Package Tracker für das Paket sollte diese Information liefern.

15.1.1. Die Quellen besorgen

Die Neuerstellung eines Debian-Pakets beginnt damit, dass man seinen Quellcode besorgt. Am einfachsten geschieht dies mit dem Befehl apt-get source quellpaket-name. Der Befehl benötigt eine deb-src-Zeile in der Datei /etc/apt/sources.list und aktuelle Indexdateien (d.h. apt-get update). Diese Bedingungen sollten bereits erfüllt sein, wenn Sie den Anweisungen in dem Kapitel über die APT-Konfigurierung ( siehe Abschnitt 6.1, „Befüllen der sources.list Datei“) gefolgt sind. Beachten Sie jedoch, dass Sie die Quellpakete der Debian-Version, die in der Zeile deb-src genannt ist, herunterladen. Falls Sie eine andere Version benötigen, müssen Sie sie eventuell per Hand von einem Debian-Spiegelserver oder von der Webseite herunterladen. Hierbei müssen zwei oder drei Dateien abgerufen werden mit den Dateiendungen *.dsc - für Debian Source Control, *.tar.comp und manchmal *.diff.gz oder *.debian.tar.comp - wobei comp je nach verwendetem Komprimierungsprogramm durch gz, bz2 oder xz ersetzt wird. Anschließend wird der Befehl dpkg-source -x datei.dsc ausgeführt. Falls die Datei *.dsc direkt an der vorgegebenen URL zugänglich ist, gibt es einen noch einfacheren Weg, sie zu besorgen, und zwar mit dem Befehl dget URL. Dieser Befehl (der sich in dem Paket devscripts befindet) ruft die *.dsc-Datei an der angegebenen Adresse ab, analysiert dann ihren Inhalt und besorgt selbstständig die Datei oder die Dateien, auf die darin verwiesen wird. Wenn alles heruntergeladen wurde, wird das Quellpaket entpackt (solange nicht die Optionen -d oder --download-only verwendet wurden).

15.1.2. Änderungen vornehmen

Die Quellen des Pakets sind nun in einem Verzeichnis verfügbar, das nach dem Quellpaket und seiner Version benannt ist (zum Beispiel samba-4.1.17+dfsg); hier werden wir unsere eigenen Veränderungen vornehmen.
Als erstes wird die Paket-Versionsnummer geändert, so dass sich die neu erstellten Pakete von den ursprünglichen, von Debian bereitgestellten Paketen unterscheiden lassen. Gesetzt den Fall, dass die aktuelle Version 2:4.1.17+dfsg-2 ist, so können wir Version 2:4.1.17+dfsg-2falcot1 erstellen, wodurch der Ursprung des Pakets eindeutig angezeigt wird. Hierdurch wird die Paket-Versionsnummer gegenüber der von Debian bereitgestellten erhöht, so dass sich das Paket leicht als eine Aktualisierung des Originalpakets installieren lässt. Eine derartige Änderung wird am besten mit dem Befehl dch (Debian CHangelog) aus dem Paket devscripts mit einem Aufruf wie dch --local falcot vorgenommen. Hierdurch wird ein Texteditor aufgerufen (sensible-editor - dies sollte Ihr bevorzugter Editior sein, falls er in den Umgebungsvariablen VISUAL oder EDITOR aufgeführt ist, anderenfalls der voreingestellte Editor), um die Unterschiede dokumentieren zu können, die diese Neuerstellung bewirkt. Dieser Editor zeigt uns, dass dch in der Tat die Datei debian/changelog geändert hat.
Wenn die Erstellungsoptionen geändert werden müssen, werden diese Änderungen in der Datei debian/rules vorgenommen, die die Schritte des Erstellungsprozesses steuert. In den einfachsten Fällen sind die Zeilen, die die anfängliche Konfiguration ((./configure …) oder die tatsächliche Erstellung ($(MAKE) … oder make …) betreffen, leicht zu finden. Falls diese Befehle nicht ausdrücklich aufgerufen werden, sind sie möglicherweise ein Nebeneffekt eines anderen ausdrücklichen Befehls. In diesem Fall sehen Sie bitte in dessen Dokumentation nach, um mehr darüber herauszufinden, wie das voreingestellte Verhalten geändert werden kann. Verwenden Pakete den dh Befehl, müssen Sie gegebenenfalls ein Override für die dh_auto_configure oder dh_auto_build Befehle erstellen (siehe auch die zugehörigen Manual Pages für eine Erläuterung).
Je nach den vor Ort vorgenommenen Veränderungen der Pakete kann auch eine Aktualisierung der Datei debian/control, die eine Beschreibung der erzeugten Pakete enthält, erforderlich sein. Diese Datei enthält insbesondere Build-Depends-Zeilen, die die Liste der Abhängigkeiten überwachen, die zum Zeitpunkt der Paketerstellung erfüllt sein müssen. Sie beziehen sich häufig auf Versionen von Paketen, die in der Distribution enthalten sind, aus der das Quellpaket stammt, jedoch in der Distribution, die für die Neuerstellung verwendet wird, möglicherweise nicht vorhanden sind. Es gibt kein automatisches Verfahren um herauszufinden, ob eine Abhängigkeit tatsächlich besteht, oder ob sie nur angegeben wird, um sicherzustellen, dass die Neuerstellung nur mit der jüngsten Version einer Programmbibliothek unternommen wird - dies ist die einzig verfügbare Möglichkeit, einen Autobuilder dazu zu zwingen, während einer Neuerstellung eine bestimmte Paketversion zu verwenden. Aus diesem Grund benutzen Debian-Betreuer häufig streng versionierte Erstellungsabhängigkeiten.
Wenn Sie mit Sicherheit wissen, dass diese Erstellungsabhängigkeiten zu streng sind, haben Sie die Wahl, sie vor Ort zu lockern. Die Lektüre der Dateien, die den normalen Weg zur Erstellung des Programms dokumentieren - diese Dateien sind häufig INSTALL benannt - hilft Ihnen, die passenden Abhängigkeiten herauszufinden. Idealerweise sollten alle Abhängigkeiten durch die Distribution, die für die Neuerstellung verwendet wird, erfüllt werden. Wenn dies nicht der Fall ist, beginnt ein rekursiver Prozess, bei dem die im Build-Depends-Feld genannten Pakete zurückportiert werden müssen, bevor es das Zielpaket kann. Es kann sein, dass einige Pakete nicht zurückportiert werden müssen und während des Erstellungsprozesses in ihrem gegenwärtigen Zustand installiert werden können (ein namhaftes Beispiel ist debhelper). Beachten Sie, dass der Prozess des Zurückportierens sehr schnell kompliziert werden kann, wenn Sie nicht aufpassen. Daher sollten Zurückportierungen so gering wie möglich gehalten werden.

15.1.3. Die Neuerstellung beginnen

Wenn alle erforderlichen Veränderungen auf die Quellen angewendet worden sind, können wir damit beginnen, das eigentliche Binärpaket (die .deb-Datei) zu erstellen. Der gesamte Prozess wird durch den Befehl dpkg-buildpackage gesteuert.

Beispiel 15.1. Ein Paket neu erstellen

$ dpkg-buildpackage -us -uc
[...]
Der oben stehende Befehl kann scheitern, wenn die Build-Depends-Felder nicht aktualisiert worden sind, oder wenn die dazugehörigen Pakete nicht installiert sind. In diesem Fall ist es möglich, diese Kontrolle außer Kraft zu setzen, indem die Option -d an dpkg-buildpackage gegeben wird. Das ausdrückliche Ignorieren dieser Abhängigkeiten erhöht jedoch das Risiko, dass der Erstellungsprozess in einem späteren Stadium scheitert. Oder schlimmer noch, das Paket wird scheinbar richtig erstellt, läuft aber nicht ordnungsgemäß: einige Programme deaktivieren automatisch einige ihrer Leistungsmerkmale, wenn eine erforderliche Bibliothek zum Zeitpunkt der Erstellung nicht verfügbar ist.
In den meisten Fällen benutzen Debian-Entwickler ein übergeordnetes Programm, wie zum Beispiel debuild; dieses führt dpkg-buildpackage wie üblich aus, fügt aber den Aufruf eines Programms hinzu, das zahlreiche Tests ausführt, um das erstellte Paket im Hinblick auf das Debian-Regelwerk zu überprüfen. Dieses Skript bereinigt auch die Umgebung, so dass lokale Umgebungsvariablen die Paketerstellung nicht „verschmutzen“. Der Befehl debuild ist eines der Hilfsprogramme in der devscripts-Suite, die eine gewisse Konsistenz und Konfiguration gemeinsam haben und so die Aufgabe des Betreuers einfacher machen.