heise online
  • c't
  • iX
  • Technology Review
  • Mac & i
  • mobil
  • Security
  • Netze
  • Open Source
  • Developer
  • c't-TV
  • Download
  • Telepolis
  • Resale
  • Foto
  • Autos
  • Preisvergleich
  • Stellenmarkt
  • Abo
  • weitere Angebote
    • Shop
    • Artikel-Archiv
    • Veranstaltungen
    • Whitepapers
    • heise-marktplatz
    • IT-Markt
    • Tarifrechner
    • Jobs bei Heise

c't Magazin
  • Startseite
  • Artikel
  • c't-Projekte
  • Hotline & FAQ
  • Treiber & mehr
  • Kolumnen
Software zu Projekten Allgemeine Hinweise
Archiv-Suche Newsletter RSS-FeedRSS

c't › c't-Projekte

c't
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Register
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Start Page
  • Index
  • History
  • Last Change

(c't-)VDR unter Xen an den Start bringen

  1. Virtuelle Umgebung/DomU bestücken
  2. DVB-PCI-Hardware isolieren
  3. Fernbedienung per LIRC unter Xen
    1. LIRC innerhalb der DomU
    2. LIRC außerhalb der DomU
  4. Noch ein paar Tipps

Die nötigen Handgriffe, um einen VDR unter Xen an den Start zu bringen, hat c't mehrfach nur angerissen. Im Detail gibt es eine ganze Menge mehr zu tun ;-)

Virtuelle Umgebung/DomU bestücken

Auf dem c't-Debian-Server 2 ist das denkbar einfach: Rufen Sie ctsrvcfg auf, markieren Sie unter domus das Paket ctdomubuilder, geben Sie die Eckdaten wie Name, IP-Adresse und Volumegroup an und lassen Sie eine entsprechende DomU generieren. Das Folgende geht davon aus, dass ein grundlegend lauffähiges System auf Debian-Etch-Basis als DomU namens "vdr" existiert. In der DomU sollten Sie zunächst einen ssh-Server einrichten (apt-get install ssh), damit Sie nicht dauerhaft per xm console vdr mit den Fähigkeiten eines VT100-Terminals leben müssen.

In der vdr-DomU ergänzen Sie die Paketquellen so, dass aktuelle VDR-Pakete erreichbar sind. Dafür empfehlen sich die Pakete, die Tobias Grimm bereitstellt, die im Rahmen des Debian-Multimedia-Projekt erreichbaren sowie einige Komponenten aus dem c't-Debian-VDR. Ergänzen Sie dazu die letzten drei Zeilen in der Datei /etc/apt/sources.list in der vdr-DomU (die erste Zeile sollte zu Ihrem Netzwerk passen, also auf ein lokales Repository mit den Paketen der c't-Debian-Server-2-CD/DVD verweisen - hier also nur ein Beispiel):

deb http://server.zuhause.xx:82/pkgs etch main non-free contrib
deb http://ftp.de.debian.org/debian/ etch main non-free contrib
deb http://security.debian.org/ etch/updates main contrib non-free
deb http://www.heise.de/ct/projekte/srv/v2 debs/
deb http://e-tobi.net/vdr-experimental etch base addons vdr-multipatch
deb http://www.debian-multimedia.org/ etch main
deb http://www.heise.de/ct/projekte/vdr/v6 debs/

Anschließend sorgen Sie noch dafür, dass Pakete aus diesen Repositories gegenüber denen aus dem Debian-Bestand gewinnen, indem Sie die Datei /etc/apt/preferences mit folgendem Inhalt versorgen:

Package: *
Pin: release o=Debian,a=stable
Pin-Priority: 500

Package: *
Pin: release o=ctvdr6
Pin-Priority: 600

Package: *
Pin: release o=ctsrv2
Pin-Priority: 600

Package: *
Pin: release o=e-tobi.net
Pin-Priority: 700

