Erstellen eines Debian-VDR-Plug-in-Paketes

Mit der aktuellen Version des VDR-Pakets ist es fast im Handumdrehen möglich, mittels dh_make aus einem VDR-Plug-in ein Debian-Paket zu bauen. Wie das geht und worauf es zu achten gilt, möchte ich im folgenden darlegen.

Anfängerwissen

Aus einem Plug-in ein funktionierendes Debian-Paket zu machen, ist nicht unbedingt schwer. Das Debian-Paket jedoch so aufzubereiten, dass es den Regeln der Debian-Policy genügt, erfordert zumindest ein gewisses Verständnis dieser Regeln.

Daher kann ich nur jedem ans Herz legen, mal einen Blick in den Debian New Maintainers Guide sowie das Debian Policy Manual zu werfen. Dort und in den anderen Dokumenten auf www.debian.org findet sich auf viele Fragen bereits eine Antwort.

Und sollte doch mal eine Frage offen bleiben, so ist die englischsprachige Debian-Mentors-Mailingliste das richtige Forum, um Hilfe zu bekommen. Spezielle Probleme rund um die VDR-Pakete werden, ebenfalls in Englisch, auf der Mailingliste des "DVB and VDR Packaging Project" diskutiert. Jeder Interessierte ist hier herzlich willkommen! In deutscher Sprache ist die Mailingliste des c't-VDR-Projektes der richtige Anlaufpunkt.

Am Anfang war...

...das Upstream-Source-Paket. Dieser Begriff bezeichnet das originale Quelltext-Paket in Abgrenzung zum späteren Debian-Source-Paket. Es steht in der Regel als <programmname>-<version>.tar.gz zur Verfügung. Der erste Schritt ist es, diese Datei herunterzuladen.

Wer Lust hat, kann beim Lesen dieses Tutorials sein neu erworbenes Wissen gleich in die Tat umsetzen. Als Beispiel soll das Beep-Plug-in von Andreas Brachold herhalten, für das es, zum Zeitpunkt da ich dies schreibe, noch kein Debian-Paket gibt.

Das Plug-in ist auf http://deltab.de/vdr/beep.html zu finden. In der aktuellen Version liegt es als vdr-beep-0.0.3.tgz vor. Ein guter Platz dafür wäre, root-Schreibrechte vorausgesetzt, beispielsweise /usr/src/vdr-plugin-beep/. Aber auch das Homeverzeichnis böte sich hierfür an: ~/vdr-plugin-beep/

Kenne deinen Feind!

Sicher ist das Plug-in nicht dein Feind, jedoch solltest du dich zunächst mit ihm vertraut machen. Ein Muss ist es daher, nach dem Auspacken die README zu studieren. Diese enthält oftmals wertvolle Informationen darüber, von welchen Bibliotheken oder anderen Programmen das Plug-in abhängt. Vielleicht musst du noch das eine oder andere lib*-dev -Paket installieren, um das Plug-in überhaupt compilieren zu können. Manche Plug-ins benötigen auch ein speziell gepatchtes VDR. In solch einem Fall musst du dir zunächst ein VDR mit dem entsprechenden Patch-Level compilieren und das erzeugte vdr-dev-Paket installieren.

In unserem einfachen Beispiel ist die README schnell gelesen und wir können davon ausgehen, dass keine besonderen Abhängigkeiten bestehen.

Finger weg vom Upstream-Paket!

Eine der wichtigsten Debian-Regeln ist es, das Upstream-Paket möglichst in genau dem jungfräulichen (pristine) Zustand zu belassen, in dem man es heruntergeladen hat. Du kannst das Paket umbennen oder ein mit bzip2 gepacktes Archiv mit gzip --best neu packen. Nicht erlaubt ist es, aus dem Archiv Dateien zu entfernen, welche zu verändern oder neue hinzuzufügen. Ausnahmen bestätigen hier wie immer die Regel. Manchmal ist es notwendig, das Upstream-Paket zu modifizieren, z.B. wenn es bereits ein debian-Verzeichnis enthält. Man spricht dann von einem "repacked" Upstream-Source-Paket. Mit etwas Glück ist der Upstream-Autor bereit, diese Änderungen bei seinem nächsten Release zu berücksichtigen.

Den Sinn dieser Regel erklärt schon ein Blick auf die drei Dateien, die ein Debian-Source-Paket ausmachen:

