fritzcap: Tool für Etherreal Trace und Audiodaten-Extraktion v2.0

Yellow99

Neuer User
Mitglied seit
8 Feb 2020
Beiträge
31
Punkte für Reaktionen
3
Punkte
8
Hi, ich habe eine FritzBox 7530 und bekam vor ein paar Tagen das Firmware-Update auf 07.25 zwangs-verpasst (m-net Box).

Nach einigen verzweifelten Tests bin ich jetzt zu dem Schluss gekommen, dass 'username = xxx' aus der fritzcap.conf wohl *NICHT* berücksichtigt zu werden scheint. Abhelfen kann man, indem man in der FritzBox einen User mit Namen 'root' anlegt (FritzCap-Default).

Trotzdem, könnte sich das evtl. mal jemand ansehen, der Ahnung hat (ctiemann)? Danke im voraus.
 
Zuletzt bearbeitet:

Yellow99

Neuer User
Mitglied seit
8 Feb 2020
Beiträge
31
Punkte für Reaktionen
3
Punkte
8
Ok, bin zwar nur Laie, aber wie es scheint, wird der 'Default-Wert' bei --username wie ein direkt vom User angegebener Parameter behandelt und hat damit höhere Priorität als die Angabe in der fritzcap.conf ...

Wenn man

