Es gibt jetzt eine neue Version des Boot-Managers (die auch in "modfs" enthalten ist), bei der umfangreichere Änderungen vorgenommen wurden.
Die Textschnipsel, aus denen die Ausgaben im GUI zusammengesetzt werden, sind jetzt in einer gesonderten Datei enthalten:
https://github.com/PeterPawn/YourFritz/blob/main/bootmanager/bootmanager.msg, wobei anhand der
Language-Variablen in der AVM-Firmware die passende Sprache ausgewählt und nur diese Texte zum Browser übertragen werden (die Sprachauswahl erfolgt also auf der Box und anhand von FRITZ!OS-Einstellungen und nicht anhand der im Browser eingestellten Sprache(n)).
Durch diese Trennung sollte es einfacher sein, weitere Sprachen bereitzustellen - immerhin hat auch AVM jetzt alle unterstützten Sprachen in einem einzigen Image für eine Version. Wenn sich jemand an weitere Sprachen machen wollte ... der Aufbau der Zeilen dürfte selbsterklärend sein (
Sprachkürzel:ID_des_Textes=Inhalt_des_Textes,die Zeilen mit
any als Sprache werden immer verwendet und die Zeile
Languages muß die unterstützten Sprachen aufzählen, wobei die erste Sprache in der Liste gleichzeitig der Standard ist, wenn keine oder eine nicht unterstützte Sprache im FRITZ!OS ausgewählt wurde.
Um das Skript etwas zu verkleinern und auch um es besser wartbar zu machen durch das Zerlegen in funktionale Komponenten, wurde auch das Erzeugen des HTML- und JS-Codes für das GUI (bisher als
html_display-Operation integriert) ausgelagert in eine gesonderte Datei (
https://github.com/PeterPawn/YourFritz/blob/main/bootmanager/bootmanager_html) - dieser Teil ist ohnehin nur für FRITZ!OS-Versionen vor der 07.08-Laborreihe relevant und wird daher bei späteren FRITZ!OS-Versionen auch gar nicht erst installiert.
Auch das Skript zur Integration der Aufrufe in das AVM-GUI (
https://github.com/PeterPawn/YourFritz/blob/main/bootmanager/add_to_system_reboot.sh) wurde grundlegend überarbeitet, wobei auch die Patches für die verschiedenen FRITZ!OS-Versionen aus dem Skript herausgelöst und in separaten Dateien gespeichert wurden. Das heißt auch, daß man ein paar mehr Dateien kopieren muß, wenn man die Ausgangsdateien irgendwohin verschieben/kopieren will - um die Integration der richtigen Dateien für die vorliegende FRITZ!OS-Version kümmert sich dann das Skript
add_to_system_reboot.sh (was man explizit mittels
sh <filename> aufrufen muß, weil es
/bin/false als SheBang verwendet, damit man es nicht versehentlich aufrufen kann). Wer die Dateien nach dem Klonen des Repositorys an eine andere Stelle kopieren will, muß für die Verwendung von
add_to_system_version.sh mit Angabe von
TARGET_VERSION=autodetect auch das Skript
extract_version_values einschließen, welches nur über einen Symlink im
bootmanager-Verzeichnis hinterlegt ist.
Da AVM offenbar das "Branding" der ausgelieferten Geräte mittlerweile nur noch in einer Form ausführt, bei der beim Systemstart dieser Wert (
firmware_version) wieder aus den Daten im Konfigurationsbereich des Bootloaders restauriert wird (diese Daten werden im Rahmen der Finalisierung bei der Produktion/dem Test der Geräte geschrieben), stellt sich praktisch bei allen neueren Modellen auch die Frage, wie man diese Einstellung dennoch so ändern kann, daß man ggf. in den Genuß von Features gelangt, die nur bei einem bestimmten Branding aktiviert werden.
Bei den Geräten, wo diese Einstellung nur der Standardwert ist, solange kein anderer Wert gesetzt wurde (durch das Schreiben in das Urlader-Environment, z.B. über den FTP-Server in EVA), kann man diese Einstellung auch weiterhin ändern ... eine Entscheidung, ob dieser Weg genutzt werden kann oder nicht, ist aber nicht sicher anhand einer bestimmten Version des Bootloaders von AVM (
EVA oder auch
urlader) möglich. Daher wird jetzt versucht, beim ersten Start der Skript-Datei für den Boot-Manager den Urlader in der Box zu lokalisieren und den darin enthaltenen Konfigurationsbereich (zumindest dessen erste 1024 Byte) zu isolieren. Wird er gefunden und kann er erfolgreich zerlegt werden, kann man sicher entscheiden, ob das vorliegende Gerät eine einfache und dennoch permanente Änderung des Brandings durch einen Schreibvorgang ins Urlader-Environment unterstützt. In diesem Falle wird auch im GUI die Option zum Wechsel des Brandings angeboten, wenn das zu aktivierende System mehr als eines davon unterstützt.
Bei den Geräten, wo das so nicht funktioniert, hat sich ja das Ändern der Anweisung
export OEM in
export OEM=<value> in der Datei
/etc/init.d/rc.conf eingebürgert (nur Freetz ging/geht da einen Sonderweg, ob das bei Freetz-NG auch noch so ist, weiß ich gar nicht genau), was über Umwege dann auch den Weg nach
hier gefunden hat, nachdem es
hier anhand eines Beispiels erklärt und
hier in den Kontext des gesamten Vorgangs (Entpacken, Ändern, Einpacken, Flashen) eingebettet wurde.
Der Boot-Manager erkennt diese Art der Modifikation, die in ein "festes" Branding mündet, auch und bietet - so sie vorhanden ist - KEINEN Wechsel des Brandings an, zeigt aber im GUI diese Information auch an. Allerdings hat diese Art der Modifikation eben auch ihren Pferdefuß (auch wenn's wohl ursprünglich mal ein Ziegenhuf war) ... während AVM mittlerweile die bekannten Brandings alle in ein Image packt und es somit nicht länger erforderlich ist, parallel zur Änderung des Brandings auch gleich noch eine passende Firmware zu installieren, legt man sich mit dieser Modifikation auf ein einzelnes Branding fest und nimmt sich damit die Option, diese Einstellung zu wechseln.
Außerdem greift diese Änderung erst relativ spät (im Vergleich zu dem, was möglich wäre) im Boot-Vorgang und ist natürlich auch nicht so tiefgreifend, als wenn das bereits im Urlader eingestellt werden kann - nur dort vorgenommene Einstellungen gelten auch schon beim Start des Kernels. Aber der Kernel verwendet diese Information tatsächlich selbst nur selten (einfach mal ein
grep firmware_version über die Quellen laufen lassen und die für die AVM-Firmware relevanten Stellen ansehen - nicht jede Fundstelle wird bei AVM auch genutzt), selbst wenn sie sogar in einem gesonderten Pseudo-File im
procfs bereitgestellt wird, nämlich in
/proc/sys/urlader/firmware_version - das ist aber auch nur ein anderer Zugriffpfad auf denselben Wert im Urlader-Environment, denn eine Änderung dort führt auch zu einem geänderten Wert in diesem speziellen Pseudo-File.
Nur schafft man eine Änderung schon für den Kernel dann eben (ohne den Konfigurationsbereich im Bootloader zu patchen, wovon ich in den allermeisten Fällen abraten würde, solange man sein Ziel auch anders erreichen kann) nicht mehr ... aber es gibt auch noch Optionen, diesen Wert schon deutlich früher zu setzen und vor allem, ihn dabei auch noch variabel zu gestalten.
Eine dieser Optionen (wo die Änderung nicht früher zum Zuge kommt, aber variable Einstellungen erlaubt) ist eine abgewandelte Form des "festen" Brandings. Dabei wird in der AVM-Datei
/etc/init.d/rc.conf unmittelbar vor der Zeile mit dem
export OEM ein Skript-Aufruf eingefügt, wobei dieses Skript dann die Kernel-Parameter nach einem Eintrag
oem=<value> durchsucht und einen dort gefundenen Wert für die (Shell-Environment-)Variable
OEM setzt, bevor diese danach dann exportiert wird.
Das Setzen dieses Wertes kann über die Urlader-Einstellung
kernel_args oder
kernel_args1 erfolgen, diese sind bisher m.W. auch nicht als Bestandteil der "festen Einstellungen" in der EVA-Konfiguration gesichtet worden. Manuell geht das wieder über entsprechende
SETENV-Kommandos per EVA-FTP und wenn dieses Feature in der Firmware des zu aktivierenden Systems verankert ist, setzt der Boot-Manager diesen Wert auch automatisch anhand dessen, was im GUI ausgewählt wurde. Neben dem Aufruf der Skript-Datei in der
/etc/init.d/rc.conf, wird noch die Existenz eines Markers (eine Zeile, die mit
# YF_CHANGE_OEM beginnt) geprüft, bevor dieses Feature als verwendbar angesehen wird und eine Änderung des Brandings auf diesem Weg auch im GUI angeboten wird (
https://github.com/PeterPawn/YourFr...2f249c6772f7f5d5/bootmanager/bootmanager#L578). Allerdings funktioniert es bei einigen Modellen (ich kenne da speziell die Puma6-Modelle) nicht, denn dort filtert der Bootloader die erlaubten Parameter auf der Kommandozeile und läßt nur bestimmte Werte zu (und fügt seinerseits auch weitere Werte ein).
Um diesen Ansatz in eine Firmware-Struktur zu integrieren, gibt es das Shell-Skript
yf_change_oem.sh (
https://github.com/PeterPawn/YourFritz/blob/main/bootmanager/add_change_oem.sh), das einfach mit der Angabe
TARGET_DIR=<basedir> im Shell-Environment aufgerufen werden kann, wobei
<basedir> das Wurzelverzeichnis der FRITZ!OS-Dateisystemstruktur ist, in der die Änderungen vorgenommen werden sollen (also
TARGET_DIR=<basedir> sh ./add_change_oem.sh als kompletter Aufruf). Weitere Dateien werden nicht benötigt, ein passendes Skript für "modfs" gibt es derzeit noch nicht.
Einen weiteren Weg hatte ich schon vor langer Zeit in diesem Thread weiter vorne beschrieben:
https://www.ip-phone-forum.de/threa...einer-passenden-fritz-box.307098/post-2378212. Damit ist dann nicht nur der Wert für das Branding zu ändern, sondern es läßt sich (für die Zeit bis zum nächsten Systemstart) auch jeder andere Wert dort überschreiben (die einzige Voraussetzung ist, daß der Variablenname für das TFFS in der Tabelle im Quelltext des TFFS-Treibers hinterlegt ist - es funktionieren also keine "völlig beliebigen" Namen).
Die neue Version des Boot-Managers sucht nach Aufrufen dieses Skripts (mit dem Namen
yf_custom_environment.sh) in den folgenden Verzeichnissen bzw. Dateien (
https://github.com/PeterPawn/YourFr...2f249c6772f7f5d5/bootmanager/bootmanager#L124):
/etc/init.d
/etc/boot.d
/etc/inittab
/wrapper/etc/inittab (bei Modellen mit VR9-Chipset)
Wird ein solcher Aufruf gefunden (ohne Prüfungen, ob der auch tatsächlich erfolgt), wird ebenfalls das Ändern des Brandings im GUI aktiviert und beim Neustart der ausgewählte Wert (so er sich vom bereits gespeicherten unterscheidet) in den TFFS-Node geschrieben, der für das alternative Environment verwendet wird. Dabei wird dann davon ausgegangen, daß beim nächsten Systemstart das Skript von irgendwoher auch aufgerufen wird und die Werte, die sich aktuell im Urlader-Environment von den gewünschten unterscheiden, überschrieben werden. Damit kann man dann im Extremfall sogar
HWRevision überschreiben,wobei dieser Wert im Kernel bei der Initialisierung tatsächlich mehrfach verwendet wird, um irgendwelche Entscheidungen zu treffen und ein Überschreiben sich erst ab dem Zeitpunkt der Änderung auch auswirkt.
Auch für die Integration von yf_custom_environment.sh gibt es im Moment noch kein Skript für "modfs" - es gibt einfach zu viele Möglichkeiten, wo und wie man dessen Aufruf in die AVM-Firmware integrieren könnte. Wobei die /etc/inittab sicherlich immer noch der einfachste und auch der effektivste (weil am frühesten wirksame) Weg wäre - wenn ich ein "modscript" dafür bereitstellen sollte, dann wird das jedenfalls diesen Weg implementieren. Ansonsten muß man eigentlich nur irgendwo in der Firmware den Aufruf einbauen (und natürlich den TFFS-Node mit den zu ersetzenden Werten bestücken - siehe oben bei der "Vorstellung" des Skripts) - das muß nicht zwingend ein expliziter Aufruf sein, das Skript läßt sich auch "sourcen" (also mittels
dot-Kommando in ein anderes einschließen).
Für manuelle Änderungen an der Datei, welche die alternativen Werte für das Environment enthält, empfehle ich die Verwendung dieser Skript-Datei:
https://github.com/PeterPawn/YourFritz/blob/main/tffs/fritzos_scripts/tvi - beim Aufruf mit
tvi 80 werden alle notwendigen Schritte zum Editieren des TFFS-Nodes vom Skript ausgeführt und der
vi aufgerufen. Beim Verlassen des Editors werden dann event. ausgeführte Änderungen (aber erst nach einer Nachfrage) ins TFFS zurück geschrieben. Dieses Skript muß man dann auch noch in die eigene Firmware-Struktur kopieren, wenn man sie dort irgendwann verwenden will (es gibt aber andere Optionen - diese Datei ist nur der am einfachsten zu benutzende Weg).
Zusammenfassen kann man diese Optionen beim Branding also wie folgt:
| Option | Pro | Contra |
|---|
| änderbar über EVA-Einstellungen | - "ab Werk" verfügbar, wenn die EVA-Version paßt | - nur in älteren Modellen mit älteren Bootloader-Versionen verfügbar |
| nicht änderbar | | - keine Features von anderen Brandings zum Austesten |
festes Branding in rc.conf | - ermöglicht die Benutzung anderer Features | - nur ein einzelnes Branding nutzbar, keine Möglichkeit der Umschaltung im GUI |
| variables Branding über Kernel-Parameter | - ermöglicht die Benutzung anderer Features
- Umschaltung per GUI | - nur die Änderung des Brandings ist verfügbar, andere EVA-Einstellungen können nicht geändert werden
- funktioniert nicht bei allen Modellen |
variables Environment über yf_custom_environment | - praktisch jeder Wert im Urlader-Environment kann an die eigenen Wünsche angepaßt werden | - die Änderungen greifen erst, nachdem der Kernel schon initialisiert wurde (das gilt für die anderen Optionen aber auch) und einige der im Environment hinterlegten Werte (bis hin zur maca bei einigen Modellen), können nicht mehr WIRKSAM geändert werden |
Ich persönlich würde mich daher immer für
yf_custom_environment entscheiden, wenn ich die Wahl hätte - damit hat man die Flexibilität UND die Möglichkeit von Änderungen und darüber hinaus macht diese Lösung auch noch dann Sinn, wenn es bei den Änderungen nicht um das Branding geht.