So,
hier mal wieder eine "Testversion" der GUI.
Prinzipiell sollte nun alles drin sein und funktionieren, Fehler sind aber noch wahrscheinlich ;-)
Einiges vorweg:
- Da Oliver angedeutet hat, dass es demnächst keine eigene "lzo-Version" geben wird, habe ich alles auf ein Paket "openvpn" zugeschnitten
- Um mehrere Konfigs laufen zu haben musste ich einige der "originalen" ds-Dateien anpassen bzw ergänzen (speziell habe ich den Part für "dynamische Pakete" mal besetzt. Da gibt es sicher noch Diskussionsbedarf, ob das so gut/richtig/besser machbar wäre
- Grundsätzlich ist das ganze über ein "overlay" Verzeichnis realisiert, aus dem die neuen und geänderten Dateien per "fwmod_custom" kopiert werden. Falls ihr da schon was im custom-Script habt, müsst ihr das berücksichtigen
- Für die "Multikonfig" ist der "Expertenmodus" (unten) erforderlich
Grundsätzlich sind nun auch mehrere Konfigs möglich, das funktioniert wie folgt:
Es werden alle Konfigs "aneinander gehängt", jeweils die zughörigen Werte mit
# getrennt. Also z.B. "yes##yes#yes". Beim Speichern wird ausgewertet, welche Config(s) verändert wurde(n) und diese dann (wenn laufend) neu gestartet. Die Dateien selbst sind fast alle jeweils nur links, die über ihren "Aufrufenamen" gesteuert werden.
Vielleicht mache ich diese Hinweise nächste Woche mal etwas ausführlicher (nun ist es etwas spät, und morgen kann ich nicht), aber vielleich kann/möchte ja übers WE noch jemand es wagen zu Testen.
Was mir momentan noch als Erweiterung vorschwebt, ist eine Möglichkeit, pro Konfig eigene Keys/Zertifikate zu nutzen (Idee: ein Kontrollfeld "eigene Keys", aber wie die dann eingeben ?? Die "Einstellungen" Seite ist mir dafür zu voll, irgendwie müssten die Dateien dann aber auch im Mod "registriert" werden, oder?? Da bin ich für Ideen dankbar)
So, erstmal viel Spaß und meldet Anregungen und Fehler!
EDIT 20070903
Und hier mal ein paar "längere" Worte, was das so macht (oder machen sollte ;-)):
Es gibt ein neues Skript: "openvpn_dynamic_conf". Das Skript schaut nach zusätzlichen Openvpn-Configs in der Konfigurationsdatei. Sind die vorhanden, werden "dynamische" Pakete dafür angelegt:
- Ein Eintrag in der Datei /mod/etc/dynamic.pkg
- Anlegen des "Paket-Verzeichnisses" /mod/etc/default.openvpn_<Configname>
- Im Paketverzeichnis wird openvpn_conf (aus /tmp/flash/ oder default.openvpn) als "openvpn_<Configname>" verlinkt
- In /mod/etc/init.d wird ebenfalls ein Link angelegt rc.openvpn_<Configname> -> rc.openvpn
- Es wird eine "Mini-Config-Datei" /mod/etc/conf/openvpn_<Configname>.cfg angelegt, die nur den Wert für "ENABLED" enthält
- In /mod/sbin wird ein Programm-Link openvpn_<Configname> angelegt (um einen "eindeutigen" Namen zum "Killen" des Prozesses zu haben)
- "Alte Config-Pakete", die nicht in der jetzingen Konfigurationsdatei sind, werden gelöscht
Die Skripte leiten, wie schon gesagt, ihre Funktion auf dem Aufrufstring heraus ab und "wirken nur auf ihre Config"
Beim ersten Start (aus rc.openvpn heraus) und nach jedem "übernehmen" (aus save.cgi heraus) wird "openvpn_dynamic_conf" aufgerufen. Beim Start schaut das veränderte "mod.cgi" nicht nur nach Paketen in /etc/static.pkg sondern ebenfalls nach solchen in /mod/etc/dynamic.pgk und startet die, die auf ENABLED="yes" stehen.
Damit die Dienste angezeigt werden, wurde daemons.cgi ebenfalls "erweitert", inderm der Teil für statische Pakete auch für dynamische (angepasst) kopiert wurde.
Eine etwas größere Änderung gab es noch in save.cgi. Hier wird nun vielfach openvpn als "Sonderfall" behandelt: Vor dem Speichern wird die alte Konfigurationsdatei eingelesen, um dann danach festzustellen, ob und in welcher OpenVPN-Config sich etwas verändert hat. Ziel ist es, dass ich auch nur die Dienste neu starte, bei denen eine Änderung war und nicht gleich alle.
Im CGI-Skript selber habe ich im Großen und Ganzen hauptsächlich die Veränderung vorgenommen, dass ich alle Werte in einem Array speichere. Angezeigt werden dann jeweils nur die Werte/Einstellungen der aktuell ausgewählten Config und die Werte zum "Auslesen" durch den Mod sind "hidden" Felder, die alle Werte per "#" aueinandergeschrieben enthalten.
Das _conf Script (was dann ja im Aufruf den Config-Namen enthält) sucht sich dann immer die "zugehörige" Konfiguration zur Bearbeitung heraus.
Jörg