Digital Video Recorder with mythtv

This page is currently only available in german!

Diese Seite befindet sich erst im Aufbau!

Server

Netboot

Die diskless clients beziehen sich das Betriebssystem (Ubuntu) und das mythtv-Frontend über eine eigens eingerichtete Netboot-Umgebung, die wir zweckmäßigerweise in /var/lib/netboot/mythclient1 einrichten. TODO!

dhcp3

Wenn der netboot-fähige Client ans Netz gehängt und angeschaltet wird, sollte man als erstes in /var/log/daemon.log nachsehen, mit welcher MAC-Adresse er sich vom DHCP-Server die IP-Adresse holen möchte. Die Ausgabe dieses Logfiles sieht wie folgt aus:
Mar 18 21:00:17 christoph dhcpd: DHCPDISCOVER from 00:02:ff:01:1f:42 via eth0
Mar 18 21:00:18 christoph dhcpd: DHCPOFFER on 192.168.1.200 to 00:02:ff:01:1f:42 via eth0
Mar 18 21:00:18 christoph dhcpd: DHCPREQUEST for 192.168.1.200 (192.168.1.3) from 00:02:ff:01:1f:42 via eth0
Mar 18 21:00:18 christoph dhcpd: DHCPACK on 192.168.1.200 to 00:02:ff:01:1f:42 via eth0
Mar 18 21:00:25 christoph dhcpd: DHCPDISCOVER from 00:02:ff:01:1f:42 via eth0
Mar 18 21:00:25 christoph dhcpd: DHCPOFFER on 192.168.1.200 to 00:02:ff:01:1f:42 via eth0
Mar 18 21:00:25 christoph dhcpd: DHCPREQUEST for 192.168.1.200 (192.168.1.3) from 00:02:ff:01:1f:42 via eth0
Mar 18 21:00:25 christoph dhcpd: DHCPACK on 192.168.1.200 to 00:02:ff:01:1f:42 via eth0
Folglich ist die /etc/dhcp3/dhcpd.conf anzupassen:
ddns-update-style none;

option space PXE;
option PXE.mtftp-ip                    code 1 = ip-address;
option PXE.mtftp-cport               code 2 = unsigned integer 16;
option PXE.mtftp-sport               code 3 = unsigned integer 16;
option PXE.mtftp-tmount            code 4 = unsigned integer 8;
option PXE.mtftp-delay               code 5 = unsigned integer 8;
option PXE.discovery-control        code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr  code 7 = ip-address;

option domain-name "your.private.domain";

default-lease-time 600;
max-lease-time 7200;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.220;
  option domain-name "your.private.domain";
  option routers 192.168.1.254;
  option broadcast-address 192.168.1.255;
  default-lease-time 600;
  max-lease-time 7200;
  
  class "pxeclients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    option vendor-class-identifier "PXEClient";
    vendor-option-space PXE;
    option PXE.mtftp-ip 0.0.0.0;
    filename "/var/lib/tftpboot/pxelinux.0";
    option root-path "192.168.1.3:/var/lib/netboot/root";
    next-server 192.168.1.3;
  }
}

host pxeclient {
   hardware ethernet 00:02:ff:01:1f:42;
   fixed-address 192.168.1.7;
}
Hiermit bekommt der mythtv-Client die IP-Adresse 192.168.1.7. Es folgt nun der Neustart des dhcp-Servers:
sudo /etc/init.d/dhcp3-server restart

tftpd

Um diskless clients mit dem Betriebssystem und dem mythtv-Frontend zu versorgen, muß auf dem Master-Server ein tftp-Daemon eingerichtet und konfiguriert werden. Hierfür wird das Paket tftpd-hpa verwendet.

In der /etc/inetd.conf muß folgende zeile ergänzt bzw. korrigiert werden:

tftp           dgram   udp4     wait    root  /usr/sbin/in.tftpd -s /var/lib/tftpboot
Da die Client via netboot ihr Betriebssystem beziehen, muß noch in /var/lib/tftpboot eine solche Umgebung aufgebaut werden.

Der Bootvorgang wird dabei in /var/lib/tftpboot/pxelinux.cfg/default folgendermaßen konfiguriert:

DEFAULT mythtv

LABEL ubuntu
       kernel mythtv/vmlinuz-2.6.27-11-generic
       append initrd=mythtv/initrd.img-2.6.27-11-generic rwnfs=192.168.1.3:/var/lib/netboot/mythclient1/config aufs=nfs nfsroot=192.168.1.3:/var/lib/netboot/mythclient1/root ro 
IPAPPEND
PROMPT 1
TIMEOUT 10

mysql

Um die Datenbank den Clients zugängig zu machen, muß die mysql.cnf geändert werden. Wichtig dabei ist, daß die Zeile
bind-address            = 127.0.0.1
in
bind-address            = 0.0.0.0
geändert wird.

