VDR mit Debian

23. Dezember 2013 · Anwendungen · andreas · 2 Kommentare

Der Video Disk Recorder (VDR) ist eine feine Sache: einfach eine digitale TV-Karte (entweder C/S oder T) in einen antiquierten PC einbauen und schon steht für wenig Geld ein vollwertiger digitaler Videorekorder zur Verfügung.

Neben speziellen VDR-Distributionen wie z.B. dem c’tVDR eignet sich fast jede Linux-Distribution als Basis. Dieser Artikel beschäftigt sich mit der Installation eines “normalen” SD-VDR auf Basis von Debian Wheezy.

Als Blaupause für die Basisinstallation dienten die Artikel von Tobias Grimm und Martin Selbald, wobei einige Hard- und Software-spezifische Besonderheiten eigene Lösungen benötigten. Die erste (nicht veröffentlichte) Fassung dieses Beitrags basierte auf der Installation eines No-Name-Rechners, die aktuelle Fassung wurde für die Installation auf einen DELL Precision T3400 überarbeitet. Eine wesentliche Änderung hierbei war der Umstieg von NVRAM-Wakeup auf ACPI Wakeup.

Dieser Beitrag erhebt keinen Anspruch auf Vollständigkeit, sondern dient der Dokumentation der durchgeführten Schritte.

Installation des Grundsystems

Zur Installation des Grundsystems wird das NetInst-Image verwendet, welches in rund 280MB nur die nötigsten Pakete zur Installation mitbringt. Alle weiteren Pakete werden im Verlauf der Installation direkt aus dem Internet geladen.

Zum Betrieb des VDR muß lediglich ein Grundsystem installiert werden, d.h. bei der Software-Auswahl kann alles außer den Standard-Systemwerkzeugen abgewählt werden.

Installation SSH

Um komfortabler auf den VDR zugreifen zu können, sollte als erster Schritt der OpenSSH-Server installiert werden

apt-get install openssh-server

so daß anschließend eine Verbindung mit z.B. PuTTY möglich ist.

Installation X-Server

Zur Ausgabe des Fernsehbildes direkt am angeschlossenen Monitor wird als nächstes der X-Server sowie der leichtgewichtige Fenstermanager Fluxbox zusammen mit einigen weiteren Paketen installiert.

apt-get install less alsa-utils xterm xorg nodm x11-xserver-utils ffmpeg fluxbox

Theoretisch kann auch eine direkte Ausgabe des Bildes ohne Umweg über den Windowmanager erfolgen, dies hatte ab und an aber den unschönen Nebeneffekt, daß ein Absturz der Bildschirmausgabe auch gleich den X-Server mitriss.

Damit der X-Server jedesmal direkt bei Hochfahren gestartet wird, ist in der Datei “/etc/default/nodm” der Wert

NODM_ENABLED=true

zu setzen, bevor mit einem anschließenden

service nodm start

der X-Server manuell gestartet werden kann.

Installation VDR

Der VDR wird ebenfalls mit Debian Bordmitteln installiert. Während der Installation mittels

apt-get install vdr vdr-plugin-xineliboutput vdr-plugin-remote xineliboutput-sxfe

kann entweder das Standard-Videoverzeichnis “/var/lib/video.00” direkt angelegt werden oder später durch setzen der Variable “VIDEO_DIR” in der Datei “/etc/default/vdr” auf ein beliebiges Verzeichnis verwiesen werden.

Anschließend sollte die Beispiel-Tastaturkonfiguration kopiert werden, damit der VDR auch standardmäßig über die Tastatur bedienbar ist.

cp /usr/share/doc/vdr-plugin-xineliboutput/examples/remote.conf.example /var/lib/vdr/remote.conf
chown vdr:vdr /var/lib/vdr/remote.conf

Damit VDR überhaupt startet, müssen in der Datei “/etc/default/vdr” mehrere Werte gesetzt bzw. geändert werden

ENABLED=1
ENABLE_SHUTDOWN=1

bevor als letzter Schritt der Installation eine aktuelle Kanalliste aus dem VDR-Wiki an die entsprechende Stelle “/var/lib/vdr/channels.conf” kopiert wird.

Alternativ hierzu kann die Aktualisierung der Kanalliste auch nach Installation von w-scan bei gestopptem VDR selbst durchgeführt werden:

apt-get install w-scan
sudo -u vdr sh -c "w_scan -o 7 -f s -s S19E2 > /var/lib/vdr/channels.conf"

Ist dies erledigt, kann der VDR mittels

service vdr start

gestaret und die erfolgreiche Installation durch Eingabe von

