[NEU] schnelles iptables / ip6tables interface für die 7270 (v.0.8.3a) + 7390 etc...

Hi cando,
ich hab es endlich geschafft mir dein Paket in die Firmware zu packen. Dabei sind mir 2 Abschnitte aufgefallen mit denen ich überhaupt nix anfangen kann.

rc.nhipt
Code:
                if [ ! -r "/var/tmp/nhipt.par" ]
                then
                    chmod 777 /tmp/flash/nhiptboot.cfg
                    chmod +x /tmp/flash/nhiptboot.cfg
                    . /tmp/flash/nhiptboot.cfg
                fi
Was macht das? Können wir das weg lassen?

nhipt.cgi
Code:
if [ -r /var/tmp/nhipt.par ]; then
    export NHIPT_$(grep "ADMINIP=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "BACK=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "BOOT=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "BOOTDIR=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "DELAY=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "DSLDOFF=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "LOGD=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "LOGTARGET=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "PORT=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "ROOT=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "SERVERIP=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "BOOTSTRAP=" /var/tmp/nhipt.par)
fi
export cb$NHIPT_DELAY=' selected';
export dsld$NHIPT_DSLDOFF=' checked';
Wofür ist das gut?

MfG Oliver
 
Hi olistudent.

Das erste prüft ob die Parameterdatei in der Ram-Disk ist (wenn der Boot bereits über debug.cfg stattgefunden haben sollte) und wenn nicht wird die Startdatei der Regeln aus dem Flashspeicher geladen und gestartet (iptables - Urlader)

Im zweiten Codeblock werden die Einstellungen aus dem UI von der iptables Config in die freetz Maske geladen, damit sie immer konsistent in beiden UI's sind. Die freetz Mimik zum Speichern und Laden der Werte wird nicht verwendet, da das UI ja auch standalone funktionieren können soll und ich nicht 2 Programme pflegen möchte. Allerdings muss ich die Freetz Parameter Datei trotzdem mitschleppen, da ich sonst keine Werte aus der Maske nach rc.nhipt bekomme (der Callback von freetz exportiert nur "bekannte" Variablen und nicht alles was vom UI zurückkommt)


Code:
export cb$NHIPT_DELAY=' selected';
export dsld$NHIPT_DSLDOFF=' checked';

Auf die 2 bin ich besonders stolz. Die generieren extrem effizient dynamisch die Radiobuttons / Drop-Down Listen Auswahl.

Ich würde beides so drin lassen, wenn es Euch nicht zu sehr stört.

PS. vermutlich könnte man sich den export sparen und gewöhnliche Variablen für die Bestückung der Maske verwenden. Ich habs mal so gemacht, weil ich nicht weiss, ob freetz diese Variablen irgendwo noch benötigt.
 
Zuletzt bearbeitet:
Zumindest darüber
Code:
chmod 777 /tmp/flash/nhiptboot.cfg
chmod +x /tmp/flash/nhiptboot.cfg

sollte man mal nachdenken. Das "+x" ist überflüssig. Und müssen die Rechte wirklich 777 sein?

@cando: Kommentare an den relevanten Codestellen hätten die Nachfrage vielleicht verhindert...
 
... Das +x muss glaube ich, sonst wird's ja wahrscheinlich nicht ausgeführt ;) und dann hat man kein iptables nach dem reboot, wenn man sich auf freetz verläßt. Ich kopiere die Datei beim Erstellen ja nur in den Flash und setze noch keine Attribute.

Die 777 könnte man vermutlich weglassen, da der freetz-prozess wahrscheinlich als root läuft und der deamon, der das script erzeugt hat, natürlich auch - ohne diese Rechte könnte es ja keine iptables Kommandos absetzen.

PS. Du hast schon Recht mit den Kommentaren, ich bin da eher sparsam damit - das muss ja auch alles in den ROM. Ich muss auch gestehen, bei den 2 Stellen wäre ich nie auf die Idee gekommen, dass sie unklar sein könnten - es steht ja explizit drin was sie machen - Parameterdatei Lesen und die Variablenwerte laden - die 2 Zeilen später in der Maskenvorbelegung verwendet werden. Wenn ich das in einer while cat irgendwas schleife eingelesen hätte (wäre eleganter, aber ich kenne die shell zu wenig), hätte ich es vielleicht kommentiert. - die andere Stelle ist doch auch selbsterklärend: bootloader vorbereiten / starten - ist ja in der ""|load) section.
 
