Erstellt vor 7 Monaten

Zuletzt geändert vor 5 Wochen

#2908 new defect

Race condition beim Hinzufügen von ftpd und smbd zur inetd.conf

Erstellt von: f_666 Verantwortlicher:
Priorität: normal Meilenstein: freetz-next
Komponente: patches Version: devel
Stichworte: freetzmount Beobachter:
Product Id: 7490 Firmware Version:

Beschreibung

Ich habe eine 7490 mit (dauerhaft) angeschlossener Festplatte und aktiviertem FreetzMount (06.83, aktueller Trunk). Beim Hochfahren der FritzBox wird weder der ftpd noch der smbd in die inetd.conf eingetragen. FTP und SMB ist in der Oberfläche aktiviert.
Der zeitliche Ablauf diverser Skripte ist wiefolgt (ich habe großflächig Debugausgaben in diverse Skripte eingefügt):

01:00:51 libmodmount.sh Partition XXX (/dev/sda) was mounted successfully
01:00:51 libmodmount.sh ruft inetdctl enable ftpd auf
01:00:51 ---> /bin/inetdctl prüft [ -d /mod/etc/default.ftpd ], welches noch nicht existiert und beendet sich
01:00:52 libmodmount.sh ruft samba_control reconfig auf
01:00:54 ---> samba_control ruft inetdctl enable smbd auf
01:00:54 ---> ---> /bin/inetdctl prüft [ -d /mod/etc/default.smbd ], welches noch nicht existiert und beendet sich
01:01:01 ? irgendjemand ruft inetdctl enable ftpd auf, wieder ohne Erfolg
01:01:03 ? irgendjemand ruft samba_control reconfig_pw auf
01:01:04 ---> samba_control ruft inetdctl enable smbd auf, wieder ohne Erfolg
01:01:07 ? irgendjemand ruft rc.ftpd (ohne Parameter) auf
einige Zeit später: /mod/etc/default.ftpd und /mod/etc/default.smbd sind da, erst ab jetzt kann libmodmount.sh überhaupt ftpd und smbd beim inetd registrieren

Vermutlich habe ich auf einer 7270 das gleiche Problem, wäre die Reserve zum Testen.

Hat jemand, der sich mit dem Startprozess auskennt, eine Idee, wie man das vernünftig lösen könnte?
Z.B. in der libmodmount.sh bzw. samba_control sicherstellen, dass die /mod/etc/default.$2 Verzeichnisse angelegt werden?

Anhänge (1)

freetzmount_race_fix.diff (2.2 KB) - hinzugefügt von f_666 vor 7 Monaten.
Vorschlag um das Thema zu lösen

Alle Anhänge herunterladen als: .zip

Änderungshistorie (6)

Geändert vor 7 Monaten durch f_666

Vorschlag um das Thema zu lösen

comment:1 Geändert vor 7 Monaten durch f_666

Anbei einen Vorschlag um das Thema zu lösen:

inetdctl legt eine Datei unter /tmp an, falls das Aktivieren von Diensten im inetd gewünscht wurde, diese aber noch nicht möglich waren, da die Konfigurationen unter /mod/etc/default.XXX fehlten.

Später prüfen rc.smbd und rc.ftpd beim Starten, ob die Dateien da sind und aktiveren dann ihre eigenen Dienste im inetd.

Dieser Lösungsweg erschien mir am einfachsten, da inetdctl an zu vielen (verschachtelten) anderen Stellen aufgerufen wird.

comment:2 Geändert vor 6 Wochen durch f_666

Hat jemand eine Meinung zu dem Patch?

Das Problem sollte doch auch bei anderen auftreten.

Wenn Massenspeicher beim Einschalter der Box angeschlossen sind, legt udev los, bevor rc.smbd und rc.ftpd gestartet sind. Somit fehlen dann die Dienste im inetd.

comment:3 Geändert vor 6 Wochen durch ralf

  • Product Id auf 7490 gesetzt

Die Links /mod/etc/default.{ftpd,smbd} werden in /etc/init.d/rc.mod angelegt. Wenn dieser Link das einzige ist, was fehlt, würde ich lieber rc.mod aufteilen in einen Teil, der schon früh aufgerufen werden kann und unter anderem diese Links erstellt, und einen Rest, der später laufen soll. Zumindest auf der 7490 wird udev von /etc/init.d/S21-udev gestartet.

Besser noch wäre es zu prüfen, was der Sinn hinter den Links /mod/etc/default.ftpd/etc/default.ftpd ist und ob der Grund dafür überhaupt noch besteht.

comment:4 Geändert vor 6 Wochen durch oliver

Der Sinn hinter diesen Links ist, dass man die Dateien nicht unbedingt im Dateisystem haben müsste. Ich bin mir nicht sicher wie External das macht. Ich hatte mal für mich ein Skript geschrieben mit dem sich Pakete dynamisch einbinden lassen. Dabei habe ich die Verlinkung dann von /mod/etc/default.$pkg auf ein Verzeichnis auf dem USB-Laufwerk umgebogen…

comment:5 Geändert vor 5 Wochen durch f_666

Der Fehler betrifft auch die 7270.

Eine weitere Variante ist es, die Links gleich mit in die var.tar reinzupacken.

Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.