vdr-sxfe

überprüft werden.

Damit die Ausgabe bei Systemstart ebenfalls automatisch startet, ist in der Datei “/root/.fluxbox/startup” der Eintrag

vdr-sxfe --fullscreen &

vor der Zeile “exec fluxbox” einzuzufügen.

Installation Samba

Sollen neben dem VDR auch noch andere (z.B. Windows-Clients) auf die aufgezeichneten Dateien zugreifen, so empfiehlt sich die Installation von Samba, welche mittels

apt-get install samba

durchgeführt wird. Anschließend ist die Datei “/etc/samba/smb.conf” so anzupassen, daß eine Freigabe des Verzeichnisses “/var/lib/video.00” z.B. unter dem Freigabenamen “video” erfolgt:

security = share
[[video]]
comment = video share
path = /var/lib/video.00
public = yes
writable = yes
guest ok = yes
browsable = yes
guest account = vdr
force user = vdr

Die hier verwendete Konfiguration räumt beim Zugriff auf die Freigabe maximale Rechte ein: jeder darf sich ohne Benutzer und Kennwort verbinden und z.B. nach dem Abspielen einer Aufnahme diese auch löschen.

Rechte für Benutzer “vdr” anpassen

Damit der Benutzer vdr (also der Eigentümer des VDR) bestimmte Aktionen durchführen darf, ist es notwendig, ihm mit entsprechenden Rechten auf die hierfür benötigten Dateien auszustatten. Nach der Installation von “sudo” mittels

apt-get install sudo

ist der Datei “/etc/sudoers” folgende Zeile hinzuzufügen:

vdr	ALL=(ALL) NOPASSWD: /sbin/shutdown, /usr/sbin/grub-set-default, /usr/bin/smbstatus

Fernbedienung

Bevor die Fernbedienung in Betrieb genommen werden kann, muß das entsprechende Linux-Device ermittelt werden. Der Aufruf von

cat /proc/bus/input/devices

gibt eine Liste aller Devices aus, das gesuchte ist in diesem Fall der IR-Empfänger der Nova-S-Plus:

I: Bus=0001 Vendor=0070 Product=9202 Version=0001
 N: Name="cx88 IR (Hauppauge Nova-S-Plus "
 P: Phys=pci-0000:05:04.0/ir0
 S: Sysfs=/devices/pci0000:00/0000:00:1e.0/0000:05:04.0/rc/rc0/input6
 U: Uniq=
 H: Handlers=kbd event6
 B: PROP=0
 B: EV=100013
 B: KEY=10afc312 2142017 0 0 0 0 118000 41a8 4801 9e16c0 0 0 10000ffc
 B: MSC=10

Das Kommanto “udevadm” liefert unter Angabe des Device-Namens nähere Informationen:

udevadm info --query=path --name=/dev/input/event6

von denen aktuell nur das zugeordnete Event bzw. dessen Pfad

/devices/pci0000:00/0000:00:1e.0/0000:05:04.0/rc/rc0/input6/event6

interessiert. Der so ermittlete Pfad wird dann nochmals mit “udevadm” genauer untersucht und ein

udevadm info --attribute-walk --path=/devices/pci0000:00/0000:00:1e.0/0000:05:04.0/rc/rc0/input6/event6

liefert den Block

looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:05:04.0/rc/rc0/input6':
 KERNELS=="input6"
 SUBSYSTEMS=="input"
 DRIVERS==""
 ATTRS{name}=="cx88 IR (Hauppauge Nova-S-Plus "
 ATTRS{phys}=="pci-0000:05:04.0/ir0"
 ATTRS{uniq}==""
 ATTRS{properties}=="0"

Dieser beinhaltet letztendlich alle Informationen, die zum Erzeugen der Datei “/etc/udev/rules.d/70-remote-device.rules” benötigt werden.

KERNELS=="input*", ATTRS{name}=="cx88 IR (Hauppauge Nova-S-Plus ", SYMLINK+="input/ir"

Mit Hilfe dieses Eintrags wird automatisch das Device “/dev/input/ir” erzeugt, das für den vdr in der Datei “/etc/vdr/plugins/plugin.remote.conf” verwendet werden kann:

-i /dev/input/ir

Einbinden der Daten-Platte

Bevor die Daten-Platte benutzt werden kann, muß sie erstmal partitioniert und formatiert werden was die Kombination aus

cfdisk /dev/sdb
mkfs.ext4 /dev/sdb1

erledigt.

