Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenloses um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereiche, welche für Gäste verwehrt bleiben

Shutdown & WOL Scripte für OSCam-Server

Registriert
27. August 2010
Beiträge
274
Reaktionspunkte
93
Punkte
88
So liebe Leute


Es hat zwar länger gedauert als mir lieb war, aber jetzt möchte ich hier mal meine Wakeup und Shutdown-Skripte für OSCam vorstellen.
Sinnvoll ist das für Leute wie mich, deren Server vielleicht vier, fünf Stunden am Tag effektiv was zu tun haben. Zumindest in meinem Fall ist die Bootzeit recht kurz, sodass die Wartezeit bis das Bild kommt nicht sooo lang ist. Man könnte das ganze natürlich auch mit Suspend to RAM/Disk/Both lösen, damit habe ich mich aber noch nicht befasst, kommt aber evtl. noch.

Mein Dank gilt insbesondere aragorn, der mir beim scripten massiv unter die Arme gegriffen hat und rolu2, der mir das Freetz-Image kompiliert hat.

Benötigt wird:

Hardware
- OSCam-Server (prinzipiell sollte es auch für CCCam gehen) mit WOL fähigem Netzwerkchip. Ich nutze einen FutroS400, damit klappts zumindest bei mir.
- FritzBox (wahrscheinlich ginge auch DD-WRT oder OpenWRT, ist aber nicht getestet)

Software:
- die beiden vorgestellten Scripte shutdown_if_idle.sh und wakeup.sh
- ether-wake und tcpdump auf der FritzBox. Ether-Wake scheint in den meisten Images dabei zu sein, tcpdump muss man meist selbst einbauen. Dieses Image Link ist nicht mehr aktiv. habe ich verwendet, ist für die FritzBox 3270v3.


Einrichtung:
Vorausgesetzt wird ein voll funktionierender OSCam-Server, mit eingeschaltetem Logfile.

Wir erstellen nun folgendes Script

Du musst dich Anmelden oder Registrieren um diesen Inhalt sichtbar zu machen!

Bei $path natürlich den richtigen Pfad angeben.

Das Script prüft folgendes:
- läuft OSCam überhaupt?
- Ist ein User lokal oder per SSH angemeldet?
- verändert sich die letzte Zeile der Datei oscam.log?

Falls OSCam läuft, kein User angemeldet ist und das Logfile sich nicht mehr verändert, wird die Büchse heruntergefahren.

und nennen es z.B. "shutdown_if_idle.sh"
mit
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!
scharf machen und dann
einen Crontab dafür erstellen:
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!
und dort tragen wir dann
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!

ein. So ruft Crontab das Script alle fünf Minuten auf, man kann die Frequenz auch verringern oder erhöhen, einfach die Zahl (= Minuten) beliebig verändern. Pfade wieder entsprechend anpassen.

Nun sollte euer Server bei Nichtgebrauch herunterfahren.


Runter kommen sie natürlich alle, hoch bekommt ihn nicht jeder ;)

Hier kommt die FritzBox ins Spiel: hierfür benötigen wir zwingend Telnet oder SSH (z.B. Dropbear). Ich habe der Einfachheit halber telnet genommen.
Wichtig ist, dass die beiden Pakete tcpdump und ether-wake im Image sind, sonst gehts nicht.

Hier benötigen wir nun unser wakeup-script, ich habe es wakeup.sh genannt


Du musst dich Anmelden oder Registrieren um diesen Inhalt sichtbar zu machen!

Hier müsst ihr bei
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!
die IP eures Servers eintragen, bei
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!
die MAC-Adresse des Servers.
Bei
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!
ist der entsprechende Sharing-Port einzutragen, weitere Ports können einfach mit "or dst port 23456" hinzugefügt werden.

Wer sein Systemlog der FritzBox nicht vollhämmern will (denn JEDES Paket löst das event aus) kann die eventadds gerne rausnehmen (dann aber aufpassen, denn if... then/else braucht zwingend ein Argument und Kommentare gelten nicht, also einfach : einsetzen).
Ich lasse tcpdump hier auf allen Interfaces der Box horchen, wer z.B. nur den WAN-Anschluss überwachen will setzt bei
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!
einfach "dsl" statt "any" ein. Andere mögliche Interfaces sind z.B. wifi0 oder eth0.

Das Skript stopfen wir nun in einen mehr oder weniger beliebigen Ordner auf der FritzBox bei dem wir Schreibrechte haben. Achtung, /var/tmp ist zwar für solche Dinge gedacht, ist aber nicht persistent, d.h. das Script ist nach einem Reboot weg.

So oder so müssen wir noch in /var/flash die Datei debug.cfg editieren (z.B. mit nvi) und um die Zeile

Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!
(oder wie auch immer ihr das Script genannt habt) erweitern. Für $path natürlich wieder den richtigen Pfad angeben.
Um das Problem, dass das Script wenn es z.B. in /var/tmp liegt nach einem Reboot weg ist, zu lösen kann man das wie folgt regeln. Das Script einfach auf einen USB Stick, der an der Box angeschlossen ist auslagern. Dazu folgende Zeilen in die debug.cfg eintragen:
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!

Jetzt sollte euer heruntergefahrener Server bei Anfragen auf dem Sharing-Port aufwachen und booten, ABER

Das ganze funktioniert NICHT im LAN. Grund hierfür ist, dass z.B. MGCamd 1.35a oder auch CCCam 2.3.0 nicht einfach "auf blöd" Anfragen raushauen, sondern die Clients erstmal einen ARP Request who-has $ServerIP
raushauen. Der wird aber nicht zufriedenstellend beantwortet, weil Server ja aus ist. Deswegen gibt der Client irgendwann auf und der Server startet nicht, ergo Teufelskreis.

Ich arbeite noch an einer Lösung einen Trigger für die ARP Requests einzubauen, bis dato aber noch ohne zählbaren Erfolg. Ich habe mir in der Zwischenzeit so geholfen, dass ich in meiner newcamd.list einen Dummy-Port eingebaut habe, der über meine dyndns-Adresse arbeitet, denn von AUSSEN lässt sich der Server starten. Entsprechende Portweiterleitungen natürlich ebenso. Den Port muss man nicht mal in der oscam.conf eintragen, ist einfach "denied", relevant ist ja nur, dass eine Anfrage über diesen Port an der FritzBox ankommt. Ist aber nur eine Notlösung, Hilfe dabei ist natürlich wünschenswert.

Tip:
Wer wie ich das Problem hatte, dass der MGCamd Client zwar den Server aufweckt, dann aber erst nach ewigen Zeiten hell macht und das nur schneller funktioniert, wenn man das CAM neu startet, dem könnte folgender Hinweis helfen.

in der mg_cfg gibt es die Schalter N: und Q:

Sieht dann so aus
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!

Wenn wir N auf 07 stellen (= 01 + 02 + 04, also alles an)

und Q
Code:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!

entsprechend verändern (XXX = Zeit in Sekunden), wenn es vorher auf einem hohen Wert stand (bei mir war das z.B. 600), dann klappts auch recht fix. Ich habe das z.B. einfach mal auf 5 gestellt, Problem gelöst.


Ideen und Verbesserungsvorschläge sind natürlich herzlich willkommen, vielleicht kann ja jemand etwas hier ganz oder teilweise gebrauchen.
 
Zuletzt bearbeitet:
Zurück
Oben