- 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
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
geändert werden kann. Eine Sicherheitsbarriere, mit der das Bearbeiten von Konfiguartionsdateien über das Webinterface eingeschränkt werden kann ist das "Sicherheits Level":
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'):
2. Eigene rc Skripte
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:
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
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:
5. Konfiguration
Jedes Paket besitzt ein Konfigurationsdatei /mod/etc/conf/<paketname>.cfg, welche wie folgt aufgebaut ist:
Sie enthält alle Optionen, die auch übers Webinterface eingestellt werden können und ist in Shell Syntax. Damit kann die aktuelle Konfiguration mit
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:
Das dauerhafte Abschalten des Webinterfaces geht damit so (Variable MOD_HTTPD in der Basis-Konfiguration 'mod'):
Soviel zur Veranschaulichung. Komfortabler ist folgendes:
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
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
- Allgemeines
- Eigene rc Skripte
- Eigene Dateien ins Image packen
- Eigene Pakete
- Konfiguration
- 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
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
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
Code:
-> rc.S
|-> rc.{dsl|net|viop|telefon|...}
|-> debug.cfg
'-> rc.mod
|-> rc.{bftpd|dropbear|...} (Pakete)
'-> rc.custom
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]
- 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>/
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>/*
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:
- Suche nach Skript /tmp/flash/bftpd_conf, welches die bftpd.conf als Ausgabe hat; existiert? -> goto 3.
- Führe Skript /etc/default.bftpd/bftpd_conf aus, die Ausgabe ergibt wie bei 2. die bftpd.conf (meistens ist dies der Fall)
- Existiert /tmp/flash/bftpd.conf.extra? -> füge sie an die in 1. oder 2. generierte bftpd.conf an
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'
...
Code:
. /mod/etc/conf/<paketname>.cfg
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
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
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: