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.