PeterPawn / YourFritz

dynamic package management for AVM routers
GNU General Public License v2.0
219 stars 63 forks source link

bootmanager: put sed in variable #31

Closed fda77 closed 4 years ago

fda77 commented 4 years ago

refs https://github.com/PeterPawn/YourFritz/issues/30

PeterPawn commented 4 years ago

Machbar ist das sicherlich ... nur ist es auch sinnvoll?

Kennst Du das Kommando hash?

pi@pi4:/tmp $ hash --help
hash: hash [-lr] [-p pathname] [-dt] [name ...]
    Remember or display program locations.

    Determine and remember the full pathname of each command NAME.  If
    no arguments are given, information about remembered commands is displayed.

    Options:
      -d        forget the remembered location of each NAME
      -l        display in a format that may be reused as input
      -p pathname       use PATHNAME as the full pathname of NAME
      -r        forget all remembered locations
      -t        print the remembered location of each NAME, preceding
                each location with the corresponding NAME if multiple
                NAMEs are given
    Arguments:
      NAME      Each NAME is searched for in $PATH and added to the list
                of remembered commands.

    Exit Status:
    Returns success unless NAME is not found or an invalid option is given.
pi@pi4:/tmp $

Wendet man das richtig an, kannst Du Dir alle weiteren Änderungen dieser Art einfach sparen - und das sollte dann ja vermutlich noch viele andere Stellen betreffen (ich verfolge die Commits in Freetz-NG ja nicht).

pi@pi4:~ $ cd /tmp
pi@pi4:/tmp $ command -v sed
/bin/sed
pi@pi4:/tmp $ mkdir tools
pi@pi4:/tmp $ printf '#!/bin/sh\nprintf "%%s\\n" "$*"\n/bin/sed $*\n' >tools/own_sed
pi@pi4:/tmp $ cat tools/own_sed
#!/bin/sh
printf "%s\n" "$*"
/bin/sed $*
pi@pi4:/tmp $ chmod u+x tools/own_sed
pi@pi4:/tmp $ hash -p /tmp/tools/own_sed sed
pi@pi4:/tmp $ sed -n -e p tools/own_sed
-n -e p tools/own_sed
#!/bin/sh
printf "%s\n" "$*"
/bin/sed $*
pi@pi4:/tmp $ command -v sed
/tmp/tools/own_sed
pi@pi4:/tmp $

Hier wurde das normale sed-Kommando, das ansonsten über PATH gefunden würde, durch ein Shell-Skript ersetzt, das erst noch die Parameter des Aufrufs auf STDOUT ausgibt, bevor es das ursprüngliche /bin/sed mit ebendiesen Parametern aufruft (der Aufruf zeigt das gesamte Skript einfach noch einmal an).

Das /tmp/tools/own_sed könnte hier natürlich auch Dein Ersatz für sed sein.

Wenn sich Dein gesamtes Problem auch auf diesem Weg lösen ließe, braucht es den Patch hier auch nicht. Nur mal so als Tipp ... das kann sehr viel Arbeit sparen.

PS: ... und es ist auch ein Grund dafür, warum man bei sicherheitskritischen Skripten (bzw. bei einer Aufrufumgebung, die man nicht vollkommen unter Kontrolle hat und wo man mit Angriffen rechnen muß) am besten mit absoluten Pfaden beim Aufruf von Kommandos arbeiten sollte, wenn man ganz sicher sein will, daß man auch das richtige Kommando aufruft.

EDIT: Ich habe das Beispiel mal durch die Verwendung eines anderen Namens für das eigene Skript noch etwas anschaulicher bzw. übersichtlicher gemacht.

fda77 commented 4 years ago

Interessant, hash kannte ich nicht. Schade dass es dafür kein Busybox Applet gibt, wäre bestimmt auf der Fritzbox manchmal hilfreich. Bin nicht sicher welche ungeahnten Auswirkungen hash das auf das gesammte make haben könnte. Kannst du das nicht so (ähnlich) übernehmen?

Gestern hatte ich noch das sed für die Makefiles ersetzt https://github.com/Freetz-NG/freetz-ng/commit/ff5faa5b2a8d1a2445112534bbd906678eb43c84, aber später wieder rückgängig gemacht, da die host-tools mit denen das sed gebaut wird ein sed benötigen... In freetz-ng sind alle sed-Aufrufe in fwmod und den Patches über die Variable, nur bootmanager noch nicht.

