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 ./