main_args.add_argument('-u', '--username', default='root'

ändert in

main_args.add_argument('-u', '--username', default=None

scheint der angegebene Username in der Config korrekt berücksichtigt zu werden. Die eigenlichen Defaults scheinen ohnehin später im Script unter defaults = { "name": "wert", ... } gesetzt zu werden, bevor der endgültige Abgleich erfolgt.
 
  • Like
Reaktionen: ctiemann

ctiemann

Neuer User
Mitglied seit
19 Sep 2011
Beiträge
39
Punkte für Reaktionen
15
Punkte
8
...aber wie es scheint, wird der 'Default-Wert' bei --username wie ein direkt vom User angegebener Parameter behandelt und hat damit höhere Priorität als die Angabe in der fritzcap.conf ...
Sehr gut herausgefunden, ich hatte noch keine Zeit zum prüfen, warum das so ist.
Ansich sollte der default-Wert überschrieben werden und nur zum tragen kommen, wenn username= nicht gesetzt.

Wenn es denn so Abhilfe schafft, Top, gut herausgefunden.

TIPP:
Du solltest bei Vorschlägen zu Änderungen am Python-Script wie hier z.B. an den Variable der Comand-Line Übergabevariable "main_args" mit .add_argument() kurz mit angeben, dass diese sich im Script fritzcap.py in Zeile 131 befindet. So können andere Problemsuchende diese Änderung nachvollziehen.

Könnte allerdings auch sein, dass der default unter Zeile 156 überschrieben wird.
Da ich Fritzcap nicht mehr benutze, kann ich es derzeit nicht wirklich nachvollziehen, wenn es denn so klappt, perfekt.


Okay, hab es gerade geprüft und nachvollzogen.
In fritzcap.py - Zeile 131 den Eintrag auf:
Code:
main_args.add_argument('-u', '--username', default=None, metavar='username', type=str, help='the username to login to the box (Default:\'root\')')

und in der fritzbox.conf keine Anführungszeichen verwenden.

Code:
password = ichBinGeheim
username = blah

defaults = { "name": "wert", ... } überschreiben nur Werte, die in der .conf nicht gesetzt werden.


Viele Grüße
Chris
 
Zuletzt bearbeitet:

Yellow99

Neuer User
Mitglied seit
8 Feb 2020
Beiträge
31
Punkte für Reaktionen
3
Punkte
8
Jetzt nochmal was völlig anderes...

Ich hab FritzCap auf nem Linux Sat-Receiver im Unterverzeichnis /home/root/fritzcap
Um es zu starten, logge ich mich immer ein, wechsle dann in das Verzeichnis mit
'cd fritzcap' und tippe dann

nohup python fritzcap.py -m -c -d &

damit der Prozess dauerhaft läuft. Leider habe ich nicht wirklich Ahnung von Linux.

Könnte mir evtl. jemand sagen, was ich wo machen muss, damit das bei jedem Receiver-Neustart *automatisch* gemacht wird? Wie müsste ein Script ausschauen, wo müsste es hingeladen werden, wie wird es gestartet... usw. ?
 

ctiemann

Neuer User
Mitglied seit
19 Sep 2011
Beiträge
39
Punkte für Reaktionen
15
Punkte
8
Hallo Yello99,
ich könnte dir jetzt hunderte Möglichkeiten nennen, leider weiß ich nicht, welche Linuxversion du auf dem Sat-Receiver hast und welche schreibrechte in den Verzeichnissen.
Oftmals ist es bei solchen Geräten so, dass die Systemscripte schreibgeschützt abgelegt sind.
Ich empfehle dir "Google" und suche nach "linux script automatisch starten". Hier findest du viele Varianten, welche bei dir letztendlich passt musst du ausprobieren.
Früher hat man den Aufruf zB. bei /etc/rc.local eingetragen, heute macht man das mit systemd bzw. systemctl als Service.
Auch über einen cronjob ist es eine Möglichkeit.
Sonnige Grüße
Chris
 

Black Senator

Mitglied
Mitglied seit
13 Jul 2007
Beiträge
318
Punkte für Reaktionen
46
Punkte
28
Könnte mir evtl. jemand sagen, was ich wo machen muss, damit das bei jedem Receiver-Neustart *automatisch* gemacht wird? Wie müsste ein Script ausschauen, wo müsste es hingeladen werden, wie wird es gestartet... usw. ?
Ich bin da bei @ctiemann: Ohne zu wissen welches Linux auf dem Receiver läuft, ist das schwierig eindeutig zu beantworten. Für meinen fbcallrouter habe ich eine Lösung als Service unter Debian beigefügt. Vielleicht kannst Du Dich an dem Beispiel entlang hangeln und es entsprechend anpassen...

Beste Grüße

Black Senator
 
  • Like
Reaktionen: ctiemann

Yellow99

Neuer User
Mitglied seit
8 Feb 2020
Beiträge
31
Punkte für Reaktionen
3
Punkte
8
Ohne zu wissen welches Linux auf dem Receiver läuft, ist das schwierig eindeutig zu beantworten.
Tja, das weiß ich selbst nicht genau, und wie gesagt, ich hab von Linux KEINE Ahnung. Wenn es was hilft, der Receiver ist eine Dreambox DM7020HD mit Original-Image.

Bei Windows (und zwar egal welche Version) würde ich sowas einfach ins Autostart packen, und gut ist. Alle sagen immer, "Linux ist sooo toll und flexibel", aber keiner kann mir so eine (IMHO doch recht simpel anmutende) Frage beantworten (ich hab auch laaang über Google gesucht, aber nix 'eindeutiges' gefunden, und möchte ungern was ändern, was die Box dann in einen Bootloop versetzt).

Ich nehm auch gern Vorschläge entgegen, wenn ihr Lust, Zeit und Verständnis aufbringt...
 

ctiemann

Neuer User
Mitglied seit
19 Sep 2011
Beiträge
39
Punkte für Reaktionen
15
Punkte
8
Bei Windows (und zwar egal welche Version) würde ich sowas einfach ins Autostart packen, und gut ist.
Naja, dann passt das doch. Dann installiere fritzcap doch einfach auf deiner elektrischen Zahnbürste, da ist Windows IoT drauf - dann legste das da in den Autostart.

Wie ich dir bereits schon in einem anderen Threat schrieb und du es selber ja schon bemerkt hast, hast du einen HDTV-Empfänger mit original Image. Der ist nun mal kein Computer mit vernünftigem Linux, sondern dient laut dem Hersteller nur als Receiver, nicht als "eierlegende Wollmilchsau" für Linux-Anwendungen. Dort ist nur die für den Empfang von digitalen Antennen-, Kabel- und Satelliten-TV nötigste Software drauf.
Oftmals sind die Systemverzeichnisse bei solchen Geräten im tmpfs oder im ROM abgelegt. Sprich: Ein temporär eingebundenes Verzeichnis welches beim booten aus dem ROM geladen wird bzw. der ROM-Speicher ist ein Datenspeicher, der im normalen Betrieb nur lesbar und nicht beschreibbar ist, damit eben keiner seinen Receiver "zur Zahnbürste" macht.

aber keiner kann mir so eine (IMHO doch recht simpel anmutende) Frage beantworten
Ich habe dir ebenfalls bereits mal geschrieben, du sollst dir endlich mal einen Raspberry für diese Zwecke anschaffen. Da ist vernünftiges Linux drauf, damit kann man vernünftig arbeiten und man kann dir auch ganz gezielt Hilfestellung geben.
Wenn man einen HDTV-Empfänger für andere Zwecke vergewaltigt als wofür er gebaut ist, kann man nun mal keine Wunder (auch nicht von anderen!) erwarten.

Ich nehm auch gern Vorschläge entgegen, wenn ihr Lust, Zeit und Verständnis aufbringt...
Dann mach mal
uname -a
ls -al /
df -h
und poste die Ergebnisse mal hier. Dann kann man dir im ersten Ansatz auch vielleicht helfen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Black Senator

Yellow99

Neuer User
Mitglied seit
8 Feb 2020
Beiträge
31
Punkte für Reaktionen
3
Punkte
8
Erstmal Danke, dass Du zu helfen versuchst. Ich bin Windows gewöhnt, und da ist sowas eben super-simpel, daher hab ich gedacht, beim hochgelobten Linux wär es ähnlich.

Wenn es hier um mehr ginge als bloß den Paket-Transfer während Telefon-Gesprächen auf HDD zu kopieren, würd ich einen Raspberry vermutl. in Erwägung ziehen. Aber wie gesagt, Box hängt eh am Netzwerk & ist ständig an (anders als z.B. meine Zahnbürste, die noch 100% mechanisch arbeitet), daher ist das FÜR MICH in diesem speziellen Fall die beste Option. Und um bloß ein Python-Script nach/beim Boot automatisch zu starten muss es doch weder ein vollumfassendes Linux mit X-Term usw. sein noch die 'Kampfsau' mit Super-CPU und 128 GB Ram, oder?

Ich hab damals extra eine Dreambox gekauft, WEIL das System modifizierbar ist, das sollte also nicht das Problem sein (hoffe ich mal).

Die Eingabe Deiner Befehle liefern Folgendes:

Linux dm7020hd 3.2-dm7020hd #1 SMP Mon Mar 16 21:23:22 UTC 2015 mips GNU/Linux

drwxr-xr-x 17 root root 1456 Mar 26 2017 .
drwxr-xr-x 17 root root 1456 Mar 26 2017 ..
-rw------- 1 root root 0 Apr 21 20:38 .python-history
drwxr-xr-x 2 root root 232 Mar 26 2017 Settings
drwxr-xr-x 4 root root 0 Apr 21 20:41 autofs
drwxr-xr-x 2 root root 4872 Feb 16 2017 bin
drwxr-xr-x 3 root root 0 Jan 1 1970 boot
drwxr-xr-x 2 root root 160 Jan 1 1970 data
drwxr-xr-x 12 root root 2780 Apr 21 20:41 dev
drwxr-xr-x 35 root root 6568 Apr 21 20:41 etc
lrwxrwxrwx 1 root root 9 Feb 16 2017 hdd -> media/hdd
drwxr-sr-x 3 root root 224 Feb 9 2020 home
drwxr-xr-x 6 root root 4408 Mar 16 2015 lib
drwxr-xr-x 11 root root 744 Mar 1 2020 media
lrwxrwxrwx 1 root root 5 Feb 16 2017 mnt -> media
dr-xr-xr-x 95 root root 0 Jan 1 1970 proc
lrwxrwxrwx 1 root root 7 Feb 16 2017 run -> var/run
drwxr-xr-x 2 root root 5624 Feb 16 2017 sbin
drwxr-xr-x 12 root root 0 Jan 1 1970 sys
lrwxrwxrwx 1 root root 7 Feb 16 2017 tmp -> var/tmp
drwxr-xr-x 13 root root 864 Feb 16 2017 usr
drwxr-xr-x 7 root root 1128 Apr 21 20:41 var

Filesystem Size Used Available Use% Mounted on
ubi0:rootfs 369.8M 92.8M 277.0M 25% /
devtmpfs 154.8M 0 154.8M 0% /dev
none 154.9M 7.4M 147.5M 5% /var/volatile
/dev/mtdblock2 7.0M 3.8M 3.2M 55% /boot
/dev/ubi0_1 536.5M 28.0K 531.8M 0% /data
/dev/disk/by-uuid/7316571a-a68e-4be8-8540-4202e4ef4961
1.8T 1.6T 196.9G 89% /media/hdd
 

ctiemann

Neuer User
Mitglied seit
19 Sep 2011
Beiträge
39
Punkte für Reaktionen
15
Punkte
8
Guten Morgen,
Ich bin Windows gewöhnt, und da ist sowas eben super-simpel, daher hab ich gedacht, beim hochgelobten Linux wär es ähnlich.
Ich hab damals extra eine Dreambox gekauft, WEIL das System modifizierbar ist, das sollte also nicht das Problem sein (hoffe ich mal).
Es ist auch bei Linux völlig simpel, wenn nicht sogar einfacher, sofern man die Architektur von Linux verstanden hat.
Klar, bei Windows geht Drag&Drop - bei Linux kann man aber gezielt etwas definieren, wo man bei Windows eben nicht weiß, was sonst so im Hintergrund passiert.

*OffTopic*:
Absatz aus verschiedenen Gründen gelöscht. Tut nichts zur Sache. :)


Zum Thema zurück:
Überraschenderweise sehen deine Ausgaben vielversprechend aus, auch die Schreib-/Leserechte sehen gut aus. Ich muß zugeben, wenn der Receiver so offen ist, lohnt sich dieser tatsächlich für den einen oder anderen Zweck im Verbund :cool:, gerade auch im Sinne meiner Videoüberwachung und teuer ist er auch nicht. Ich nehme alle meine Vermutungen zurück.

Demnach würde ich folgendes tun (sieht komplizierter aus als es ist, da ich es sehr ausführlich erläutere):

Möglichkeit 1:
Prüfe ob du eine Datei namens rc.local hast:
ls /etc/rc.local
Sollte sie nicht vorhanden sein, rate ich davon ab, sie zu erzeugen. Dann bitte Möglichkeit 2 nehmen.
(rc.local ist seit dem Jahre 1983 obsolet. Es diente bei der Einführung des damals neuen, heute veralteten SysV-Init-Systems als Workaround für die Beibehaltung noch älterer Methoden zur Systeminitialisierung)

Wenn rc.local aber vorhanden (von der Linuxversion abhängig, bei dir eine herstellerspezifische Version "Linux dm7020hd 3.2-dm7020hd"), fügst du mit sudo nano /etc/rc.local vor dem "exit 0":

Code:
# starte fritzcap
/home/root/fritzcap/fritzcap.py -m -c -d &
ein. Sollte dann so in etwa aussehen:
Code:
if [ irgendwas]; then
  blah-bla-blah
fi

# starte fritzcap
/home/root/fritzcap/fritzcap.py -m -c -d &

exit 0

Speichern und neustarten.
Beim nächsten Neustart sollte Fritzcap laufen.
Dies kannst du mit sudo ps -ef|grep fritzcap.py prüfen.
Die Ausgabe sollte so bzw. so ähnlich aussehen:
Code:
[email protected]:~# ps -ef|grep fritzcap.py
root     23424 23038  0 08:23 pts/0    00:00:00 /home/root/fritzcap/fritzcap.py -m -c -d &
root     23585 23507  0 08:24 pts/1    00:00:00 grep --color=auto fritzcap.py

Steht da nur
Code:
[email protected]:~# ps -ef|grep fritzcap.py
root     14904 14790  0 13:26 pts/0    00:00:00 grep --color=auto fritzcap.py
läuft es nicht.


Möglichkeit 2:
(als Service einrichten)

Zunächst wird eine Datei mit dem Namen local.autostart unter /etc/init.d/ mit einem Editor deiner Wahl (zb. nano) erstellt.
Der Dateiname dient für dieses Beispiel und darf auch anders lauten, dann mußt du natürlich im folgenden alles "local.autostart" auch umbenennen.
Auf das das vorangehende "sudo" kannst du auch verzichten, wenn du als "root" angemeldet bist.

sudo nano /etc/init.d/local.autostart

und diesen Inhalt einfügen:
Code:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          local.autostart
# Required-Start:    $start
# Required-Stop:     $shutdown
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Autostart Fritzcap
# Description:       Diese Datei startet Fritzcap auf der Dreambox DM7020HD
### END INIT INFO
# Author: Yellow99

# Aktionen

# starte fritzcap
/home/root/fritzcap/fritzcap.py -m -c -d &
Der Kopfteil ist sehr wichtig und muss vorhanden sein, denn er wird später vom Befehl update-rc.d verwendet. Er darf nicht gelöscht aber darf entsprechend angepasst werden. Unterhalb von # Aktionen stehen dann die eigentlichen Befehle.

Die Datei wird nun nach dem abspeichern ausführbar gemacht:
sudo chmod 755 /etc/init.d/local.autostart

Abschließend fügt man das Skript mit dem Befehl update-rc.d in die entsprechenden Runlevel ein.
sudo update-rc.d local.autostart defaults

Beim nächsten Neustart sollte Fritzcap laufen.
Dies kannst du mit sudo ps -ef|grep fritzcap.py prüfen.

Die Ausgabe sollte so bzw. so ähnlich aussehen:
Code:
[email protected]:~# ps -ef|grep fritzcap.py
root     23424 23038  0 08:23 pts/0    00:00:00 /home/root/fritzcap/fritzcap.py -m -c -d &
root     23585 23507  0 08:24 pts/1    00:00:00 grep --color=auto fritzcap.py

Steht da nur
Code:
[email protected]:~# ps -ef|grep fritzcap.py
root     14904 14790  0 13:26 pts/0    00:00:00 grep --color=auto fritzcap.py
läuft es nicht.


Um deine Linux-Kenntnisse und dein Verständnis zu erweitern:
Mit ls -l /etc/rc?.d/*local.autostart kannst du sehen, in welche Runlevel dein Service eingetragen wurde (rcX.d -> X = runlevel, K steht für "Kill", S steht für "Start").
Beispiele:
"/etc/rc0.d/K01local.autostart" = Runlevel 0 (Shutdown) - Kill local.autostart
"/etc/rc3.d/S01local.autostart" = Runlevel 3 (Normalbetrieb ohne GUI) - Start local.autostart

RunlevelBeschreibung
0Shutdown. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt (d. h. die im Verzeichnisbaum eingebundenen Datenträger werden ausgehängt).
SSingle-User-Runlevel; niedrigster Systemzustand für Wartungsarbeiten, in dem ausschließlich Systemressourcen wie Festplatten oder Dateisysteme aktiv sind.
1Einzelnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. In vielen Implementierungen identisch mit 'S'.
2Lokaler Mehrnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. Unter einigen Linuxdistributionen (z. B. Debian) wird in Runlevel 2 auch das Netzwerk konfiguriert.
3Netzwerkbetrieb, über das Netzwerk erreichbare Ressourcen sind nutzbar, eine grafische Oberfläche steht nicht zur Verfügung. Firewalls sollten aktiviert werden.
4Ist normalerweise nicht definiert. Kann aber für diverse Dienste genutzt werden.
5Wie 3, zusätzlich wird die grafische Oberfläche bereitgestellt. (Bereitgestellt heißt nicht unbedingt angezeigt)
6Reboot. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt.

In welchem Runlevel du dich befindest, erfährst du mit who -r.

Sicherlich kann man das Script noch verbessern mit Start/Stop-Funktionen und sauberen beenden im Runlevel 0 oder 6, aber das ist hier m.E. mit Fritzcap nicht notwendig.
Sollte es wider erwarten zu Fehlern kommen oder nicht funktionieren, kannst du den Service mit sudo update-rc.d -f local.autostart remove notfalls wieder entfernen und wir werden eine andere Lösung finden.
Das o.a. Beispiel ist im Ursprung hier: Quelle und stammt nicht vollständig aus meiner Feder. Weitere Informationen zu den Runleveln und zu update-rc.d findest du hier.

Grüße
Chris

edit: Formatierungen, Rechtschreibfehler und Ergänzungen.
 
Zuletzt bearbeitet:

Black Senator

Mitglied
Mitglied seit
13 Jul 2007
Beiträge
318
Punkte für Reaktionen
46
Punkte
28
Danke schön! Hier findest Du eine davon inspirierte Python-Lösung. Marc und ich standen längere Zeit in intensivem Austausch dazu, u.a. wie der Socket im Dauerbetrieb am laufen zuhalten ist (wir hatten da völlig unterschiedliche Beobachtungen mit Win vs. Raspbian).

Interessanterweise bin ich seit kurzem daran interessiert mir Python anzueignen: ich wollte nämlich verstehen, wie fritzcap funktioniert - darum bin ich überhaupt in diesem Thread aktiv.
Im Prinzip ist Python ja nicht schwer (...kennste eine, kennste alle). Aber um z.B. deinen Code (richtig) zu verstehen bin ich einfach im Sprachumfang noch nicht fit genug.
Soweit ich es durchdrungen habe, sind es drei wesentliche logische Programmblöcke (korrigiere mich, wenn ich falsch liege):
  1. dauerhaft lauschen auf den Callmonitor
  2. wenn call inbound (RING), dann Login auf FB und via Support-Site (capture.lua?) den Paketmitschnitt aktivieren
  3. Konvertierung des G.711 Streams in Audiodatei
Gerade der letzte Teil interessiert mich von der Logik her am meisten. Den ersten Teil beherrsche ich. Teil zwei ist jetzt nicht so meine ganz starke Seite*, aber bekomme ich auch gebacken, wenn ich mich anstrenge... aber richtig spannend wird es immer bei Konvertierungen (ich habe viele Jahre Migrationen verantwortet - daher liegt mir das wohl)

Beste Grüße

Black Senator
 

Yellow99

Neuer User
Mitglied seit
8 Feb 2020
Beiträge
31
Punkte für Reaktionen
3
Punkte
8
Es ist auch bei Linux völlig simpel, wenn nicht sogar einfacher, sofern man die Architektur von Linux verstanden hat.
Und das hab ich halt nicht...

Daher sage bitte zukünftig nicht "Windows ist soooo toll und einfach!"
Das hab ich NIE behauptet (oh Gott, ganz bestimmt nicht, besonders nicht Win10 mit dem grauenvollen Flat-Design und dem Daten-Abgreifen). Ich hab lediglich gesagt, dass es unter Windows ganz einfach ist, ein Programm nach dem Hochfahren zu starten (und zwar bei ALLEN Versionen - bei Linux hab ich an mehreren Stellen mehrere Leute gefragt, und keiner konnte mir klar sagen, mach das so und es läuft...

Ich erlaube mir dazu zu sagen, dass Bill Gates damals eine tolle Idee mit Fenstern (daher der Name Windows) die Bedienung von Unix für jeden Normalnutzer vereinfacht hat
Soweit ich mich erinnere, hat er die Rechte für grafische Bedien-Oberflächen von Xerox gekauft? Und die Rechte an MS-DOS von... irgend jemand anderem.

Ich programmiere seit meinem 12. Lebensjahr (1982) unter Unix, Xenix, Linux, Windows und vielen andere BS in vielen verschiedenen Programmiersprachen.
Dies heute nicht nur als Hobby, sondern aktuell als Programmierer für Luftfahrzeugsimulatoren in verschiedenen Programmierspachen, je nach Simulationen.
Ich hab beruflich leider nix mit Programmieren am Hut (deshalb muss ich auch in solchen Foren fragen)... ich versuche Hobby-mäßig zwar immer noch mein Bestes, aber ohne ne wirkliche Informatik-Ausbildung ist das halt nur 'Gestümper' (VB .net und C# musste mir einer über Skype erklären, sonst hätte ich wohl nicht mal den Compiler installiert bekommen bzw. das Konzept begriffen)..

Ich persönlich hab mit einem C64 angefangen, und das war damals preislich schon ein Riesen-Ding, auch wenn Fachbücher für Otto Normalo kaum bezahlbar waren und meist nur 'BASIC' erklärten. Zu programmieren versucht hab ich natürlich trotzdem:

Auf jeden Fall, VIELEN DANK für Deine Tipps, die werd ich mir ausführlich durchlesen und sie dann ausprobieren. Wenn es dann immer noch nicht läuft, melde ich mich nochmal. :)

-- Zusammenführung Doppelpost gemäß Boardregeln by stoney

Ok, rc.local existiert bei mir NICHT ... und gerade diese Datei anzulegen haben mir mehrere andere empfohlen. Ich vertrau aber lieber einem Fachmann wie Dir, also weiter mit Möglichkeit 2.

Noch ein paar kleine Fragen.

Also ich erstelle local.autostart, setze die entspr. Rechte, füge Deinen Code ein.

Code:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          local.autostart
# Required-Start:    $start
# Required-Stop:     $shutdown
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Autostart Fritzcap
# Description:       Diese Datei startet Fritzcap auf der Dreambox DM7020HD
### END INIT INFO
# Author: Yellow99

# Aktionen

# starte fritzcap
/home/root/fritzcap/fritzcap.py -m -c -d &
Müsste da nicht noch ein 'exit 0' ans Ende, oder ist das egal?

Dann: sudo update-rc.d local.autostart defaults

Was genau macht dieser Befehl, bzw. ich nehm mal an, da wird was in die update-rc.d geschrieben? Besteht die Gefahr, dass der Receiver dadurch 'hängenbleibt' (Endlos-Bootschleife) und ich das ganze Ding neu flashen muss?

Außerdem wär es natürlich sinnvoll, dass fritzcap erst gestartet wird, wenn das System möglichst weit hochgefahren ist, damit Netzwerk usw. verfügbar ist. Kann/soll/muss man da noch was extra berücksichtigen? (Required-Start)

Und wird das Python-Script dann auch in /home/root/fritzcap ausgeführt, damit auch die Logfiles dort zu finden sind? Außerdem, bei manuellem Start mit 'nohup' wurde der Output immer in nohup.out geschrieben, wo landet er hier?

Danke nochmals...
 
Zuletzt bearbeitet von einem Moderator:
  • Like
Reaktionen: ctiemann

ctiemann

Neuer User
Mitglied seit
19 Sep 2011
Beiträge
39
Punkte für Reaktionen
15
Punkte
8
Ok, rc.local existiert bei mir NICHT ... und gerade diese Datei anzulegen haben mir mehrere andere empfohlen.
Du kannst diese Datei (als root) selber anlegen und ausführbar machen:
Code:
sudo touch /etc/rc.local
sudo chmod +x /etc/rc.local
Diese Datei wird von systemd ausgewertet, der dann die rc-local.service startet. Auf Dauer ist es aber besser, für Programme aus der Datei /etc/rc.local eine eigene systemd-Unit zu erstellen.
Es gibt zumindest die Beschränkung, dass das System mit dem Abschluss des Startvorgang wartet, bis alle Prozesse der Befehle, die in der rc.local ausgeführt wurden, beendet wurden.
Systemd Units haben den Vorteil, dass man auch sauber Abhängigkeiten von Vorbedingungen formulieren kann (z.B. Netzwerk fertig konfiguriert, bestimmte Mounts vorhanden usw.) Stichwort: Runlevel.
Wenn du es damit probieren willst, hilft dir dieser Artikel: How can I make /etc/rc.local run on startup? , dann brauche ich nicht viel erklären.
Nachtrag: Kann aber auch sein, dass sie vom System ignoriert wird, kann getestet werden mit systemctl status rc-local.service. Da hilft dir dann dieser Artikel.
Müsste da nicht noch ein 'exit 0' ans Ende, oder ist das egal?
Nein. Kein "exit 0" bzw. ist egal. Grundsätzlich ist ein "exit 0" nicht falsch.
Die Verwendung des richtigen Beendigungscodes ist nicht erforderlich und wird von der Shell nicht erzwungen.
Was genau macht dieser Befehl, bzw. ich nehm mal an, da wird was in die update-rc.d geschrieben? Besteht die Gefahr, dass der Receiver dadurch 'hängenbleibt' (Endlos-Bootschleife) und ich das ganze Ding neu flashen muss?
update-rc.d aktualisiert die System-V-artigen Init-Skripte-Links /etc/rcRunlevel.d/NNName, deren Ziel das Skript /etc/init.d/Name ist. Diese Links werden von init ausgeführt, wenn es die Runlevel ändert; sie werden im Allgemeinen zum Starten und Stoppen von Systemdiensten wie Daemons verwandt. Runlevel ist einer der durch init unterstützten Runlevel, konkret 0123456789S, und NN ist die zweiziffrige Sequeznummer, die bestimmt, wo in der Sequenz init das Skript ausführen wird. (Auszug man-page)

Das der Receiver "hängen bleibt" befürchte ich nicht, da ein nicht gestarteter Service wie dieser keine Abhängigkeiten hat. Restrisiko gibt es immer - Schreibfehler, etc., daher ist alles ohne gewähr. :cool:
Außerdem wär es natürlich sinnvoll, dass fritzcap erst gestartet wird, wenn das System möglichst weit hochgefahren ist, damit Netzwerk usw. verfügbar ist. Kann/soll/muss man da noch was extra berücksichtigen?
Darum ja als Service unter /etc/init.d/ - auch hier Stichwort Runlevel.

Noch ein Nachtrag: Es führen bekanntlich viele Wege nach Rom, wie man so schön sagt. Daher gibt es eben auch andere Varianten u.a. als cronjob, und noch aktueller mit systemd-Methode.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Yellow99

Yellow99

Neuer User
Mitglied seit
8 Feb 2020
Beiträge
31
Punkte für Reaktionen
3
Punkte
8
Ok, FritzCap scheint nach dem Reboot tatsächlich zu laufen:

[email protected]:~# ps xw | grep -i fritz
591 ? Sl 0:04 /usr/bin/python /home/root/fritzcap/fritzcap.py -m -c -d
743 pts/0 S+ 0:00 grep -i fritz

Erst nochmal DANKE für die Hilfe... und die Erklärungen.

Noch ein paar Frägelchen:

Darf man den Prozess (hier: 591) gefahrlos im Terminal killen, oder gibt es dann evtl. Probleme mit dem 'Dienst'?

Kann ich in der local.autostart auch zuerst ins FritzCap-Verzeichnis wechseln lassen und dann ohne direkte Pfad-Angaben starten, also z.B. Befehle wie

cd /home/root/fritzcap
python fritzcap.py -m -c -d &

oder muss ich die Pfade zu Python und zu dem Script trotzdem explizit angeben?
 

ctiemann

Neuer User
Mitglied seit
19 Sep 2011
Beiträge
39
Punkte für Reaktionen
15
Punkte
8
Darf man den Prozess (hier: 591) gefahrlos im Terminal killen, oder gibt es dann evtl. Probleme mit dem 'Dienst'?
Ja. Die PID(hier 591) kannst du gefahrlos mit sudo kill PID beenden.
Zum neustarten kannst du die fritzcap.py wieder mit /home/root/fritzcap/fritzcap.py -m -c -d & oder /etc/init.d/local.autostart aufrufen.
Das Script local.autostart wird nur beim Systemstart bzw. beim ändern der Runlevel durch INIT aufgerufen, danach nicht mehr.
Kann ich in der local.autostart auch zuerst ins FritzCap-Verzeichnis wechseln lassen und dann ohne direkte Pfad-Angaben starten, also z.B. Befehle wie

cd /home/root/fritzcap
python fritzcap.py -m -c -d &
Sollte gehen, macht aber keinen Sinn, von daher hab ich das nie ausprobiert :cool:.
Probiere es aus, du kannst das Script local.autostart auch manuell starten mit /etc/init.d/local.autostart.
Du kannst auch mehrere Aufrufe in der local.autostart realisieren ohne für jeden Aufruf ein local.autostart file zu schreiben, kannst Änderungen machen, etc..
Einfach mit /etc/init.d/local.autostart das Script testen und wenn alles geht, wird es beim nächsten booten auch so ausgeführt.
Auch ein update-rc.d ist danach nicht sinnvoll/notwendig, da bereits ein Link auf das Script local.autostart in den Runleveln eingetragen ist.

oder muss ich die Pfade zu Python und zu dem Script trotzdem explizit angeben?
Den Aufruf "python" vor fritzcap.py brauchst du gar nicht schreiben, da im fritzcap.py ein shebang verwendet wird (#!/usr/bin/python).
Diese Zeile weist das Betriebssystem an, diese Datei mit dem Interpreter-Programm "python" zu öffnen.

Soll das Programm im Hintergrund laufen, schreibt man noch ein "&" hinter dem Programmnamen.
Bei der Variante
Code:
cd /home/root/fritzcap
python fritzcap.py -m -c -d &
musst du allerdings ohne "python" davor
Code:
cd /home/root/fritzcap
./fritzcap.py -m -c -d &
schreiben.

Nachtrag (Linux-Lehrstunde):
Ein im Verzeichnis /home/root/fritzcap/ durchgeführter Aufruf mit "python fritzcap.py" ist nichts anderes, als das das System daraus ein "/usr/bin/python /home/root/fritzcap/fritzcap.py" macht.
Und eine Datei mit shebang (in diesem Beispiel: #!/usr/bin/python) wird, wenn man sich in dem Verzeichnis befindet, einfach mit "./dateiname" aufgerufen, ansonsten ruft man Dateien/Scripte direkt mit
absoluten Pfadnamen auf (/home/root/fritzcap/fritzcap.py).
Und schau dir mal die Ausgabe von service local.autostart status an (fürs Verständnis des Service).
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Bowf

Erhalten Sie 3CX für 1 Jahr kostenlos!

Gehostet, in Ihrer privaten Cloud oder on-Premise! Ganz ohne Haken. Geben Sie Ihren Namen und Ihre E-Mail an und los geht´s:

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.
oder via