[PATCH v2 2/3] gateway.d: Add configuration script for meta information

Adrian Schmutzler mail at adrianschmutzler.de
Do Mär 21 12:40:48 CET 2019


Hallo Fabian,

nochmal ich.
Ich habe heute morgen nochmal über die Sache nachgedacht und möchte einen konzeptionell anderen Ansatz vorschlagen:

Die /etc/config/fff wurde vor etwas mehr als einem Jahr eingerichtet, um die fff-spezifischen Settings aus den anderen config-Files zu bündeln, auch um das sysupgrade zu vereinfachen.

Nun haben wir mit /etc/config/gateway eine weitere Datei daneben, die im Prinzip dasselbe tut, nur für ein anderes Set von Parametern. Das ist eigentlich unnötig, ich würde daher vorschlagen, die Settings für gateways einfach mit in die /etc/config/fff zu integrieren.
Das hat eine Reihe von Vorteilen:
- Wir sparen uns doppelte Einträge wie in diesem Patch
- Wir müssen die Datei nicht extra beim sysupgrade behandeln, fff wird ohnehin migriert
- Wir haben weniger Differenz zwischen V2-Firmware und GW-Firmware
- Wir haben nach wie vor _eine_ Datei, die die ganze Gateway-Konfiguration enthält (weshalb du ja contact address etc. nochmal in die gateway-config schreiben wolltest)
- Man kann theoretisch sogar zwischen V2 und GW wechseln, weil die Datei immer die gleiche ist, die gateway-Blöcke würden dann einfach nicht ausgewertet, aber gingen beim sysupgrade nicht verloren

Umsetzen könnte man dies relativ leicht, indem man die beiden Eigenschaften der uci-Blöcke ausnutzt: Name und Typ. Du verwendest in deinem Beispiel ja effektiv den Typ als Namen: @gateway[0] .
In der fff könnte man dann jeweils "gateway" als Typ verwenden und den Namen zur Identifikation verwenden. Beispiel:

config fff 'system'
        option hostname 'FFF-GW-Adrian'
        option description 'powered by JU Bayreuth-Land'
        option latitude '49.92367351'
        option longitude '11.59524053'
        option position_comment 'Albert-Einstein-Ring 20'
        option contact 'bla'

config fff 'version'
        option config_version '1'

config gateway 'gateway'
        list admin 'Adrian'

config vlan '1'
        option comment 'client'
        option ports '1t 4 5'

config vlan '2'
        option comment 'wan'
        option ports '1t'

config vlan '3'
        option comment 'batman'
        option ports '1t 2 3'

config gateway 'client'
        option vlan '1'
        option ipaddr 'bla'
        option ip6addr 'bla'
        option dhcp_start 'bla'

config gateway 'dns'
        list server 'bla'
        list server 'bla'

config gateway 'batman'
        option vlan '3'

config wireguardpeer 'wiredresel'
        option endpoint_host 'xxx'
        option endpoint_port '31340'
        option persistent_keepalive '20'
        option public_key 'xxx'
        option private_key 'xxx'
        option fix_mtu '1'


Nachteil ist natürlich, dass dies von der bestehenden Lösung mit /etc/config/gateway (die ich im Moment auch verwende) abweicht, man also irgendwann mal konvertieren muss.

Ich glaube aber, dass die vorgeschlagene Lösung uns langfristig das Leben einfacher macht, und jetzt haben wir noch die Chance, es mit überschaubaren Änderungen ordentlich zu machen.

Von dem konkreten Patch hier würde dadurch alles außer "# set hostname" obsolet. An anderen Stelle müsste man halt jeweils das uci get anpassen....

Beste Grüße

Adrian


> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf Of
> Fabian Bläse
> Sent: Montag, 18. März 2019 22:54
> To: franken-dev at freifunk.net
> Subject: [PATCH v2 2/3] gateway.d: Add configuration script for meta
> information
> 
> This adds a configuration script for applying hostname,
> coordinates, hoodname and contact address.
> 
> Signed-off-by: Fabian Bläse <fabian at blaese.de>
> ---
>  .../fff-gateway/files/etc/gateway.d/01-meta   | 43 +++++++++++++++++++
>  1 file changed, 43 insertions(+)
>  create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/01-
> meta
> 
> diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/01-meta
> b/src/packages/fff/fff-gateway/files/etc/gateway.d/01-meta
> new file mode 100644
> index 0000000..1b4209b
> --- /dev/null
> +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/01-meta
> @@ -0,0 +1,43 @@
> +configure() {
> +	## set hostname
> +	if name=$(uci -q get gateway. at gateway[0].name); then
> +		uci -q set system. at system[0].hostname="$name"
> +		uci -q set fff.system.hostname="$name"
> +	else
> +		echo "WARNING: No gateway name set!"
> +	fi
> +
> +	## set contact
> +	if contact=$(uci -q get gateway. at gateway[0].contact); then
> +		uci -q set fff.system.contact="$contact"
> +	else
> +		echo "WARNING: No contact set!"
> +	fi
> +
> +	## set location
> +	if lat=$(uci -q get gateway. at gateway[0].latitude) && long=$(uci -q get
> gateway. at gateway[0].longitude); then
> +		uci -q set fff.system.latitude="$lat"
> +		uci -q set fff.system.longitude="$long"
> +	else
> +		echo "WARNING: No gateway location set!"
> +	fi
> +
> +	## hoodname
> +	if hood=$(uci -q get gateway. at gateway[0].hoodname); then
> +		echo "Setting hood name: $hood"
> +		uci -q set "system. at system[0].hood=$hood"
> +	else
> +		echo "WARNING: No hoodname set!"
> +	fi
> +}
> +
> +apply() {
> +	uci commit system
> +	uci commit fff
> +	echo "$(uci get "system. at system[0].hostname")" >
> /proc/sys/kernel/hostname
> +}
> +
> +revert() {
> +	uci revert system
> +	uci revert fff
> +}
> --
> 2.21.0
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : nicht verfügbar
Dateityp    : application/pgp-signature
Dateigröße  : 834 bytes
Beschreibung: nicht verfügbar
URL         : <https://{'listname': 'franken-dev-freifunk.net', 'hostname': 'lists.freifunk.net'}/pipermail/franken-dev-freifunk.net/attachments/20190321/75beb51b/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev