Das VDR Quelltextpaket

Posted by Tobi Tue, 21 Sep 2004 17:51:00 GMT

Mit Version 1.2.6-7 des VDR-Pakete für c't-VDR gibt es nun ein zentrales Quelltextpaket. Aus diesem kann jeder ambitionierte VDR- Benutzer, nicht nur die Standard-VDR-Version, sondern auch eine ganze Reihe von Patchvarianten erstellen. Die verschiedenen Patches sind so vorbereitet, dass sie ohne manuelle Eingriffe in den Quelltext in unterschiedlichen Kombinationen angewendet werden können. Damit sollte es für jeden möglich sein, sich nach dieser Anleitung eine auf seine Bedürfnisse zugeschnittene Patchvariante zu erstellen.

Grundvoraussetzungen

Zunächst benötigst du einige Tools rund ums Compilieren und Bauen von Debian-Paketen. Mit dem folgenden Kommando, werden diese "Essentials" installiert:

apt-get install dpkg-dev gcc g++ libc6-dev make patch fakeroot

Noch einfacher, geht das auch so:

apt-get install build-essential fakeroot

Es ist übrigens nicht erforderlich, die Pakete für VDR auch auf dem VDR-Rechner zu erzeugen. Dies kann genauso gut auch auf jedem anderen Rechner mit Debian-Woody geschehen.

Falls du ein vorbildlicher Linux-User sein willst, so möchtest du sicher nicht als root die Pakete erstellen. Der Benutzer unter dem du angemeldet bist, sollte in diesem Fall der Gruppe src angehören. Ausserdem ist es dann erforderlich, bestimmte Befehle wie z.B. dpkg-buildpackage oder debian/rules (mehr dazu später) mit fakeroot auszuführen:

fakeroot dpkg-buildpackage .....
fakeroot debian/rules ..... 

Um neue Pakete zu installieren, kannst du dich mittels su kurzfristig als root anmelden und dann mit exit wieder abmelden. Alternativ kannst du jeden Befehl, der root-Rechte erfordert, auch mittels sudo <Befehl> ausführen. Letzteres setzt natürlich voraus, dass du als Benutzer dazu berechtigt bist.

Installation der Quelltextpakete

Die Installation von Quelltextpaketen erfolgt, wie auch bei den Binärpaketen, am einfachsten mittels apt-get, jedoch mit dem Kommando source. Der einzige Unterschied ist, dass abhängige Entwicklerpakete (z.B. mit den Headerdateien der verwendeten Bibliotheken) nicht automatisch mit installiert werden. Hierfür ist noch ein zweiter Aufruf mit dem Kommando build-dep notwendig:

apt-get source <paketname>
apt-get build-dep <paketname>

Ach und noch einen Unterschied gibt es: Die Quelltextpakete werden automatisch in das momentane Arbeitsverzeichnis heruntergeladen und entpackt. Um nicht den überblick zu verlieren, legst du also am besten vorher ein paar Unterverzeichnisse an. üblicher Weise sollten diese Verzeichnisse unterhalb von /usr/src/ liegen. Aus dem angelegten Verzeichnis heraus, brauchst du dann lediglich noch die Installation des entsprechenden Quelltextpaketes starten. Um z.B. die Quelltexte der Pakete vdr und vdr-plugin-mp3 zu installieren, kannst du wie folgt vorgehen:

mkdir /usr/src/vdr 
mkdir /usr/src/vdr-plugin-mp3 

cd /usr/src/vdr 
apt-get source vdr 
apt-get build-dep vdr 

cd /usr/src/vdr-plugin-mp3
apt-get source vdr-plugin-mp3
apt-get build-dep vdr-plugin-mp3 

Danach liegen im Verzeichnis /usr/src/vdr drei Dateien. Die Datei vdr_1.2.6.orig.tar.gz enthält die Upstream- Version 1.2.6 von VDR. Als Upstream-Version wird die originale "nicht- Debian-Version" des Entwicklers bezeichnet. vdr_1.2.6-7.diff.tar.gz enthält alle Änderungen, die notwendig sind, um aus der Upstream-Version ein Debian-Paket zu machen. Die dritte Datei, vdr_1.2.6- 7.dsc, enthält Informationen über das Paket, wie z.B. die zum Compilieren benötigten abhängigen Pakete. Neben dem Download dieser drei Dateien, wurden von apt-get source auch gleich die Upstream-Version in das Verzeichnis vdr-1.2.6 entpackt und die notwendigen änderungen aus dem diff-File darauf angewendet. Letzteres kannst du mit dem folgenden Befehl auch jederzeit manuell tun:

