Home
 Projekte
 Dokumentation
 Downloads
 Mailinglisten
 Kontakt

 

LinVDR LinVDR-Development



mplayer übersetzt

LIRC nach /usr/src/lirc-0.6.6 entpacken.

  • cd /usr/src/lirc-0.6.6
  • ./configure --with-transmitter --with-driver=serial --with-kerneldir=
  • cd drivers/lirc_serial
  • make
  • Das Modul lirc_serial.o auf das Zielsystem kopieren

Q: Wie wurder der MPlayer übersetzt

configure --prefix=/tmp/mplayer --disable-x11 --disable-xinerama --disable-fbdev --disable-vesa --disable-tga --disable-jpeg --disable-ftp --disable-network --disable-edl --disable-tv --disable-mpdvdkit --enable-runtime-cpudetection --disable-mencoder --enable-largefiles --disable-png --disable-vidix --disable-smb --disable-gif --disable-alsa --disable-dvdread

Q: Wie wurde ffmpeg übersetzt

/configure --with-libavcodec-includes=/usr/loal/include/ffmpeg --without-lame

Q: Wie wurde Samba übersetzt

./configure --localstatedir=/var --bindir=/usr/bin --sysconfdir=/etc/samba --prefix=/usr --with-configdir=/etc/samba --with-privatedir=/etc/samba --with-smbmount

Q: Wie wurde VDR übersetzt

make REMOTE=LIRC

Q: Wie wurde fbtv übersetzt

fbtv stammt aus dem XawTV Paket (Version 3.88). Damit fbtv im Vollbild-Modus läuft und nicht bei einem Druck der Cursor Tasten beendet wird wurde es mit diesem patch angepasst.

Q: Wie übersetze ich eigene Programme

Zum Übersetzen von Binarys wird Debian Woody benötigt. Das Aktuelle Development-Paket, das VDR einschließlich aller Plugins enthält, ist verfügbar unter http://linvdr.org/download/linvdr/development/linvdr-0.7-dev.tar.gz. Achtung, diese Pakete sind nur für Developer, alle anderen können mit diesem Paket nichts anfangen! Zusätzlich sind der Kernel 2.6.9 und der DVB-Treiber aus dem CVS vom 03.12.2004 erforderlich.

Q: Wie kann ich VDR neu Kompilieren ohne eine separate Entwicklungsumgebung zu installieren?

Ein Compiler kann wie folgt installiert werden.

1)
debtool -u
debtool -i gcc-2.95 make libc6-dev cpp-2.95 libjpeg62-dev binutils libstdc++2.10-dev g++-2.95

ln -s /usr/bin/gcc-2.95 /usr/bin/gcc
ln -s /usr/bin/gcc /usr/bin/cc
ln -s /usr/bin/g++-2.95 /usr/bin/g++

2)
debtool -u
debtool -i debootstrap
Jetzt die Datei /usr/lib/debootstrap/scripts/woody anpassen:

mkdir -p "$TARGET/var/lib/dpkg"
: >"$TARGET/var/lib/dpkg/status"
- : >"$TARGET/var/lib/dpkg/available"
+ echo >"$TARGET/var/lib/dpkg/available"

setup_etc
if [ ! -e "$TARGET/etc/fstab" ]; then

debootstrap woody /opt/woody
cp -a /etc/resolv.conf /opt/woody/etc
Hier nicht vergessen sources.list nach /opt/woody/etc/apt
chroot /opt/woody
apt-get update
apt-get upgrade
apt-get install g++ less make bzip2 wget

Q: Ich möchte einen eigenen Kernel bauen - wo finde ich das config File ?

unter /proc gibt es die Datei config.gz - einfach kopieren und entpacken ...

Q: Wie sollte ich Addon-Pakete für LinVDR verteilen?

Momentaner "Standard" sind Tar-Archive (.tar.gz), leider. Dadurch gibt es für die Benutzer unzählige Fehlerquellen, etwa weil sie die Archive im falschen Verzeichnis auspacken, Voraussetzungen gar nicht erst erfüllt sind oder sich verschiedene Addons überschneiden.

Für die Benutzer ist es am einfachsten, Addons per "debtool -f" zu installieren. Dementsprechend sollten Addons auch als ".deb" verteilt werden -- was auch nicht weiter schwer und minimal mehr Aufwand als ein .tar.gz ist. Der Vorteil sind die Pre- und Post-Install-Scripte, damit kann man Backups der vorhandenen Dateien anlegen oder auf bestimmte Konstellationen Rücksicht nehmen.

Man lege zuerst ein Verzeichnis mit dem Paket-Namen an, z.B. "tee" für das Addon-Paket, dass das Busybos-Tee gegen das Woody-Tee austauscht (damit das Burn-Plugin funktioniert). In diesem Verzeichnis gibt es die Unterverzeichnisse "control" und "data" sowie die Datei "debian-binary". In "debian-binary" steht lediglich "2.0", die Datei ist also 4 Bytes lang.