Zuletzt bearbeitet:
Ich habe CONFIG_KMOD und CONFIG_MODULE_FORCE_UNLOAD im kernel wieder daktiviert, weil es unvorhersehbare Probleme mit dem bluetooth gab.
Ergo ist händisch laden Pflicht.
Gibt es die Probleme auch ohne CONFIG_MODULE_FORCE_UNLOAD? Und welche Probleme konkret gibt es?

nhipt.cgi
Code:
if [ -r /var/tmp/nhipt.par ]; then
    export NHIPT_$(grep "ADMINIP=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "BACK=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "BOOT=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "BOOTDIR=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "DELAY=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "DSLDOFF=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "LOGD=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "LOGTARGET=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "PORT=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "ROOT=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "SERVERIP=" /var/tmp/nhipt.par)
    export NHIPT_$(grep "BOOTSTRAP=" /var/tmp/nhipt.par)
fi

Wäre es nicht möglich, das NHIPT_ gleich vor die entsprechenden Zeilen in der Datei /var/tmp/nhipt.par zu schreiben? Für jede einzelne Zeile grep aufzurufen ist nicht sonderlich effizient.
 
Ralf: Es gab unresolved symbols, und davon nicht wenige. Welche hat mir Oliver gepostet, aber ich such sie gern raus, wenn du sie benötigst die Meldungen.

@cando: Du includierst das Script, und rufst es nicht direkt auf. Ähnliches Verhalten wie die modlibrc, und die ist imho nicht 777 oder ähnliches, sondern hat die Rechte 644.
 
@RalfFriedl

Zum Thema Variablen umbenennen

Dann müsste man im Hauptprogramm überall alles anpassen, wo die gebraucht werden. An der Stelle hier ist das ja nur ein kleiner Wrapper. Das wird insgesamt maximal 2 - 3 mal aufgerufen, um die Einstellungen für das UI zu machen und dann nie wieder. Ich habe bei Euch so Konstrukte gesehen wie:
Code:
variable=$(cat "datei")
for var1 in variable; do
 export $MODULE_$var1
done
Habe es aber dann doch nicht so gemacht, weil nicht ganz durchsichtig.
Da ich ja nicht mal alle Variablen aus den Settings benötige, habe ich halt nur die herausge-grab-t die ich für die Maske brauchte.
 
Obiges Construct beinhaltet aber nur einmal Lesen des Files, und kein grep. Das spart eindeutig Zeit...
 
Ihr dürft es gern verbessern.

Wie gesagt die shell ist mir noch fremd und das debuggen nicht einfach. Ich lerne ja gern dazu. Mit der Methode hatte ich zuerst Erfolg und bin dann dabei geblieben, weil es an der Stelle für die Laufzeit der Haupanwendung keinerlei Relevanz hatte und die Integration so funktionierte. Außerdem war ich 1-2 Tage damit beschäftigt die freetz Konstrukte zu analysieren, da ja überall mit symbolischen Werten und Variablen und cryptischen Schleifen gearbeitet wird (damit es dynamisch ist). Da empfand ich es eher als Augenschmaus, wenn man sieht, wie die Variable heißt, die man da einliest und diese später im Script auch wiederfindet. Mit der schleife wäre das für den Betrachter völlig unklar.

Die Maske in Freetz wird ja nur zur "Erstinstallation" benötigt, und dafür hats gereicht.

EDIT:
Aber wenn es Euch so wichtig ist, mache ich das Schleifchen in den nächsten Patch mit rein.
übrigens - ich habe mal getestet. wenn die cfg keine execute rechte hat, bekomme ich Permission denied.
 
