Debhelper konsequent einsetzen Debhelper wird heute von sehr vielen Paketen verwendet, aber nicht immer konsequent und konsistent. Dieses Kapitel soll eine Hilfestellung geben. Heutzutage wird aufgrund von dh_make debhelper von den meisten Paketen verwendet, aber nicht immer konsequent eingesetzt, insbesondere dann, wenn die Pakete weiterentwickelt werden. Die wichtigsten Features von debhelper sind: Debhelper besteht aus vielen kleinen Programmen, die jeweils nur eine konkrete Aufgabe erfüllen und immer mit dem Prefix dh_ beginnen. Debhelper benutzt Hauptversionsnummern, um inkompatible Änderungen anzuzeigen und je nachdem, welche Version in debian/compat eingetragen ist, arbeitet debhelper in einem Kompatibilitätsmodus. Aktuell ist die Versionsnummer 5. Alle Debhelperkommandos erfüllen immer die aktuelle Debian-Policy, so dass man wenig um die Einhaltung der Policy kümmern muss. Alle Kommandos erzeugen automatisch alle notwendigen Verzeichnisse, bevor sie Dateien darin ablegen. Benötigt man einmal ein leeres Verzeichnis im Paket, so kann man dh_installdirs verwenden. Kommandozeilenargumente können optional auch in einer Datei debian/$package.$file abgelegt werden oder auch in $file für das erste Binärpaket in debian/control. Beispiel: debian/dirs wird von dh_installdirs gelesen. Bei Bedarf ergänzen die Kommandos die Dateien debian/{pre,post}{inst,rm} an der mit #DEBHELPER# gekennzeichneten Stelle. Übrigens braucht man keine Skripte schreiben, die nur #DEBHELPER# enthalten, weil fehlende Skripte von debhelper automatisch erstellt werden. Manche Kommandos ergänzen die Variable ${misc:Depends} um benötigte Pakete, z.B. debconf, und man sollte diese Variable immer zu den Depends:-Zeilen in debian/control hinzufügen. Optionen und Umgebungsvariablen Die Option -v sorgt dafür, dass das jeweilige Skript anzeigt, welche Unix-Kommandos es ausführt. Das gleiche erreicht man durch Setzen der Umgebungsvariable DH_VERBOSE. Die Option -n verhindert die Ausführung der genannten Kommandos. Kombiniert man beide Optionen, so sieht man, was das jeweilige Skript auszuführen beabsichtigt. Wichtige Debhelperkommandos Im folgenden wird nur eine kleine Auswahl an Skripten vorgestellt. Ein vollständige Liste findet man in der manpage zu debhelper und die zugehörige Dokumentation in der manpage des jeweiligen Programms. dh_installinit Dieses Kommando installiert die Datei debian/init aus dem Quellpaket als /etc/init.d/$package in das Binärpaket und ergänzt den Aufruf von update-rc.d im postinst. Falls vorhanden wird auch die Datei debian/default nach /etc/default/$package installiert. dh_installman Das ist ein weiteres Werkzeug, das sich um die Installation von Dateien in Binärpakete kümmert. Die übergebenen Kommandozeilenargumente bzw. der Inhalt von debian/manpages werden als Shellpattern (z. B. man/*.1) interpretiert und die darauf passenden Dateien als manual pages in die richtigen Verzeichnisse installiert. Die Verwendung von Shellpattern kommt bei debhelper-Kommandos öfter vor. dh_installexamples Auch hier wird der Inhalt von debian/examples als Shellpattern (z. B. examples/*) interpretiert und die passenden Dateien oder Verzeichnisse nach /usr/share/doc/$package/examples/ installiert. Verzeichnisse werden dabei rekursiv kopiert. dh_installdocs Die in debian/docs genannten Dateien und Verzeichnisse werden nach /usr/share/doc/$package/ installiert und weiterhin wird eine vorhandene Datei debian/doc-base als Konfigurationsdatei für doc-base installiert, welches die vorhandene Dokumentation beispielsweise in die KDE- und GNOME-Hilfesysteme integriert. dh_install Das ist ein generisches Installationswerkzeug und es kann auf 2 verschiedene Arten benutzt werden. In der 1. Variante enthält die Datei debian/install pro Zeile ein Quelldateipattern und ein Zielverzeichnis, z. B. include/*.h /usr/include/foo/ foo.rc /etc/ Dateien können leider nicht umbenannt werden, dafür nutzt man besser das Unix-Kommando install. Die 2. Variante lässt sich am besten an einem Beispiel erklären. Das Quellpaket libfoo erzeuge die beiden Binärpakete libfoo1 und libfoo-dev. Die Installation geschieht zunächst ganz herkömmlich in ein temporäres Verzeichnis mittels make install DESTDIR=`pwd`/debian/tmp/ Die Datei debian/libfoo1.install enthält eine Zeile debian/tmp/usr/lib/libfoo.so.* wogegen debian/libfoo-dev.install folgendermaßen aussehen könnte: debian/tmp/usr/lib/libfoo.so debian/tmp/usr/lib/libfoo.*a debian/tmp/usr/include/* Die nicht angegeben Zielverzeichnisse berechnet dh_install automatisch für uns. Beide Varianten können auch gemischt verwendet werden. dh_link Die Datei debian/links enthält pro Zeile Quelle und Ziel eines zu erstellenden Symlinks, wobei beide Angaben absolute Dateinamen sein müssen. Beispiel: /etc/foo.rc /usr/share/foo/config.rc dh_strip Dieses Programm sorgt für die korrekte Entfernung von Debugging-Informationen aud Binärdateien. Bei Bedarf können diese auch in ein separates Paket mit Debuginformationen installiert werden. Debhelperartige Kommandos Neben debhelper gibt es weitere Pakete mit Skripten, die ähnlich wie die debhelper-Skripte arbeiten. dh_pycentral Dieses Programm aus dem Paket python-central erzeugt die Substitutionsvariable ${python:Depends}, die in der Datei debian/control verwendet werden kann, um die nötigen Abhängigkeiten in Python-Paketen automatisch zu berechnen. Desweiteren erzeugt und entfernt es die Binärdateien *.pyc und *.pyo beim Installieren bzw. Deinstallieren des Pakets. Für die Verwendung des Programms ist es wichtig, dass die Datei debian/pycompat den Wert 2 enthält. erlang-depends Das Skript erzeugt die Substitutionsvariablen ${erlang*:Depends} für Erlang-Pakete und ist inspiriert von octave-depends, welches das gleiche Ziel hat. Nähere Informationen dazu in der manpage.