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

    Einmal editiert, zuletzt von Dirk () aus folgendem Grund: Forenregeln

  • (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

    Einmal editiert, zuletzt von fnu ()

  • 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.

  • 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

    Einmal editiert, zuletzt von Dirk () aus folgendem Grund: Forenregeln

  • 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.

  • 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…master/xorg-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:

    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

  • 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:

    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.

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


    Ja stimmt.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

Jetzt mitmachen!

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