[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
    crane provision -v vdr.config vdr epgd database


    Container erstellen:

    Code
    crane create -v vdr.config vdr epgd database


    Und das ganze starten:

    Code
    docker start database
    docker start epgd
    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
    vdr.data:
        build:
          context: vdr-data/.
        image: chriszero/vdr.config
        run:
          # Hier sind die "Verzeichnisse" die die Docker Container verwenden, und die du brauchst um die Konfigurationen zu ändern.
          # Der erste Teil wird auf einen Ordner auf deinen Host gemappt (intern ist es ein "bind mount"
          # Zum Beispiel so:
          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
    vdr:
        build: 
          context: vdr-headless/.
        image: chriszero/vdr-headless
        run:
        # hier das gleiche, nur für den Ordner mit den Aufnahmen
          volume: ["volumes/rec:/recordings"]
       # hier werden die volumes vom vdr.data Container eingebunden
          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
    [root@rockstor docker-vdr]# crane provision -v vdr epgd database
    crane: error: unexpected epgd, try --help
    [root@rockstor docker-vdr]# crane provision -v epgd database
    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
    # Zum Beispiel so:
          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
    vdr * exec: fatal: unable to exec epgd: No such file or directory
         vdr | epgd exited 111
         vdr | [cont-finish.d] executing container finish scripts...
         vdr | [cont-finish.d] done.
         vdr | [s6-finish] syncing disks.
         vdr * s6-svscanctl: fatal: unable to control /var/run/s6/services: supervisor not listening


    und:

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


    docker sagt:

    Code
    docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                           PORTS                                                                                                                                                                 NAMES
    7e21921dfa4c        chriszero/vdr-epgd        "/init"                  10 hours ago        Up 19 minutes                    8888/tcp, 0.0.0.0:9999->9999/tcp                                                                                                                                      epgd
    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
    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
    containers:
      vdr.data:
        build:
          context: vdr-data/.
        image: chriszero/vdr.config
        run:
          # Map the volumes to your local filesystem to be able to edit
          volume: ["/mnt2/RockOn/config/vdrconfig/vdrconf:/vdr/config", "/mnt2/RockOn/config/vdrconfig/etcvdr:/etc/vdr", "/mnt2/RockOn/config/vdrconfig/epgdconf:/epgd/config"]


    Und:

    Code
    [root@rockstor docker-vdr]# ll /mnt2/RockOn/config/
    total 0
    drwxr-xr-x 1 root root 42 Jan 17 01:28 vdrconfig
    [root@rockstor docker-vdr]# ll /mnt2/RockOn/config/vdrconfig/
    total 0
    drwxr-xr-x 1 root root 874 Jan 17 01:30 epgdconf
    drwxr-xr-x 1 root root   0 Jan 17 01:28 etcvdr
    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
    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
    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
    docker run -t -i ubuntu:14.04 bash
    telnet 192.168.177.3 3306
    Trying 192.168.177.3...
    Connected to 192.168.177.3.
    Escape character is '^]'.
    [
    5.5.47-MariaDB-1~wheezy>d[}%:7D��1d'3j<.pkIiWmysql_native_password
    
    
    !#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
    DbHost = database
    DbPort = 3306
    DbName = epg2vdr
    DbUser = epg2vdr
    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
    127.0.0.1             # always accept localhost
    192.168.0.0/16     # any host on the local net
    #204.152.189.113      # a specific host
    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
    2016-01-23T11:02:26.414753+01:00 9b5fd150dd16 vdr: [131] info: Update EPG
    2016-01-23T11:03:28.443510+01:00 9b5fd150dd16 vdr: [246] epg data writer thread started (pid=131, tid=246, prio=low)
    2016-01-23T11:03:29.064219+01:00 9b5fd150dd16 vdr: [246] epg data writer thread ended (pid=131, tid=246)
    2016-01-23T11:07:29.064315+01:00 9b5fd150dd16 vdr: epg2vdr: Update info.epg2vdr recordings
    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
    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

  • ### 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"

    Einmal editiert, zuletzt von 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

Jetzt mitmachen!

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