dpkg-source -x vdr_1.2.6-7.dsc

Da die Entwicklung der Pakete schneller voranschreitet als ich diese Anleitung aktuell halten kann, sind alle angegebenen Paketversionen natürlich durch die aktuelle Version zu ersetzen (statt 1.2.6-7 also z.B. 1.2.6-9).

Compilieren von Paketen

Jetzt wo die Quelltextpakete und die dazugehörigen Entwicklerpakete installiert sind, ist es an der Zeit zu testen, ob sich alles erwartungsgemäß compilieren lässt. Hierzu wechselst du in das entsprechende Quelltextverzeichnis (In unserem Beispiel wäre das /usr/src/vdr/vdr-1.2.6/) und rufst den folgenden Befehl auf:

debian/rules binary

debian/rules ist ein Makefile, welches in einem ersten Schritt das Makefile der eigentlichen Software aufruft um das Compilieren zu starten. In einem zweiten Schritt sucht debian/rules alle notwendigen Dateien zusammen und erstellt ein Debian-Paket im übergeordneten Verzeichnis (also /usr/src/vdr/), welches sofort installiert werden kann. Um den beim Compilieren entstandenen Unrat aufzuräumen, kannst du dann noch folgenden Befehl ausführen:

debian/rules clean

Das ganze lässt sich sogar noch vereinfachen, indem du statt der obigen zwei Befehle einfach folgendes aufrufst:

dpkg-buildpackage -tc

Damit wird aber nicht einfach nur "blind" ein Debian-Paket erzeugt. Zuvor prüft dpkg-buildpackage noch, ob alle Abhängigkeiten erfüllt sind. Ist dies nicht der Fall, hast du wahrscheinlich das apt-get build-dep vergessen (siehe oben). Sind alle Abhängigkeiten erfüllt, compiliert dpkg-buildpackage das Paket. Die Option - tc weist dpkg-buildpackage zudem an, hinterher gleich wieder aufzuräumen. Das fertige Binärpaket (*.deb) findest du zusammen mit einem neu erzeugten Quelltextpaket wiederum im übergeordneten Verzeichnis (/usr/src/vdr/).

dpkg-buildpackage versucht ausserdem, die erzeugten Sources und die Changes-Datei zu signieren, falls z.B. GnuPG installiert ist. Wenn du jedoch keinen GnuPG-Key erzeugt hast, kannst du mit den Optionen -uc -us das Signieren verhindern. (Besten Dank an Thomas für diesen Hinweis.)

VDR-Patches

Im Vergleich zum manuellen Patchen, wo man spätestens bei zwei oder mehr Patches nicht umhin kommt, selber in die Quelltexte einzugreifen, hat sich das Patchen in der neuen VDR-Version sehr vereinfacht. Dennoch musst du ein paar Dinge beachten:

** Nicht alle Patches lassen sich in jeder beliebigen Kombination

und Reihenfolge anwenden. Entsprechende Hinweise dazu, welcher
Patch sich mit welchem kreuzen lässt, sind in den Patch-Dateien
selbst und in der Patchliste zu finden. 

** Die meisten Patches modifizieren VDR so stark, dass alle Plugins

für diese VDR-Version ebenfalls neu compiliert werden müssen. Wie
das gemacht wird, erkläre ich später noch im Detail.

Patches auswählen

Jeder einzelne Patch liegt im Verzeichnis debian/patches und trägt folgenden Namen:

<nn>_<patchname>.dpatch

<nn> ist dabei eine zweistellige Nummer, welche die Reihenfolge kennzeichnet, in der die Patches angewendet werden sollen. Welche Patches verwendet werden, kannst du in der Datei 00list festlegen. Hier sind alle Patches (ohne die .dpatch- Endung) aufgeführt. Zudem können Kommentare eingefügt werden, die durch ein vorangestelltes "#" gekennzeichnet sind. Um einen Patch zu aktivieren, oder zu deaktivieren, musst du also nur das vorangestellte "#" entfernen oder hinzufügen. Eine Patchliste, welche nur den Elchi und den ImprovedOSD-Patch aktiviert, würde z.B. so aussehen:

# to share one connection with several dvb cards
#10_sharelnb

# to allow channel editing with channels for analogtv-plugin
# (use this patch only, if you DON'T use the autopid-patch)
#12_analogtv

# to add submenus within the recording menu
#15_reccmdsubmenu125

# The Elchi AIO 3c patch for a nicer OSD:
20_elchiaio3c

# The Improved OSD patch, which extends the Elchi AIO patch:
21_improvedosd-3a