Das Problem wurde zum 1. mal vor 6 Jahren hier beschrieben: https://trac.boxmatrix.info/freetz-ng/ticket/2072#comment:92. In Freetz war dann nochmal ne Meldung und ein versuchter eigenwilliger Fix vor 1 Jahr hier: https://github.com/Freetz/freetz/pull/189 Der Königsweg das ganze Problem zu beheben wäre, fakeroot durch pseudo zu ersetze, was schon einige andere Projekte gemacht haben. Aber AVM braucht noch keine selinux.

PeterPawn commented 4 years ago

Bin nicht sicher welche ungeahnten Auswirkungen hash das auf das gesammte make haben könnte.

Das läßt sich ja auch wieder rückgängig machen bzw. ist automatisch erledigt, wenn der Prozess endet. Es würde also schon reichen, das nur innerhalb von "fwmod" zu setzen ... damit wird der restliche Build-Prozess davon gar nicht beeinflußt. Die anderen Utilities, die da in fwmod definiert sind, unterscheiden sich ja vom Funktionsumfang her von denen, die i.d.R. im Suchpfad des Build-Hosts gefunden würden (z.B. beim tar).

Ansonsten ist hash ein Shell-Builtin - und das existiert tatsächlich auch bei der BusyBox, allerdings nur in der POSIX-kompatiblen Version, wo man nur "hashen" kann und damit sicher geht, daß nachträgliche Änderungen an PATH oder neue Dateien in einem Verzeichnis, was in PATH weiter vorne steht, die Kommandos mit impliziter Suche nicht überschreiben können. Denn das gilt alles nur, solange der Name des Kommandos keine Pfadangabe (absolut oder relativ) enthält.

Aber als Builtin ist es natürlich auch in der bash enthalten, wenn man die auf der Box verwendet.