Während “früher” die einzelnen Datenpartitionen anhand ihres Device-Namens eingebunden wurden, wird neuerdings die UUID verwendet. Dies hat den Vorteil, daß im Falle des Hinzufügens (oder Entfernens) von Festplatten keinerlei Änderungen gemacht werden müssen, da die UUID gerätespezifisch ist.

Die jeweilige UUID kann mittels des Befehls “blkid” ermittelt werden, die Syntax ist

blkid /dev/sdb1

und ergibt eine Zeile wie

/dev/sdb1: UUID="6fa2d468-8b82-4a68-8aef-0f94c58a3fe2" TYPE="ext4"

Die so ermittelte UUID wird dann in die Datei “/etc/fstab” eintragen

UUID=6fa2d468-8b82-4a68-8aef-0f94c58a3fe2 /var/lib/video.00     ext4    defaults        0       2

so daß beim Systemstart die Partition unter dem Pfad “/var/lib/video.00” eingebunden wird.

Anschließend muß nur noch dem Benutzer vdr über ein

chown vdr:vdr /var/lib/video.00/

die volle Berechtigung über die Datenplatte überantwortet werden.

VDR am Abschalten hindern

Standardmäßig schaltet sich der VDR nach einer frei definierbaren Zeit der Inaktivität aus. Dieses grundsätzlich sehr löbliche Verhalten führt allerdings zu Ärger, falls zu diesem Zeitpunkt gerade ein Benutzer aktiv die Samba-Freigaben verwendet.

Ein Lösungsansatz wurde von der Zeitschrift c’t vorgestellt - ein Skript das als zusätzlicher Shutdown-Hook “S90.samba” im Verzeichnis “/usr/share/vdr/shutdown-hooks” überprüft, ob zum Zeitpunkt des Herunterfahrens aktive Verbindungen bestehen und das Herunterfahren in diesem Fall abbricht.

#! /bin/sh
# aktive Samba-Verbindung checken
 # c't 14/10 Seite 155
 #
 # apt-get install sudo
 #   In sudoers zusätzlich eingetragen:
 #vdr     ALL=(ALL) NOPASSWD: /usr/bin/smbstatus
/usr/bin/sudo -u vdr /usr/bin/smbstatus 2> /dev/null | /bin/grep -i deny > /tmp/samba.tmp
 if [ $? -eq 0 ] ; then
 # warte 5 Minuten
 echo "ABORT_MESSAGE=\"Samba-User aktiv, 5 Minuten warten\""
 echo "TRY_AGAIN=5"
 EXITSTATUS=1
 else
 EXITSTATUS=0
 echo "ABORT_MESSAGE=\"Kein Samba-User aktiv\""
 fi
 exit $EXITSTATUS

Automatisches Aufwachen

Idealerweise sollte der abgeschaltete VDR zu vorher programmierten Aufnahmezeitpunkten wieder von selbst aufwachen. Während beim usprünglich verwendeten Board M7VKD noch NVRAM-Wakeup in Kombination mit einem angepassten GRUB-Menü zum Einsatz kam, beherrscht der T3400 moderne Methoden, was den Aufwand dank ACPI Wakeup deutlich reduziert.

Als erstes sollte sichergestellt werden, daß die Uhr des VDR richtig läuft und ggf. korrigiert wird. Dies kann entweder über den VDR selbst oder über NTP erledigt werden.

apt-get install ntp

Nach der Installation sollte in “/etc/adjtime” noch sichergestellt werden, daß die Systemuhr auf UCT läuft.

Das für ACPI Wakeup benötigte VDR-Addon ist nicht in den Standard-Debian-Quellen vorhanden, findet sich aber im e-tobi-Repository, das vom oben bereits erwähnten Tobias Grimm freundlicherweise zur Verfügung gestellt wird.

Statt der Einbindung des Repositories kann das Paket “vdr-addon-acpiwakeup_0.0.11_all.deb” auch vom Server http://e-tobi.net/vdr-experimental/pool-squeeze/binary/addons/ manuell heruntergeladen und anschließend installiert werden:

dpkg --install vdr-addon-acpiwakeup_0.0.11_all.deb

Auch hier sind noch zwei kleine Änderungen an der mitgelieferten Konfigurationsdatei “vi /etc/vdr/vdr-addon-acpiwakeup.conf” notwendig:

ACPI_ENABLED auf “yes” ändern und “ACPI_REGULAR_TIME” auskommentieren.

Abschluss

Zum Abschluss der Konfigurationsarbeiten kann ein

dpkg-reconfigure vdr

durchgeführt werden, das sich Debian-seitig um das Setzen der korrekten Rechte etc kümmert.