[docker] headless-vdr mit satip, epgd, mariadb

  • Hallo,


    Nachdem ich mir jetzt über meinen Urlaub den Kopf zerbrochen habe wie ich den VDR sinnvoll in ein Docker Image packe habe ich nun eine brauchbare Lösung.
    Als Tuner wird SATIP verwendet, nach einem Patch von mir lässt sich dieses auch mit einem "bridged" Netzwerk betreiben.
    Es lässt sich auch gleich ein epgd mit Datenbank Server starten und alles fertig verlinken.


    Es empfiehlt sich ein eigener preseed des vdr.config Images, vorallem eine eignene channels.lconf (meine ist für DVB-C UM/KBW)
    Dafür mein git repo clonen: https://github.com/chriszero/docker-vdr
    und die Configs im vdr.config Verzeichnis den eigenen Wünschen anpassen. In der 30-satip.conf ist es wichtig die angegebene --portrange=<start>-<stop> auch mittels publish: ["4010-4020:4010-4020/udp"] anzugeben, sonst wird das ganze nicht funktionieren.
    Der vdr.config Container hat auch den Vorteil das eure Settings persistent sind.


    Damit die Rechte im Dateisystem stimmen muss auf dem host der User und die Gruppe "vdr" mit einer uig/gig von "666" existieren (von yaVDR übernommen), und dieser auch Schreibrechte für das Aufnahmeverzeichnis haben.


    Natürlich kann auch nur der VDR oder nur der epgd gestartet werden


    Die crane.yml entsprechend anpassen
    Das ganze Vorbereiten (mit oder ohne epgd & datenbank):

    Code
    1. crane provision -v vdr.config vdr epgd database


    Container erstellen:

    Code
    1. crane create -v vdr.config vdr epgd database


    Und das ganze starten:

    Code
    1. docker start database
    2. docker start epgd
    3. docker start vdr


    Zum Starten empfiehlt sich "crane"


    Alle Images finden sich auf https://hub.docker.com/u/chriszero/
    oder auf Github zum selbst bauen https://github.com/chriszero/docker-vdr


    07.11.2016


    Container wurden alle geupdatet, im database Container muss ein mysql_upgrade ausgeführt werden (Nicht bei einer Neuinstallation!)
    Wenn der neue Container läuft einfach folgendes ausführen:


    docker exec database mysql_upgrade --user=root --password=my-secret-pw


    Dann Container neustarten.


    Christian

  • Hi Chris,


    erstmal Kudos und Danke für die Arbeit! Ich hab auf meinem QNAP damit rumgespielt am Wochenende, und (auch wenn QNAP die Docker Gui und das Netzwerk verhunst hat und ich ganz schön fummeln musste) am Ende hatte ich VDR rennen, relativ einfach.


    Da ich auf Enterntain umstelle wurstel ich gerade wie ich das IPTV Plugin auch ans Laufen bekomme :-) Macht aber sehr viel Spass!


    Cheers,
    Alex

  • Hi Chris,
    ich hab seit ein paar Wochen eine Synology DS-710 (Atom based) NAS und einen VDR im docker container laufen, allerdings ohne epg-Datenbank. SAT-IP habe ich über vtuner/satip-daemon eingebunden, wobei ich den satip-daemon nicht im container laufen lasse sondern im System, da sonst die nötigen control-devices unter /dev/ nicht richtig angelegt werden. Mein System baut auf einem einfachen Ubuntu Trusty auf, wobei ich einen Container mit allen Tools zum kompilieren erstellt habe und dort den VDR aus source-debs vom Frodo PPA komplett selbst kompiliert habe. In einem weiteren Container läuft dann ohne weitere Services der VDR. Über remote-timers erstelle ich von meiner Raspberry-Pi aus Timer auf dem Server, kann dies aber über das live-Plugin auch über den Webbrowser. Bisher läuft der Server sehr rund und hat keine Probleme.


    Gruß Darkstar

    Hardware: Seagate Dockstar@1500MHz, GSS Box DSI 400 SAT>IP Server, VDR 2.1.6 mit Streamdev-Server
    Videoausgabe: RaspberryPi mit MLD-4.0.1-RPi an LG 42LM660

  • Hallo Chris,


    vielen Dank für das Teilen deines Docker Containers.
    Docker (nicht aber der VDR) ist neu für mich und ich tue mich etwas schwer. Ich wäre dir sehr dankbar, wenn du mir helfen könntest.


    Ich habe crane installiert und dein Git-Repo geclont.
    Als nächstes sollte ich ja die Konfiguration in der vdr.config anpassen. Ein Verzeichnis vdr.config gibt es aber nicht. Es gibt allerdings in den Verzeichnissen vdr-headles und vdr-epgd die entsprechenden config-Dateien.
    Sind die gemeint? Oder sind die Dateien im Ordner sample-config gemeint?


    Ich habe den Schritt mal übersprungen und mit
    crane provision -v vdr.config vdr epgd database
    weiter gemacht (im Verzeichnis docker-vdr, also deinem git-repository).
    Das gibt allerdings die Fehlermeldung:
    crane: error: unexpected vdr, try --help


    Was mache ich falsch?


    Gruß,
    Hendrik

  • Hallo,


    es gibt kein Verzeichnis "vdr.config", das ist ein Docker Data Only Container, über diesen können die Verzeichnisse in dein Host System gemountet werden.


    Code
    1. vdr.data:
    2. build:
    3. context: vdr-data/.
    4. image: chriszero/vdr.config
    5. run:
    6. # Hier sind die "Verzeichnisse" die die Docker Container verwenden, und die du brauchst um die Konfigurationen zu ändern.
    7. # Der erste Teil wird auf einen Ordner auf deinen Host gemappt (intern ist es ein "bind mount"
    8. # Zum Beispiel so:
    9. volume: ["/media/vdr/vdrconfig:/vdr/config", "/media/vdr/etcvdr:/etc/vdr", "/media/vdr/epgdconf:/epgd/config"]


    Im ersten Moment sind die natürlich leer, du kannst jetzt entweder vor dem ersten start alles in die Host Ordner kopieren, oder den VDR einfach mal starten. Dann werden die Konfigurationsdateien aus dem Image kopiert. Dann den "vdr" container stoppen, Änderungen in Configs machen, und das ganze wieder starten (Wie beim VDR auch)


    Du musst nur darauf achten das die Ordner vom User "vdr" mit der uid "666" schreib- und lesbar sind


    Code
    1. vdr:
    2. build:
    3. context: vdr-headless/.
    4. image: chriszero/vdr-headless
    5. run:
    6. # hier das gleiche, nur für den Ordner mit den Aufnahmen
    7. volume: ["volumes/rec:/recordings"]
    8. # hier werden die volumes vom vdr.data Container eingebunden
    9. volumes-from: ["vdr.data"]


    crane: error: unexpected vdr, try --help


    Das ist wohl ein Bug im aktuellem crane, der kommt mit dem "." nicht klar


    Einfach nacheinander machen, also erst:
    crane provision -v vdr.config
    dann:
    crane provision -v vdr epgd database


    Wenn du EPGd nicht brauchst, dann entferne "link: ["database"]" aus dem "vdr" und lasse "epgd" und "database"weg.

  • Hallo Chris,


    ich nehme an, das war ein typo:


    Ist das so beabsichtigt?
    --> docker build --rm --tag=chriszero/vdr.config vdr-data/.


    Das Kommando crane provision -v vdr.data lief aber durch.




    Das verstehe ich auch nicht. Warum einmal vdr.config und einmal vdr.data?



    Wie auch immer. Erstmal weiter:

    Code
    1. [root@rockstor docker-vdr]# crane provision -v vdr epgd database
    2. crane: error: unexpected epgd, try --help
    3. [root@rockstor docker-vdr]# crane provision -v epgd database
    4. crane: error: unexpected database, try --help


    Crane scheint nur ein Argument nach "-v" zu akzeptieren.


    Nacheinander laufen die Kommandos aber bisher.


    Zur Konfiguration/den Verzeichnissen:

    Code
    1. # Zum Beispiel so:
    2. volume: ["/media/vdr/vdrconfig:/vdr/config", "/media/vdr/etcvdr:/etc/vdr", "/media/vdr/epgdconf:/epgd/config"]


    Wie gesagt ist Docker neu für mich, entschuldige daher die Frage:
    Im Original stand hier ja "volumes/vdrconfig:/vdr/config". Ich hielt "volumes" hier für einen Platzhalter für einen Pfad der in Docker konfiguriert ist. Ist das nicht so?
    Das heißt also, dass der User eines Docker Containers an dieser stelle immer konfigurieren muss richtig (d.h. ein einfaches runterladen eines Containers und los geht's ist nicht möglich?)?




    Gruß,
    Hendrik

  • Ist das so beabsichtigt?
    --> docker build --rm --tag=chriszero/vdr.config vdr-data/.


    Das passt ja, der Ordner mit dem Dockerfile heißt halt vdr-data, eine Altlast.


    Das verstehe ich auch nicht. Warum einmal vdr.config und einmal vdr.data?


    Da ist wohl ein typo im erstem Beitrag, die crane.yml im GIT passt ja aber.


    Crane scheint nur ein Argument nach "-v" zu akzeptieren.


    Das -v ist ja nur ein "verbose", das kann man ja weglassen


    Im Original stand hier ja "volumes/vdrconfig:/vdr/config". Ich hielt "volumes" hier für einen Platzhalter für einen Pfad der in Docker konfiguriert ist. Ist das nicht so?
    Das heißt also, dass der User eines Docker Containers an dieser stelle immer konfigurieren muss richtig (d.h. ein einfaches runterladen eines Containers und los geht's ist nicht möglich?)?


    Das geht schon, aber dann halt nur mit der Config die im vdr-headless image sind. Die vdr.data brauchst du vorallem für eine Persistenz nach einen Container upgrade. Ansonsten würdest du immer wieder bei Null anfangen.
    Wenn du das Host mapping der Volumes weglässt verwaltet Docker das selbst, dann hast du aber keine Möglichkeit die Configs per Hand zu ändern. So wird es mit dem Data-Ordner des MariaDB / Mysql gemacht, da is es ja so in Ordnung.

    Als Beispiel das "volumes/..." zu nennen war wohl etwas verwirrend ;-)

  • Hallo Chris,


    Vielen Dank für deine Antwort.
    Die Container werden jetzt erstellt und ich konnte sie auch starten.
    Allerdings gibt es einige Fehlermeldungen:

    Code
    1. vdr * exec: fatal: unable to exec epgd: No such file or directory
    2. vdr | epgd exited 111
    3. vdr | [cont-finish.d] executing container finish scripts...
    4. vdr | [cont-finish.d] done.
    5. vdr | [s6-finish] syncing disks.
    6. vdr * s6-svscanctl: fatal: unable to control /var/run/s6/services: supervisor not listening


    und:

    Code
    1. epgd | 01:30:17,210 Checking database connection ...
    2. epgd | 01:30:17,210 Calling mysql_init(129)
    3. epgd | 01:30:17,211 Closing mysql connection and calling mysql_thread_end(129)
    4. epgd | 01:30:17,211 Error, connecting to database at 'localhost' on port (3306) failed
    5. epgd | 01:30:17,211 Fatal: Initial database connect failed, aborting


    docker sagt:

    Code
    1. docker ps
    2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3. 7e21921dfa4c chriszero/vdr-epgd "/init" 10 hours ago Up 19 minutes 8888/tcp, 0.0.0.0:9999->9999/tcp epgd
    4. 40866a343199 chriszero/vdr-headless "/init epgd database" 10 hours ago Restarting (111) 5 minutes ago 0.0.0.0:2004->2004/tcp, 0.0.0.0:3000->3000/tcp, 0.0.0.0:6419->6419/tcp, 0.0.0.0:8002->8002/tcp, 34890/tcp, 0.0.0.0:8008->8008/tcp, 0.0.0.0:4010-4020->4010-4020/udp vdr
    5. 1a5f2363605a chriszero/mariadb-epglv "/docker-entrypoint.s" 10 hours ago Up 19 minutes 0.0.0.0:3306->3306/tcp database



    Ich habe die kompletten logs hier gepostet:


    database:
    http://paste.fedoraproject.org/311684/02640714
    vdr:
    http://paste.fedoraproject.org/311685/26474145
    epdg:
    http://paste.fedoraproject.org/311686/53026510
    (gekürzt)


    Kannst du mir weiterhelfen?


    Hier noch ein Auszug aus meiner crane.yml:

    Code
    1. containers:
    2. vdr.data:
    3. build:
    4. context: vdr-data/.
    5. image: chriszero/vdr.config
    6. run:
    7. # Map the volumes to your local filesystem to be able to edit
    8. volume: ["/mnt2/RockOn/config/vdrconfig/vdrconf:/vdr/config", "/mnt2/RockOn/config/vdrconfig/etcvdr:/etc/vdr", "/mnt2/RockOn/config/vdrconfig/epgdconf:/epgd/config"]


    Und:

    Code
    1. [root@rockstor docker-vdr]# ll /mnt2/RockOn/config/
    2. total 0
    3. drwxr-xr-x 1 root root 42 Jan 17 01:28 vdrconfig
    4. [root@rockstor docker-vdr]# ll /mnt2/RockOn/config/vdrconfig/
    5. total 0
    6. drwxr-xr-x 1 root root 874 Jan 17 01:30 epgdconf
    7. drwxr-xr-x 1 root root 0 Jan 17 01:28 etcvdr
    8. drwxr-xr-x 1 vdr 666 274 Jan 17 01:36 vdrconf


    Auch alle Dateien darin gehören Root.
    Das allerdings wunder mich, denn ich hatte ein

    Code
    1. chown vdr:vdr /mnt2/RockOn/config/vdrconfig


    ausgeführt. Ich habe die Rechte jetzt wieder an vdr gegeben. Das hat aber auch nicht geholfen (nach einem crane stop und crane start)



    Gruß,
    Hendrik

  • Hallo noch einmal,


    ich habe das ganze noch einmal bei Null gestartet - auf einem anderen Host.
    Keine Änderung.


    Um den Fehler einzugrenzen habe auf dem Host ein

    Code
    1. mysql --host=127.0.0.1 --port=3306 -u root -p --execute="show tables;"

    ausgeführt.
    Das funktionier auch. Der Container mit der DB funktioniert also.
    Aber dennoch funktioniert keine Verbindung aus dem EPGD-Container mit dem DB-Container.


    Also einmal einen Container gestartet und per Telnet auf den Host:

    Code
    1. docker run -t -i ubuntu:14.04 bash
    2. telnet 192.168.177.3 3306
    3. Trying 192.168.177.3...
    4. Connected to 192.168.177.3.
    5. Escape character is '^]'.
    6. [
    7. 5.5.47-MariaDB-1~wheezy>d[}%:7D��1d'3j<.pkIiWmysql_native_password
    8. !#08S01Got packets out of orderConnection closed by foreign host.


    Klappt also auch


    Kannst du mir helfen?


    Gruß,
    Hendrik

  • Hallo Chris,


    danke für deine Antwort.
    Leider macht das keinen Unterschied.
    epgd | 22:09:26,056 Closing mysql connection and calling mysql_thread_end(151)
    epgd | 22:09:26,056 Error, connecting to database at 'localhost' on port (3306) failed


    Ich hatte ein wenig gesucht und verstanden, dass zumindest mysql bei einer Verbindung an 'localhost' sockets verwendet, während bei einer Verbindung an '127.0.0.1' das Netzwerk verwendet wird.


    Kann das das Problem sein?


    Gruß,
    Hendrik

  • Kann es sein das du in der epgd.conf den Datenbank Host geändert hast?
    Du darft das nicht ändern wenn die Container verlinkt werden.
    Jeder Container hat eine eigene IP. Beim verlinken werden dort noch Hostnamen gesetzt


    Code
    1. DbHost = database
    2. DbPort = 3306
    3. DbName = epg2vdr
    4. DbUser = epg2vdr
    5. DbPass = epg


    Der mariadb Container in der crane.yml heißt nicht ohne Grund "database"
    Darüber wird der nachher angesprochen.
    Auch in der setup.conf des VDR ist epg2vdr darüber mit der "database" verlinkt.

  • Hallo Chris,


    Danke!
    In der setup.conf war es richtig. In der epgd.conf war es falsch. Ich hatte meine Konfiguration aus dem Produktiv-VDR in das Verzeichnis kopiert und nicht dein Beispiel.
    Vielleicht kannst in der Readme.md noch erwähnen, dass entweder die Ports IP Adressen oder Hostnamen in den eigenen Konfigurationsdateien angepasst werden müssen, oder/und dass dein Beispiel verwendet werden sollte.



    Eine Frage habe ich dann aber noch: Wo konfigurierst du das Aufnahmeverzeichnis?



    Gruß,
    Hendrik

  • Hallo Chris,


    danke. Und sorry, hätte ich sehen müssen.


    Ich hab mich ja ganz schön schwer getan bisher. Wie gesagt, Docker ist neu für mich.
    Aber rückblickend hätte ich ein paar Änderungsvorschläge.



    Zudem würde ich aus der Beispiel 30-satip.conf den Parameter -t 0 entfernen


    Ich habe jetzt noch ein paar Probleme:
    1) der epgd scheint keine Daten zu haben.
    Ein Fehler im Log: 21:01:55,255 SVDRPCL: Error connecting to '172.17.0.5:6419' Connection refused
    Das scheint an der svdrphosts.conf zu liegen (?). Darin ist allerdings alles erlaubt:

    Code
    1. 127.0.0.1 # always accept localhost
    2. 192.168.0.0/16 # any host on the local net
    3. #204.152.189.113 # a specific host
    4. 0.0.0.0/0 # any host on any net (USE THIS WITH CARE!)


    Ich glaube aber nicht, dass das der Grund für die fehlenden EPG-Einträge ist.
    (Ich nutze sat und habe daher die channelmap durch meine produktiv laufende ersetzt (ist sicher eine ältere epgd Version; die channels.conf ist passend auch aus meinem produktiv-system)
    Log aus dem Docker hängt an und sieht eigentlich doch gut aus, oder?
    Edit: Unter http://homeserver:9999/#menu_now sehe ich tatsächlich EPG Einträge, inklusive Bildern.
    Unter http://homeserver:9999/#menu_magazine allerdings nicht. Und auch im VDR finde ich nur EPG-Einträge die vom aktuellen Transponder kommen.
    Ein "Neu Laden" im VDR (epg-Plugin) hilft auch nicht, bringt aber auch keine Fehler

    Code
    1. 2016-01-23T11:02:26.414753+01:00 9b5fd150dd16 vdr: [131] info: Update EPG
    2. 2016-01-23T11:03:28.443510+01:00 9b5fd150dd16 vdr: [246] epg data writer thread started (pid=131, tid=246, prio=low)
    3. 2016-01-23T11:03:29.064219+01:00 9b5fd150dd16 vdr: [246] epg data writer thread ended (pid=131, tid=246)
    4. 2016-01-23T11:07:29.064315+01:00 9b5fd150dd16 vdr: epg2vdr: Update info.epg2vdr recordings
    5. 2016-01-23T11:07:29.064611+01:00 9b5fd150dd16 vdr: epg2vdr: Updated 0 info.epg2vdr files



    2) Wie installiere ich die Channel-Logos?
    Wenn ich es richtig verstehe:

    Code
    1. volume: ["/mnt2/RockOn/config/vdrconfig/vdrconf:/vdr/config", "/mnt2/RockOn/config/vdrconfig/etcvdr:/etc/vdr", "/mnt2/RockOn/config/vdrconfig/epgdconf:/epgd/config", "/mnt2/RockOn/config/vdrconfig/epgdlogos:/var/epgd/www/channellogos/"]


    Richtig?


    3) Im Web-Interface des epgd kann ich die Kanalliste nicht vom VDR laden (ich nehme an das liegt an 1)



    Kannst du mir da weiterhelfen?


    Gruß,
    Hendrik

    Files

    • channelmap.conf

      (28.39 kB, downloaded 141 times, last: )
    • channels.zip

      (62.25 kB, downloaded 79 times, last: )
    • epgd.txt

      (61.44 kB, downloaded 145 times, last: )

    yavdr 0.5 auf M3N78-EM, Cine S2

    The post was edited 6 times, last by henfri ().

  • ### hat sicher erledigt, muss ja nur in der /conf.d das epg2vdr.conf raus nehmen....###


    Hallo chris,


    vielen vielen Dank für deine Arbeit.
    Habe auf meiner Synology (DS415+) dein VDR-Docker am laufen.
    Als client dient ein fire tv mit Kodi via vnsi. Läuft super stabil (1.Versuch war MLD5 über virtualbox was ständig zu abstürzen auf dem fire tv führte...)


    Allerdings habe ich ein Problem mit dem epgd container,
    bzw. dem Port 3306 der bereits auf der Syno duch die lokale MySQL-Datenbank vergeben ist, die Syno meckert da...:-(
    Extra Datenbank (bzw. Container) für EPG benötige ich im Grunde eh nicht.


    Kannst du mir sagen, wo, bzw. wie ich den vdr konfiguriere, um ein "normales EPG" zu erhalten ?


    Gruß
    Birdy

    1. Reelbox Avantgarde 12.12.1, 2X DVB-S2, 320GB HD
    2. Activy 300 zum "Basteln"

    The post was edited 1 time, last by Birdy ().

  • Hallo Chris,


    ich muss nochmal eine Verständnisfrage stellen.
    Wo konfigurierst du im Docker-Container 'vdr-headless' dass der vdr die Konfiguration in /vdr/config erwarten soll?


    Hintergrund: Ich bin nicht sicher, ob der VDR tatsächlich die Konfiguration liest. Konkret kann ich mich nicht mit dem vnsi-server verbinden.


    Wenn ich allerdings eine shell in dem Container öffne, sieht es gut aus:


    Hast du eine Idee, woran es liegen könnte?


    Gruß,
    Hendrik

  • bitte sieh dir die container Konfiguration an was das Netzwerk angeht.
    Wenn da NAT aktiv ist, dass ist das Netz idR 172.rigendwas
    Das muss im streamdev entsprechend enabled sein.

    Digibit R1 mit minisatip-axe : VDR 2.2.3 im docker container auf DS415+ (8GB RAM, 12TB Raid5) : Kodi 15.2 auf MacMini (2009) (8GB, Mavericks) : Kodi 15.2, 16rc3 auf MacBookPro retina (2012) (16GB, El Capitan) : ATV 1. Gen. : R-PI2 (OpenElec 6): DragonBoard 410 (Jessie) :