EPG-Datenimport via EIT

DVB-T-Sender senden in ihrem Datenstrom die EPG-Daten der nächsten 7 Tage. Diese werden in mythtv importiert, in dem als Provider EIT angegeben wird.

EPG-Datenimport via nxtvepg

Auch für analog zu empfangende Programme gibt es einen EPG, der aktuell auf Kabel 1 mitgesendet wird. Um diese Daten zu empfangen, wird das Paket nxtvepg verwendet.

Einmal täglich werden die Daten mit folgendem (Cron-)job geholt und importiert:

nxtvepg -daemon -acqonce full -provider d92 -nodetach
nxtvepg -provider d92 -dump xml > /tmp/nxtvepg.xml 
mythfilldatabase --file 2 /tmp/nxtvepg.xml
Die 2 im Aufruf von mythfilldatabase bedeutet hierbei, daß es sich um den analogen Eingang handelt, der in mythtv als zweites eingerichtet wurde. Wird der mythtv-Server so aufgesetzt, daß nur eine analoge Senderquelle (also kein zusätzlicher DVB-T-Tuner) verwendet wird, so muß an dieser Stelle eine 1 stehen.

Wichtig: Der cronjob muß zu einer Zeit laufen, zu der unter Garantie niemand sonst, vor allem keine Aufnahme, auf den Analog-Tuner zugreift!

Client

Netboot-fähiges DOM

Einhängen des DOMs in das System

Das DOM wird in einen freien IDE-Slot eines Rechners gesteckt; der Stromadapter an die rot-schwarzen Pins eines Molex-Steckers gehängt.

Nun sucht man am besten mit Hilfe des Befehls dmesg, als welches Device das DOM dem System bekannt gemacht wurde. Die Ausgabe enthält dabei unter anderem:

...
[    3.446801] scsi 0:0:0:0: Direct-Access     ATA      DMSTORAGE FDM032 1.1  PQ: 0 ANSI: 5
...
[    3.825360] sd 0:0:0:0: [sda] 62496 512-byte hardware sectors (32 MB)
[    3.825379] sd 0:0:0:0: [sda] Write Protect is off
[    3.825382] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    3.825414] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[    3.825501] sd 0:0:0:0: [sda] 62496 512-byte hardware sectors (32 MB)
[    3.825515] sd 0:0:0:0: [sda] Write Protect is off
[    3.825517] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    3.825538] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[    3.825541]  sda: sda1
[    3.827509] sd 0:0:0:0: [sda] Attached SCSI disk
Das bedeutet, daß das DOM dem System unter dem Device /dev/sda zur Verfügung steht. Zur Sicherheit kann man sich auch nochmal die Partitionstabelle ansehen:
# fdisk /dev/sda
Befehl (m für Hilfe): p

Platte /dev/sda: 31 MByte, 31997952 Byte
16 Köpfe, 63 Sektoren/Spuren, 62 Zylinder
Einheiten = Zylinder von 1008 × 512 = 516096 Bytes
Disk identifier: 0x00000000

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sda1               1          62       31216+   6  FAT16

Befehl (m für Hilfe): q

Sichern des Original-DOM-Images

Das Sichern des Original-DOM-Images passiert folgendermaßen:
# sudo su -
# dd if=/dev/sda of=/home/youruser/DOM_sicherung.img
Am besten, man überprüft nun, ob man auch wirklich das korrekte Device, also das DOM gesichert hat:
# ls -al /home/youruser/DOM_sicherung.img
-rw-r--r--   1 root      31997952 2009-03-18 20:21 DOM_sicherung.img

Beschreiben des DOMs mit dem Netboot-Image

Das DOM in /dev/sda wird folgendermaßen mit dem Netboot-Image versehen:
# bzip2 -d -c /home/youruser/Desktop/netboot_n_swap_on_dom.bz2 | dd of=/dev/sda
62496+0 Datensätze ein
62496+0 Datensätze aus
31997952 Bytes (32 MB) kopiert, 34,9466 s, 916 kB/s
Abschließend kann man sich zur Verifikation den neuen Inhalt des DOMs ansehen:
# fdisk /dev/sda
Befehl (m für Hilfe): p

Platte /dev/sda: 31 MByte, 31997952 Byte
16 Köpfe, 63 Sektoren/Spuren, 62 Zylinder
Einheiten = Zylinder von 1008 × 512 = 516096 Bytes
Disk identifier: 0x00000000

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sda1   *           1           1         472+  83  Linux
/dev/sda2               2          62       30744   82  Linux Swap / Solaris

Befehl (m für Hilfe): q
Nun sollte der Rechner heruntergefahren und das DOM in die S100 eingebaut werden.