# The AC3overDVB patch for a outputting AC3 streams over the DVB card:
#25_ac3overdvb-0.2.4

# The AutoPID patch for automatic PID adjustment of channels:
# ( use this patch only, if you use the ac3overdvb-0.2.3 patch too !!! )
#30_autopid_ac3overdvb

# The AutoPID patch for automatic PID adjustment of channels:
# ( use this patch only, if you DON'T use the ac3overdvb-0.2.3 patch !!! )
#30_autopid

# to allow channel editing with channels for analogtv-plugin
# ( use this patch only, if you use one of the autopid-patches too !!!)
#32_analogtvautopid

# The Jump patch allows automatic jumping over cutting marks.
# It requires the following patches: elchiaio3c, ac3overdvb, autopid
#35_jumpplay-0.0

# to share one connection with several dvb cards
# ( use this patch only, if you use one of the autopid-patches too !!!)
#40_sharelnbautopid

Die Patches werden von debian/rules binary vor dem Compilieren automatisch angewendet und mit einem debian/rules clean wieder rückgängig gemacht. Die Patchliste sollte immer nur nach einem debian/rules clean geändert werden, damit sich die Quelltexte wieder in einem ungepatchten Zustand befinden, bevor man etwas ändert. Alternativ kannst du auch, wie oben bereits beschrieben, dpkg-buildpackage -tc verwenden.

Läuft beim Patchen etwas schief, weil du z.B. zwei Patches ausgewählt hast, die sich gegenseitig behindern, so befindet sich der Quelltext in einem undefinierten Patch-Zustand. Der zweite Patch konnte nur zum Teil angewendet werden und kann daher auch nicht so ohne weiteres rückgängig gemacht werden. In solch einem Fall solltest du das Quelltextpaket neu installieren, indem du folgendes ausführst:

dpkg-source -x vdr_1.2.6-7.dsc

Plugins neu compilieren

Die Patches nehmen auch änderungen an den Schnittstellen vor, welche von den VDR-Plugins verwendet werden. Daher ist es i.d.R. unerlässlich, nach änderung des Patchlevels auch die Plugins neu zu compilieren. Beim Starten von VDR lädt das init-Skript zudem nur die Plugins, die mit dem selben VDR-Patchlevel compiliert wurden, wie das installierte VDR. Zwar lässt sich dies umgehen, aber ich kann nur dazu raten, lieber alle Plugins neu zu compilieren. Fehler durch inkompatible Schnittstellen können so von vornherein ausgeschlossen werden.

Damit die Plugins mit dem richtigen VDR-Entwickler-Paket aus der neu erstellten Patchvariante compiliert werden, musst du dieses zunächst installieren. Das entsprechende Entwicklerpaket wurde beim Compilieren automatisch in /usr/src/vdr/ erzeugt. Mit folgendem Aufruf, kannst du es installieren:

dpkg -i vdr-dev_1.2.6-7.deb

Hierfür kann es wieder erforderlich sein, dass du dich zuerst als root anmeldest (z.B. mit su) oder den Befehl mittels sudo ausführst. Danach können alle Plugins mit debian/rules binary oder dpkg-buildpackage neu compiliert werden. In unserem Beispiel, wäre dies nur vdr-plugin-mp3:

cd /usr/src/vdr-plugin-mp3/vdr-plugin-mp3-0.8.2
dpkg-buildpackage -tc

Ein lokales Repository anlegen

Um die Installation der neu erzeugten Pakete zu vereinfachen, bietet es sich an, ein eigenes kleines Repository zu erzeugen. Dieses kann dann in die sources.list eingetragen und von apt-get verwendet werden. Hierzu solltest du dir zunächst ein geeignetes Verzeichnis (z.B. /var/local/vdr-repository/) anlegen und dorthinein alle erzeugten .deb-Dateien legen. Zudem musst du in diesem Verzeichnis noch eine Datei Release** mit folgendem Inhalt anlegen:

Archive: stable
Component: main
Origin: Meins!
Label: Mein persönliches Debian repository
Architecture: i386

Um die Datei Packages.gz zu erzeugen rufst du dann noch den folgenden Befehl in deinem Repository-Verzeichnis auf:

dpkg-scanpackages ./ /dev/null | gzip -9c >Packages.gz

Das Repository-Verzeichnis kannst du dann über einen http- bzw. ftp-Server oder mittels des folgenden Eintrages in die sources.list direkt verfügbar machen:

deb file:/var/local/vdr-repository ./ 

Posted in  | no comments

Comments

Comments are disabled

 

Categories

Tags

.NET debian dkb mono Notebook squeeze squeezevdr survey vdr visa