danisahne-mod ..::Developer::..

Status
Für weitere Antworten geschlossen.

danisahne

Aktives Mitglied
Mitglied seit
30 Jul 2005
Beiträge
1,493
Punkte für Reaktionen
0
Punkte
0
Hallo,

zuerst mal die ...

EINTEILUNG:

Ich habe die Funktionshinweise nun ausgegliedert, um in einem neuen Thread einzig und alleine die Paket- und Mod-Entwicklung zu diskutieren. Wenn du das willst, dann bist du hier genau richtig.

Hier gibts den aktuellen Mod:
[noparse]danisahne-mod >>[/noparse]

Hier also kein User-Support, das ist Developer-Bereich ;) Fragen bitte einfach im ds-mod Unterforum stellen

HINWEISE:

Hier sollten jetzt nur Developer und Interessierte sein. Dieser Thread richtet sich an alle, die am Mod mitwirken wollen. Dazu ist jeder herzlich eingeladen. Wer ein Paket erstellen will, meldet sich bitte bei mir Zwecks Absprache (soll ja nichts doppelt gemacht werden). Ihr behaltet dann die Hoheit über euer Paket, d.h. Änderungen am Paket nehmt nur ihr vor. Ich aktualisiere dann immer nur euer Paket im Mod.




Inhalt

  1. Allgemeines
  2. Eigene rc Skripte
  3. Eigene Dateien ins Image packen
  4. Eigene Pakete
  5. Konfiguration
  6. Dokumentation


1. Allgemeines

Die Konfiguration wird in einem eigenen character device /var/flash/ds_mod gespeichert. Es enthält ein tar Archiv des Ordners /var/tmp/flash (ist das selbe wie /tmp/flash, Symlink! Nicht mit /var/flash verwechseln!!!). Beim Booten wird das Archiv entpackt, so dass Dateien, die einen Reboot überleben sollen einfach nach /tmp/flash kopiert werden können, gefolgt von einem 'modsave flash'. Ich habe ein Hardlimit von 30KB als Standard gewählt, das durch
Code:
modconf set mod MOD_LIMIT=<bytes>
modsave
geändert werden kann. Eine Sicherheitsbarriere, mit der das Bearbeiten von Konfiguartionsdateien über das Webinterface eingeschränkt werden kann ist das "Sicherheits Level":
Code:
echo x > /tmp/flash/security
modsave
# wobei x folgende Werte annehmen kann:
# 0 : keine Einschränkungen
# 1 : Dateien mit Shell Befehlen dürfen nicht bearbeitet werden, der Rest schon
# 2 : keine Konfigurationsdatei darf bearbeitet werden
Das "Sicherheits Level" bestimmt in ähnlicher Weise auch, welche Skripte unter "Extras" ausgeführt werden dürfen und welche nicht.

Wrapper-Skripte für Textdateien (erfordern kein 'modsave'):
  • Dateien in /var/flash: nvi
    z.B.: nvi /var/flash/debug.cfg
  • Dateien in /tmp/flash: mvi
    z.B.: mvi /tmp/flash/meine_datei.txt


2. Eigene rc Skripte

  • /var/flash/debug.cfg: Diese Datei wird vom mod nicht verwendet und steht weiterhin gewohnt zur freien Verfügung. Zu beachten ist nur, dass die debug.cfg VOR dem eigentlichen Mod ausgeführt wird (rc.mod).
  • /tmp/flash/rc.custom: Diese Datei wird beim Booten als letztes aufgerufen, wenn sie existiert. Sie kann folgendermaßen angelegt werden:
    Code:
    mvi /tmp/flash/rc.custom # -> bearbeiten -> :wq
Reihenfolge beim Booten:
Code:
-> rc.S
   |-> rc.{dsl|net|viop|telefon|...}
   |-> debug.cfg
   '-> rc.mod
       |-> rc.{bftpd|dropbear|...}  (Pakete)
       '-> rc.custom
Eine Ausnahme ist rc.dnsmasq (und auch rc.callmonitor), wenn statisch in der Firmware enthalten, welches direkt vor multid in der rc.net gestartet wird (da sonst das Binden der Ports fehlschlägt; vor dem multid startend wird ein Neustart des multid vermieden, der sonst z.B. bei 'rc.dnsmasq restart' immer erfolgt).

Das Verzeichnis /mod/ (bzw. /var/mod/) ist im RAM und stellt ein quasi root Verzeichnis für den Mod dar. Die rc Skripte der Pakete sind alle in /mod/etc/init.d/rc.* bzw. dort verlinkt.


