VDR mit Upstart starten

  • Hallo,
    nach längerer krankheitsbedingter Pause, habe ich dieses Wochenende mit meinem VDR-Projekt wieder angefangen. Da VAAPI auf absehbare Zeit nicht funktionieren wird, habe ich mir eine passive Nvidia GT630 von Asus geholt und alles neu installiert. Es ging auch alles bis jetzt völlig reibungslos, aber jetzt hänge ich fest: Wie bekomme ich VDR in Upstart rein? Habe schon alles ausprobiert, da Upstart aber anscheinend kein Log führt (hab zumindest keins gefunden) gestaltet sich die Fehlersuche sehr schwierig. Ein anderes Programm (das mit den 5 Buchstaben, welches für bestimmte "Free"-TV HD-Sender benötigt wird...) habe ich auf dem gleichen Weg eingebaut und es geht problemlos.

    Mein System:
    Gigabyte G1.Sniper M3, Intel Core i5-2390T, Asus GT630-SL-1GD3-L, 8GB RAM, 120GB SSD, DVBSky S952
    Ubuntu 13.10 AMD64 Server (mit Experteninstallation nur Basis-System installiert, kein Desktop oder so), Kernel 3.11

    Habe VDR selber kompiliert (2.0.4), die benötigen libs und Header über apt-get installiert.

    Wenn ich den VDR so aus der Konsole starte geht es problemlos:

    Code
    Xorg -nocursor & vdr -v /video -d -D 0 -c /home/vdruser/vdrconf -P "softhddevice -v vdpau -a hw:PCH,0" -P "eepg"


    Nur wie bekomme ich das in Upstart rein? Ich hab es mit exec und mit script probiert, aber nichts geht. Ich habe auch keine Beispiel-Datei gefunden die ich anpassen konnte (außer die von yaVDR, die ist aber so komplex das ich da nicht durchsteige). Kann mir da jemand weiterhelfen?
    Vielen Dank

    Edited once, last by Dirk: Forenregeln (November 15, 2014 at 3:49 PM).

  • (außer die von yaVDR, die ist aber so komplex das ich da nicht durchsteige)

    Erfreulicherweise gab es vor Monaten eine Abstimmung zwischen dem Debian Maintainer der VDR Pakete, tobi, und yaVDR eine Abstimmung wg. der Start-Scripte. Als Ergebnis enthalten die VDR Pakete seither ein SysV Init und eine Upstart Script, welche jeder nach Bedarf aktivieren kann. Die Pakete sind fertig nutzbar ohne das Änderungen nötig wären. Was Du machst ist Dein eigener Weg, ob der sinnvoll ist, nach so langer Abstinenz weiß ich nicht, aber:

    - http://wiki.ubuntuusers.de/Upstart

    Auch würde ich davon absehen Ubuntu 13.10 (Saucy Salamander) als längerfristige Basis zu nutzen, die nicht LTS Releases haben seit einiger Zeit nur noch 9 Monate Support für Updates und Security-Patches.

    Regards
    fnu

    HowTo: APT pinning

    Click for my gear

    [¹] Intel NUC Kit NUC7i5BNH, Akasa Newton S7, 8GB DDR4, WD Black SN700 500GB NVMe, Crucial MX500 2TB, CIR, SAT>IP, Ubuntu LTS 18.04.5, VDR 2.4.1 (15W)
    [²] Intel NUC Kit NUC7i3BNH, 8GB DDR4, WD PC SN520 250GB NVMe, Crucial MX500 1TB, CIR, SAT>IP, Ubuntu LTS 20.04.1, VDR 2.4.1 (13W)
    [³] BQ500, Asrock X470D4U, AMD Ryzen 5 5600, 32GB DDR4 ECC, 2x WDC SN750 512GB, 4x Samsung SSD 4TB, 1x Samsung SSD 8TB, 1x Crucial MX500 500GB, 1x WDC Blue SSD 500GB, Windows Server 2019 Hyper-V (35W)
    [⁴] Jultec JPS0501-12AN, JPS0501-8M2, Octopus Net (DVBS2-8) & openHABian 3.3.0

    Edited once, last by fnu (October 28, 2013 at 1:00 PM).

  • Moin!

    Das Upstart Cookbook ist auch eine interessante Quelle, das sollte man mal querlesen.

    Grundsätzlich gilt, dass pro Upstart-Job ein Dienst gestartet werden sollte. D.h. wenn du X und vdr starten möchtest, dann sind es zwei Jobs, die eine Abhängigkeit zueinander haben (erst X, dann vdr starten).
    Wir haben bei yavdr festgestellt, dass der xorg-launch-helper hilfreich ist, weil der genauer feststellen kann, wann X wirklich bereit und fertig initialisiert ist. Sonst kann es sein, dass der vdr schon startet, wenn X nur halb fertig ist und dann wundert man sich, warum das manchmal funktioniert und manchmal nicht.

    Bei yavdr haben wir noch ein paar Hilfsscripte, die dynamisch die Kommandozeile zusammenbaut. Wenn du sowas nicht brauchst, dann reicht letztendlich einfach eine exec-Zeile (neben den start/stop-Bedingungen usw.):

    Code
    ...
    
    
    exec vdr (und hier dann deine Parameter)

    Über den xorg-launch-helper gibt's hier irgendwo im Portal ein paar Beiträge, wie man den benutzt, einfach mal suchen.

    Lars.

    vdr2: yaVDR 0.5/softhddevice @ G540, Intel DH67BLB3, Asus GT610/2GB, DDBridge + 2x DuoFlex C/T
    hdvdr: yaVDR unstable/softhddevice @ E8400, Asus P5Q SE Plus, 1x L4M-TwinCI + Flex C/T, 1x Sundtek MediaTV Pro, GT520
    Plugins: | avahi4vdr | dbus2vdr | dynamite | epg2timer | noepg | pvrinput | sundtek |

  • Hallo,

    Xorg alleine hatte ich schon hin mit Upstart, hab es jetzt auf xorg-launch-helper umgestellt:


    Vorher hatte ich xinit drin, ging soweit auch, hier gibt es aber ein Problem: Wenn ich jetzt z.B. Xorg mit "killall Xorg" umbringe, startet er nicht wieder. Das respawn funktioniert nicht mit xorg-launch-helper. Auch "stop xorg" geht nicht mehr. Muss da noch mehr rein damit das geht?

    Das hier hab ich für vdr, aber es geht nicht. Warum weiß ich nicht, da ich kein Log finden kann. Wenn ich irgendein Blödsinn in die Zeile schreibe wie "killall wasauchimmer", bekomme ich eine Fehlermeldung in /var/log/upstart/vdr.log

    Wenn der Rechner gestartet ist kann ich "start vdr" machen, dann startet vdr, aber auf englisch (vermutlich liest er das aus einer Umgebungsvariable). "stop vdr" geht auch nicht, mit "killall vdr" ist vdr weg und startet nicht neu. Vermutlich ist da was mit den Startbedingungen nicht ok, was sollte da rein?

    Vielen Dank

    Edited once, last by Dirk: Forenregeln (November 15, 2014 at 3:49 PM).

  • Steht das kleine -d für Daemon? Dann muss da noch ein expect fork rein. Besser ist aber, den vdr nicht als Daemon laufen zu lassen. Dann kann Upstart besser damit um.

    Lars.

    vdr2: yaVDR 0.5/softhddevice @ G540, Intel DH67BLB3, Asus GT610/2GB, DDBridge + 2x DuoFlex C/T
    hdvdr: yaVDR unstable/softhddevice @ E8400, Asus P5Q SE Plus, 1x L4M-TwinCI + Flex C/T, 1x Sundtek MediaTV Pro, GT520
    Plugins: | avahi4vdr | dbus2vdr | dynamite | epg2timer | noepg | pvrinput | sundtek |

  • Xorg alleine hatte ich schon hin mit Upstart, hab es jetzt auf xorg-launch-helper umgestellt:


    Naja du musst schon darauf achten was das Tool macht, sonst ist das ziemlich sinnlos. Schau dir das im yavdr-utils git mal genauer an: https://github.com/yavdr/yavdr-ut…g-launch-helper

    mini73 hat das Programm so angepasst, dass es ein SIGSTOP sendet, wenn der X-Server gestartet wurde (dazu muss es mit -DUSE_UPSTART kompiliert worden sein).

    Der Upstart-Job muss wissen, dass ein SIGSTOP als Signal kommt, wenn das Programm bereit ist - daher sollte das eher so aussehen:

    Meine VDRs

    VDR 1: Point of View Ion-330-1, 2x Sundtek MediaTV Pro (DVB-C), Atric IR-Einschalter Rev.5, Ubuntu 18.04 (yavdr-ansible)
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    VDR 3: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 18.04 (yavdr-ansible), VDR 2.4.1, CIR-Empfänger
    Client 1: Raspberry Pi 2, Arch Linux ARM, VDR 2.3.8
    vdr-epg-daemon auf Cubietruck mit 32 GB SSD, Arch Linux ARM

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • aja du musst schon darauf achten was das Tool macht, sonst ist das ziemlich sinnlos. Schau dir das im yavdr-utils git mal genauer an: https://github.com/yavdr/yavdr-utils/tre…g-launch-helper

    mini73 hat das Programm so angepasst, dass es ein SIGSTOP sendet, wenn der X-Server gestartet wurde (dazu muss es mit -DUSE_UPSTART kompiliert worden sein).

    Der Upstart-Job muss wissen, dass ein SIGSTOP als Signal kommt, wenn das Programm bereit ist - daher sollte das eher so aussehen:


    Genau das hab ich genommen, aber das mit "expect stop" wusste ich nicht, jetzt geht es einwandfrei, vielen Dank!

    Steht das kleine -d für Daemon? Dann muss da noch ein expect fork rein. Besser ist aber, den vdr nicht als Daemon laufen zu lassen. Dann kann Upstart besser damit um.

    Hab ich rausgenommen, hab ein bisschen rumprobiert und bin jetzt hier:

    Code
    start on (runlevel [2345] and started xorg and started dbus and started udev)
    stop on runlevel [!2345]
    env LANG=de_DE.UTF-8
    respawn
    
    
    script
    exec vdr -v /video -D 0 -c /home/vdruser/vdrconf -P "softhddevice -v vdpau -a hw:PCH,0" -P "eepg" -P "epgsearch" -P "live"
    end script


    Startet, aber springt dann auf den ersten Kanal und kann nichts empfangen, einmal stop/start vdr und es geht. Syslog zeigt an, das die DVB-Treiber erst geladen werden während VDR schon startet, was muss bei "start on" hin damit vdr zum richtigen Zeitpunkt, also nach den DVB-Treibern startet? Wenn ich "and stopped networking" anfüge, startet er nicht, da networking immer aktiv bleibt.
    Ist bei der xorg.conf das "start on filesystem" nur Glück, dass das klappt und es könnte auch passieren, dass Xorg mal nicht starten will weil noch was fehlt?

    Vielen Dank

    Edited once, last by Dirk (November 15, 2014 at 3:50 PM).

  • Syslog zeigt an, das die DVB-Treiber erst geladen werden während VDR schon startet, was muss bei "start on" hin damit vdr zum richtigen Zeitpunkt, also nach den DVB-Treibern startet?


    Du musst dir halt überlegen, was ein Dienst an Abhängigkeiten hat um zu korrekt zu funktionieren und dann schaust du in http://upstart.ubuntu.com/cookbook/ wie man das am besten berücksichtigt.

    Da dein böses Plugin nicht mit dem dynamite-Plugin kompatibel ist, musst du auf alle DVB-Geräte warten, bevor du den VDR starten lässt. Da kann man z.B. über die Upstart-udev-Bridge lösen oder man macht ein pre-start script in dem mit den Mitteln der Shell gewartet wird:

    Meine VDRs

    VDR 1: Point of View Ion-330-1, 2x Sundtek MediaTV Pro (DVB-C), Atric IR-Einschalter Rev.5, Ubuntu 18.04 (yavdr-ansible)
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    VDR 3: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 18.04 (yavdr-ansible), VDR 2.4.1, CIR-Empfänger
    Client 1: Raspberry Pi 2, Arch Linux ARM, VDR 2.3.8
    vdr-epg-daemon auf Cubietruck mit 32 GB SSD, Arch Linux ARM

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Moin!

    Ach ja, das "expect stop" hatte ich vergessen zu erwähnen...

    Bei dem Warte-Script sollte die frontend-Nummer wohl besser immer Null sein, oder?


    Sonst wartet es ja auf adapter1/frontend1 usw.

    Lars.

    vdr2: yaVDR 0.5/softhddevice @ G540, Intel DH67BLB3, Asus GT610/2GB, DDBridge + 2x DuoFlex C/T
    hdvdr: yaVDR unstable/softhddevice @ E8400, Asus P5Q SE Plus, 1x L4M-TwinCI + Flex C/T, 1x Sundtek MediaTV Pro, GT520
    Plugins: | avahi4vdr | dbus2vdr | dynamite | epg2timer | noepg | pvrinput | sundtek |

  • Bei dem Warte-Script sollte die frontend-Nummer wohl besser immer Null sein, oder?


    Ja stimmt.

    Meine VDRs

    VDR 1: Point of View Ion-330-1, 2x Sundtek MediaTV Pro (DVB-C), Atric IR-Einschalter Rev.5, Ubuntu 18.04 (yavdr-ansible)
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    VDR 3: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 18.04 (yavdr-ansible), VDR 2.4.1, CIR-Empfänger
    Client 1: Raspberry Pi 2, Arch Linux ARM, VDR 2.3.8
    vdr-epg-daemon auf Cubietruck mit 32 GB SSD, Arch Linux ARM

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!