Geänderter Start von multid in FRITZOS 7.50 - Wrapper für dnsmasq funktioniert nicht mehr

Zum Testen kann man auch erst einmal nur das Service-File "überladen" (mit einem bind-Mount) und in dessen r/w-Kopie dann ein eigenes EnvironmentFile verwenden - notfalls kriegt man das auch noch in der eigenenrc. user automatisiert.
 
@LazyT Welche Erfahrungen hast du mit DHCP im Gast-WLAN bei deiner Methode?
Bis 7.29 funktionierte das Gast-WLAN mit dnsmasq einwandfrei. Man musste die DHCP-Vergabe durch den multid abschalten.
Siehe hier.
 
@leo22 Danke! Vor allem für deine ausführliche Anleitung im verlinkten Thread.
Nein, ich kannte diese Lösung nicht und hatte daher die Box immer DHCP-technisch im "Mischmodus" betrieben, sodass multid die DHCPs im Gast-WLAN verwaltet hat. Wenn es tatsächlich durch diesen Eingriff in die ar7.cfg funktioniert, dann probiere ich es noch vor dem Update auf 7.50 aus, damit es dann schon davor vollständig auf dnsmasq umgestellt ist.
dnsmasq ist schon ein mächtiges Tool. Es kann nicht nur mehrere Subnetze verwalten, sondern auch andere Features, auf die ich ungerne bei mir im lokalen Netz verzichten würde.
 
...denn das (originale) Service-File enthält...
Mich würde interssieren, wie das origninale mutid.service-File bei der FW 7.50 genau aussieht.
Könnte es mal einer posten?
Unter Freetz-NG erhalte ich das "Geraffel" (Danke PeterPawn für das tolle Wort):
Rich (BBCode):
# cat /lib/systemd/system/multid.service
;
; multid sets up home and guest networks (lan/guest bridge)
;

[Unit]
After=avmipcd.service

[Service]
ExecStart=/usr/bin/wrapper/multid
ExecReload=/bin/msgsend -a multid reload
Type=notify
; psupport.data exports PTEST_SERVER, interpreted by libar7cfg
EnvironmentFile=/var/tmp/psupport.data

[Install]
WantedBy=network.target
 
Die originale Datei sieht exakt so auch aus - sie wird nämlich gar nicht geändert. Kleiner Tipp ... im Verzeichnis build/original/filesystem/... Deines Freetz-Builds sollte sich das komplette entpackte Dateisystem aus der originalen AVM-Firmware finden lassen.

Die unter EnvironmentFile angegebene Datei ist üblicherweise leer (und wird - wie weiter vorne schon geschrieben - auch erst zur Laufzeit dynamisch erzeugt, KANN also nicht schon vorher geändert werden) - daher kann man sie (in diesem service-File) auch einfach durch eine eigene Datei ersetzen, in der eben das LD_PRELOAD steht. Wird der Service IMMER wieder über diese Definition gestartet (wovon ich ausgehe und bei einem per IPC angewiesenen reload sollte sich am Prozess selbst (PID, geladene Bibliotheken, etc.) nichts ändern), so wird auch immer die Library zuerst geladen und kann/wird so auch wiederholt ihre Arbeit verrichten.
 
...Kleiner Tipp ... im Verzeichnis build/original/filesystem/......
Den hab' ich gebraucht. Danke.
Die originale Datei sieht exakt so auch aus - sie wird nämlich gar nicht geändert.
Wenn exakt = grundlegend und gar = wesentlich ist, dann stimme ich Dir zu.
Mich hat nämlich dieses ExecStart=/usr/bin/wrapper/multid misstrauisch gemacht, dass Freetz-NG da noch mehr "geraffelt" haben könnte.

Das Weitere (EnvironmentFile usw.) schaue mir später an, jetzt muss ich mich ums neue Jahr kümmern, damit es ein besseres wird. Also...
new_year_firework_icon.png
und einen guten Rutsch...
 
Stimmt, diese Änderung habe ich glatt überlesen. Freetz-NG ist halt "nicht mein Tisch" ...
 
Ohne jetzt in die Dateien reingeschau zu haben, würde ich mal behaupten, dass dieser wrapper genau für diese Preload-Sachen gebraucht wird. Ist eine der Möglichkeiten, diese Sachen umzusetzen, die Peter hier vorschlägt. Hatte man hier früher in FREETZ sehr oft so gemacht. Ich persönlich würde auch eher alle Änderungen in eine separate Datei auslagern, anstelle diese service-Datei direkt hin- und her- zu patchen und in dieser service-Datei nur einen "Absprung" in die eigene Datei verschaffen, wie es auch hier in FREETZ-NG anscheinend mit diesem wrapper umgesetzt ist. Aber das ist alles Geschmacksachen und hat seine Vor- und Nachteile, die sich im späteren Pflegen dieser Änderungen ergeben. Einer macht es so, der andere lieber mit einem direkten Patch, wie Peter es vorschlägt.

@FischersFreetz Aber warum "zerlegst" du es denn jetzt, nachdem es anscheinend in FREETZ-NG doch irgendwie umgesetzt wurde? Die Betonung liegt auf "irgendwie", da ich es mir auch noch bis jetzt nicht angeschaut hatte und auch nicht weiß, ob und wie es funktioniert. Daher ist ja meine Frage an deine Erfahrungen damit: Funktioniert denn diese neue Umsetzung in FREETZ-NG nicht oder nicht ganz oder nicht, wie es soll?
 