Zuletzt bearbeitet:
Ich hab das im trunk mit den Rechten angepasst, weil ich eben keine Fehlermeldung bekommen hab beim rc-Aufruf.

Können wir und daraf einigen, dass du nicht alle Files - egal wo - mit den Rechten 777 ausstattest? 644 sollte zum lesen/schreiben für root und lesen für den Rest reichen. 755 zum ausführen für alle. Bitte beschäftige dicvh ein wenig damit, denn so wird dein Sicherheitsfanatismus ad absurdum geführt.
 
Zuletzt bearbeitet:
Neuer Patch Fuer Den Trunk

OK, mach ich.
Anbei der aktualisierte Patch mit allen bisherigen Fixes.

die da wären:

  • die Zeile mit dem 777 in der rc.custom ist weg
  • das explizite Kopieren der Variablen nun durch cat / Schleife ersetzt
  • Beim Speichern im freetz UI wird geprüft ob iptables laufen und notfalls nachgeholfen (modprobe der Basismodule - erster Start über Kommandozeile entfällt damit ersatzlos)
  • Die Config-Knöpfe werden im UI auch ohne Eingabe von Regeln angezeigt

Kannst Du den bitte einspielen?

Vielen Dank!
 

Anhänge

  • nhipt2.patch.tar.gz
    2.2 KB · Aufrufe: 1
Warum sagt mir eigentlich Niemand, dass ich das ausversehen im test-branch eingechecked hatte?

@cando: Bitte lass beim nächsten mal die Kerneländerungen weg.
 
Woran merkt man das, mit dem test branch? Der Kernel ist mir "reingerutscht", ich hatte vorher compiliert und getestet, hatte aber dann vergessen, den Schalter vor dem diff wieder wegzumehmen. Sorry.
 
Das merkt man daran, dass die Änderung nicht im trunk war, die ich heute vorgenommen hatte. Ich nutze aktuell den test-branch, und deswegen hab ich das darin auch getestet...
 
Warum sagt mir eigentlich Niemand, dass ich das ausversehen im test-branch eingechecked hatte?
Weil man das als normal-sterblicher Nutzer, der die Trac-Timeline als RSS-Feed abonniert hat, nicht immer auf Anhieb (auf den ersten Blick) erkennen kann.
So sah das Subject, als Du eingechecked hattest:
Code:
Changeset [3940]:  * nhipt: remove unneeded chmod and change rights in rc-file
Oliver bekommt das schöner hin:
Code:
Changeset [3933]:[B] [test-branch]:[/B] * Commit merge info
 
*g* Er hat da auch feine templates für. Auf der Commandline muss man die selber schreiben ;)

Und wie gesagt, der test-branch war keine absicht :D
 
Irgendwie leidet das Paket unter akuter Versionitis:

Aktueller Code:
Code:
/var/mod/root # cat /usr/lib/cgi-bin/nhipt.cgi|grep 0.8
<div style="float: right;"><font size="1">Version [B]0.8.2h[/B]</font></div>
letztes Changeset im Trunk:
Code:
Changeset [3943]:  * nhipt: nump to [B]0.8.3a[/B] & sync changes from test-branch
Threadtitel:
Code:
 [NEU] schnelles iptables / ip6tables interface für die 7270 [B](v.0.8.4) [/B]
 
*g* ich glaube, cando versioniert je nach zweck anders. Sein Changeset weiter oben hatte die "0.8.3a"
 
*g* Hab ich schon gefixt.

Ich muss immer mal eine neue Versionsnummer vergeben, sonst baut er mir manchmal die Änderungen nicht ins Image und ich teste gannz verzweifelt dann vor mich hin. Ich könnt ja auch ein dirclean oder so machen, nur dann übersetzt er wieder ewig...

Wenn man die Version ändert, klappts aber recht gut.

Wenn Ihr eine bessere Idee habt, lasse ich es sein mit den Versionen

;)
 
"make nhipt-dirclean" hilft ungemeint. Die einzelnen Targets sind im Wiki - zumindest ein wenig - erklärt.
 
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.