<name>_<version>-<revision>.dsc
<name>_<version>-<revision>.diff.gz
<name>_<version>.orig.tar.gz

*.dsc enthält Informationen über das Paket. *.orig.tar.gz ist das Upstream-Source-Archiv und *.diff.gz ist ein Diff, welches alle Änderungen enthält, um daraus ein Debian-Paket zu erzeugen. *.orig.tar.gz ist also die Basis für das Paket. Eine stabile Basis kann nie schaden, also lassen wir Sie nach Möglichkeit so, wie sie ist. Damit kann auch jeder außerhalb der Debian-Welt mit dem *.orig.tar.gz noch etwas anfangen.

Das Beep-Plug-in benötigt keine Sonderbehandlung. Du musst die heruntergeladene Datei also nur nach vdr-plugin-beep_0.0.3.orig.tar.gz umbennen.

Aller Anfang ist...

...leicht! Ein einfaches kleines Skript, welches mit dem Paket vdr-dev installiert wird, erzeugt die notwendigen Debian-Dateien. Wer meinem Vorschlag gefolgt ist und bereits einen Blick in den "Debian New Maintainers Guide" geworfen hat, wird dort etwas über dhmake gelesen haben. Das Skript debianize-vdrplugin bedient sich dieses Tools, um aus Vorlagen die notwendigen Dateien im Verzeichnis debian/ zu erzeugen. debianize-vdrplugin verwendet eine eigens für VDR-Plug-ins angepasste dhmake-Vorlage.

Für das Beep-Plug-in musst du lediglich in das Verzeichnis /usr/src/vdr-plugin-beep/beep-0.0.3 wechseln und dort debianize-vdrplugin ausführen. beep-0.0.3 wird damit automatisch nach beep-0.0.3.orig kopiert und es wird das Unterverzeichnis debian/ mit allen notwendigen Dateien vom changelog bis hin zum watch-File angelegt. Überall wo dies notwendig ist, hat dhmake automatisch den Paketnamen und die Version eingetragen. Das gleiche gilt für den Namen und die Email-Adresse des Maintainers. dhmake verwendet den Namen des angemeldeten User oder, falls vorhanden, die Werte aus den Umgebungsvariablen DEBEMAIL und DEBFULLNAME.

Wenn alles gut geht, kannst du mit dpkg-buildpackage -tc bereits das Debian-VDR-Plug-in compilieren.

Wer sich mit dem Compilieren von Plug-ins noch schwer tut und mit Begriffen wie "Patch-Level" nichts anzufangen weiß, sollte an dieser Stelle das kleine Tutorial zu den VDR Quelltextpaketen zu Rate ziehen.

War's das schon?

Nein, denn nun geht es ans Eingemachte! Ein "nur" funktionierendes Plug-in ist noch nichts, was du guten Gewissens der Öffentlichkeit zur Verfügung stellen kannst. Du solltest dir jede Datei in debian/ noch einmal vornehmen. Eine gute Gelegenheit, vielleicht auch das eine oder andere nachzuschlagen, um zu verstehen, was die einzelnen Dateien bedeuten und welche debhelper-Tools (dh_*, ausgeführt in debian/rules) sich dahinter verstecken. Die folgende Checkliste soll dir eine kleine Hilfestellung dabei geben, das Debian-Paket "release-fertig" zu machen.

1. README.Debian

Gibt es irgendwelche Hinweise, die speziell das Debian-Paket betreffen? Musstest du Änderungen vornehmen, damit das Plug-in unter Debian funktioniert? Solche und ähnliche Informationen gehören, möglichst in Englisch, in diese Datei. Hast du keine derartigen Anmerkungen, kannst du die README.Debian löschen.

Im Fall des Beep-Plug-ins kann die Datei gelöscht werden.

2. changelog (dh_installchangelog)

Evtl. musst du hier deinen Namen und die Email-Adresse als Maintainer eintragen. Neben "Initial Release" sind für die erste Version eines Paketes meist keine weiteren Informationen erforderlich.

3. control

Auch hier musst du Name und Email-Adresse überprüfen. Sollte das Paket spezielle Bibliotheken benötigen, musst du die enstprechenden lib-dev-Pakte bei den Build-Depends im Source-Abschnitt eintragen. Diese Bibliotheken müssen im Feld Depends NICHT* wiederholt werden. Beim Erzeugen des Paketes wird ${shlibs:Depends} automatisch durch die Liste der verwendeten Bibliotheken ersetzt (dh_shlibdeps). Die Zeilen mit den Abhängigkeiten dürfen nicht umbrochen werden!