Und da ergibt das Vorgehen von Freetz-NG dann auch tatsächlich einen relevanten Unterschied bei einem System, welches ein "Analogum" zum systemd verwendet. Während bei AVM der multid direkt vom supervisor gestartet wird und unter dieser PID, mit der der Start erfolgte, auch weiterhin läuft (und der steuernde Prozess über ein gesondertes Signal vom erfolgreichen Start in Kenntnis gesetzt wird: Type=notify), wird bei Freetz-NG der Daemon als Kindsprozess einer Shell aufgerufen (https://github.com/Freetz-NG/freetz-ng/blob/master/make/pkgs/mod/files/root/etc/init.d/rc.multid) und der vom supervisor gestartete Prozess ENDET bereits in der Startphase, was üblicherweise den steuernden Prozess dazu veranlassen würde, den Service als "dead" oder "deactivated" anzusehen: https://www.freedesktop.org/software/systemd/man/systemd.service.html - auch bei AVM sind derartige Praktiken ja zu sehen, dann allerdings i.d.R. i.V.m. einer Angabe Type=oneshot.



Welche Auswirkungen das jetzt genau auf den Ablauf der Initialisierung des Systems hat, hängt auch davon ab, was AVM aus den Quellen des systemd für den eigenen supervisor alles übernommen hat - die Quellen stehen (leider) "nur" unter LGPL-Lizenz und ich habe bisher noch in keinem AVM-Paket gesehen, daß man die eigenen Änderungen DENNOCH veröffentlicht hätte ... das gelingt den Mitarbeitenden bei AVM ja nicht einmal für die Fälle in Gänze, wo sie von einer GPL-Lizenzierung dazu eigentlich VERPFLICHTET wären.

Man weiß - dank der "verschämten Verschwiegenheit" bei AVM - auch nicht genau, ob man dort TATSÄCHLICH den systemd (https://github.com/systemd/systemd) als Vorbild/Vorlage für den eigenen supervisor verwendet hat.

Manches spricht ja (zumindest in meinen Augen) dafür - angefangen bei der Syntax der verwendeten Dateien zur Steuerung.

Andererseits spricht aber DAGEGEN, daß bei AVM dieses Projekt GAR KEINE Erwähnung findet (zumindest nicht in der OSS-Datei für die 07.50 der 7590: http://osp.avm.de/fritzbox/fritzbox-7590/source-files-FRITZ.Box_7590-grx5-07.50.tar.gz) und das, obwohl doch auch die LGPL-2.1 (und das nicht erst seit gestern) eine entsprechende Kennzeichnung FORDERT: https://github.com/systemd/systemd/...b05e83c2051f90785d98c646/LICENSE.LGPL2.1#L278

Damit bleibt eine gewisse VERUNSICHERUNG, was AVM da genau implementiert hat und welche Auswirkungen die verschiedenen Angaben in den Konfigurationsdateien am Ende haben - bleibt nur die "Beobachtung" des Verhaltens bei unterschiedlichen Angaben.



Witzig ist aber - zumindest wieder in meinen Augen - auch, daß bei AVM an anderer Stelle sowohl die Quellen für Komponenten, die gar nicht in der veröffentlichten Firmware enthalten sind (z.B. dropbear, wenn auch in einer vier Jahre alten Version), dabei sind als auch einige Informationen, die vermutlich so gar nicht veröffentlicht werden SOLLTEN, zumindest decken sie ja auch auf, DASS die von AVM veröffentlichten Quellen unvollständig sind, wenn es um den "GU wrapper" geht.
GU Wrapper
----------

The GU wrapper is responsible for the integration of subprojects and should be
the only place containing the implementation needed. To achieve this goal the
GU wrapper uses the hooks and configurations files described above.

The wrapper *MUST* provide `LINUXINCLUDE_AVM_SUBPROJECTS` and
`USERINCLUDE_AVM_SUBPROJECTS` to the Linux Makefile. These variables *MUST*
contain include flags for `include/` and `include/uapi/` folders in each LiSI
compatible subproject, if the respective folder exists. The order of the flags
is unspecified but *SHOULD* be stable.

The wrapper *MUST* generate compatibility header files defined in each
`compat.headers` file. These header files *MUST* rely on the inclusion path
and not on the physical path. Compatibility header files *SHOULD* contain a
deprecation warning, which *MUST NOT* cause a compiler error.

The wrapper *MUST* install subproject header folders into the GU archive and
UAPI header files into the target tree.

The wrapper *MAY* provide `GNUmakefile` and files under `avm/make/generated/`
in the Linux tree. These files *SHOULD* be ignored by the VCS.
Daran ändern (wieder nur nach meiner Ansicht) auch die Vorlagen, die unter sources/kernel/kgw/makefiles/templates hinzugekommen sind, nichts wirklich - eine Komponente gu, wie sie in einigen Dateien "referenziert" wird:
Rich (BBCode):
vidar:~/FritzBox/FB7590/GPL_07.50 $ grep -r " gu " sources/kernel/kgw
sources/kernel/kgw/scripts/add-file-helper/check-abi-compat:                        | xargs -r echo "info:  You might want to re-run these GU targets:  gu build"
sources/kernel/kgw/scripts/add-file-helper/check-abi-compat:                echo "info:  To see more details, run:   gu env -- xargs -a ${file} ${base}/symvers-check -v" >&2
sources/kernel/kgw/makefiles/defaults.make:kconfig_oldconfig := $(shell gu config --get 'project.kernel.kconfig' 2>/dev/null || echo olddefconfig)
sources/kernel/kgw/makefiles/kbuild.make:# Example: gu config --local --add project.kernel.kconfig-override CONFIG_DEBUG_KMEMLEAK=y
sources/kernel/kgw/makefiles/kbuild.make:   ( gu config --quiet --get-regex 'project\.kernel\.kconfig-override' | cut -d= -f2- )
sources/kernel/kgw/doc/debugging.mkd:    gu config --set --local build.verbosity trace
sources/kernel/kgw/doc/debugging.mkd:provide kernel && timeout 10s gu build kernel`) helfen in den meisten Fällen
sources/kernel/kgw/doc/debugging.mkd:    gu env env LC_ALL=C.UTF-8 make -C ../build V=1
sources/kernel/kgw/doc/debugging.mkd:    gu config --add --local gu.project.kernel.kconfig-override CONFIG_MODVERSIONS=y
sources/kernel/kgw/doc/abi-check.mkd:    info:  You might want to re-run these GU targets:  gu build cpunet-main fon_kmods-main vendor-main
sources/kernel/kgw/doc/abi-check.mkd:    info:  To see more details, run:   gu env -- xargs -a .../tmp/check-abi-compat.tmp .../bin/symvers-check -v
vidar:~/FritzBox/FB7590/GPL_07.50 $
findet sich in den AVM-Dateien gar nicht und auch keine Vorlagen/Makefiles, etwas in der Richtung zu erzeugen (zumindest habe ich nichts gefunden, was (für mich) schon mal ein schlechtes Zeichen ist). Die Syntax von gu-Aufrufen erinnert ja ein wenig an das git-Projekt - aber ich finde bei einer Internet-Suche keine Hinweise auf Projekte, die einen derartigen Namen verwenden würden.



Aber immerhin hat AVM es mittlerweile dann doch geschafft, ein paar "Werkzeuge" hinzuzufügen, die für einen eigenen Kernel-Build (mit vergleichbarem Ergebnis) unumgänglich sind ... nein, natürlich NICHT die SquashFS-Tools, mit denen man auch bei Version 4 das passende Dateisystem erzeugen könnte, aber die kommen ja vielleicht/hoffentlich auch noch irgendwann.

Jedoch gibt es jetzt (im erwähnten kgw-Verzeichnis) endlich ein Tool (unter sources/kernel/kgw/scripts/add-file-helper/link_and_print_symbols.sh i.V.m. sources/kernel/kgw/scripts/add-file-helper/compute_module_size.pl), mit dem man sich die Module-Tabelle im Konfigurationsbereich SELBST erstellen lassen kann - zumindest das Header-File für eine solche, die dann (wenn man dem Freetz(-NG)-Ablauf beim make folgen würde) beim Build auch eingebunden werden KÖNNTE ... bei AVM wird sie getrennt übersetzt und das Object-File dann weiterverarbeitet (Zeile 329 im erwähnten Shell-File).

Dort wird dann jetzt in Perl die Ausgabe des readelf-Tools zerlegt, um daraus dann die Angaben für die vier Zahlen zu erhalten, die in der Module-Tabelle für die LKM hinterlegt sind. Das läuft dann halt über alle LKM im Verzeichnis lib (für den neuen Kernel - gesucht werden sie mittels find) und im Shell-Skript wird dann sogar (mittels dd :cool:) noch der betreffende Bereich im (noch ungepackten) Kernel ersetzt - das macht dann das bisher dafür erforderliche avm_kernel_config (https://github.com/PeterPawn/YourFritz/tree/main/avm_kernel_config bzw. dessen Kopie in Freetz/Freetz-NG) obsolet. Allerdings erfordert es wieder Änderungen beim Kernel-Build ... das gehört jetzt dort in die "Nachbereitung" vor dem Packen des eigenen Kernels (weil erst einmal die Module vorliegen müssen), wo ich persönlich mein avm_kernel_config ja auch schon immer am liebsten angesiedelt gesehen hätte.

Warten wir mal ab, ob/wie das @cuma/@fda77 lösen wird ...
 
@hermann72pb und @alle
Ich versuche erstmal die Sache für mich begreifbar zu machen und zu klären, wie ich für mich das Problem lösen könnte. Ich schildere hier mal meine Erfahrungen und bitte um eure Hinweise...

Unter FW 7.50 und Freetz-NG ist schon der Start des multid "eigenartig", denn der wrapper von Freetz-NG bleibt irgendwie hängen. Siehe...
Rich (BBCode):
# ps | grep multi
 2119 root     {multid} /bin/sh /usr/bin/wrapper/multid
 2140 root     {rc.multid} /bin/sh /etc/init.d/rc.multid start
 2141 root     {multid} /bin/sh /usr/bin/wrapper/multid
 2327 root     multid
11442 root     grep multi
Ein multid -s beendet alle diese Prozesse (so weit so gut).

Ich gehe davon aus, dass das Script /usr/bin/wrapper/multid durch die freetzspezifische Service-Datei /lib/systemd/system/multid.service (siehe #24 ) angestoßen wird. Oder?
Ich wollte erstmal den Normalzustand "testen" und habe eine eigene neue Service-Datei erstellt:
Rich (BBCode):
# cat /var/media/ftp/freetz/lib/multid.service
;
; multid sets up home and guest networks (lan/guest bridge)
;

[Unit]
After=avmipcd.service

[Service]
ExecStart=/sbin/multid
ExecReload=/bin/msgsend -a multid reload
Type=notify
; psupport.data exports PTEST_SERVER, interpreted by libar7cfg
EnvironmentFile=/var/tmp/psupport.data

[Install]
WantedBy=network.target
Diese habe ich durch mount --bind /var/media/ftp/freetz/lib/multid.service /lib/systemd/system/multid.service in das System eingebunden.
Rich (BBCode):
# cat /lib/systemd/system/multid.service
;
; multid sets up home and guest networks (lan/guest bridge)
;

[Unit]
After=avmipcd.service

[Service]
ExecStart=/sbin/multid
ExecReload=/bin/msgsend -a multid reload
Type=notify
; psupport.data exports PTEST_SERVER, interpreted by libar7cfg
EnvironmentFile=/var/tmp/psupport.data

[Install]
WantedBy=network.target
Ich bin davon ausgegangen, dass durch ein svctl start multid der multid ohne den Freetz-NG wrapper startet und der Status des mutid wieder entsprechend bekannt gemacht wird.
Jedoch wird das wrapper-Script wieder gestartet und der Status bleibt inactive.
Rich (BBCode):
# svctl start multid
[svctl] multid.service, result: success
# ps | grep multi
23694 root     {multid} /bin/sh /usr/bin/wrapper/multid
23698 root     {rc.multid} /bin/sh /etc/init.d/rc.multid start
23699 root     {multid} /bin/sh /usr/bin/wrapper/multid
23714 root     multid
24177 root     grep multi
 # svctl status multid
[svctl] multid.service, status: inactive
Wo ist mein Denkfehler oder der Fehler in meiner Ausführung?
 
Zuletzt bearbeitet:
Rich (BBCode):
# supervisor -c /lib/systemd/system
# supervisor -p /lib/systemd/system | grep bootmanager
"bootmanager.service" -> "multi-user.target"
"network.target" -> "bootmanager.service"
"sysinit.target" -> "bootmanager.service"
# sed -e "s/network.target/undefined.target/" /lib/systemd/system/bootmanager.service > /var/bootmanager.service
# cat /var/bootmanager.service
[Service]
After=undefined.target
ExecStart=/usr/bin/bootmanager_server
ExecStop=/bin/sh -c "printf 'stop\n' >/var/run/bootmanager/input; sleep 2"
Type=notify
[Install]
WantedBy=multi-user.target
# mount -o bind /var/bootmanager.service /lib/systemd/system/bootmanager.service
# supervisor -c /lib/systemd/system
# [Supervisor] Warning: bootmanager.service: could not resolve dependency undefined.target
<hier "hängt" der Aufruf und muß mit Ctrl-c beendet werden>
# ps l | grep $(pidof supervisor)
S     0   794     1  1372   856 0:0   22:49 00:00:00 supervisor /lib/systemd/system
S     0   796   794  1300   664 0:0   22:49 00:00:00 /bin/svlogd
S     0   936   794  4192   828 0:0   22:49 00:00:00 /usr/bin/untrustedd
S     0  1022   794  2172  1548 0:0   22:49 00:00:00 /sbin/udevd
S     0  1752   794  2488  1856 0:0   22:49 00:00:00 /bin/avmipcd
S     0  1753   794  7088  4156 0:0   22:49 00:00:01 /sbin/avmcounterd
S     0  1754   794  7748  5776 0:0   22:49 00:00:01 /sbin/avmnexusd
S     0  1755   794  5612  2664 0:0   22:49 00:00:00 /usr/sbin/bb_shm_manager
S     0  1757   794 27428 19180 0:0   22:49 00:00:17 /usr/bin/ctlmgr
S     0  1758   794  1560  1184 0:0   22:49 00:00:15 {grx-ambient-lig} /bin/sh /bin/grx-ambient-light
S     0  1759   794  4024  2740 0:0   22:49 00:00:00 /sbin/l2tpv3d
S     0  1760   794 10508  5784 0:0   22:49 00:00:06 /sbin/multid
S     0  1762   794  8056  4796 0:0   22:49 00:00:00 /usr/bin/scgi_server
S     0  1763   794  9384  7352 0:0   22:49 00:00:03 /sbin/upnpd
S     0  1764   794  7612  4456 0:0   22:49 00:00:01 /bin/vpnd
S     0  1854   794  3232  2244 0:0   22:49 00:00:00 /sbin/deviceinfod
S     0  2034   794  9168  6700 0:0   22:49 00:00:00 /sbin/ddnsd
S     0  2035   794  9716  5556 0:0   22:49 00:00:01 /sbin/dsld -n
S     0  2036   794  2820  2168 0:0   22:49 00:00:00 /sbin/pcpd
S     0  2161   794  7920  4616 0:0   22:49 00:00:00 /sbin/avmntpd
S     0  2174   794 13224  6408 0:0   22:49 00:00:01 {aha_main} /usr/bin/aha
S     0  2175   794  5400  2968 0:0   22:49 00:00:01 /bin/avmspeechd
S     0  2176   794  1560  1144 0:0   22:49 00:00:00 {bootmanager_ser} /bin/sh /usr/bin/bootmanager_server
S     0  2177   794  5692  2288 0:0   22:49 00:00:00 /sbin/kpid -d
S     0  2178   794 16008 11492 0:0   22:49 00:00:04 /usr/sbin/meshd -f
S     0  2180   794  8476  4544 0:0   22:49 00:00:01 /sbin/plcd
R     0 14915  6736  1544     8 pts1  22:59 00:00:00 grep 794
# cat /proc/794/mountinfo
15 1 31:5 / / ro,relatime - squashfs /dev/root ro
16 15 0:6 / /dev rw,relatime - devtmpfs devtmpfs rw,size=192956k,nr_inodes=48239,mode=755
17 15 0:5 / /proc rw,relatime - proc proc rw
18 15 0:15 / /var rw,relatime - tmpfs tmpfs rw
19 15 0:16 / /sys rw,relatime - sysfs sysfs rw
20 16 0:17 / /dev/pts rw,relatime - devpts devpts rw,mode=600,ptmxmode=000
21 19 0:12 / /sys/kernel/security rw,relatime - securityfs securityfs rw
22 19 0:18 / /sys/fs/pstore rw,relatime - pstore pstore rw
23 19 0:7 / /sys/kernel/debug rw,relatime - debugfs none rw
24 18 0:19 / /var/media/ftp rw,relatime - ubifs /dev/ubi0_3 rw,sync
25 24 0:20 / /var/media/ftp/volatile rw,relatime - tmpfs tmpfs rw
26 24 8:2 / /var/media/ftp/YourFritz rw,relatime - ext3 /dev/sda2 rw,data=ordered
27 24 8:5 / /var/media/ftp/storage rw,relatime - ext3 /dev/sda5 rw,data=ordered
28 15 0:15 /bootmanager.service /lib/systemd/system/bootmanager.service rw,relatime - tmpfs tmpfs rw
# svctl status bootmanager
[svctl] bootmanager.service, status: active
# svctl stop bootmanager
[svctl] bootmanager.service, result: success
# svctl start bootmanager
[svctl] bootmanager.service, result: success
# svctl status bootmanager
[svctl] bootmanager.service, status: active
#
- Erzeugen einer neuen Service-Datei, die anstelle von network.target von undefined.target abhängig ist
- "Überladen" der regulären Datei durch diese geänderte
- sie wird umgehend "akzeptiert" (anders als beim systemd, wo u.U. noch ein systemctl daemon-reload erforderlich ist) und verwendet

Bei mir ist das also (auch auf einer 7590 mit 07.50) KEIN Problem.

Ich könnte mir nur vorstellen, daß nach etwas Hin und Her (und wenn die in #30 beschriebene Reihenfolge so nicht ganz stimmt) noch einmal an der neuen Datei herumeditiert wurde ... das ist - je nach Editor - sehr ungünstig, weil manche von ihnen dazu neigen, beim Speichern eines neuen Inhalts eine komplett neue Datei zu erstellen und danach nur noch die Namen zu tauschen. Da KANN es dann passieren, daß unter dem überladenen Namen weiterhin der Inhalt der Datei zu sehen ist (deren Inode-Nummer wird afaik gespeichert), der zum Zeitpunkt des Mountens vorhanden war.

Wenn man tatsächlich nur eine einzelne Datei austauscht (mount -o bind kann ja auch komplette Verzeichnisse ersetzen), sollte man deren Inhalt nicht mehr nachträglich ändern ... oder man entfernt die Überlagerung wieder (umount /lib/systemd/system/bootmanager.service), ändert die Datei und erstellt dann die Überlagerung erneut.

Wie man die Mountpoints in einem laufenden Prozess über das procfs auslesen kann, habe ich auch oben gezeigt ... das kann/sollte man dann auch noch einmal überprüfen (ob die Dateisystemstruktur tatsächlich die erwartete ist), wenn man unerwartete Resultate erhält. Überflüssig zu erwähnen, daß zu jedem mount-Aufruf auch ein korrespondierender umount-Aufruf ausgeführt werden sollte - auch wenn man da (in der Theorie) noch einigermaßen unbekümmert "schachteln" könnte, verliert man doch auch sehr schnell den Überblick, was da gerade wo gemountet wurde.
 
@FischersFreetz Danke für deinen ausführlichen Bericht zum aktuellen Stand der Umsetzung in FREETZ NG. Dann muss ich mich doch etwas vorsichtiger an das Thema "rantasten". Denn die 7590 ist bei mir momentan die einzige produktive Box im Hause, die viele Funktionen als Hauptrouter übernimmt. Und wie bereits schon erwähnt, hängt bei mir sehr viel in einem inzwischen relativ komplizierten Hausnetz derzeit von einem funktionierenden dnsmasq der Box ab. Darum muss bei mir so eine Operation "am offenen Herzen" immer gut bedacht sein.
@PeterPawn Danke für die Erklärungen zum "mount -o bind". Waren mir bis jetzt auch so nicht bewusst. Ich hatte tatsächlich früher öfter damit experimentiert, als ich noch was für FREETZ aktiv gemacht hatte. Die Möglichkeit ist in vielen Fällen sehr hilfreich, wenn man was "on-the-fly" in der Box ausprobieren will. Und ja, mit dem mehrfachen "mount" und mit dem Vergessen von "umount" dazwischen kann ich es auch bestätigen. Erlebe es derzeit öfter auf diversen anderen Linux-Systemen, wo ich momentan mehr unterwegs bin, als hier in FREETZ: Ein "umount" ist in solchen Fällen oft dann nicht ausreichend, wenn man "mount" über "mount" da gemacht hat. Man sollte es ggf. nochmals mit einer Auflistung durch "mount" ohne Parameter nach so einem "umount" checken, was denn da alles noch übrig geblieben ist. Und ja, man kann mit "-o bind" da schnell den Überblick verlieren.
Meine Laien-Frage zu euren Experimenten mit diesen systemd-Skripten: Wenn man es mit "-o bind" so umsetzt, wie von euch beschrieben, dann macht man es doch schon "zu spät", wenn die Box bereits läuft, oder sehe ich es falsch? Daraus entneme ich, dass obwohl der multid sich da in der jetzigen FREETZ NG Umsetzung etwas komisch verhält (wie oben erwähnt) kann man die Box dennoch erreichen und sie verfällt dadurch z.B. nicht in einer Dauer-Reboot-Schleife, was wir schon mal auch bei ähnlichen Fällen früher öfters hatten. Denn mit so einer Box in einer Dauer-Reboot-Schleife kann man meistens dann relativ wenig anfangen.
Mal sehen, ob ich mich auch noch die Tage zu euren Experimenten dazu geselle und auch hier ein wenig aktiv beitragen kann.
 
dann macht man es doch schon "zu spät"
Service stoppen, Konfiguration ändern, Service starten ... damit kam ich eigentlich immer gut zurecht bei Experimenten auf der Box.

Und auch den multid kann man - nach meinen Erfahrungen zumindest - sauber stoppen und neu starten. Der zieht dann ggf. ein paar andere Daemons mit hoch, aber auch nach einem weiteren Start habe ich bisher keine Nebenwirkungen bemerkt, wenn ich ihn zuvor ordentlich beendet hatte.
 
# supervisor -c /lib/systemd/system
#
supervisor -p /lib/systemd/system | grep bootmanager
usw ...

...Bei mir ist das also (auch auf einer 7590 mit 07.50) KEIN Problem....
Das zeigt mir erstmal, dass ich das Prozedere richtig verstanden habe. Ich konnte deine Ausführungen auch bei mir nachvollziehen. Jedoch kam ich bei einer Wiederholung des Vorgehens aus #30 zu dem gleichen (negativen) Ergebnis. :oops: Vielleicht kann jemand mit Freetz-NG es ausprobieren und mich meines Fehlers belehren (oder mich bestätigen, aber der Fehler wäre mir lieber).
Ich werde mir erstmal ein Image mit "sauberen" Service-Dateien bauen, denn da liegt noch Weiteres im Argen:
Rich (BBCode):
# supervisor -c /lib/systemd/system
[Supervisor] Warning: bootmanager.service: could not resolve dependency net.service
[Supervisor] Warning: voip.service: could not resolve dependency
Die Datei net.service gibt es (bei mir) gar nicht, nur net_basic.service. Und auch voip.service weicht von den Original ab. "After=kpid.service" vs. "After=kpid.service ptest_release.service". ptest_release.service existiert bei mir auch nicht. Inwiefern diese Änderungen von Bedeutung wären, kann ich nicht einschätzen. Aber solange sie fehlerhaft sind, können sie ja auch weg. Oder?
 
Zuletzt bearbeitet:
Ja, ich hatte noch vergessen, diese Änderung seitens AVM beim Boot-Manager und auch in modfs (mod_rc_tail_sh) vorzunehmen - mir war eigentlich schon wieder entfallen, daß ich diese beiden Services erst NACH dem Netzwerk starten lassen wollte und ich habe es selbst erst gestern (beim erneuten Versuch mit supervisor -p ...) gesehen und dann auch umgehend behoben: https://github.com/PeterPawn/modfs/commits/master

Beim Starten kann ich die Auswirkungen auch nicht richtig abschätzen ... aber solange der Supervisor nicht mit Option -a gestartet wird, sollten fehlende Abhängigkeiten kein "no go" darstellen. Nur weiß man (bzw. ich) halt nicht, wo im Startprozess genau AVM diese Services dann anwirft ... das hängt aber vermutlich nicht nur vom After=... ab, sondern auch vom WantedBy=...-Eintrag für den Service.


zusammengeführt:

zu dem gleichen (negativen) Ergebnis.
Vielleicht "merkt" sich der Supervisor ja doch noch einiges mehr, nachdem er die Konfiguration eingelesen hat. Das könnte u.a. auch damit zusammenhängen, daß ein Aufruf einer weiteren Instanz von supervisor dann DOCH NICHT mit dem laufenden Prozess kommuniziert (der ja als "Kind" vom init-Prozess mit der PID 1 läuft), sondern das Verzeichnis selbst aufs Neue durchsucht.

Das Kommando svctl MUSS dann ja aber wieder direkt mit dem laufenden (Supervisor-)Prozess kommunizieren - sonst könnte es ja die von ihm verwalteten Services nicht erreichen.

Ich habe einfach mal das File für den mobiled.service durch ein eigenes ersetzt:
Rich (BBCode):
# cat /lib/systemd/system/mobiled.service
[Service]
After=network.target
ExecStart=/sbin/eventadd 1 "Service started"
ExecStop=/sbin/eventadd 1 "Service stopped"
ExecReload=/sbin/eventadd 1 "Service reloaded"
Type=oneshot
[Install]
WantedBy=multi-user.target
#
und tatsächlich nimmt der Supervisor von der (nachträglichen) Änderung keine weitere Notiz - es wird weiterhin versucht, den mobiled zu starten. Ja, noch nicht einmal das Abbrechen des Supervisor-Prozesses und dessen Neustart (im Vordergrund) löschen den vorherigen Status des mobiled.service aus dem "Gedächtnis" des Systems - der (erneute) Start wird (obwohl das Binary natürlich auch NICHT mehr läuft) mit dem Hinweis auf den bereits laufenden Service abgelehnt. EDIT: Nein, das ist doch eher ein "Beobachtungsfehler" ... der Supervisor versucht nur bei seinem erneuten Start, den Service ebenfalls zu starten und DAHER läuft der dann nach seiner Ansicht noch bzw. wieder.

Erst nachdem der Service dann explizit gestoppt wurde, wurde DABEI auch das eventadd-Kommando aus der ExecStop-Zeile ausgeführt. Aber auch ein neuer Startversuch für den o.g. Service hing danach wieder ... es hat sich wohl doch etwas im Supervisor-Code geändert und die von mir beschriebene Vorgehensweise (nachträgliches Ersetzen der Service-Datei durch bind-Mount) funktioniert nicht (mehr -> ich könnte schwören, daß es früher mal so war, als ich diese ganze Geschichte mit dem supervisor "grundgetestet" hatte).

Bleibt einem dennoch die Option, das eigene Service-File auf korrekte Syntax prüfen zu lassen (dazu muß es auch erst mal in ein gemeinsames Verzeichnis mit den anderen Dateien und /lib/systemd/system ist i.d.R. read-only - dafür braucht man das Mounten dann doch wieder) und erst DANN ein neues Image mit einer geänderten Service-Datei zu bauen.
 
Ja, ich hatte noch vergessen, diese Änderung seitens AVM beim Boot-Manager und auch in modfs...
Erklärt das auch, dass es mir nicht möglich ist, im AVM-GUI unter System>Sicherung das Register "Neustart" zu öffnen?
Weißt Du, welches bei Freetz-NG die bessere Wahl ist, latest oder tested?
...beschriebene Vorgehensweise (nachträgliches Ersetzen der Service-Datei durch bind-Mount) funktioniert nicht (mehr...
Na, dann ist ja mein Scheitern (#30) auch geklärt.
...Bleibt einem dennoch die Option, das eigene Service-File auf korrekte Syntax prüfen zu lassen (dazu muß es auch erst mal in ein gemeinsames Verzeichnis mit den anderen Dateien und /lib/systemd/system ist i.d.R. read-only - dafür braucht man das Mounten dann doch wieder
Wie binde ich denn dazu ein neues, eigene Service-File in den Ordner ein (ohne dass ich eine bereits bekannte Datei ersetze)? (Müsste ich eine Kopie des ganzen Ordner mit zusätzlichem Service-File mounten?)
 
im AVM-GUI unter System>Sicherung das Register "Neustart" zu öffnen?
Nein, eher nicht. Wobei das auch darauf ankommt, wie Du den Boot-Manager installiert hast. Sollte das eine Installation im Rahmen eines Freetz-NG-Builds sein, so habe ich meinerseits den Überblick verloren (bzw. ich will ihn nach entsprechenden Streitereien gar nicht mehr gewinnen), was da aktuell möglich ist bzw. genutzt wird.

Sollte das weiterhin irgendein alter Stand sein , sind da naturgemäß Fehlfunktionen möglich bzw. sogar wahrscheinlich - halt in Abhängigkeit von den Differenzen zwischen meiner aktuellen Version und der in Freetz-NG beim Build einbezogenen. Solange ich keine Bestätigung habe, daß meine Tags im YourFritz-Repo auch genutzt werden bei Freetz-NG (das wurde mal ein- und dann wieder ausgebaut und immer wieder geändert), aktualisiere ich diese auch nicht - aber ich habe das jetzt einmal manuell für das Tag freetz-ng-version angestoßen: https://github.com/PeterPawn/YourFritz/commits/freetz-ng-version

Wenn dieses Tag also bei irgendeiner Variante innerhalb von Freetz-NG ausgecheckt werden sollte, dann wäre DIESE die jetzt zu bevorzugende (wenn die Dateien aus diesem Checkout dann auch noch für das Installieren der Änderungen an der AVM-Firmware, die für den Boot-Manager erforderlich sind, genutzt werden).
 
Es ist egal, ob du latest oder tested benutzt. Denn wird in beiden fall immer eine alte Version genutzt
tested ist vom Apr 22, 2022
lasted ist vom Mar 20, 2022
labor ist vom Apr 16, 2022

Mit den patch hättest du unter tested die Version
Code:
--- make/host-tools/yf-bootmanager-host/yf-bootmanager-host.mk    2022-11-24 20:17:20.133249000 +0100
+++ make/host-tools/yf-bootmanager-host/yf-bootmanager-host.mk    2023-01-02 15:30:30.573064552 +0100
@@ -1,5 +1,5 @@
 YF_BOOTMANAGER_HOST_REPOSITORY:=https://github.com/PeterPawn/YourFritz.git
-$(call TOOLS_INIT, $(if $(FREETZ_PATCH_MODFS_BOOT_MANAGER_labor),$(call git-get-tag-revision,$(YF_BOOTMANAGER_HOST_REPOSITORY),freetz-ng-test),$(if $(FREETZ_PATCH_MODFS_BOOT_MANAGER_latest),$(call git-get-tag-revision,$(YF_BOOTMANAGER_HOST_REPOSITORY),freetz-ng-version),87ee8c3b73edf4ba70025a017aa1d49cd2c66036)))
+$(call TOOLS_INIT, $(if $(FREETZ_PATCH_MODFS_BOOT_MANAGER_labor),$(call git-get-tag-revision,$(YF_BOOTMANAGER_HOST_REPOSITORY),freetz-ng-test),$(if $(FREETZ_PATCH_MODFS_BOOT_MANAGER_latest),$(call git-get-tag-revision,$(YF_BOOTMANAGER_HOST_REPOSITORY),freetz-ng-version),eabddbaf819ea54d9d6a3fce288ca28d119adf97)))
 # Versions after this commit have no vanilla GPL3 - but it's not a problem to use the unchanged(!) version in an own image.
 $(PKG)_SOURCE:=yf-bootmanager-$($(PKG)_VERSION).tar.xz
 $(PKG)_HASH:=f47e9395048d2d095f8d6a5286941adf9da837bb303b2366466365b2f984c1bb

Da fda ihn ja nicht haben will oder brauch
 
Witzig ... diesen "poll" kannte ich noch gar nicht, da ich nach den Querelen eben aufgehört habe, dort irgendetwas AKTIV zu verfolgen, solange man mich nicht direkt "anspricht". Und wie phantasievoll die Benennung der drei möglichen Auswahlpunkte erfolgt ist ... Chapeau!

Genauso witzig ist das:
- der "Inhalt" dieses Pull-Requests ist - so gänzlich ohne weiteren Kommentar, wozu das gut sein soll und wer das warum benötigen würde - schon für sich genommen eine Frechheit und kam dann natürlich auch noch prompt drei Tage, nachdem ich meinerseits verkündet hatte, daß mich Freetz-NG nicht länger tangiert: https://github.com/PeterPawn/YourFritz/issues/45#issuecomment-1166339803

Dann obendrein noch einen PR gegen die aktuelle Version (in meinem Repo), obwohl er doch in Freetz-NG die Benutzer nur noch eine ältere Version verwenden ließ - nämlich die letzte, bevor ich die Lizenzierung auf GPL mit Zusätzen umgestellt habe, die sicherstellen sollen, daß IMMER die Dateien eines anderen Projekts von der aktuellen Quelle geladen werden: https://github.com/PeterPawn/YourFr...ce288ca28d119adf97/bootmanager/bootmanager#L3 und das bezieht sich im Boot-Manager dann auch nur für ein paar (kopierte, denn ICH als Autor darf das machen) Funktionen aus einem vollkommen anderen (Unter-)Projekt und nur diese stehen in einem gesondert markierten Abschnitt der Datei, wobei die Funktionsnamen auch noch überwiegend mit __yf_... beginnen, damit ich nicht jedesmal wieder alles von vorne implementieren muß, was ich an anderer Stelle (und unter anderer Lizenz) schon einmal geschrieben hatte.

Oder damit sich nicht am Ende DOCH WIEDER nur jemand hinstellt und Code kopiert, an dem ich (mit Unterstützung von Besitzern entsprechender FRITZ!Box-Modelle) längere Zeit gewirkt habe - angefangen beim Zerlegen von FIT-Images (für das Ermitteln der Daten für den inaktiven Slot) bis zum Zerlegen der "Stammdaten" einer FRITZ!Box aus dem Konfigurationsbereich von EVA - wobei die Nachnutzung dieses Teils nicht mal durch die Lizenz ausgeschlossen wird (solange die Quelle sauber benannt wird), sondern nur durch die "guten Sitten" bereits wegfallen sollte.

Nachlesen kann man solche Handlungen u.a. wunderbar an dem Nachbau der JUIS-Abfragen in Freetz-NG - und juis_check steht noch nicht mal unter irgendwelchen zusätzlichen Lizenzbedingungen: https://github.com/PeterPawn/YourFr...4d9d6a3fce288ca28d119adf97/juis/juis_check#L3 ... dennoch entstand (und zwar schon deutlich BEVOR ich dann die Nase voll hatte Ende Juni 2022) im Freetz-NG dann wieder eine "eigene" Version des Skripts (auch wenn die danach noch etwas erweitert wurde), deren Ähnlichkeit (zumindest im "Ausgangszustand": https://github.com/Freetz-NG/freetz-ng/commit/7b0946a5e7a2d190737482b7bfac81b4adffaa26) mit meinem Skript nur schwer zu leugnen ist, auch wenn vieles von dem, womit ich das an unterschiedliche Einsatzzwecke anpassbar gestaltet hatte, einfach nur weggelassen wurde.

Was sich da inzwischen wieder wie geändert hat mit den Tags und deren Benutzung, habe ich schon länger nicht mehr verfolgt ... aber in dieser Datei: https://github.com/Freetz-NG/freetz...yf-bootmanager-host/yf-bootmanager-host.mk#L2 (die ich auch erst mal eine Weile suchen mußte nach den ganzen "Umorganisationen" in der Dateisystemstruktur) wurden dann mit diesem Commit: https://github.com/Freetz-NG/freetz-ng/commit/af692a5ea31d840a98c249c944ee584467f8d714 (aber wieder zwei Tage, NACHDEM ich für mich die Entscheidung getroffen hatte, künftig Freetz-NG (bzw. dessen Maintainer) zu ignorieren) dann doch noch irgendwelche Änderungen vorgenommen, die dann die von mir vorgeschlagenen Tags (irgendwie) verwenden.

Das war mir so nicht bewußt ... aber wenn ich das jetzt weiß, werde ich mich bemühen, die Tags in meinem Repo jeweils passend zu setzen, sofern ich dort Änderungen vorgenommen habe.
 
  • Like
Reaktionen: Master SaMMy
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

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.