Digitaler Videorecorder mit mythtv

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.