Im Feld Description fehlt noch eine kurze und eine etwas ausführlichere Beschreibung in Englisch. Oftmals kannst du diese aus der README übernehmen.

Das beep-Plug-in besitzt keine speziellen Abhängigkeiten. Das Description-Feld könnte so aussehen:

Description: VDR-plugin to give acoustic feedback for selected events
 This Plugin notifies the user with a beep from the internal mainboard speaker,
 when selected VDR events occur.

4. copyright

Ehre, wem Ehre gebührt! Hier musst du eintragen, von wo du das Plug-in heruntergeladen hast und wer der Autor ist. Auch solltest du prüfen, ob der Verweis auf die GPL2 auch wirklich zutrifft und das Plug-in nicht etwa einer ganz anderen Lizenz unterliegt.

Für das beep-Plug-in sähe das so aus:

...
It was downloaded from http://deltab.de/vdr/beep.html 

Upstream Author: Andreas Brachold <vdr04 at deltab de>
...

5. docs (dh_installdocs)

Hier werden alle Dateien aufgelistet, welche in die Rubrik Dokumentation fallen. Das ist fast immer zumindest die README-Datei. Die hier aufgeführten Dateien werden dann nach /usr/share/doc/ installiert.

Das Beep-Plug-in braucht nur die README.

6. install (dh_install)

Oftmals werden die zu installierenden Dateien in debian/rules kopiert. Eleganter ist die Verwendung von dh_install, welches die in debian/install aufgeführten Dateien in die ebenfalls dort angegebenen Zielverzeichnisse kopiert. Bei einem VDR-Plug-in ist dies auf jeden Fall die lib-Datei des Plug-ins. Aber auch eventuell benötigte conf- Dateien, Grafiken usw. können so installiert werden. Der File System Hierarchie Standard FHS ist die Basis für die Wahl der Zielverzeichnisse. Oftmals reicht ein Blick in ein anderes Plug-in, wenn du dir nicht sicher bist. Hier ein paar wichtige Regel, die du beachten musst:

  • Plug-in-Konfigurationsdateien gehören nach /etc/vdr/plugins, jedoch nur statische conf-Files - also solche, die ausschließlich manuell durch den Administrator geändert werden. /etc ist read-only!

  • Statische Daten-Dateien, Grafiken usw. gehören nach /usr/share/<paketname>. Auch dieses Verzeichnis ist read-only!

  • Sich verändernde, variable Dateien gehören nach /var/lib/vdr/plugins.

vdr-plugin-beep muss nur die Plug-in-Bibliothek selbst installieren.

7. links (dh_links)

Oftmals erwarten Plug-ins bestimmte Dateien in /var/lib/vdr/plugins, die (wie beispielsweise Grafiken) nach /usr/share/<paketname> installiert wurden. In solch einem Fall kannst du in /var/lib/vdr/plugins Symlinks anlegen, welche auf die entsprechenden Dateien oder Verzeichnisse verweisen.

In debian/links musst du diese Symlinks lediglich auflisten, dh_links übernimmt dann den Rest. Werden keine Symlinks benötigt, kannst du die Datei löschen. (So auch beim Beep-Plug-in)

8. postinst|postrm|preinst|prerm.ex

Diese Dateien sind nur Beispiele (daher *.ex) und dienen dazu, bei der Installation bestimmte Aufgaben auszuführen (z.B. bestehende Dateien zu verschieben). Meist werden sie nicht verwendet und du kannst sie, wie auch alle anderen nicht benötigten Dateien, löschen.

Für das Beep-Plug-in sind diese Dateien nicht notwendig

9. rules

debian/rules ist ein Makefile. In ihm ist definiert, was beim Erzeugen des Paketes zu tun ist. Das umfasst alles vom Compilieren bis zum Erzeugen des Patchlevel-Feldes. Das vorgefertigte rules-File ist eigens für VDR-Plug-ins so gestaltet, dass in der Regel keine Änderungen daran nötig sind.

Unter Umständen muss lediglich die Zeile mit dh_installchangelogs angepasst werden, welche das changelog der Upstream-Version installiert:

...
# Build architecture-dependent files
binary-arch: build install          
    dh_testdir
    ...
    dh_installchangelogs HISTORY
    ...