3. Eigene Dateien ins Image packen

Entweder ein eigenes Paket erstellen (siehe 6.4.) oder einfach die Dateien ins Verzeichnis root/ an die stelle kopieren, wo sie im Squashfs landen sollen (root/bin/test ist auf der Box /bin/test).


4. Eigene Pakete

An ein Paket stellen sich folgende Anforderungen:

  • rc Skript: etc/init.d/rc.<paketname> [start|stop|load|unload|restart|status]
Wenn konfigurierbar:
  • Default Konfiguration: etc/default.<paketname>/<paketname>.cfg
  • Optional: cgi Skript für die Weboberfläche: usr/lib/cgi-bin/<paketname>.cgi
  • Optional: Extra cgi Skripte in usr/lib/cgi-bin/<paketname>/
Sonstige Default Dateien sollten auch ins Verzeichnis etc/default.<paketname>/ gepackt werden.

HINWEIS: Ich werd noch ein Skript schreiben, mit dem man einen Paketrahmen erzeugen kann.

Statische Pakete werden auf der Box nach / entpackt, dynamische nach /mod/. Egal ob dynamisch oder statisch
  • /mod/etc/init.d/rc.<paketname>
  • /mod/default.<paketname>/*
  • /mod/usr/lib/cgi-bin/<paketname>.cgi
  • /mod/usr/lib/cgi-bin/<paketname>/*
sind immer gültig (sofern im Paket enthalten) und werden bei statischen Paketen über Symlinks realisiert. Eine spezielle Bedeutung kommt dem Pfad /mod/pkg/<paketname> zu. Er ist entweder ein Symlink auf / oder auf /mod und zeigt auf "Root" für das Paket (sollte in der Regel nicht benötigt werden). Binaries sollten nach bin, sbin, usr/bin oder usr/sbin, damit sie sowohl in statischen als auch dynamischen Paketen aufrufbar sind (die PATH Variable enthält auch /mod/bin, /mod/sbin, /mod/usr/bin und /mod/usr/sbin). Libraries funktionieren mit statischen wie auch dynamischen Paketen in lib (LD_LIBRARY_PATH=/mod/lib => Library wird in /lib und /mod/lib gesucht)

Benötigt ein Daemon eines Paketes eine Konfigurationsdatei (z.B. bftpd.conf), die für diesen Daemon spezifisch ist, so wird sie in der Regel im rc Skript vor dem Starten des Daemons erzeugt. Ich habe dafür folgende Konvention gewählt (ist aber kein muss), welche am Beispiel der bftpd.conf erläutert ist:
  1. Suche nach Skript /tmp/flash/bftpd_conf, welches die bftpd.conf als Ausgabe hat; existiert? -> goto 3.
  2. Führe Skript /etc/default.bftpd/bftpd_conf aus, die Ausgabe ergibt wie bei 2. die bftpd.conf (meistens ist dies der Fall)
  3. Existiert /tmp/flash/bftpd.conf.extra? -> füge sie an die in 1. oder 2. generierte bftpd.conf an
Das sollte alle Möglichkeiten des "Feintunings" offen lassen. 3. macht nicht immer Sinn, darum ist es optional. Wäre schön, wenn jeder, der ein Paket erstellt, die Konventionen einhält. Das Skript bftpd_conf muss stets mit exportierten Variablen aus /mod/etc/conf/bftpd.cfg aufgerufen werden. So wird die bftpd.conf je nach Paket-Konfiguration individuell erstellt.


5. Konfiguration

Jedes Paket besitzt ein Konfigurationsdatei /mod/etc/conf/<paketname>.cfg, welche wie folgt aufgebaut ist:
Code:
export <PAKETNAME>_OPTION1='bla'
export <PAKETNAME>_OPTION2='blub'
...
Sie enthält alle Optionen, die auch übers Webinterface eingestellt werden können und ist in Shell Syntax. Damit kann die aktuelle Konfiguration mit
Code:
. /mod/etc/conf/<paketname>.cfg
eingelesen werden. In der Datei /mod/etc/default.<paketname>/<paketname>.cfg sind die default Einstellungen gespeichert. Beim Speichern werden nur die sich von den Defaults unterscheidenden Variablen in die /tmp/flash/<paketname>.diff transferiert und mit dem ganzen Verzeichnis /tmp/flash/ ins tffs abgelegt. Die Basis-Konfiguration hat den Paketnamen 'mod'. Die Befehle dazu sind:
Code:
modconf load <paketname>
# -> erzeugt die Datei /mod/etc/conf/<paketname>.cfg aus den Defaults und der <paketname>.diff

modconf save <paketname>
# -> erzeugt die Datei <paketname>.diff aus den Defaults und der /mod/etc/conf/<paketname>.cfg

modsave
# -> ruft unter anderem für alle Pakete 'modconf save' auf und speichert das Verzeichnis /tmp/flash ins tffs

modsave flash
# -> speichert nur das Verzeichnis /tmp/flash ins tffs
Das dauerhafte Abschalten des Webinterfaces geht damit so (Variable MOD_HTTPD in der Basis-Konfiguration 'mod'):
Code:
vi /mod/etc/conf/mod.cfg  # -> MOD_HTTPD='yes' durch MOD_HTTPD='no' ersetzen
modconf save mod  # nun ist mod.diff up-to-date
modsave flash  # damit ist mod.diff im tffs

# oder

vi /mod/etc/conf/mod.cfg  # -> MOD_HTTPD='yes' durch MOD_HTTPD='no' ersetzen
modsave  # erzeugt alle diff Dateien neu und speichert ins tffs
Soviel zur Veranschaulichung. Komfortabler ist folgendes:
Code:
modconf set mod MOD_HTTPD=no
modconf save mod
modsave flash

# bzw.

modconf set mod MOD_HTTPD=no
modsave


6. Dokumentation

Ich möchte dann auch mal noch die wichtigsten Befehle mit Bedeutung auflisten und eine Dokumentation für jedes Paket beginnen, worin die Optionen des Webinterface detailliert beschrieben sind (aber auch ein paar Howtos, z.B. "Wie erstelle ich Benutzerkonten für den bftpd").


So, nun schießt mal los mit den Detailfragen zum Innenleben des Mods :)

Mfg,
danisahne
 
Zuletzt bearbeitet:
@heini66:
Kein Problem. Aber du merkst das um 5:00 Uhr in der früh? Was machst du denn tagsüber ;) (rethorische Frage, hab deine ursprüngliche Antwort um 2:30 ja auch noch gelesen :D )
 
Hallo danisahne,

nachdem das hier ja der Development-Thread ist...

Ich habe hier mal in den Anhang meine fwmod_custom angehängt.
Die patched (ziemlich generisch) die Webseiten ;)

Hier sind die Dinge, die die Datei im Einzelnen macht:
Zuerst erstellt sie für alle möglichen Brandings Links für die Webseiten auf das vorhandene Branding.
Damit sollte ein gefahrloses "umbranden" möglich sein. Habe ich bisher aber nicht getestet, bei mir steht es immer auf "avm" ;)

Dann werden Patches für verschiedene Dinge, die hier verstreut in mehreren Threads zu finden sind eingespielt
(Internationale Vorwahleinstellungen, ENUM-Einstellungen, WDS, gepatchter Push-Dienst)

Ich habe die Patches dabei so versucht abzuändern, dass sie unabhängig vom Branding funktionieren sollten (ebenfalls ungetestet)

Kannst Du Dir ja mal anschauen - vielleicht kannst Du Teile daraus verwenden...

Achja nochwas:
Könntest Du in zukünftigen Versionen nicht auch die "clean" Regel ändern?
Ein "make clean" sollte IMHO nicht die Konfiguration löschen sondern nur die erzeugten Dateien (build-Verzeichnis).
Für das Löschen der Konfiguation wäre m.E. "make distclean" oder "make clobber" da.
Ausserdem wäre dann auch für die clean-Regel ein "fwmod_custom_clean" sehr nützlich (bzw. ein Aufruf von fwmod_custom mit Parameter "clean");
damit könnten dann eigene Erweiterungen auch sauber aufgeräumt werden ;)

EDIT2 (08.01.2006): Ich habe jetzt (hoffentlich) die Fehler im Script behoben und die aktualisierte Version (immer noch für ds-0.1.1) hochgeladen.
Ausserdem habe ich den WDS-Patch erweitert und einen Bug durch einen neuen Patch beseitigt:
Unter bestimmten Bedingungen (die bei mir leider der Fall waren), liess sich der WDS-Slave Modus nicht einstellen, wenn die Box hinter einem Router betrieben wird (d.h. ohne selber die DSL-Verbindung aufzubauen).
Ich habe da ein paar weitere Abfragen eingebaut, dass WDS-Slave auch immer im ATA-Modus einstellbar ist.
 

Anhänge

  • fwmod_custom.zip
    3.4 KB · Aufrufe: 183
Zuletzt bearbeitet:
im ds-0.2rc2 sind ein paar patches schon drin, der rest ist vorbereitet.

micha
 
Ich überlege gerade, ob es wirklich Sinn macht,
die ganzen Webseitenänderungen direkt zu patchen
und gepatched ins Mod-Image einzubauen.

Oder sollte nicht doch lieber ein Paket gebaut werden,
mit dem solche Patches dynamisch ein- und ausgeschaltet
werden können? (über Pseudo-Mounts)
 
Hi Massa, bin wieder zurück.
Massa schrieb:
Kannst Du Dir ja mal anschauen - vielleicht kannst Du Teile daraus verwenden...
Werds mir mal durchschauen. Danke auf jede Fall schon mal.
Massa schrieb:
Achja nochwas:
Könntest Du in zukünftigen Versionen nicht auch die "clean" Regel ändern?
Ein "make clean" sollte IMHO nicht die Konfiguration löschen sondern nur die erzeugten Dateien (build-Verzeichnis).
Für das Löschen der Konfiguation wäre m.E. "make distclean" oder "make clobber" da.
Hab ich in der nächsten Version verbessert. Die Konfiguaration überlebt nun ein `make clean'.
Massa schrieb:
Ausserdem wäre dann auch für die clean-Regel ein "fwmod_custom_clean" sehr nützlich (bzw. ein Aufruf von fwmod_custom mit Parameter "clean");
Auch das hab ich eingebaut.
Massa schrieb:
Ich überlege gerade, ob es wirklich Sinn macht, die ganzen Webseitenänderungen direkt zu patchen und gepatched ins Mod-Image einzubauen.
Ich finds schon besser, das beim Modden direkt zu patchen. Das werden ja wohl die meisten haben wollen, da es die Funktionsweise der Box nicht beeinträchtigt.

Mfg,
danisahne
 
hi, ich hab mir den inhalt von /usr/www/all/html/fon auch mal angesehen, da ist ja noch menge mehr drinn. buddy's z.b. ...
wäre nett das mal alles im webinterface offen zu haben.
bin leider nicht in der lage die von massa angehängte fwmod_custom so zu erweitern, das ich das selber ins image bringe.
machts mir einer??? *liebschau*
und gibt es ne möglichkeit die info's zu belegten voip anrufbeantworten zu jeder voip nummer getrennt im webinterface auszugeben? (sie haben neue nachrichten in ihrer mailbox (internettelefonie) auf der standart übersichtsseite und blinken der internettelefonie led)

nen frohes neues übringes!

der heini
 
Zuletzt bearbeitet:
heini66 schrieb:
bin leider nicht in der lage die von massa angehängte fwmod_custom so zu erweitern, das ich das selber ins image bringe.
machts mir einer??? *liebschau*
Wie schon oben erwähnt, hat meine fwmod_custom wohl noch ein paar Probleme.
Zum einen scheint er nicht alles so zu patchen, wie es sein sollte und zum anderen funktionieren die Patches teilweise nicht :(

Ich gehe jetzt aber erstmal ein paar Tage Skifahren ;)
Vielleicht komme ich nächstes Wochenende dazu, mal nochmal danach zu schauen...

heini66 schrieb:
nen frohes neues übringes!
Natürlich auch von mir alle gute im neuen Jahr! :D
 
Hallo,

irgendwie steck ich gerade in einem Dilemma mit den Cryptolibrarys:
  • dropbear -> libtomcrypt (mein Favorit)
  • vpnc -> libgcrypt
  • OpenVPN -> nur OpenSSL (SSLeay) ??
  • stunnel -> nur OpenSSL (SSLeay) ??
Irgendwie haben wir dann ja schon fast alle Crypto Bibliotheken auf der Box oder?

libtomcrypt ist sehr klein, darum wird sie auch vom dropbear genutzt. leider scheint es dazu keine SSL Implementation zu geben.

Hier scheint es jemand geschafft zu haben anstatt der libgcrypt die libtomcrypt in vpnc zu integrieren. Damit ließe sich mit dropbear Code teilen. Ich hab dazu aber keinen Code gefunden.

Um OpenSSL scheinen wir nicht rumzukommen. Nachteil: Das Ding ist so groß. Sollen wir jetzt alles statisch linken oder kennt jemand noch einen Ausweg?

Mfg,
danisahne
 
Zuletzt bearbeitet:
Auf der velinkten Seite steht ja auch nur, dass man für vpnc libgcrypt braucht. Ich bin ja gerade auch am Einbinden des vpnc Pakets von eresleo: http://www.ip-phone-forum.de/showthread.php?t=88073. Das ist alles schon fertig kompiliert und lauffähig, aber leider eben auch nicht gerade klein, darum mach ich mir die Gedanken.

MatrixSSL unterstützt in der freien Version glaub ich auch kein AES. Das wäre echt klein, aber ich kenn kein einziges Programm, welches das unterstützt.

EDIT: Hier hatte mal jemand die Portierung für vpnc-0.2 nach libtomcrypt vorgenommen: http://lambda.foldr.org/~michaelw/vpnc/. Allerdings anscheinend nicht fortgeführt :(

EDIT2: Zumindest stehts im TODO :) : http://svn.unix-ag.uni-kl.de/vpnc/trunk/TODO
Sobald das implementiert ist werd ich dropbear dynamisch gegen libtomcrypt linken. Um OpenSSL scheint aber kein Weg herumzuführen :(

Gruß,
danisahne
 
Zuletzt bearbeitet:
Frag' doch mal Brainslayer, der die dd-wrt Firmware für Linksys-Router geschrieben hat.
Er hat auch eine Version mit OpenVPN erstellt (und dropbear ist sowieso mit drin), vielleicht hat er das Problem mit den Libraries gelöst...

Hier ist die Webseite: http://www.dd-wrt.com

Brainslayer sitzt in Berlin, kann also auch auf Deutsch befragt werden - wenn Du willst ;)
 
Das ist eine Antwort auf ein Post von buehmann, das er im "normalen" dsmod-Thread geschrieben hatte.
(betrifft Entwicklung und passt deshalb besser hier rein ;-) )

buehmann schrieb:
Ja, eigentlich schon. Nur noch eine kleine Anmerkung: Das "sort" könnte noch ein "-n" vertragen, damit numerisch sortiert wird. (Nebenbei ist die Ausgabe von ps auf der Box eh schon nach PID sortiert ;-))
Wusste ich nicht :oops:
Dann kann man das sort natürlich auch komplett weglassen.
Ich merke schon, gemeinsam sind wir ein unschlagbares Shell-Team :-D

Hier nochmals für alle der endgültige Code, um eine PID-Abfrage für den httpd-Daemon zu machen:
Code:
ps | grep ' httpd -p 81' | grep -v grep | awk '{print $1}' | head -1
 
hiho...hoffe das das nicht schon zig mal besprochen wurde, aber ich hab mich jetzt seit einiger zeit mit eurem treiben beschäftigt, und habe gesehn das euch immer der speicher zu eng wird...
und nu meine hoffentlich nicht allzu dumme frage...
wenn wir uns alle enig sind, das das avm branding eh nur genutzt wird im mod...wieso behalten wir dann die 1,2 mb(entpackt) daten der anderen brandings im ordner user/www/ ?? ok...all, cgi-bin und avm bleiben iss klar...
würd mich freuen wenn ihr mich darüber aufklärt...wollen doch alle nicht, das ich das am ende noch alles verstehe *GRINS*
 
Darkyputz schrieb:
wenn wir uns alle enig sind, das das avm branding eh nur genutzt wird im mod...wieso behalten wir dann die 1,2 mb(entpackt) daten der anderen brandings im ordner user/www/ ??
Hi, vielleicht weil die anderen Brandings bei der 7050 (die auch danisahne hat) zu vernachlässigen sind und es deswegen noch nicht aufgefallen ist:
Code:
ds-0.2> (cd fritz.box_fon_wlan_7050.14.03.89.image.mod/original/filesystem/; du -h -s --apparent-size usr/www/*)
435     usr/www/1und1
1,3M    usr/www/all
435     usr/www/avm
88K     usr/www/cgi-bin
9       usr/www/html
Bei deiner Box sieht das tatsächlich anders aus, aber nur, weil arcor sehr viel Platz braucht:
Code:
ds-0.2> (cd fritz.box_fon.06.03.91.image.mod/original/filesystem/; du -h -s --apparent-size usr/www/*)
435     usr/www/1und1
1,3M    usr/www/all
435     usr/www/aol
916K    usr/www/arcor
435     usr/www/avm
88K     usr/www/cgi-bin
435     usr/www/freenet
9       usr/www/html

Andreas
 
meinst du es wäre zu viel erbeten, wenn im mod da drauf eingegangen werden könnte??
frei nach dem motto wenn fon dann lösche...wenn xxx dann lösche was anderes?
 
Status
Für weitere Antworten geschlossen.
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.