Jedoch habe ich auch keine Schmerzen damit, den sed-Aufruf über Variablen zu machen - nur hasse ich (wenn's nicht absichtlich ist) nichtssagende Variablennamen und in diese Kategorie gehört SED für mich auch. Daher habe ich es etwas anders umgesetzt, aber als "letzte Instanz" (vor dem bisher verwendeten sed) wird jetzt auch die Variable SED berücksichtigt. Bevorzugt wird aber die weiter verbreitete Version EDITOR - auch wenn die i.d.R. eher für einen zeilenorientierten Editor verwendet wird, ist auch deren Name eindeutig.

Dein Problem sollte jedenfalls auch damit gelöst sein - nur landet man dann irgendwann noch bei Variablennamen für alle Kommandos, wenn man das immer so fortsetzt.

Wenn ich das richtig sehe, müßtest Du ja irgendwo dann auch in allen Skript-Dateien, die sonst noch im fakeroot-Kontext aufgerufen werden könnten, diese Ersetzung von "sed" durch "$SED" vornehmen und dabei auch immer noch absichern, daß die so geänderten Dateien, wenn sie dann mal nicht über fwmod gestartet werden, wo dieses SED als Environment-Variable gesetzt ist, trotzdem weiterhin arbeitsfähig sind. fwmod_custom darf man auch nicht vollkommen vergessen - wer da sed einsetzt anstelle von modsed (was Du schon geändert hast, das waren zwei weitere Stellen, die anzupassen waren), müßte das bei Deinem Vorgehen ebenfalls ändern.

Das wäre mir alles für diesen simplen Fall deutlich zuviel Aufwand - das erschlägt man alles mit einer einzigen passenden Zeile unmittelbar nach der Feststellung, ob man sich schon im fakeroot-Kontext befindet oder nicht. Zumal es Dir ja auch passieren kann, daß weitere Kommandos "ersetzt" werden müssen - wenn Du das jedesmal durch neue Variablen lösen willst, hast Du (a) viel Arbeit und (b) werden die Unterschiede immer größer zwischen den Forks und selbst zu Deinem vorhergehenden Stand.

Aber wie auch immer - das Problem sollte gelöst sein und damit mache ich hier zu.

fda77 commented 4 years ago

Wie die Variable in deinem Script genannt wird ist egal, da sie beim Aufruf mitgegeben wird: https://github.com/Freetz-NG/freetz-ng/blob/master/patches/scripts/800-modfs_boot_manager.sh#L18 In meinem System enthält EDITOR den Wert "vi" (wegen SVN: http://svnbook.red-bean.com/de/1.8/svn.advanced.externaleditors.html), dh add_to_system_reboot.sh läuft nicht mehr "alleine" ohne setzen der Variable vorab.

Das sed unterscheidet sich auch vom System-sed, es ist nämlich auf jeden Fall ohne selinux support gebaut.

Stimmt, die Fritzbox kennt doch ein hash. Allerdings beschnitten, zumindest ohne "--help". An hash ist blöd dass man einen Wert überschreibt, man müsste also ne Liste sichern mit den Benutzer-Einstellungen und am Ende alles komplett löschen und neu setzen. Aber solang es nur diese 1 Befehl ist, ist das der einfachste Weg. Was kommt wird sich zeigen. Sed wird in den meisten Patches "oft" eh durch modsed aufgerufen

Branding-Verzeichnisse: Du meintest vor kurzem dass es dumm von Freetz wäre, alle Verzeichnisse zu löschen und durch einen Link auf "all" zu ersetzen - da diese ja unterschiedlich sein "müssen". Ich behaupte das Gegenteil am Beispiel einer aktuellen 7530 labor:

diff -Naur build/original/filesystem/usr/www/avm{,e} 2>/dev/null | wc -l
0
PeterPawn commented 4 years ago

Da hat zwar jemand doch im IPPF gelesen (und zwar im "modfs"-Thread, wenn ich mich recht erinnere), aber ich stehe weiterhin zu meiner Ansicht, daß das ein vollkommen unnötiges Risiko ist und am Ende sogar andere Projekte (und/oder Skript-Dateien) "verwirrt", wenn sie auf ein Freetz-Image losgelassen werden.

da diese ja unterschiedlich sein "müssen".

Das müssen sie auch, wenn AVM weiterhin den Funktionsumfang der Firmware vom Branding abhängig machen kann/will - das bisher die deutschen und die internationalen Versionen durchaus unterschiedliche Inhalte hatten (und wenn's am Ende nur noch die timezone.lua war), ist ja auch nicht zu bestreiten.

Mittlerweile werden zwar viele Feature auch "nur" noch in Lua geblockt bzw. "freigeschaltet":

 41 if config.oem == "avme" then
 42 flags.no_number_area = true
 43 flags.no_ir_pc_rss_samples = true
 44 flags.sip_provider_international = true
 45 flags.isp_mac_needed = true
 46 flags.use_nat = true
 47 flags.timezone = true
 48 flags.sip_packetsize = true
 49 flags.static_net = true
 50 end

(aus guiflags.lua), aber AVM hält sich die Option unterschiedlicher Verzeichnisinhalte pro Branding ja weiterhin offen und legt das nicht alles "zusammen".

Die Technik, die Freetz da nutzt, ist ja nun nicht sooo ungewöhnlich, daß man das nicht auch bei AVM so handhaben könnte (unter Beibehaltung des "Branding"-Anteils im Pfadnamen) - also darf man davon ausgehen, daß es vielleicht sogar in Erwägung gezogen, aber letztlich (zumindest bisher) verworfen wurde.

Abgesehen davon ist der Gewinn, der sich aus diesem Vorgehen ergibt, so marginal, daß es - in meinen Augen zumindest - das Risiko (s.o.) eben nicht lohnt.

Bei einer aktuellen 7590-Firmware (07.12) liegt der Unterschied zwischen einer (neu) gepackten Original-Version (irgendwie packt AVM etwas ineffizienter oder füllt anders auf, daher das erneute Packen, was schon 8200 Byte weniger braucht) und einer, wo nur die 1und1-Verzeichnisse unterhalb der drei www-Verzeichnisse als Symlink auf avm gesetzt wurden (bei "all" und zwei Symlinks ist der Gewinn kleiner), bei 20.480 Byte.

Dafür stehen dann "find -type f"-Kommandos innerhalb von "/usr/www*" oder "Vergleiche" anhand der Branding-Verzeichnisse in "/etc/default.$CONFIG_PRODUKT" und "/usr/www/", was da wohl ein Branding ist und was nicht, auf dem Schlauch.

Denn es gibt da ja auch noch "kids", "cgi-bin", "css" und "js", wobei niemand AVM dazu "verpflichtet", sich auch künftig darauf zu beschränken und so macht "Vorsorge" durch Skript-Files da durchaus Sinn.

Das Vorgehen, die Brandings anhand der Verzeichnisse im etc-Zweig zu erkennen, stammt von AVM selbst und wird dort daher vermutlich auch nicht sofort über Bord geworfen (frag' mich jetzt aber nicht, wo das erfolgt bei AVM, das müßte ich selbst erst wieder suchen).

Das "Modell" von Freetz mit dem "all"-Verzeichnis (für das es kein Pendant in etc gibt, was auch gut so ist, solange das kein "Branding" sein will), macht da eben Code kaputt, der mit dem originalen System noch funktioniert - der Ausgangpunkt meiner Feststellung im IPPF war ja eine "Fehlermeldung" eines Benutzers von "modfs", der diesem ein Freetz-Image vorgesetzt hatte ... das reicht also als "Beweis", daß damit anderer Skript-Code beeinträchtigt wird, auch schon aus.

Daß am Ende allerdings das Zusammenwerfen von deutscher und internationaler Version schon die AVM-Firmware deutlich "aufgebläht" hat, kann man durch einfachen Vergleich der Image-Größen ermitteln ... und da spielen die Änderungen beim Kernel und der C-Library fast keine Rolle.

Wenn AVM jetzt auch die ganzen Einstellungsdateien für andere Länder mit in das "deutsche" Branding "avm" übernimmt (was ja nicht notwendig wäre), zeigt das ja auf der anderen Seite auch wieder den nur minimalen Unterschied für das gepackte Image - ob ich eine gleiche Datei ein- oder viermal im Image habe, spielt nur noch bei der Größe der "inode table" und der "directory table" im Image eine Rolle.

Wenn das so alles tatsächlich Sinn machen würde, wäre eher ein Patch angebracht, der bei "festem Branding" (was @er13 ja unbedingt an einer anderen Stelle realisieren wollte, als ich das tat und zuvor lange im IPPF propagiert hatte) gleich hingeht und die ganzen "überflüssigen" entfernt, die dann ohnehin nicht mehr "wirksam" werden können - aber auch der daraus zu erzielende Gewinn ist eben so marginal, daß sich das kaum lohnt.

Ein nur "umgepacktes" AVM-Image (154.07.19-78393) und eines nach dem Zusammenlegen aller drei Brandings auf "all" (in den drei www-Verzeichnissen) unterscheiden sich am Ende um 64KB (weil entsprechend aufgefüllt wird):

Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on modified.img, block size 65536.

Exportable Squashfs 4.0 filesystem, xz compressed, data block size 65536
        compressed data, compressed metadata, compressed fragments, no xattrs
        duplicates are removed
Filesystem size 25404.82 Kbytes (24.81 Mbytes)
        24.40% of uncompressed filesystem size (104127.30 Kbytes)
Inode table size 37740 bytes (36.86 Kbytes)
        21.50% of uncompressed inode table size (175512 bytes)
Directory table size 43858 bytes (42.83 Kbytes)
        36.58% of uncompressed directory table size (119889 bytes)
Number of duplicate files found 1555
Number of inodes 5078
Number of files 4130
Number of fragments 385
Number of symbolic links  649
Number of device nodes 1
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 298
Number of ids (unique uids + gids) 1
Number of uids 1
        root (0)
Number of gids 1
        root (0)

vs.

Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on original.img, block size 65536.

Exportable Squashfs 4.0 filesystem, xz compressed, data block size 65536
        compressed data, compressed metadata, compressed fragments, no xattrs
        duplicates are removed
Filesystem size 25469.45 Kbytes (24.87 Mbytes)
        20.56% of uncompressed filesystem size (123901.91 Kbytes)
Inode table size 62868 bytes (61.39 Kbytes)
        21.32% of uncompressed inode table size (294934 bytes)
Directory table size 80514 bytes (78.63 Kbytes)
        36.59% of uncompressed directory table size (220073 bytes)
Number of duplicate files found 4937
Number of inodes 8726
Number of files 7512
Number of fragments 385
Number of symbolic links  727
Number of device nodes 1
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 486
Number of ids (unique uids + gids) 1
Number of uids 1
        root (0)
Number of gids 1
        root (0)

Bei einer 7590 mit NAND-Flash ist das i.d.R. ein einziger Erase-Block - auf das Image gerechnet, sind es 0,25 Prozent oder auch 397 vs. 398 Erase-Blöcke im Flash. [ Letzteres ist nicht 100% richtig, weil die Filesystem-Partitionen über UBI verwaltet werden und daher ein LEB etwas weniger Platz bietet, als ein PEB. ]

Aber angesichts der Tatsache, daß bei NAND-Flash auch die Anzahl der Defekt-Blöcke schwankt und deren bloßes Vorhandensein auch vollkommen "normal" ist, lohnt sich die Rechnerei mit einzelnen PEBs auch nicht wirklich (obendrein, wenn der Flash unter UBI-Kontrolle steht und die Zuordnung von Blöcken nur noch "virtuell" ist) - das sind am Ende tatsächlich Relikte aus einer Zeit, wo der Platz für das OS noch sehr begrenzt war bzw. der Flash i.d.R. "einwandfrei".

Man muß es ja nicht gleich komplett wegwerfen - aber man könnte es ohne weiteres auf die Modelle begrenzen, wo es notwendig war (und meinetwegen auch ist).

EDIT: Ein anderer Vorteil, der sich daraus ggf. ergibt, ist eine minimal kürzere Dauer beim Einpacken ... was aber angesichts der Dimensionen im Vergleich zu einem Freetz-Build auch nicht ins Gewicht fällt.

Im IPPF habe ich gezeigt, daß Download von AVM, Klonen meiner Repos mit den Skripten und Binaries, Entpacken, Ändern und letztlich Einpacken, bei einer 7530-Firmware keine Minute braucht - und das auf einem älteren Core2-Prozessor. Auch der Zeitgewinn beim Packen ist da also (solange man das nicht auf der Box selbst macht, denn "modfs" auf einer 7490 braucht ja jetzt deutlich länger beim Packen) zu vernachlässigen.

--

Und noch mal zum hash:

An hash ist blöd dass man einen Wert überschreibt, man müsste also ne Liste sichern mit den Benutzer-Einstellungen und am Ende alles komplett löschen und neu setzen.

Die Liste der vom Aufrufer selbst "vorbereiteten" Kommandos gibt ein hash -l in der bash exakt so aus, daß man sie danach wieder (z.B. per eval oder auch per .) restaurieren lassen kann.

Aber selbst das wäre nicht notwendig ... wie ich bereits schrieb, gilt diese Ersetzung nur für den jeweils laufenden Prozess.

Wenn man das also erst im fakeroot-Kontext macht (z.B. nach Zeile 289 in der fwmod aus Freetz), dann braucht es nur ein einzelnes hash -p tools/sed sed, um das für genau diese Instanz (und alle von ihr gestarteten natürlich auch) zu ersetzen. Endet das fwmod unter fakeroot, ist auch diese Zuordnung wieder vergessen.

fda77 commented 4 years ago

Du hast da was ganz entscheidendes übersehen: Die ganzen Patches usw in Freetz! Die sind nämlich auf das "all" geschrieben. Das zu ändern ist sehr, sehr viel Aufwand! Müssten bei mehreren Brandings auch mehrfach angewendet werden Dass bei einem komprimierten Dateisystem wenig bis nichts gespart wird ist klar

 grep 'all/' patches/ -r | wc -l
1244
fda77 commented 4 years ago

hash: Ja ich schau mir das noch genauer an, aber das braucht

nach Zeile 289 in der fwmod aus Freetz

muss ich erst in ng-Zeilenummer übersetzten -.-

Hattest du meine Anmerkung oben zum Namen $EDITOR gesehen?

EDIT: hash wird nicht in eine Subshell weitergegeben, dh

PeterPawn commented 4 years ago

Hattest du meine Anmerkung oben zum Namen $EDITOR gesehen?

Ja, macht aber den von Dir verwendeten Namen SED auch nicht "sprechender" ohne den Kontext, daß es sich dabei um den Weg zum zu verwendenden "stream editor" handeln soll ... und das war ja mein Antrieb, den Namen überhaupt zu ändern - darum heißt bei mir $TARGET_BRANDING auch nicht einfach nur $TB.

Das ist etwa so, als ob ich das at-Kommando und seine Position aus einer Variablen AT lesen wollte oder sollte, wo man anhand des Namens auch eher eine Uhrzeit hinter der Variablen vermuten würde (wenn der Zeitkontext wenigstens klar wäre).

Ich habe jedenfalls bei der Suche (die ich vor der Wahl des Namens ausgeführt habe) auf keiner der von mir verwendeten Plattformen ein "feste Belegung" von $EDITOR gefunden, auch nicht unter Raspbian (buster) und das von Dir verwendete SED (das war zu diesem Zeitpunkt ja auch schon in anderen Dateien so von Dir geändert) erfüllt eben meine "Ansprüche" nicht.

Aber was soll's ... ich habe jetzt auf "STREAMEDITOR" geändert, falls ich das tatsächlich selbst mal auf diesem Weg von außen setzen will (ist ohnehin eher unwahrscheinlich, aber ich habe ohnehin schon vieles für Freetz angepaßt in dieser Datei) und meinetwegen sollst Du Dein SED haben ...

Wobei das ja durchaus Deine eigene (und imho schlechte) Idee war mit der Benennung der Variablen, denn die anderen Fundstellen in Freetz (speziell die in phonebook-tools) haben natürlich auch eine andere Bewandnis - da soll ja über den Parameter ein "zweiteiliger Name" für das Kommando (nämlich "busybox sed") ersetzt werden und da ist das entscheidende ja die BusyBox und ihr Verhalten als "multi-call binary".

Unter Freetz gibt/gab es jedenfalls diese $SED-Variable auf dem Build-Host noch nicht und alle Fundstellen von $SED jenseits von phonebook-tools und dem Patch für owfs (der das ohnehin nur entfernt) sind erst durch (mehrere) Patches von Dir entstanden - das war also schon einiges an Aufwand, wenn man's zusammenzählt und es ist eben am Ende auch einiges an (m.E. unnötigen) Unterschieden.

--

Für die fwmod_custom im no-modify Modus hilft das aber nicht

Das kann man dann aber auch ganz simpel darüber lösen, daß man, solange man im fakeroot-Kontext arbeitet, einfach das tools-Unterverzeichnis vorne in PATH einträgt - braucht auch kein "hash", wird vererbt und ist eine einzelne Änderungen (ggü. der Version in "Freetz/freetz"). Es führen halt viele Wege nach Rom und wenn man genau weiß, wo die alle entlangführen und wohin man eigentlich will, sucht man sich halt den passenden aus.

Am Ende kann man das mit einem anderen Verzeichnis, in dem man dann die jeweils "aktuell benötigten" Binaries in der richtigen Version verlinkt unter den gewünschten Namen und das man vorne in die PATH-Variable setzt, sogar wieder "variabel" gestalten und doch weiterhin auf absolute und/oder relative Pfade verzichten und damit auch auf das Ändern all dieser Vorkommen von sed in $SED.

Letztlich mach' es, wie Du willst ... ich wollte Dich ja nur darauf hinweisen, daß man das auch anders und mit weniger Aufwand bzw. deutlich "flexibler" lösen könnte - wenn der Nächste beim Patchen dann nicht modsed verwendet oder ein anderes Kommando auch unbedingt noch SELinux-Support braucht und ohne in der fakeroot-Umgebung nicht funktionieren will, gehen die Probleme eben weiter.

Ich stand bei modfs ja vor ähnlichen Problemen ... mal waren AVM-Kommandos vorhanden, auf dem nächsten Modell wieder nicht und mal waren es die aus der BusyBox oder wieder andere mit anderen Ausgabeformaten. Letztlich bin ich bei einer "kontrollierten Umgebung" mit einer eigenen BusyBox gelandet (notfalls sogar mit "respawn", damit die auch verwendet wird), die auch zuerst mal in ihren Applets nachsieht, bevor sie ins Dateisystem schaut. Das ist am Ende (solange es um BB-Applets geht) auch nichts anderes als das oben erwähnte lokale "bin"-Verzeichnis, was man vorne in den PATH setzt und wo man für all die Kommandos, die etwas "speziell" sind und nicht vom Build-Host genutzt werden sollen, dann nur die passenden Links hinterlegt.

Anstelle des bei Freetz praktizierten Kopierens der "tools" - aus ihren jeweiligen "make"-Directories direkt nach "tools" (das macht dann Sinn, wenn man dieses "tools" auch einpacken und weitergeben will, damit es auf anderen Systemen ohne den ganzen "Ballast" unterhalb von "make" nachgenutzt werden kann) - wäre es ja auch möglich, da ein "bin"-Verzeichnis zu erstellen und die Kommandos aus den "make"-Verzeichnissen nur dorthin zu verlinken. Dann braucht's auch die ganzen Definitionen in "fwmod" gar nicht (die meist ja auch nur die Pfade nach "tools" beschreiben: https://github.com/Freetz/freetz/blob/master/fwmod#L164) - wie gesagt: Viele Wege führen nach Rom und sie haben alle ihre Sehenswürdigkeiten und auch ihre Mühsal und Gefahren. Das Thema ist so alt, wie die Empfehlungen, in SheBangs auf /usr/bin/env zu setzen, um immer den passenden Pfad zum benötigten Interpreter zu haben.

Für mich wäre bei solchen Änderungen immer die Frage von Bedeutung, ob/wie das von anderen "Lesern" verstanden wird bzw. ob es ihnen zusätzliche "Kenntnisse" abverlangt, das korrekt anzuwenden und das muß man dann gegen den eigenen Aufwand und den damit erreichten Nutzen abwägen.

So, wie Du es derzeit machst, braucht(e) es (a) die Anpassungen der derzeit vorhandenen Skripte (und das hier war ja auch nicht so ganz ohne Aufwand: https://github.com/Freetz-NG/freetz-ng/commit/3e45743ba938584c770c8062b322736c497e85e8) und (b) muß bei künftigen Patches dann auch immer darauf geachtet werden (auch bei solchen, die der Benutzer selbst entwirft und testet), daß da tatsächlich modsed oder $SED verwendet wird.

Das wäre mir persönlich jetzt zuviel Aufwand und auch zuviel Unwägbarkeit für die Zukunft/weitere Patches gewesen und ich hätte dann wohl doch den Weg mit dem lokalen "bin" und der Suchreihenfolge über $PATH beschritten, um das sed-Kommando (nur im fakeroot-Kontext oder auch dauerhaft, denn eine Version mit SELinux-Support sollte ja auch außerhalb von fakeroot funktionieren) durch ein anderes zu ersetzen, ohne all die Stellen, wo es verwendet wird, anpassen zu müssen.

--

Und noch einmal zu den "Brandings" ... Freetz leistet sich da ja auch den Luxus, ggf. vorhandene Unterschiede zwischen den Brandings einfach "plattzumachen".

Auch wenn sich das "ewetel"-Branding der 7390 nur in einem Picture von den anderen unterscheidet, besteht eben ein Unterschied und trotzdem wird "ewetel" genauso auf "all" verlinkt.

Dabei wäre hier sogar noch ausreichend gewesen, die betreffende Datei aus dem "ewetel"-Zweig einfach mit nach "all" zu kopieren (die ist nämlich tatsächlich nur ein Zusatz) - nur müßte man eben, um das festzustellen, diese Unterschiede auch jeweils analysieren und ich glaube ja viel, aber nicht, daß da irgendwo "automatische Abgleiche" erfolgen vor dem "bump" auf neue Versionen, ob das bei AVM tatsächlich noch "identisch" ist oder nicht.

Ich weiß es jetzt aus dem Kopf nicht (und will auch nicht nachsehen), ob es bei den Cable-Boxen mit ihren "kdg"- und "lgi"-Brandings nicht noch mehr Unterschiede in den "HTML_SUBDIR"-Verzeichnissen gibt (wobei da sicherlich die Provider-Firmware auch nicht zugänglich ist und damit für Freetz keine Geige spielt - für mich aber schon, weil mein Ausgangspunkt ja auch mal ein existierendes System sein kann) - aber ich glaube eben auch nicht, daß das wirklich jemanden interessierte bzw,. daß es jemand genau prüft ... wenn's Probleme geben sollte, wird sich schon irgendjemand melden.

fda77 commented 4 years ago

Hab jetzt die Variante mit PATH genommen, sollte am besten funktionieren. Solang das eigene sed noch nicht gebaut ist, wird dann das vom System verwendet. Theoretisch bräuchte man das sed auch nur zu bauen, wenn es selinux gibt... Alle Bins weiterzugeben braucht man eigentlich nicht, wird ja automatisch alles gebaut und passt dann auch auf jeden Fall zum System.

Bandings: ewetel hat wirklich 1 Bilddatei mehr als das avm branding. Das betrifft 4 von ~250 images (1,6%). Allerdings nur wenn das Branding aktiv ist. Da es nur uralte FOS sind und sich noch niemand beschwert hat... Bei alten cable hat avm mehr Zertifikate als die 3 anderen brandings, aber die gibt es in freetz eh nicht. Passt soweit, 80% sind erfüllt