Meistens heißt diese Datei jedoch HISTORY und debian/rules muss nicht modifiziert werden.

Auch beim Beep-Plug-in kann rules unverändert bleiben

9. watch.ex

Diese Datei beschreibt eine Art Filter, den das Tool uscan benutzt, um nach neuen Upstream-Versionen in Debian-Paketen zu suchen. Hilfe dazu bietet man uscan. Wenn du diese Datei verwendest, musst du natürlich die Endung ex entfernen.

Für das Beep-Plug-in sieht debian/watch im einfachsten Fall so aus:

version=2                                        
http://deltab.de/vdr/beep.html vdr-beep-(.*)\.tgz

Patchwork

Manchmal ist es erforderlich, die Sources des Plug-ins zu modifizieren. Vielleicht stimmt mal eine include-Anweisung nicht, ein fest eingetragenes Verzeichnis muss an Debian angepasst werden oder das Plug-in enthält einen Bug.

Was Bugs und Verbesserungen betrifft, gehört es zum guten Ton, sich zunächst mit dem Upstream-Autor in Verbindung zu setzen. Dieser greift deine Vorschläge sicher gerne auf, um sie in die nächste Version einzubauen.

Ansonsten gibt es zwei Möglichkeiten, um Änderungen an den Sources vorzunehmen. Am einfachsten werden diese direkt in den Quelltext geschrieben. Sie sind damit Bestandteil des Diff-Files, welches von dpkg-buildpackage erzeugt wird. Der große Nachteil dieser Variante ist, dass es etwas mühselig ist, seine eigenen Änderungen am Quelltext zu verfolgen und gegebenenfalls wieder zu entfernen, wenn auf ein neues Release geupdated werden soll.

Eleganter ist die Verwendung von dpatch. dpatch erlaubt es, Änderungen am Quelltext in diff-Files zu gruppieren und diese erst beim Erstellen des Paketes anzuwenden. Die Patches können damit jederzeit deaktiviert oder getrennt voneinander modifiziert werden. Mehr dazu erfährst du mit man dpatch oder in /usr/share/doc/dpatch/.

Verwendest du dpatch, so muss dieses bei den Build-Depends in debian/control mit aufgeführt sein. In debian/rules musst du lediglich das Kommentarzeichen vor der Zeile DPATCH=yes entfernen.

Linda und Lintian - die Policy-Polizei

Bei weit über 17.000 Binärpaketen mussten sich die findigen Debian- Entwickler etwas einfallen lassen, um eine konstante Qualität sicher zu stellen. Die Qualität eines Debian-Paketes geht einher mit seiner Konformität zur Debian-Policy. Viele Aspekte dieser Richtlinien lassen sich automatisiert überprüfen. Genau hierfür sind linda und lintian da. Sie überprüfen ein Paket auf alles was überprüfbar ist und geben eine Liste der möglichen Probleme aus.

Am einfachsten rufst du diese Tools mit der von dpkg-buildpackage generierten *.changes -Datei auf:

linda vdr-plugin-beep_0.0.3-1_i386.changes
lintian vdr-plugin-beep_0.0.3-1_i386.changes

Prima! Linda und Lintian haben nichts zu beanstanden.

Ein Debian Paket ist geboren!

Wenn du allen Anweisungen gefolgt bist und alle Klippen umschifft hast, bist du jetzt stolzer Maintainer eines gesunden Debian VDR-Plug- ins!

Je nach Art des Plug-ins kann die Geburt des passend Debian-Paketes so einfach wie bei vdr-plugin-beep sein oder mehr einer Steißgeburt gleichen. Du stehst aber nicht allein mit deinem Plug-in. Auf der Mailingliste des "DVB and VDR Packaging Project" stehen dir immer ein paar "Geburtshelfer" hilfreich zur Seite.

Wenn dein Plug-in bereit für das erste Release ist, ist das "DVB and VDR Packaging Project" auch der richtige Platz für sein zukünftiges Zuhause. Mit Zugriff auf das CVS-Repository, kannst du dein Paket dann auch weiterhin betreuen und es wird irgendwann Bestandteil der offiziellen Debian-Distribution werden.

Published on 16/01/2005 at 19:59 by , tags

comment Erstellen eines Debian-VDR-Plug-in-Paketes

Trackbacks are disabled

Powered by Publify | Photo Startup stock photos