Nach einem anschließenden apt-get update, das ohne Fehlermeldungen durchlaufen sollte, können Sie nunmehr direkt VDR-Pakete einrichten oder das über ctvdrcfg erledigen. Wenn Sie dafür ctvdrcfg (das Konfigurationsfrontend der c't-VDR-Distribution) nutzen wollen, so müssen Sie dies per apt-get install ctvdrcfg zunächst installieren. Damit Sie nicht laufend von Warnungen behelligt werden, dass die Signaturen der hinzugefügten APT-Repositories nicht überprüfbar sind, sollten Sie mit apt-get install e-tobi-keyring debian-multimedia-keyring die Schlüssel der jeweiligen Paketverwalter im Keyring der DomU verankern.

Beim Hinzufügen der VDR-Pakete ziehen die ein Mail-System mit, weil der at-Befehl darauf angewiesen ist. Wenn Ihnen ein umfangreicher Mailer wie courier oder exim zu mächtig ist, können Sie statt dessen im Vorfeld schon einen Minimal-Mailer einrichten (apt-get install nullmailer). Den sollten Sie anschließend mit dpkg-reconfigure nullmailer noch mal im Detail konfigurieren, insbesondere einen Benutzer festlegen, der die Nachrichten erhalten soll, die das System unbedingt loswerden will.

DVB-PCI-Hardware isolieren

Das Einrichten von VDR-Paketen macht freilich wenig Sinn, solange keine DVB-Karten innerhalb der DomU sichtbar sind. Um das zu bewerkstelligen, müssen Sie die zugehörigen PCI-Geräte in der Domain0 isolieren und in die DomU verlagern. Dazu ist es hilfreich in beiden Domains mit apt-get install pciutils einige Helfer zu installieren. Durch Aufruf von lspci in der Domain0 finden Sie heraus, wo die DVB-Karten liegen, hier ein gekürztes Beispiel:

...
00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/ ...
01:06.0 Multimedia controller: Philips Semiconductors SAA7146 (rev 01)
01:08.0 Multimedia controller: Philips Semiconductors SAA7146 (rev 01)
01:0e.0 FireWire (IEEE 1394): Texas Instruments TSB43AB23 IEEE- ...
...

Die nötigen Angaben, um ein PCI-Gerät aus der Domain0 herauszulösen, sind die Nummern vor der textuellen Beschreibung ("Multimedia ..."), also "01:06.0" und "01:08.0". Die DVB-Karten in dem Beispielsystem sind klassische TechnoTrend-Karten, eine Fullfeatured- und eine Budget-Karte. Interessant ist auch die Verteilung der Hardware-Interrupts, die Sie sich mit cat /proc/interrupts ausgeben lassen können. Hier für das Beispielsystem in gekürzter Form, sofern es die DVB-Karten betrifft und nach längerer Laufzeit, wie am Stand der Interrupt-Zähler nach dem Doppelpunkt zu erkennen:

...
 16:  152492089        Phys-irq  ohci1394,saa7146 (1)
 17:   28607703        Phys-irq  saa7146 (0)
...

Die Tatsache, dass sich der Firewire-Anschluss und die zweite DVB-Karte einen IRQ teilen, sollte man im Hinterkopf behalten, falls es zu Problemen kommt -- mehr dazu später.

Um die DVB-PCI-Karten aus der Domain0 herauszulösen, kann man diese in der Konfiguration des Boot-Loaders Grub auf dem Server selbst eintragen. Eine passend zum bisherigen Beispiel modifizierte Datei /boot/grub/menu.list sieht dann so aus:

## ## End Default Options ##

title           Xen 3.1.0-1-i386-pae / Debian GNU/Linux, kernel 2.6.18-4-xen-686
root            (hd0,0)
kernel          /boot/xen-3.1.0-1-i386-pae.gz vga=text-80x25 
module          /boot/vmlinuz-2.6.18-4-xen-686 root=/dev/sda1 ro BOO 
                 xencons=off console=tty0 pciback.hide=(01:08.0)(01:06.0) noirqdebug 
module          /boot/initrd.img-2.6.18-4-xen-686
savedefault

Die zitierten Zeilen stehen am Ende der Datei. Entscheidend ist die Option pciback.hide=(01:08.0)(01:06.0), die als Kernel-Option in der ersten module-Zeile angehängt ist (hier der Lesbarkeit halber in einer zweiten Zeile dargestellt) . Sie sorgt dafür, dass die Domain0 nach einem Neustart des Servers die PCI-DVB-Karten nicht mehr verwendet. Zwei weitere Optionen sind außerdem gegenüber einer unmodifizierten menu.list-Datei hinzugekommen: xencons=off sorgt dafür, dass der Xen-Hypervisor die Finger von den seriellen Schnittstellen lässt; das ist wichtig, um daran später einen Lirc-Empfänger betreiben zu können. Und noirqdebug beugt schließlich eventuellen Kalamitäten mit den gemeinsam genutzten Interrupts vor.

Damit die auf diese Weise der Domain0 (nach einem Reboot) weggenommenen Geräte in einer DomU sichtbar sind, müssen diese in der zugehörigen Konfigurationsdatei aufgeführt werden. Für das Beispiel sehe die vollständige Konfigurationsdatei einer VDR-DomU dann so aus:

kernel='/boot/vmlinuz-2.6.18-4-xen-686'
ramdisk='/boot/initrd.img-2.6.18-4-xen-686'
memory='128'
name='vdr'
root='/dev/hda1 ro'
disk = [ 'phy:/dev/data/vdr_lv_root,hda1,w','phy:/dev/data/vdr_lv_swap,hda2,w' ]
vif = [ 'bridge=intern' ]
pci=['01:06.0','01:08.0']

Ergänzt gegenüber der per ctsrvcfg/ctdomubuilder generierten Datei ist lediglich die letzte Zeile: pci=['01:06.0','01:08.0']. Nach einem Neustart der DomU, etwa per xm reboot vdr sollten die PCI-Geräte nach Installation der PCI-Utilities via apt-get install pciutils sichtbar sein:

00:00.0 Multimedia controller: Philips Semiconductors SAA7146 (rev 01)
00:01.0 Multimedia controller: Philips Semiconductors SAA7146 (rev 01)

Noch fehlt ein entscheidender Schritt: Die DomU lädt die Treiber für die DVB-Karte nicht automatisch. Es gibt zwei Möglichkeiten, das zu erledigen. Entweder Sie wissen, welche Treiber nötig sind. Dann genügt es, die Module namentlich in der Datei /etc/modules aufzuführen, oder lassen Linux diesen Job übernehmen und installieren in der DomU zusätzlich das udev-Paket (apt-get install udev).

Die Installation von udev zieht allerdings ein weiteres Problem nach sich: udev vergibt beim Starten für jede neue Netzwerkkarte einen neuen Namen (eth0, eth1 und so weiter). Da Xen beim Start einer DomU jeweils eine MAC/Hardware-Adresse generiert, meint udev es bei jedem DomU-Start mit einer neuen Netzwerkkarte zu tun zu haben, das heißt, die in /etc/network/interfaces hinterlegte Konfiguration für eth0 wirkt beim zweiten Start mit udev nicht mehr, weil die Netzwerkkarte dann nicht mehr eth0, sondern eth1 heißt.

Die Lösung für dieses Problem ist eigentlich ganz einfach: Tragen Sie eine feste MAC/Hardware-Adresse in die Konfigurationsdatei der DomU ein. Lesen Sie diese vor der Installation von udev einfach per ifconfig eth0 in der DomU aus und ändern Sie die vif-Zeile der Datei /etc/xen/vdr entsprechend der ifconfig-Ausgabe, etwa so:

vif = [ 'mac=00:16:3E:69:22:69,bridge=intern' ]

Wenn Sie anschließend per apt-get install udev in der DomU udev installieren, fehlen nur noch die Firmware-Dateien für Ihre DVB-Karte, die Sie unter anderem auf heise online, auf den Web-Seiten des linuxtv.org-Projekts und im Verzeichnis firmware auf jeder c't-VDR-CD finden. Welche Dateien Sie brauchen, hängt von der DVB-Karte ab. Ohne Firmware finden sich in der Regel Hinweise auf eventuell fehlende Dateien in der Ausgabe des dmesg-Befehls nach einem DomU-Boot.

Im Fall einer klassischen Fullfeatured-DVB-Karte ist das mit folgender Befehlssequenz getan:

cd /usr/lib/hotplug/firmware
wget http://www.linuxtv.org/downloads/firmware/dvb-ttpci-01.fw-261d
mv dvb-ttpci-01.fw-261d dvb-ttpci-01.fw

Nach einem weiteren Reboot der DomU sollten die DVB-Module geladen und die Karten betriebsbereit sein. Sie können das mit cat /proc/interrupts überprüfen. Im Fall des Beispielsystems sieht die Ausgabe dann so aus:

 16:          2        Phys-irq  saa7146 (0)
 17:          0        Phys-irq  saa7146 (1)

Die DVB-Module sind geladen. Die Karten auf den Interrupt-Leitungen aktiv, auf denen Sie auch in der Domain0 lagen. Jetzt können Sie mit der Installation der VDR-Pakete loslegen. Mit ctvdrcfg haben Sie schnell die Basis-Pakete eingerichtet und müssen nicht von Hand irgendwelche Kanallisten durch die Gegend bewegen.

Fernbedienung per LIRC unter Xen

Um das VDR-System über LIRC fernzubedienen, müssen Sie sich entscheiden, wo die zugehörige Hardware "angeschlossen" sein soll, in der DomU oder der Domain0. Für die DomU spricht, dass man mit dem Dienst nicht die Domain0 "belastet", dagegen spricht, dass man dann die Hardware in die DomU hinein expedieren muss. Das geht im Fall von seriellen Schnittstellen nur mit Fingerspitzengefühl, im Fall von USB-Empfängern nur, indem man einen ganzen USB-Bus (viele Rechner haben immerhin mehrere) als PCI-Gerät in die DomU hineinreicht (wie das im Fall der DVB-PCI-Karten gezeigt wurde). In der Domain0 hat man all diese Probleme nicht, muss aber zusätzlich dafür sorgen, dass LIRC die Daten dort als Server bereitstellt, auf die dann die DomU als Client zugreifen kann -- dank der grundsätzlichen Netzwerkfähigkeit von LIRC lässt sich das einrichten.

LIRC innerhalb der DomU

Damit eine serielle Schnittstelle in einer Xen-DomU erreichbar ist, muss man dem Hypervisor den Zugriff auf diese entziehen. Das geht mit der bereits erwähnten xencons=off-Option in der menu.list-Konfigurationsdatei von Grub. In der Konfigurationsdatei der DomU muss man ferner dafür sorgen, dass Xen die gewünschten IO-Ports und den IRQ des seriellen Ports hineinreicht. Das geht für das konkrete Beispiel durch das Hinzufügen der Zeilen in /etc/xen/vdr:

irq = [ '4' ] 
ioports = [ '3f8-3ff' ]

Diese Optionen reichen den ersten seriellen Port (ttyS0) in die DomU hinein. Bevor Sie die DomU starten, müssen Sie noch ein Xen-Update einspielen. Die übliche Kombination aus apt-get update; apt-get upgrade sollte das xen-utils-Paket erneuern, um einen Fehler bei der Auswertung der irq-Option zu beheben. Das Update erfordert einen manuellen Neustart des Xen-Daemon xend (/etc/init.d/xend restart). Wenn Sie in der gestarteten VDR-DomU anschließend dort per ctvdrcfg LIRC installieren und von Hand die zugehörigen Module (apt-get install lirc-modules-2.6.18-4-xen-686) sollte nach einem Reboot der VDR-DomU auch die Fernbedienung des VDR per LIRC möglich sein.

Tückisch können nForce-Chipsätze sein, deren serielle Ports als Plug&Play-Device ausgeführt sein. Wenn sich in der Domain0 ein 8250_pnp-Modul findet, dann ist das ein deutlicher Hinweis. Dieses Modul sollte in der Domain0 dann geladen sein, damit der serielle Port überhaupt aktiviert ist und sich in der DomU ansprechen lässt.

LIRC außerhalb der DomU

Vorausgesetzt die LIRC-Konfiguration in der Domain0 steht, so lässt sich über eine Option in der Datei /etc/lirc/hardware.conf, nämlich:

# Arguments which will be used when launching lircd
LIRCD_ARGS="--listen=2006"

der Netzwerkserver im LIRC-Daemon aktivieren. Auf anderen DomUs kann man dann auf diesen Dienst zurückgreifen, indem man deren LIRC-Daemons über einen passenden Eintrag in der /etc/lirc/hardware.conf-Datei

# Arguments which will be used when launching lircd
LIRCD_ARGS="--connect=192.168.26.13:2006"

anweist, sich mit dem in der Domain0 zu verbinden. Die Methode hat zwei Vorteile: LIRC lässt sich aus verschiedenen DomUs nutzen und man muss sich in der VDR-DomU bei einem lokalen Kernel-Update, etwa für moderne DVB-Treiber, auch noch um daran angepasste LIRC-Module kümmern.

Noch ein paar Tipps

Zur Überprüfung des Empfangs machen sich die dvb-utils gut, etwa femon (apt-get install dvb-utils).

Wen sich Meldungen dieser Art: vpeirq: used 1 times >80%% of buffer häufen, hilft das Vergrößern der DMA-Puffer. Legen Sie dazu in /etc/modprobe.d die Datei budget_core mit dem Inhalt options budget_core bufsize=1410 an. Nach einem Neustart der DomU verwenden die DVB-Treiber maximal große DMA-Puffer.

Download in other formats:

  • Plain Text

Trac Powered

Powered by Trac 0.11.1
By Edgewall Software.

http://www.ctmagazin.de/
http://www.ctmagazin.de/projekte/

  • Datenschutzhinweis
  • Impressum
  • Kritik, Anregungen bitte an c't-WWW
  • Mediadaten
  • Copyright © 2011 Heise Zeitschriften Verlag
  • International: The H, The H Security, The H Open Source