Docker-Bausteine für VDR

  • Moin,


    angetrieben durch Forschungsdrang und auch die Not, dass meine "schöne" Plex+usw+VDR Kiste immer mal wieder Probleme macht, habe ich rumprobiert wie ich das Ressourcenmanagement besser in den Griff bekommen kann.


    Der erste Gedanke war, doch mal XEN zu machen und dann die einzelnen Anwendungen getrennt voneinander zu virtualisieren, also



    1) VDR
    2) Plex + Python-Scriptesammelsurium
    3) iStreamdev + FFMPEG für's Umrechnen
    4) eine "Spielwiesen"-Box für diverse, andere Dienste


    Was mir dabei nicht gefällt, ist der massive Overhead den ich für jede VM rumschleppen muss.


    Auf der Arbeit sind wir vor 2 Wochen in der Mittagspause auf Docker gekommen, und von daher probiere ich damit ein wenig herum.
    Wer mehr zu Docker wissen will: https://www.docker.com/whatisdocker/



    Was ich aktuell am laufen habe:


    * Ubuntu 12.04 Base Installation (basiert auf einem yavdr0.5 sogar)
    * Ubuntu:12.04 Docker Container als privileged System (heisst es hat Zugriff auf die Devices nativ) mit yavdr debs aus den stable ppas
    * Ubuntu Container mit Plex von hier https://github.com/needo37/plex


    Noch starte ich alles manuell, und ich spiele mit den Scripten rum.


    Aber man kann sich "relativ" einfach ein Docker-Repo aufsetzen bzw. ein public Image in die "Registry" (public repo) bei docker.io legen.


    Was bringt das? Ja, ich kann per Container die Ressourcen managen, ich kann jeden Container separat updaten/pflegen, aber das System ist halt klein Vergleich zu einer VM. Ich "könnte" (wenn ich wollte) auch einen Archlinux-Container starten (z. Bsp. https://registry.hub.docker.com/u/base/archlinux/) und dann archvdr austesten ;)


    Oder, oder oder ... Da Docker wie git mittel Commits versioniert kann ich auch Forks bilden, zurückgehen auf einen vorherigen Stand, etc.


    So - hat jemand Interesse an sowas? Für die Distri Devs ist das sicher sehr interessant ... Wenn ja, dann würde ich mich über ein oder zwei Tester freuen.


    Was denkt ihr dazu?


    Grüße, J*



    =====================================================


    Nachfolgend ein bisschen Kickstart-Info - Basierend auf Ubuntu 12.04 braucht man:


    * docker (http://docs.docker.com/install…u-precise-1204-lts-64-bit)
    * apparmor


    und los gehts.


    Den VDR-Container z. Bsp. so starten:


    > docker run -i -t --privileged=true ubuntu:12.04 /bin/bash



    Dann auf der Shell arbeiten, und nach der letzten, relevanten Aktion die Seed-ID nach dem root@ in Clipboard. Dann einen Commit in ein eigenes Image:


    > docker commit -m="installed yavdr base" -a="Jondalar" ab0ed68501ef jondalar/yavdr


    usw ...

    2 Mal editiert, zuletzt von Jondalar () aus folgendem Grund: Neuer Name, es geht ja nicht um eine komplette Distri im Docker, sondern eher Addons bzw. Bausteine

  • Um zu verstehen, was Docker sein soll, fand ich eben diesen Artikel ganz hilfreich:
    http://www.heise.de/developer/…tabel-machen-2127220.html
    Dort steht drin, dass Docker auf Linux-Containern (LXC) basiert, was aber wohl schon ein paar Tage nach Erscheinen des Artikels wieder überholt ist:
    http://www.linux-magazin.de/NEWS/Docker-0.9-ersetzt-LXC


    Auf jeden Fall finde ich jegliche Virtualisierung eigentlich nur dann interessant, wenn man damit ein Problem lösen kann, das sonst unlösbar (oder unbequem lösbar) ist. Und die Probleme, die Du lösen willst (inkompatible libs?), beschreibst Du eigentlich oben kaum. Deshalb kann ich nicht so richtig nachvollziehen, wozu der Aufwand gut sein soll. :D


    Gruß
    hepi

  • Hi Hepi,

    Auf jeden Fall finde ich jegliche Virtualisierung eigentlich nur dann interessant, wenn man damit ein Problem lösen kann, das sonst unlösbar (oder unbequem lösbar) ist. Und die Probleme, die Du lösen willst (inkompatible libs?), beschreibst Du eigentlich oben kaum. Deshalb kann ich nicht so richtig nachvollziehen, wozu der Aufwand gut sein soll.

    Die Frage ist berechtigt - bei mir dient der Server daheim als:


    • VDR zum aufnehmen
    • VDR als Sky-Recevier Ersatz zum TV glotzen
    • EPG Server
    • PLEX Media Server, hauptsächlich um US Serien und Aufnahmen offline bzw. auf iOS zu schauen
    • Downloader für div. Media (da gehe ich mal nicht näher drauf ein jetzt)
    • Time-Machine Backup Medium


    Plex und die div. Downloadtools sind alles vermaledeite Python-Tools, die ich überhaupt nicht in den Griff bekomme, was die Ressourcen-Nutzung von z.Bsp. FFMPEG aus Plex heraus betrifft. IONice, UserResources, usw .. alles nix.


    Ausserdem graut es mir schon vor dem Moment, in dem ich von yavdr 0.5 auf eine 0.x gehen werde und wieder meine Config nachziehen muss, dann das ganze andere Zeug nachinstallieren, usw.


    Daher der Gedanke an Virtualisierung. Beim Spiel mit Virtualbox bin ich recht weit gekommen, aber VBOX kann halt einfach nicht gut mit Hardware wie DVB. XEN liest sich vielversprechend, aber auch sehr kompliziert finde ich ... dann kam wie gesagt Docker ins Gespräch.


    Ich denke an sowas wie:


    1) Basis CoreOS als Hauptsystem
    2) yaVDR Container
    3) Plex Container
    4) Download und Converter Container
    5) Streaming Container mit iVDR/iStreamdev
    6) Rest in einem Container


    So kann ich jedem Container eigene Ressourcen zuweisen. Durch das Bridged Networking theoretisch auch ohne grosse Anpassungen, wenn ich skalieren/migrieren will und mehr als einen Server einsetze. (Z.Bsp. Streaming auf meinen Hetzner oder Strato auslagern und dann VPN zwischen den Containern). Eigentlich alle Vorteile der Virtualisierung halt.


    Docker ist meiner bisherigen Sicht nach nur eleganter, da es nicht ein komplettes System virtualisiert sondern mit den Overlays einfach Platz spart. Und schneller läuft ...

    Aus VDR Sicht könnte ich mir vorstellen, dass wir so nicht alles immer in jede Distri packen müssen, sondern eher Komponenten zur Auswahl haben. Auch der Test einer neuen Version/Distribution wird ja so relativ leicht. Und da die Container halt Container sind, kann man seinen Stand recht einfach mit anderen Teilen (quasi nur ein Push in ein Public-Repo oder das .Dockerfile per Mail, im Forum, etc ... )


    Aber zurück zu Deiner Frage - was ich lösen will, ist das mit der Server dank 100% auf 4 Cores durch ein Python-gescriptetes FFMPEG/Handbrake dicht macht und ich zerstörte Aufnahmen habe oder sogar einen Neustart brauche.


    Grüße,
    J*

  • [Parallelposting: Habe den vorigen Post noch nicht gelesen vor dem Schreiben dieses Postings]


    Ich verstehe es vielleicht ein bisschen besser jetzt:


    1) Der Plex-Server treibt manchmal die CPU / Memory-Usage an den Rand des Wahnsinns und soll durch Regeln eingeschränkt werden.
    2) ffmpeg oder python-Libs werden in verschiedenen Versionen parallel gebraucht.


    Ob man diese Probleme nun nur mit Docker gut lösen kann oder auch mit Linux-Tools ohne Container-Abschirmung, kann ich ohne Details nicht beurteilen.


    Jondalar, please elaborate! ;D


    Viele Grüße
    hepi


    P.S.: Böswillig könnte man sagen: Docker ist der Notanker für Entwickler, die zu oft die APIs ihrer Libs ändern. ;D

  • so wie ich es verstehe macht docker das was unter osx völlig normal ist


    dort heisst es halt app ;)


    man baut einfach die gewünschte anwendung in ein paket das alle benötigten libs mitbringt


    wie unter macos
    da kann man ja auch verschiedene xbmc auf der platte haben und jedes hat seine eigenen samba-libs zT in verschiedenen versionen.

  • dort heisst es halt app ;)


    Na das ist aber so extrem vereinfacht, das es falsch ist. Ein docker image ist eher eine abgespeckte VM. Nur der Kernel vom Host wird durchgereicht. In jedem Docker ist ein minimal Betriebssystem. So wäre es ohne Probleme möglich auf einem SuSE-Linux ein Docker mit einem mini Ubuntu nur mit dem vdr laufen zu lassen.
    Es geht sogar unter Windows, ist aber geschummelt, weil da VBox helfen muss.


    Du kannst ein neues Docker machen, das vom vdr Docker erbt und z.B. nur ein Plugin hinzufügt. Dazu gibt es eine Versionsverwaltung die Git ähnelt. Es spricht auch nichts dagegen ein Docker so zu bauen, dass es mehrfach gestartet wird mit mehreren unabhängigen VDR-Instanzen.
    Ich kenne mich nicht so gut mit iOS aus, aber ich behaupte, dass das eine App nicht kann.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470


  • * Ubuntu 12.04 Base Installation (basiert auf einem yavdr0.5 sogar)


    Ich habe noch nicht reingesehen, aber ich hoffe dass das nicht stimmt. Ich nehme doch an du meinst nur den VDR selbst und ein paar Plugins vielleicht.
    Die yavdr-*-Pakete machen in einem Docker doch keinen Sinn. Ich sehe da nur Server-Dienste. Alles was mit Ausgabe zu tun hat scheint mir da nicht reinzugehören.


    Ansonsten finde ich gut was du machst. Ich war selbst schon angefangen damit, aber bin nicht über Anfänge hinaus.


    Zum Teil auch weil es nur wenigen verständlich zu machen ist, welche Vorteile das hat. Die meisten die mit Virtualisierung herummachen, brauchen eigentlich nur Docker.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Zitat

    dass es mehrfach gestartet wird mit mehreren unabhängigen VDR-Instanzen.
    Ich kenne mich nicht so gut mit iOS aus, aber ich behaupte, dass das eine App nicht kann.


    ja es ist schon sehr vereinfacht ausgedrückt gewesen ;)



    das mit dem Mehrfachstarten geht aber ;)

  • Ich habe noch nicht reingesehen, aber ich hoffe dass das nicht stimmt. Ich nehme doch an du meinst nur den VDR selbst und ein paar Plugins vielleicht.
    Die yavdr-*-Pakete machen in einem Docker doch keinen Sinn. Ich sehe da nur Server-Dienste. Alles was mit Ausgabe zu tun hat scheint mir da nicht reinzugehören.

    Hi gda,


    ne - das war missverständlich. Ich habe entlang der docker.com Anleitung den kernel der yavdr0.5a auf 3.8.x gehoben und dann docker installiert. Plex im Container lässt sich prima regeln...


    Aber, warum siehst Du nur server Dienste in den Containern? Mit "--privileged=true" kann ich den Container ja auch direkt an die Devices lassen. Ich hab's noch nicht probiert, setze aber aktuell in einer 2. Partition auf meine SSD 14.04 auf und wollte genau das dann austesten.


    Ein gekapselte yaVDR in einem Container fände ich zum testen gar nicht so schlecht.


    Ausserdem setze ich gerade ein Docker-Repo auf, da pushe ich dann meine "Werke" mal hin. Wer da mit drauf will, der schicke mir bitte eine PM.


    Cheers
    J*

  • Aber, warum siehst Du nur server Dienste in den Containern?


    Ich sehe gerade darin die Stärke vom Konzept von Docker, ein Dienst = ein Container. VDR in einen Container, Plex Media Server in den Anderen.
    Und dann kann man sich seinen Server wie mit Lego zusammenbauen.


    Aber jeder kann es ja so halten wie er will.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Kurzes Update:


    Ich habe mal einen Docker-Image basierend auf dem plex-pass-image von needo73 aufgebaut. (wer KEIN pass hat, der sollte im Dockerfile den download link tauschen, heute http://downloads.plexapp.com/p….12.504-3e7f93c_amd64.deb)


    Hier zu finden: https://github.com/Jondalar/plex


    Mini-howto (für yaVDR geht's bei mir, alles andere muss jeder sehen ;) ob's was bringt)


    1) Docker installieren, siehe: http://docs.docker.com/install…u-precise-1204-lts-64-bit



    2) einfach mit 'docker pull jondalar/plex' das image ziehen, oder mein Github Projekt auschecken, am besten nach /usr/local/src/dockerfiles



    3) fällt weg wenn ihr mit docker pull gearbeitet habt!
    Sonst:

    Code
    docker build -t jondalar/plexvdr /usr/local/src/dockerfiles/plex


    4) Config Ordner anlegen, bei mir ist es /usr/local/docker-configs ... Rechte könnten noch optimiert werden - ich lasse es fürs erste bei 777 (oder chmod a+rwx) auf dem Ordner


    5) Plex-Container instanzieren, dabei die Pfade für die Aufnahmen und evtl. AVI/MKV Files setzen:

    Code
    docker run -d --net="host" --name="plex" -v /usr/local/docker-configs:/config -v /srv/vdr/video.00/AVIs:/data -v /srv/vdr/video.00/Filme:/recordings -v /etc/localtime:/etc/localtime:ro -p 32400:32400 jondalar/plexvdr


    6) Plex aufmachen, http://ipzumvdr:32400/web/


    Bei mir geht es sofort, und das Live-TV-Plugin ist da, sowie auch der Scraper für VDR.


    7) falls das automatisch starten soll, dann ein upstart oder systemd script wie hier beschrieben. Meins zum Beispiel:
    /etc/init/plexmediaserver

    Code
    # plexpms - service job filedescription "Plex Media Server"author "Jondalar"# Start the media server after network and filesystem# Otherwise this lead to a unresponsive serverstart on filesystem and started docker# When to stop the servicestop on runlevel [!2345]# Automatically restart process if crashedrespawn# What to executescript	/usr/bin/docker start -a plexend script


    Falls es jemand testen mag, würde ich mich freuen und natürlich auch über Feedback!


    Achtung - das Ding braucht StreamDev und restfulapi, sonst geht der LiveStream natürlich nicht.


    Cheers
    J*

    6 Mal editiert, zuletzt von Jondalar () aus folgendem Grund: plex normal noch als Info!

  • Sehr schick!


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Ich spiele auch etwas mit Docker.


    Motivation:
    - Updates auf den Produktionssystemen (Server, Clients) führen regelmäßig zu einer Steigerung des Pulses und es stellt sich immer die bange Frage, ob danach noch alles funktioniert.
    - Neue Versionen (insbesondere 2.1.x) austesten oder mit Plugins spielen versuche ich aktuell auf ein Minimum zu beschränken.
    - Immer ein vollständig funktionierendes Backup von VDR und den Clients haben, auf das schnell wieder zurückgegriffen werden kann.


    Nachdem ich hier im Thread auf den privileged Modus aufmerksam wurde, ist die Erstellung eines parallelen VDR Servers gar kein großes Problem mehr: Dem Hauptserver ein paar DVB-Devices entziehen und diese stattdessen im Container nutzen. Das lässt sich sehr schnell und schmerzfrei wieder rückgängig machen oder der Container/das Image sind schnell wieder gelöscht.
    Nur leider gibt es einen Showstopper, der mich etwas aufhält: Streamdev und channelSwitch. Siehe hier.


    Lessons learned:
    - Der zusätzliche Ressourcenverbrauch pro Container ist im Vergleich zu VirtualBox erheblich kleiner.
    - Das Image sollte möglichst per Scripte/Dockerfile erstellt werden. Ich weiß gar nicht mehr, wie oft ich Images erstellt und wieder gelöscht habe.
    - Bewegungsdaten immer auf dem Host lagern: Z.B. Aufnahmeverzeichnis, VDR Konfigurationen, EPG-Daten. Ich habe schon zu häufig den Commit vergessen.
    - Zumindest zur Entwicklung (Plugins in einem anderen Container kompilieren) kann es sinnvoll sein, ein Transferverzeichnis auf dem Host liegen zu haben und im Container zu binden. SCP und Konsorten werden mit der Zeit ziemlich lästig.
    - Nicht alles muss im Container laufen. Die Datenbanken (mysql, postgresql) z.B. können locker auf dem Host bleiben, auch andere (kleinere) Programme machen auf dem Host keine Schwierigkeiten.
    - Ein Container-ein Service scheint eine gute Idee zu sein.


    Wünsche:
    Schön wäre es, wenn Docker bzw. der Container (out of the box) die IP über DHCP bezieht und ich damit nicht immer freie Ports auf dem Host suchen muss. Mein Versuch mit z.B. pipeworks führte zu einer Kernel Panic X( Eine manuelle Konfiguration der Bridge und des Routings sind mir zu umständlich.


    Nächste Schritte:
    - Server erst mal abwarten bis der channelChange funktioniert
    - yaVDR auf dem Streaming-Client im Container. Dazu muss erstmal der Kernel hochgezogen werden. Und zusätzlich muss ich mich hier wohl mit supervisor beschäftigen, da z.B. der dbus vorhanden sein muss. Die FB will auch funktionieren und und und.


    Zabrimus

  • (Plugins in einem anderen Container kompilieren)


    Dafür gibt es pbuilder: https://wiki.ubuntu.com/PbuilderHowto
    bzw. pbuilder für yaVDR 0.5


    Da man damit quasi eine Launchpad-Umgebung hat, lässt es sich sehr leicht testen, ob das neue Paket bei Launchpad bauen würde. Damit erspart man sich unnötige Uploads.


    Lars.

  • Wünsche:
    Schön wäre es, wenn Docker bzw. der Container (out of the box) die IP über DHCP bezieht und ich damit nicht immer freie Ports auf dem Host suchen muss. Mein Versuch mit z.B. pipeworks führte zu einer Kernel Panic Eine manuelle Konfiguration der Bridge und des Routings sind mir zu umständlich.

    Hi Zabrimus,


    schau mal hier https://docs.docker.com/articles/networking/#configuring-dns für Container-Container Kommunikation musst Du ja nur die Ports einmal kennen (was Du ja tust) und dann den DNS Namen für die /etc/hosts beim linken setzen.


    Ansonsten schau Dir das mal an: https://github.com/rogaha/docker-desktop


    Da ruft er über die Container ID ab, welche Ports des Containers wo auf dem Host gemappt sind. Sowas sollte sich ja auch in einem Script verwenden lassen denke ich.


    Meine "Projekte" nach dem ich Plex und die ganze Newreader Strecke am rennen habe:


    * StreamDev-IPTV-Server für's Ausland inkl. VPN Tunnel zu mir daheim ;)
    * Container-Bundle mit EPGD+Scraper und MySQL für einen EPG-Service, der jederzeit ausgelagert werden kann
    * Data-Volume-Container für /etc/vdr und /var/lib/vdr


    und irgendwann probiere ich an der Ausgabe des Bildes über xpra weiter, evtl. geht das ja sogar damit den Server total von der Ausgabe abzukoppeln und theoretisch ein verteiltes System zu haben.


    Frage: Dein Image - macht aber keine Ausgabe, richtig? Nur über StreamDev?


    Cheers
    J*

  • die docker-geschichte gefällt mir ganz spontan, zumal es mir bislang
    nicht gelungen ist, istreamdev unter meinem 14.04er zum laufen zu
    bekommen. unter 12.04 lief das alles, zumindest mit sd-tv.
    ein paar fragen, die nicht immer was mit docker zu tun haben:
    gibt es schon ein istreamdev-docker image?
    istreamdev müsste doch eigentlich auch mit nginx + php-fpm laufen, richtig?
    diese vorgehensweise wäre doch richtig:
    1. minimal ubuntu 12.04 aus dem docker repo "auschecken"
    2. in der bash des containers alles bauen (ffmpeg, x264, segmenter), nginx, php-fpm, istreamdev installieren.
    3. dev- und build pakete sowie sourcen wieder rausschmeißen
    4. dem container irgendwie mitteilen, was er beim "einhängen" alles starten soll.
    5. den container irgendwie pushen, damit auch andere was davon haben
    ????
    das "irgendwie" deutet daraufhin, dass ich noch nicht richtig in docker eingestiegen bin.

    VDR 2.2.0, PMS mit PlexVDR, XML-API+VDR Client
    Ubuntu 16.04 64bit
    alles 'headless' auf Intel(R) Core(TM) i5-4440 CPU @ 3.10GHz, 8GB RAM, 5 x 3TB im RAID5 (12TB)
    zzgl. diverse SH4 Sat-Boxen mit NeutrinoMP

  • Finde ich ganz furchtbar. Die Pakete außerhalb des images erstellen und in ein PPA bringen. Dann einfach beim Erstellen des images die Pakete referenzieren.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!