"data" enthält alle Dateien, die installiert werden sollen, mit den betreffenden Unterverzeichnissen -- da "tee" in /usr/bin liegt, befindet sich das Woody-Tee folglich im Verzeichnis "tee/data/usr/bin/tee". "data" symbolisiert also das Root-Dateisystem des installierten Systems.

Im Verzeichnis "control" gibt es mindestens die Datei "control", die ein paar Informationen zum Paket enthält. Hier ein Beispiel:

Package: linvdr-tee-0.7
Version: 0.7-1
Section: base
Priority: mandatory
Architecture: all
Depends: linvdr-base
Installed-Size: 23132
Maintainer: Mirko Dölle

Die "tee"-Funktion von Busybox verursacht Probleme im Zusammenhang mit dem
Burn-Plugin. Dieses Paket enthält das Programm "tee" von Debian Woody.

Die Datei ist reine Kosmetik, debtool gewinnt keine Informationen aus ihr. Wichtiger sind da die Bash-Scripte "preinst-linvdr" und "postinst-linvdr", ebenfalls im Verzeichnis "control": Sie werden von debtool aufgerufen, einmal bevor der Inhalt des Pakets entpackt wird und einmal nachdem das Paket ausgepackt wurde.

Die "preinst-linvdr" habe ich z.B. im Kernel-Addon dazu genutzt, VDR anzuhalten bevor die Kernel-Module ausgetauscht werden. In der "postinst-linvdr" habe ich mich um die symbolischen Links gekümmert, die gelöscht und neu angelegt werden mussten.

Ist die Verzeichnisstruktur komplett, baut man mit diesem Script ein fertiges Deb:

#!/bin/bash
if [ -z "${1}" ]; then

echo " usage: ${0} "
exit 1

fi
cd ${1}
if [ -e control.tar.gz ]; then

rm control.tar.gz

fi
cd control
tar czf ../control.tar.gz *
cd ..
if [ -e data.tar.gz ]; then

rm data.tar.gz

fi
cd data
tar czf ../data.tar.gz *
cd ..
if [ ! -e debian-binary ]; then

echo "2.0" > debian-binary

fi
if [ -e linvdr-${1}.deb ]; then

rm linvdr-${1}.deb

fi
ar r linvdr-${1}.deb debian-binary control.tar.gz data.tar.gz

Hier die Funktion in Kürze: In den Verzeichnissen "control" und "data" wird jeweils ein .tar.gz aller Dateien und Unterverzeichnisse gebaut und im übergeordneten Verzeichnis gespeichert. Dann werden die Dateien "debian-binary" sowie die TGZ der Verzeichnisse control und data per "ar" zu einem Archiv verbunden und schlicht ".deb" genannt. Fertig ist das Debian-Paket.

Grundsätzlich halte ich es für eine gute Idee, Backups anzulegen bevor man eine Datei überschreibt. So heißt das Programm Tee im Tee-Addon-Paket "tee.new". Im Post-Install-Teil schaue ich dann nach, ob es sich bei /usr/bin/tee um einen Symlink handelt, lösche ihn und benenne dann "tee.new" in "tee" um. So verhindere ich, dass BusyBox beim Auspacken des Pakets überschrieben wird.

Ist ein Addon von einem anderen abhängig, lässt sich ohne Paketdatenbank nicht klären, ob das andere bereits installiert wurde oder nicht. Dies lässt sich etwa in der preinst-linvdr prüfen, wenn es sich dabei um eine bestimmte Datei handelt, die vorhanden sein muss. Eine andere Methode ist, den Pakete-Cache von debtool auszuwerten. In /var/cache/apt/packages hinterlässt debtool für jedes installierte Paket eine Dateiliste, wobei die Liste exakt genauso heißt wie das Paket -- also auch mit ".deb" endet, obwohl es kein Debian-Paket ist. Auf diese Weise lässt sich etwa klären, ob bereits VDR 1.3.27 installiert wurde und -- wenn nicht -- die Installation weiterer Plugins mit einer entsprechenden Fehlermeldung verhindern.

Mir ist klar, dass dieser zusätzliche Aufwand mal wieder an den Entwicklern hängen bleibt und ihnen letztlich keine Vorteile bietet. Dennoch hoffe ich auf Unterstützung bzw. Umsetzung, denn letztlich erleichtert es den Benutzern, Addons sicher und einfach nachzuinstallieren. Das Ergebnis dürfte einmal ein stabileres LinVDR-System sein, weil es weniger Spielraum für Fehler gibt, und zudem die Support-Nachfragen im Portal drastisch senken. Das wieder um spart den Entwicklern Zeit, weil weniger Antworten nötig sind.

Qualitäts-Checkliste für LinVDR, VDR und Plugins



Zuletzt geändert am 01.10.2006 19:34  edit