[v12,1/5] Rearrange fff config values into their own config file

Submitted by Adrian Schmutzler on Nov. 3, 2017, 2 p.m.

Details

Message ID 1509717604-3898-1-git-send-email-freifunk@adrianschmutzler.de
State Accepted
Headers show

Commit Message

Adrian Schmutzler Nov. 3, 2017, 2 p.m.
This moves the FFF configuration from
/etc/config/system to a new file /etc/config/fff. Thus,
this file can be copied as a whole during upgrade (with
compatibility provided) and then resulting values in
other files are re-set later.

This also fixes the bandwidth settings not being persistent
during upgrade. Other settings may join ...

I tried to go through all the code and update all occurrences
of the relevant system variables (looking for "system" both
in GitHub and my local src folder).

Note that a downgrade will result in loss of configuration!

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>

---

Changes in v11:
 - Redesign for keyexchange v2.

Changes in v12:
 - Removed downgrade script
 - Changed default hostname to FFF
 - Rename FFF to $mac in nodewatcher
 - Also update variables in show_info
---
 src/packages/fff/fff-config/Makefile               | 40 ++++++++++++++++++++++
 .../files/etc/uci-defaults/98-configure-fff        | 25 ++++++++++++++
 src/packages/fff/fff-hoods/Makefile                |  2 +-
 .../fff/fff-hoods/files/usr/sbin/configurehood     |  4 +--
 src/packages/fff/fff-nodewatcher/Makefile          |  4 +--
 .../fff/fff-nodewatcher/files/usr/sbin/nodewatcher | 21 ++++++------
 .../fff/fff-support/files/usr/sbin/show_info       | 12 +++----
 src/packages/fff/fff-sysupgrade/Makefile           |  2 +-
 .../etc/uci-defaults/05-config-system-migration    | 36 +++++++++++--------
 .../files/etc/uci-defaults/99-fff-sysupgrade       |  2 +-
 src/packages/fff/fff-web/Makefile                  |  4 +--
 .../fff-web/files/www/public/cgi-bin/status.html   | 12 +++----
 .../fff/fff-web/files/www/ssl/cgi-bin/header       |  2 +-
 .../fff-web/files/www/ssl/cgi-bin/settings.html    | 39 ++++++++++++---------
 src/packages/fff/fff/Makefile                      |  1 +
 15 files changed, 143 insertions(+), 63 deletions(-)
 create mode 100644 src/packages/fff/fff-config/Makefile
 create mode 100644 src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-config/Makefile b/src/packages/fff/fff-config/Makefile
new file mode 100644
index 0000000..fe4f5df
--- /dev/null
+++ b/src/packages/fff/fff-config/Makefile
@@ -0,0 +1,40 @@ 
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=fff-config
+PKG_VERSION:=1
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/$(PKG_NAME)
+    SECTION:=base
+    CATEGORY:=Freifunk
+    TITLE:=Freifunk-Franken Config
+    URL:=http://www.freifunk-franken.de
+    DEPENDS:=+fff-boardname +@BUSYBOX_CONFIG_WGET
+endef
+
+define Package/$(PKG_NAME)/description
+    This is the Freifunk Franken Firmware Config package.
+    This packages provides utilities for a central FFF config file.
+endef
+
+define Build/Prepare
+    echo "all: " > $(PKG_BUILD_DIR)/Makefile
+endef
+
+define Build/Configure
+    # nothing
+endef
+
+define Build/Compile
+    # nothing
+endef
+
+define Package/$(PKG_NAME)/install
+    $(CP) ./files/* $(1)/
+endef
+
+$(eval $(call BuildPackage,$(PKG_NAME)))
diff --git a/src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff b/src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff
new file mode 100644
index 0000000..677da15
--- /dev/null
+++ b/src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff
@@ -0,0 +1,25 @@ 
+#!/bin/sh
+# Copyright 2017 Adrian Schmutzler
+# License GPLv3
+
+touch /etc/config/fff
+
+if ! uci -q get fff.system > /dev/null ; then
+	uci -q set fff.system=fff
+	uci -q set "fff.system.hostname=FFF"
+fi
+
+FFF_hostname=$(uci -q get "fff.system.hostname")
+test -n "${FFF_hostname}" && uci -q set "system.@system[0].hostname=${FFF_hostname}"
+test -n "${FFF_hostname}" && echo "${FFF_hostname}" > /proc/sys/kernel/hostname
+
+traffic_enabled=$(uci -q get "fff.trafficcontrol.enabled")
+traffic_in=$(uci -q get "fff.trafficcontrol.limit_in")
+traffic_out=$(uci -q get "fff.trafficcontrol.limit_out")
+
+test -n "${traffic_enabled}" && uci -q set "simple-tc.example.enabled=${traffic_enabled}"
+uci -q set "simple-tc.example.ifname=wan"
+uci -q set "simple-tc.example.limit_ingress=${traffic_in}"
+uci -q set "simple-tc.example.limit_egress=${traffic_out}"
+
+uci -q commit
diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile
index dd22df4..11ab6d1 100644
--- a/src/packages/fff/fff-hoods/Makefile
+++ b/src/packages/fff/fff-hoods/Makefile
@@ -13,7 +13,7 @@  define Package/$(PKG_NAME)
     CATEGORY:=Freifunk
     TITLE:= Freifunk-Franken hoods
     URL:=http://www.freifunk-franken.de
-    DEPENDS:=+fff-network
+    DEPENDS:=+fff-network +fff-config
 endef
 
 define Package/$(PKG_NAME)/description
diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
index f785b7d..aeec401 100755
--- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
+++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
@@ -60,8 +60,8 @@  if [ -f "$hiddenapfile" ]; then
 	rm "$hiddenapfile"
 fi
 
-lat=$(uci -q get system.@system[0].latitude)
-long=$(uci -q get system.@system[0].longitude)
+lat=$(uci -q get fff.system.latitude)
+long=$(uci -q get fff.system.longitude)
 
 # if we have Internet, we download the Hoodfile from the keyxchangev2
 if hasInternet ; then
diff --git a/src/packages/fff/fff-nodewatcher/Makefile b/src/packages/fff/fff-nodewatcher/Makefile
index 79cb917..7bfd08e 100644
--- a/src/packages/fff/fff-nodewatcher/Makefile
+++ b/src/packages/fff/fff-nodewatcher/Makefile
@@ -1,7 +1,7 @@ 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fff-nodewatcher
-PKG_VERSION:=41
+PKG_VERSION:=43
 PKG_RELEASE:=1
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
@@ -13,7 +13,7 @@  define Package/$(PKG_NAME)
     CATEGORY:=Freifunk
     TITLE:= Freifunk-Franken Nodewatcher
     URL:=http://www.freifunk-franken.de
-    DEPENDS:=+alfred +micrond +fff-random +ip +ip-bridge
+    DEPENDS:=+alfred +micrond +fff-config +fff-random +ip +ip-bridge
 endef
 
 define Package/$(PKG_NAME)/description
diff --git a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
index 35adf91..e4a9bc9 100755
--- a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
+++ b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
@@ -2,7 +2,7 @@ 
 # Netmon Nodewatcher (C) 2010-2012 Freifunk Oldenburg
 # License; GPL v3
 
-SCRIPT_VERSION="41"
+SCRIPT_VERSION="43"
 
 test -f /tmp/started || exit
 
@@ -58,20 +58,21 @@  crawl() {
     hostname="$(cat /proc/sys/kernel/hostname)"
     mac=$(awk '{ mac=toupper($1); gsub(":", "", mac); print mac }' /sys/class/net/br-mesh/address 2>/dev/null)
     [ "$hostname" = "LEDE" ] && hostname="$mac"
-    description="$(uci get system.@system[0].description)"
+    [ "$hostname" = "FFF" ] && hostname="$mac"
+    description="$(uci -q get fff.system.description)"
     if [ -n "$description" ]; then
         description="<description><![CDATA[$description]]></description>"
     fi
-    latitude="$(uci get system.@system[0].latitude)"
-    longitude="$(uci get system.@system[0].longitude)"
+    latitude="$(uci -q get fff.system.latitude)"
+    longitude="$(uci -q get fff.system.longitude)"
     if [ -n "$longitude" -a -n "$latitude" ]; then
         geo="<geo><lat>$latitude</lat><lng>$longitude</lng></geo>";
     fi
-    position_comment="$(uci get system.@system[0].position_comment)"
+    position_comment="$(uci -q get fff.system.position_comment)"
     if [ -n "$position_comment" ]; then
         position_comment="<position_comment><![CDATA[$position_comment]]></position_comment>"
     fi
-    contact="$(uci get system.@system[0].contact)"
+    contact="$(uci -q get fff.system.contact)"
     if [ -n "$contact" ]; then
         contact="<contact>$contact</contact>"
     fi
@@ -137,10 +138,10 @@  crawl() {
     SYSTEM_DATA=$SYSTEM_DATA"${geo}"
     SYSTEM_DATA=$SYSTEM_DATA"${position_comment}"
     SYSTEM_DATA=$SYSTEM_DATA"${contact}"
-    if [ "$(uci -q get "system.@system[0].hood")" ] 
-    then                                                                                                                         
-        SYSTEM_DATA=$SYSTEM_DATA"<hood>$(uci -q get "system.@system[0].hood")</hood>"                                            
-    fi  
+    if [ "$(uci -q get "system.@system[0].hood")" ]
+    then
+        SYSTEM_DATA=$SYSTEM_DATA"<hood>$(uci -q get "system.@system[0].hood")</hood>"
+    fi
     SYSTEM_DATA=$SYSTEM_DATA"<distname>$distname</distname>"
     SYSTEM_DATA=$SYSTEM_DATA"<distversion>$distversion</distversion>"
     SYSTEM_DATA=$SYSTEM_DATA"$cpu"
diff --git a/src/packages/fff/fff-support/files/usr/sbin/show_info b/src/packages/fff/fff-support/files/usr/sbin/show_info
index 3914391..58c6853 100755
--- a/src/packages/fff/fff-support/files/usr/sbin/show_info
+++ b/src/packages/fff/fff-support/files/usr/sbin/show_info
@@ -4,7 +4,7 @@ 
 
 board_name=$(uci -q get board.model.name)
 
-HOSTNAME=$(uci -q get 'system.@system[0].hostname')
+HOSTNAME=$(uci -q get 'fff.system.hostname')
 
 human_bytes() {
 	while read B ; do
@@ -140,11 +140,11 @@  echo "IPv6 Adressen: $(addr 6 $wanif)"
 echo ""
 echo "-> EINSTELLUNGEN"
 echo "Knotenname: ${HOSTNAME}"
-echo "Knotenbeschreibung: $(uci -q get 'system.@system[0].description')"
-echo "GPS Breitengrad: $(uci -q get 'system.@system[0].latitude')"
-echo "GPS Laengengrad: $(uci -q get 'system.@system[0].longitude')"
-echo "Standortbeschreibung: $(uci -q get 'system.@system[0].position_comment')"
-echo "E-Mail Adresse: $(uci -q get 'system.@system[0].contact')"
+echo "Knotenbeschreibung: $(uci -q get 'fff.system.description')"
+echo "GPS Breitengrad: $(uci -q get 'fff.system.latitude')"
+echo "GPS Laengengrad: $(uci -q get 'fff.system.longitude')"
+echo "Standortbeschreibung: $(uci -q get 'fff.system.position_comment')"
+echo "E-Mail Adresse: $(uci -q get 'fff.system.contact')"
 
 echo ""
 echo "-> BITRATEN-BEGRENZUNG"
diff --git a/src/packages/fff/fff-sysupgrade/Makefile b/src/packages/fff/fff-sysupgrade/Makefile
index ab809c9..b2e1ffa 100644
--- a/src/packages/fff/fff-sysupgrade/Makefile
+++ b/src/packages/fff/fff-sysupgrade/Makefile
@@ -13,7 +13,7 @@  define Package/$(PKG_NAME)
     CATEGORY:=Freifunk
     TITLE:=Freifunk-Franken sysupgrade
     URL:=http://www.freifunk-franken.de
-    DEPENDS:=+fff-boardname +fff-hoods +@BUSYBOX_CONFIG_WGET
+    DEPENDS:=+fff-boardname +fff-config +fff-hoods +@BUSYBOX_CONFIG_WGET
 endef
 
 define Package/$(PKG_NAME)/description
diff --git a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration
index 0e36587..fe4ad97 100644
--- a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration
+++ b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration
@@ -1,21 +1,27 @@ 
 #!/bin/sh
 
-UPGRADE_hostname=$(uci -q get "system.@system[0].hostname")
-UPGRADE_description=$(uci -q get "system.@system[0].description")
-UPGRADE_latitude=$(uci -q get "system.@system[0].latitude")
-UPGRADE_longitude=$(uci -q get "system.@system[0].longitude")
-UPGRADE_position_comment=$(uci -q get "system.@system[0].position_comment")
-UPGRADE_contact=$(uci -q get "system.@system[0].contact")
+if [ ! -s /etc/config/fff ] ; then
 
-/bin/rm -rf /etc/config/system
+	UPGRADE_hostname=$(uci -q get "system.@system[0].hostname")
+	UPGRADE_description=$(uci -q get "system.@system[0].description")
+	UPGRADE_latitude=$(uci -q get "system.@system[0].latitude")
+	UPGRADE_longitude=$(uci -q get "system.@system[0].longitude")
+	UPGRADE_position_comment=$(uci -q get "system.@system[0].position_comment")
+	UPGRADE_contact=$(uci -q get "system.@system[0].contact")
 
-/bin/config_generate
+	/bin/rm -rf /etc/config/system
+	
+	/bin/config_generate
 
-test -n "${UPGRADE_hostname}" && uci -q set "system.@system[0].hostname=${UPGRADE_hostname}"
-test -n "${UPGRADE_description}" && uci -q set "system.@system[0].description=${UPGRADE_description}"
-test -n "${UPGRADE_latitude}" && uci -q set "system.@system[0].latitude=${UPGRADE_latitude}"
-test -n "${UPGRADE_longitude}" && uci -q set "system.@system[0].longitude=${UPGRADE_longitude}"
-test -n "${UPGRADE_position_comment}" && uci -q set "system.@system[0].position_comment=${UPGRADE_position_comment}"
-test -n "${UPGRADE_contact}" && uci -q set "system.@system[0].contact=${UPGRADE_contact}"
+	touch /etc/config/fff
 
-uci -q commit system
+	uci -q set fff.system=fff
+	test -n "${UPGRADE_hostname}" && uci -q set "fff.system.hostname=${UPGRADE_hostname}"
+	test -n "${UPGRADE_description}" && uci -q set "fff.system.description=${UPGRADE_description}"
+	test -n "${UPGRADE_latitude}" && uci -q set "fff.system.latitude=${UPGRADE_latitude}"
+	test -n "${UPGRADE_longitude}" && uci -q set "fff.system.longitude=${UPGRADE_longitude}"
+	test -n "${UPGRADE_position_comment}" && uci -q set "fff.system.position_comment=${UPGRADE_position_comment}"
+	test -n "${UPGRADE_contact}" && uci -q set "fff.system.contact=${UPGRADE_contact}"
+
+	uci -q commit fff
+fi
diff --git a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
index ab6f2de..847ce1e 100644
--- a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
+++ b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
@@ -8,5 +8,5 @@  cat > /etc/sysupgrade.conf <<-__EOF__
 /etc/dropbear/dropbear_rsa_host_key
 /etc/dropbear/authorized_keys
 /etc/network.config
-/etc/config/system
+/etc/config/fff
 __EOF__
diff --git a/src/packages/fff/fff-web/Makefile b/src/packages/fff/fff-web/Makefile
index 708dbb9..d7201e2 100644
--- a/src/packages/fff/fff-web/Makefile
+++ b/src/packages/fff/fff-web/Makefile
@@ -1,7 +1,7 @@ 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fff-web
-PKG_VERSION:=0.0.4
+PKG_VERSION:=5
 PKG_RELEASE:=2
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
@@ -13,7 +13,7 @@  define Package/$(PKG_NAME)
     CATEGORY:=Freifunk
     TITLE:= Freifunk-Franken Webinterface
     URL:=http://www.freifunk-franken.de
-    DEPENDS:=+uhttpd +libustream-mbedtls +haserl +px5g +simple-tc +fff-boardname +fff-network
+    DEPENDS:=+uhttpd +libustream-mbedtls +haserl +px5g +simple-tc +fff-boardname +fff-config +fff-network
 endef
 
 define Package/$(PKG_NAME)/description
diff --git a/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html b/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html
index f96846c..96d657b 100755
--- a/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html
+++ b/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html
@@ -2,13 +2,13 @@ 
 
 <%
 echo -en "Content-Type: text/html\r\n\r\n"
-HOSTNAME=$(uci -q get 'system.@system[0].hostname')
+HOSTNAME="$(uci -q get "fff.system.hostname")"
 hood="$(uci -q get "system.@system[0].hood")"
 
 MAC="$(uci -q get network.mesh.macaddr)"
-lat="$(uci -q get system.@system[0].latitude)"
-lon="$(uci -q get system.@system[0].longitude)"
-contact="$(uci -q get system.@system[0].contact)"
+lat="$(uci -q get "fff.system.latitude")"
+lon="$(uci -q get "fff.system.longitude")"
+contact="$(uci -q get "fff.system.contact")"
 
 . /etc/firmware_release
 
@@ -48,11 +48,11 @@  contact="$(uci -q get system.@system[0].contact)"
 								<tr><th>MAC-Adresse:</th><td style="text-transform: uppercase;"><a href="https://monitoring.freifunk-franken.de/api/get_router_by_mac/<%= $MAC %>"><%= $MAC %></a></td></tr>
 								<tr><th>Modell:</th><td><% cat /tmp/sysinfo/model 2>/dev/null %></td></tr>
 								<tr><th>Firmware:</th><td><%= ${FIRMWARE_VERSION} %></td></tr>
-								<tr><th>Beschreibung:</th><td><% uci -q get 'system.@system[0].description' %></td></tr>
+								<tr><th>Beschreibung:</th><td><% uci -q get 'fff.system.description' %></td></tr>
 								<tr><th>Position:</th><td><% if [ -n "$lat" -a -n "$lon" ]; then
 									echo "<a href=\"https://monitoring.freifunk-franken.de/map?mapcenter=$lat,$lon,16\">${lat:0:8}N, ${lon:0:8}E</a>"
 								fi %></td></tr>
-								<tr><th>Standort:</th><td><% uci -q get 'system.@system[0].position_comment' %></td></tr>
+								<tr><th>Standort:</th><td><% uci -q get 'fff.system.position_comment' %></td></tr>
 								<tr><th>E-Mail Adresse:</th><td><a href="mailto:<%= $contact %>"><%= $contact %></a></td></tr>
 							</table>
 						</fieldset>
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
index c327013..f98a3f3 100755
--- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
@@ -12,7 +12,7 @@  nav_entry() {
 	echo -ne "\t<li${class_active}><a href=\"${script_file}\">$2</a></li>\n\t\t"
 }
 
-HOSTNAME=$(uci -q get 'system.@system[0].hostname')
+HOSTNAME="$(uci -q get "fff.system.hostname")"
 hood="$(uci -q get "system.@system[0].hood")"
 
 NOW=$(date +%s)
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
index e7bc3e9..b785aed 100755
--- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
@@ -13,25 +13,32 @@  if [ "$REQUEST_METHOD" == "POST" ] ; then
 		MSG='<span class="red">Knotenname enth&auml;lt ung&uuml;ltige Zeichen!</span>'
 	else
 		# Allgemeine Einstellungen
+		uci -q set "fff.system.hostname=${POST_hostname}"
+		echo "$(uci -q get "fff.system.hostname")" > /proc/sys/kernel/hostname
 		uci -q set "system.@system[0].hostname=${POST_hostname}"
-		echo "$(uci -q get "system.@system[0].hostname")" > /proc/sys/kernel/hostname
-		uci -q set "system.@system[0].description=${POST_description}"
-		uci -q set "system.@system[0].latitude=${POST_latitude}"
-		uci -q set "system.@system[0].longitude=${POST_longitude}"
-		uci -q set "system.@system[0].position_comment=${POST_position_comment}"
-		uci -q set "system.@system[0].contact=${POST_contact}"
+		uci -q set "fff.system.description=${POST_description}"
+		uci -q set "fff.system.latitude=${POST_latitude}"
+		uci -q set "fff.system.longitude=${POST_longitude}"
+		uci -q set "fff.system.position_comment=${POST_position_comment}"
+		uci -q set "fff.system.contact=${POST_contact}"
 
 		# Bitratenbegrenzung
+		uci -q get "fff.trafficcontrol" > /dev/null || uci -q set fff.trafficcontrol=fff
 		if [ "$POST_traffic_limit" == "on" ] ; then
-			uci -q set "simple-tc.example.ifname=wan"
+			uci -q set "fff.trafficcontrol.enabled=1"
 			uci -q set "simple-tc.example.enabled=1"
 		else
+			uci -q set "fff.trafficcontrol.enabled=0"
 			uci -q set "simple-tc.example.enabled=0"
 		fi
+		uci -q set "fff.trafficcontrol.limit_in=${POST_limit_ingress}"
+		uci -q set "fff.trafficcontrol.limit_out=${POST_limit_egress}"
+		
+		uci -q set "simple-tc.example.ifname=wan"
 		uci -q set "simple-tc.example.limit_ingress=${POST_limit_ingress}"
 		uci -q set "simple-tc.example.limit_egress=${POST_limit_egress}"
 
-		uci commit
+		uci -q commit
 
 		MSG='<span class="green">Daten gespeichert! - Bitte Router neustarten.</span>'
 	fi
@@ -41,7 +48,7 @@  fi
 <%in /www/ssl/cgi-bin/helpers %>
 <%
 # read
-if [ "$(uci -q get 'simple-tc.example.enabled')" == "1" ] ; then
+if [ "$(uci -q get 'fff.trafficcontrol.enabled')" == "1" ] ; then
 	traffic_checked='checked="checked" '
 else
 	traffic_checked=""
@@ -55,16 +62,16 @@  fi
 	<legend>Allgemeine Einstellungen</legend>
 	<table>
 		<tr><th>Knotenname:</th><td><input type="text" name="hostname" value="<%= ${HOSTNAME} %>" /></td></tr>
-		<tr><th>Knotenbeschreibung:</th><td><input type="text" name="description" value="<%= $(uci -q get 'system.@system[0].description') %>" /></td></tr>
+		<tr><th>Knotenbeschreibung:</th><td><input type="text" name="description" value="<%= $(uci -q get 'fff.system.description') %>" /></td></tr>
 		<tr><th>GPS Breitengrad:</th>
-			<td><input type="text" name="latitude" value="<%= $(uci -q get 'system.@system[0].latitude') %>" /></td>
+			<td><input type="text" name="latitude" value="<%= $(uci -q get 'fff.system.latitude') %>" /></td>
 			<td rowspan="2" style="vertical-align: middle;">
 				<button type="button" style="height: 100%; width: 126px; margin-left: 5px;" onclick="window.open('/map.html', '_blank', 'location=0,status=0,scrollbars=1,width=400,height=300');">Position auf Karte anzeigen / setzen</button>
 			</td>
 		</tr>
-		<tr><th>GPS L&auml;ngengrad:</th><td><input type="text" name="longitude" value="<%= $(uci -q get 'system.@system[0].longitude') %>" /></td></tr>
-		<tr><th>Standortbeschreibung:</th><td><input type="text" name="position_comment" value="<%= $(uci -q get 'system.@system[0].position_comment') %>" /></td></tr>
-		<tr><th>E-Mail Adresse:</th><td><input type="email" name="contact" value="<%= $(uci -q get 'system.@system[0].contact') %>" /></td></tr>
+		<tr><th>GPS L&auml;ngengrad:</th><td><input type="text" name="longitude" value="<%= $(uci -q get 'fff.system.longitude') %>" /></td></tr>
+		<tr><th>Standortbeschreibung:</th><td><input type="text" name="position_comment" value="<%= $(uci -q get 'fff.system.position_comment') %>" /></td></tr>
+		<tr><th>E-Mail Adresse:</th><td><input type="email" name="contact" value="<%= $(uci -q get 'fff.system.contact') %>" /></td></tr>
 	</table>
 </fieldset>
 </td><td>
@@ -74,8 +81,8 @@  fi
 		<tr><th>Aktiviert:</th><td colspan="2">
 			<input type="checkbox" name="traffic_limit" <%= ${traffic_checked} %>/>
 		</td></tr>
-		<tr><th>Freifunk&nbsp;Download:</th><td><input type="text" name="limit_ingress" value="<%= $(uci -q get 'simple-tc.example.limit_ingress') %>" /></td><td>kbit/s</td></tr>
-		<tr><th>Freifunk&nbsp;Upload:</th><td><input type="text" name="limit_egress" value="<%= $(uci -q get 'simple-tc.example.limit_egress') %>" /></td><td>kbit/s</td></tr>
+		<tr><th>Freifunk&nbsp;Download:</th><td><input type="text" name="limit_ingress" value="<%= $(uci -q get 'fff.trafficcontrol.limit_in') %>" /></td><td>kbit/s</td></tr>
+		<tr><th>Freifunk&nbsp;Upload:</th><td><input type="text" name="limit_egress" value="<%= $(uci -q get 'fff.trafficcontrol.limit_out') %>" /></td><td>kbit/s</td></tr>
 	</table>
 </fieldset>
 </td></tr>
diff --git a/src/packages/fff/fff/Makefile b/src/packages/fff/fff/Makefile
index 305ab8d..dce33f9 100644
--- a/src/packages/fff/fff/Makefile
+++ b/src/packages/fff/fff/Makefile
@@ -18,6 +18,7 @@  define Package/fff-base
              +ip6tables \
              +odhcp6c \
              +micrond \
+             +fff-config \
              +fff-nodewatcher \
              +fff-web \
              +fff-uradvd \

Comments

Tim Niemeyer Nov. 12, 2017, 7:02 p.m.
Hi

Reviewed-by: Tim Niemeyer <tim@tn-x.org>

Tim

Am Freitag, den 03.11.2017, 15:00 +0100 schrieb Adrian Schmutzler:
> This moves the FFF configuration from
> /etc/config/system to a new file /etc/config/fff. Thus,
> this file can be copied as a whole during upgrade (with
> compatibility provided) and then resulting values in
> other files are re-set later.
> 
> This also fixes the bandwidth settings not being persistent
> during upgrade. Other settings may join ...
> 
> I tried to go through all the code and update all occurrences
> of the relevant system variables (looking for "system" both
> in GitHub and my local src folder).
> 
> Note that a downgrade will result in loss of configuration!
> 
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> 
> ---
> 
> Changes in v11:
>  - Redesign for keyexchange v2.
> 
> Changes in v12:
>  - Removed downgrade script
>  - Changed default hostname to FFF
>  - Rename FFF to $mac in nodewatcher
>  - Also update variables in show_info
> ---
>  src/packages/fff/fff-config/Makefile               | 40 ++++++++++++++++++++++
>  .../files/etc/uci-defaults/98-configure-fff        | 25 ++++++++++++++
>  src/packages/fff/fff-hoods/Makefile                |  2 +-
>  .../fff/fff-hoods/files/usr/sbin/configurehood     |  4 +--
>  src/packages/fff/fff-nodewatcher/Makefile          |  4 +--
>  .../fff/fff-nodewatcher/files/usr/sbin/nodewatcher | 21 ++++++------
>  .../fff/fff-support/files/usr/sbin/show_info       | 12 +++----
>  src/packages/fff/fff-sysupgrade/Makefile           |  2 +-
>  .../etc/uci-defaults/05-config-system-migration    | 36 +++++++++++--------
>  .../files/etc/uci-defaults/99-fff-sysupgrade       |  2 +-
>  src/packages/fff/fff-web/Makefile                  |  4 +--
>  .../fff-web/files/www/public/cgi-bin/status.html   | 12 +++----
>  .../fff/fff-web/files/www/ssl/cgi-bin/header       |  2 +-
>  .../fff-web/files/www/ssl/cgi-bin/settings.html    | 39 ++++++++++++---------
>  src/packages/fff/fff/Makefile                      |  1 +
>  15 files changed, 143 insertions(+), 63 deletions(-)
>  create mode 100644 src/packages/fff/fff-config/Makefile
>  create mode 100644 src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff
> 
> diff --git a/src/packages/fff/fff-config/Makefile b/src/packages/fff/fff-config/Makefile
> new file mode 100644
> index 0000000..fe4f5df
> --- /dev/null
> +++ b/src/packages/fff/fff-config/Makefile
> @@ -0,0 +1,40 @@
> +include $(TOPDIR)/rules.mk
> +
> +PKG_NAME:=fff-config
> +PKG_VERSION:=1
> +PKG_RELEASE:=1
> +
> +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> +
> +include $(INCLUDE_DIR)/package.mk
> +
> +define Package/$(PKG_NAME)
> +    SECTION:=base
> +    CATEGORY:=Freifunk
> +    TITLE:=Freifunk-Franken Config
> +    URL:=http://www.freifunk-franken.de
> +    DEPENDS:=+fff-boardname +@BUSYBOX_CONFIG_WGET
> +endef
> +
> +define Package/$(PKG_NAME)/description
> +    This is the Freifunk Franken Firmware Config package.
> +    This packages provides utilities for a central FFF config file.
> +endef
> +
> +define Build/Prepare
> +    echo "all: " > $(PKG_BUILD_DIR)/Makefile
> +endef
> +
> +define Build/Configure
> +    # nothing
> +endef
> +
> +define Build/Compile
> +    # nothing
> +endef
> +
> +define Package/$(PKG_NAME)/install
> +    $(CP) ./files/* $(1)/
> +endef
> +
> +$(eval $(call BuildPackage,$(PKG_NAME)))
> diff --git a/src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff b/src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff
> new file mode 100644
> index 0000000..677da15
> --- /dev/null
> +++ b/src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff
> @@ -0,0 +1,25 @@
> +#!/bin/sh
> +# Copyright 2017 Adrian Schmutzler
> +# License GPLv3
> +
> +touch /etc/config/fff
> +
> +if ! uci -q get fff.system > /dev/null ; then
> +	uci -q set fff.system=fff
> +	uci -q set "fff.system.hostname=FFF"
> +fi
> +
> +FFF_hostname=$(uci -q get "fff.system.hostname")
> +test -n "${FFF_hostname}" && uci -q set "system.@system[0].hostname=${FFF_hostname}"
> +test -n "${FFF_hostname}" && echo "${FFF_hostname}" > /proc/sys/kernel/hostname
> +
> +traffic_enabled=$(uci -q get "fff.trafficcontrol.enabled")
> +traffic_in=$(uci -q get "fff.trafficcontrol.limit_in")
> +traffic_out=$(uci -q get "fff.trafficcontrol.limit_out")
> +
> +test -n "${traffic_enabled}" && uci -q set "simple-tc.example.enabled=${traffic_enabled}"
> +uci -q set "simple-tc.example.ifname=wan"
> +uci -q set "simple-tc.example.limit_ingress=${traffic_in}"
> +uci -q set "simple-tc.example.limit_egress=${traffic_out}"
> +
> +uci -q commit
> diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile
> index dd22df4..11ab6d1 100644
> --- a/src/packages/fff/fff-hoods/Makefile
> +++ b/src/packages/fff/fff-hoods/Makefile
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:= Freifunk-Franken hoods
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+fff-network
> +    DEPENDS:=+fff-network +fff-config
>  endef
>  
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> index f785b7d..aeec401 100755
> --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> @@ -60,8 +60,8 @@ if [ -f "$hiddenapfile" ]; then
>  	rm "$hiddenapfile"
>  fi
>  
> -lat=$(uci -q get system.@system[0].latitude)
> -long=$(uci -q get system.@system[0].longitude)
> +lat=$(uci -q get fff.system.latitude)
> +long=$(uci -q get fff.system.longitude)
>  
>  # if we have Internet, we download the Hoodfile from the keyxchangev2
>  if hasInternet ; then
> diff --git a/src/packages/fff/fff-nodewatcher/Makefile b/src/packages/fff/fff-nodewatcher/Makefile
> index 79cb917..7bfd08e 100644
> --- a/src/packages/fff/fff-nodewatcher/Makefile
> +++ b/src/packages/fff/fff-nodewatcher/Makefile
> @@ -1,7 +1,7 @@
>  include $(TOPDIR)/rules.mk
>  
>  PKG_NAME:=fff-nodewatcher
> -PKG_VERSION:=41
> +PKG_VERSION:=43
>  PKG_RELEASE:=1
>  
>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:= Freifunk-Franken Nodewatcher
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+alfred +micrond +fff-random +ip +ip-bridge
> +    DEPENDS:=+alfred +micrond +fff-config +fff-random +ip +ip-bridge
>  endef
>  
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
> index 35adf91..e4a9bc9 100755
> --- a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
> +++ b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
> @@ -2,7 +2,7 @@
>  # Netmon Nodewatcher (C) 2010-2012 Freifunk Oldenburg
>  # License; GPL v3
>  
> -SCRIPT_VERSION="41"
> +SCRIPT_VERSION="43"
>  
>  test -f /tmp/started || exit
>  
> @@ -58,20 +58,21 @@ crawl() {
>      hostname="$(cat /proc/sys/kernel/hostname)"
>      mac=$(awk '{ mac=toupper($1); gsub(":", "", mac); print mac }' /sys/class/net/br-mesh/address 2>/dev/null)
>      [ "$hostname" = "LEDE" ] && hostname="$mac"
> -    description="$(uci get system.@system[0].description)"
> +    [ "$hostname" = "FFF" ] && hostname="$mac"
> +    description="$(uci -q get fff.system.description)"
>      if [ -n "$description" ]; then
>          description="<description><![CDATA[$description]]></description>"
>      fi
> -    latitude="$(uci get system.@system[0].latitude)"
> -    longitude="$(uci get system.@system[0].longitude)"
> +    latitude="$(uci -q get fff.system.latitude)"
> +    longitude="$(uci -q get fff.system.longitude)"
>      if [ -n "$longitude" -a -n "$latitude" ]; then
>          geo="<geo><lat>$latitude</lat><lng>$longitude</lng></geo>";
>      fi
> -    position_comment="$(uci get system.@system[0].position_comment)"
> +    position_comment="$(uci -q get fff.system.position_comment)"
>      if [ -n "$position_comment" ]; then
>          position_comment="<position_comment><![CDATA[$position_comment]]></position_comment>"
>      fi
> -    contact="$(uci get system.@system[0].contact)"
> +    contact="$(uci -q get fff.system.contact)"
>      if [ -n "$contact" ]; then
>          contact="<contact>$contact</contact>"
>      fi
> @@ -137,10 +138,10 @@ crawl() {
>      SYSTEM_DATA=$SYSTEM_DATA"${geo}"
>      SYSTEM_DATA=$SYSTEM_DATA"${position_comment}"
>      SYSTEM_DATA=$SYSTEM_DATA"${contact}"
> -    if [ "$(uci -q get "system.@system[0].hood")" ] 
> -    then                                                                                                                         
> -        SYSTEM_DATA=$SYSTEM_DATA"<hood>$(uci -q get "system.@system[0].hood")</hood>"                                            
> -    fi  
> +    if [ "$(uci -q get "system.@system[0].hood")" ]
> +    then
> +        SYSTEM_DATA=$SYSTEM_DATA"<hood>$(uci -q get "system.@system[0].hood")</hood>"
> +    fi
>      SYSTEM_DATA=$SYSTEM_DATA"<distname>$distname</distname>"
>      SYSTEM_DATA=$SYSTEM_DATA"<distversion>$distversion</distversion>"
>      SYSTEM_DATA=$SYSTEM_DATA"$cpu"
> diff --git a/src/packages/fff/fff-support/files/usr/sbin/show_info b/src/packages/fff/fff-support/files/usr/sbin/show_info
> index 3914391..58c6853 100755
> --- a/src/packages/fff/fff-support/files/usr/sbin/show_info
> +++ b/src/packages/fff/fff-support/files/usr/sbin/show_info
> @@ -4,7 +4,7 @@
>  
>  board_name=$(uci -q get board.model.name)
>  
> -HOSTNAME=$(uci -q get 'system.@system[0].hostname')
> +HOSTNAME=$(uci -q get 'fff.system.hostname')
>  
>  human_bytes() {
>  	while read B ; do
> @@ -140,11 +140,11 @@ echo "IPv6 Adressen: $(addr 6 $wanif)"
>  echo ""
>  echo "-> EINSTELLUNGEN"
>  echo "Knotenname: ${HOSTNAME}"
> -echo "Knotenbeschreibung: $(uci -q get 'system.@system[0].description')"
> -echo "GPS Breitengrad: $(uci -q get 'system.@system[0].latitude')"
> -echo "GPS Laengengrad: $(uci -q get 'system.@system[0].longitude')"
> -echo "Standortbeschreibung: $(uci -q get 'system.@system[0].position_comment')"
> -echo "E-Mail Adresse: $(uci -q get 'system.@system[0].contact')"
> +echo "Knotenbeschreibung: $(uci -q get 'fff.system.description')"
> +echo "GPS Breitengrad: $(uci -q get 'fff.system.latitude')"
> +echo "GPS Laengengrad: $(uci -q get 'fff.system.longitude')"
> +echo "Standortbeschreibung: $(uci -q get 'fff.system.position_comment')"
> +echo "E-Mail Adresse: $(uci -q get 'fff.system.contact')"
>  
>  echo ""
>  echo "-> BITRATEN-BEGRENZUNG"
> diff --git a/src/packages/fff/fff-sysupgrade/Makefile b/src/packages/fff/fff-sysupgrade/Makefile
> index ab809c9..b2e1ffa 100644
> --- a/src/packages/fff/fff-sysupgrade/Makefile
> +++ b/src/packages/fff/fff-sysupgrade/Makefile
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:=Freifunk-Franken sysupgrade
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+fff-boardname +fff-hoods +@BUSYBOX_CONFIG_WGET
> +    DEPENDS:=+fff-boardname +fff-config +fff-hoods +@BUSYBOX_CONFIG_WGET
>  endef
>  
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration
> index 0e36587..fe4ad97 100644
> --- a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration
> +++ b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration
> @@ -1,21 +1,27 @@
>  #!/bin/sh
>  
> -UPGRADE_hostname=$(uci -q get "system.@system[0].hostname")
> -UPGRADE_description=$(uci -q get "system.@system[0].description")
> -UPGRADE_latitude=$(uci -q get "system.@system[0].latitude")
> -UPGRADE_longitude=$(uci -q get "system.@system[0].longitude")
> -UPGRADE_position_comment=$(uci -q get "system.@system[0].position_comment")
> -UPGRADE_contact=$(uci -q get "system.@system[0].contact")
> +if [ ! -s /etc/config/fff ] ; then
>  
> -/bin/rm -rf /etc/config/system
> +	UPGRADE_hostname=$(uci -q get "system.@system[0].hostname")
> +	UPGRADE_description=$(uci -q get "system.@system[0].description")
> +	UPGRADE_latitude=$(uci -q get "system.@system[0].latitude")
> +	UPGRADE_longitude=$(uci -q get "system.@system[0].longitude")
> +	UPGRADE_position_comment=$(uci -q get "system.@system[0].position_comment")
> +	UPGRADE_contact=$(uci -q get "system.@system[0].contact")
>  
> -/bin/config_generate
> +	/bin/rm -rf /etc/config/system
> +	
> +	/bin/config_generate
>  
> -test -n "${UPGRADE_hostname}" && uci -q set "system.@system[0].hostname=${UPGRADE_hostname}"
> -test -n "${UPGRADE_description}" && uci -q set "system.@system[0].description=${UPGRADE_description}"
> -test -n "${UPGRADE_latitude}" && uci -q set "system.@system[0].latitude=${UPGRADE_latitude}"
> -test -n "${UPGRADE_longitude}" && uci -q set "system.@system[0].longitude=${UPGRADE_longitude}"
> -test -n "${UPGRADE_position_comment}" && uci -q set "system.@system[0].position_comment=${UPGRADE_position_comment}"
> -test -n "${UPGRADE_contact}" && uci -q set "system.@system[0].contact=${UPGRADE_contact}"
> +	touch /etc/config/fff
>  
> -uci -q commit system
> +	uci -q set fff.system=fff
> +	test -n "${UPGRADE_hostname}" && uci -q set "fff.system.hostname=${UPGRADE_hostname}"
> +	test -n "${UPGRADE_description}" && uci -q set "fff.system.description=${UPGRADE_description}"
> +	test -n "${UPGRADE_latitude}" && uci -q set "fff.system.latitude=${UPGRADE_latitude}"
> +	test -n "${UPGRADE_longitude}" && uci -q set "fff.system.longitude=${UPGRADE_longitude}"
> +	test -n "${UPGRADE_position_comment}" && uci -q set "fff.system.position_comment=${UPGRADE_position_comment}"
> +	test -n "${UPGRADE_contact}" && uci -q set "fff.system.contact=${UPGRADE_contact}"
> +
> +	uci -q commit fff
> +fi
> diff --git a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> index ab6f2de..847ce1e 100644
> --- a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> +++ b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> @@ -8,5 +8,5 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>  /etc/dropbear/dropbear_rsa_host_key
>  /etc/dropbear/authorized_keys
>  /etc/network.config
> -/etc/config/system
> +/etc/config/fff
>  __EOF__
> diff --git a/src/packages/fff/fff-web/Makefile b/src/packages/fff/fff-web/Makefile
> index 708dbb9..d7201e2 100644
> --- a/src/packages/fff/fff-web/Makefile
> +++ b/src/packages/fff/fff-web/Makefile
> @@ -1,7 +1,7 @@
>  include $(TOPDIR)/rules.mk
>  
>  PKG_NAME:=fff-web
> -PKG_VERSION:=0.0.4
> +PKG_VERSION:=5
>  PKG_RELEASE:=2
>  
>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:= Freifunk-Franken Webinterface
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+uhttpd +libustream-mbedtls +haserl +px5g +simple-tc +fff-boardname +fff-network
> +    DEPENDS:=+uhttpd +libustream-mbedtls +haserl +px5g +simple-tc +fff-boardname +fff-config +fff-network
>  endef
>  
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html b/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html
> index f96846c..96d657b 100755
> --- a/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html
> +++ b/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html
> @@ -2,13 +2,13 @@
>  
>  <%
>  echo -en "Content-Type: text/html\r\n\r\n"
> -HOSTNAME=$(uci -q get 'system.@system[0].hostname')
> +HOSTNAME="$(uci -q get "fff.system.hostname")"
>  hood="$(uci -q get "system.@system[0].hood")"
>  
>  MAC="$(uci -q get network.mesh.macaddr)"
> -lat="$(uci -q get system.@system[0].latitude)"
> -lon="$(uci -q get system.@system[0].longitude)"
> -contact="$(uci -q get system.@system[0].contact)"
> +lat="$(uci -q get "fff.system.latitude")"
> +lon="$(uci -q get "fff.system.longitude")"
> +contact="$(uci -q get "fff.system.contact")"
>  
>  . /etc/firmware_release
>  
> @@ -48,11 +48,11 @@ contact="$(uci -q get system.@system[0].contact)"
>  								<tr><th>MAC-Adresse:</th><td style="text-transform: uppercase;"><a href="https://monitoring.freifunk-franken.de/api/get_router_by_mac/<%= $MAC %>"><%= $MAC %></a></td></tr>
>  								<tr><th>Modell:</th><td><% cat /tmp/sysinfo/model 2>/dev/null %></td></tr>
>  								<tr><th>Firmware:</th><td><%= ${FIRMWARE_VERSION} %></td></tr>
> -								<tr><th>Beschreibung:</th><td><% uci -q get 'system.@system[0].description' %></td></tr>
> +								<tr><th>Beschreibung:</th><td><% uci -q get 'fff.system.description' %></td></tr>
>  								<tr><th>Position:</th><td><% if [ -n "$lat" -a -n "$lon" ]; then
>  									echo "<a href=\"https://monitoring.freifunk-franken.de/map?mapcenter=$lat,$lon,16\">${lat:0:8}N, ${lon:0:8}E</a>"
>  								fi %></td></tr>
> -								<tr><th>Standort:</th><td><% uci -q get 'system.@system[0].position_comment' %></td></tr>
> +								<tr><th>Standort:</th><td><% uci -q get 'fff.system.position_comment' %></td></tr>
>  								<tr><th>E-Mail Adresse:</th><td><a href="mailto:<%= $contact %>"><%= $contact %></a></td></tr>
>  							</table>
>  						</fieldset>
> diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
> index c327013..f98a3f3 100755
> --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
> +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
> @@ -12,7 +12,7 @@ nav_entry() {
>  	echo -ne "\t<li${class_active}><a href=\"${script_file}\">$2</a></li>\n\t\t"
>  }
>  
> -HOSTNAME=$(uci -q get 'system.@system[0].hostname')
> +HOSTNAME="$(uci -q get "fff.system.hostname")"
>  hood="$(uci -q get "system.@system[0].hood")"
>  
>  NOW=$(date +%s)
> diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
> index e7bc3e9..b785aed 100755
> --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
> +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
> @@ -13,25 +13,32 @@ if [ "$REQUEST_METHOD" == "POST" ] ; then
>  		MSG='<span class="red">Knotenname enth&auml;lt ung&uuml;ltige Zeichen!</span>'
>  	else
>  		# Allgemeine Einstellungen
> +		uci -q set "fff.system.hostname=${POST_hostname}"
> +		echo "$(uci -q get "fff.system.hostname")" > /proc/sys/kernel/hostname
>  		uci -q set "system.@system[0].hostname=${POST_hostname}"
> -		echo "$(uci -q get "system.@system[0].hostname")" > /proc/sys/kernel/hostname
> -		uci -q set "system.@system[0].description=${POST_description}"
> -		uci -q set "system.@system[0].latitude=${POST_latitude}"
> -		uci -q set "system.@system[0].longitude=${POST_longitude}"
> -		uci -q set "system.@system[0].position_comment=${POST_position_comment}"
> -		uci -q set "system.@system[0].contact=${POST_contact}"
> +		uci -q set "fff.system.description=${POST_description}"
> +		uci -q set "fff.system.latitude=${POST_latitude}"
> +		uci -q set "fff.system.longitude=${POST_longitude}"
> +		uci -q set "fff.system.position_comment=${POST_position_comment}"
> +		uci -q set "fff.system.contact=${POST_contact}"
>  
>  		# Bitratenbegrenzung
> +		uci -q get "fff.trafficcontrol" > /dev/null || uci -q set fff.trafficcontrol=fff
>  		if [ "$POST_traffic_limit" == "on" ] ; then
> -			uci -q set "simple-tc.example.ifname=wan"
> +			uci -q set "fff.trafficcontrol.enabled=1"
>  			uci -q set "simple-tc.example.enabled=1"
>  		else
> +			uci -q set "fff.trafficcontrol.enabled=0"
>  			uci -q set "simple-tc.example.enabled=0"
>  		fi
> +		uci -q set "fff.trafficcontrol.limit_in=${POST_limit_ingress}"
> +		uci -q set "fff.trafficcontrol.limit_out=${POST_limit_egress}"
> +		
> +		uci -q set "simple-tc.example.ifname=wan"
>  		uci -q set "simple-tc.example.limit_ingress=${POST_limit_ingress}"
>  		uci -q set "simple-tc.example.limit_egress=${POST_limit_egress}"
>  
> -		uci commit
> +		uci -q commit
>  
>  		MSG='<span class="green">Daten gespeichert! - Bitte Router neustarten.</span>'
>  	fi
> @@ -41,7 +48,7 @@ fi
>  <%in /www/ssl/cgi-bin/helpers %>
>  <%
>  # read
> -if [ "$(uci -q get 'simple-tc.example.enabled')" == "1" ] ; then
> +if [ "$(uci -q get 'fff.trafficcontrol.enabled')" == "1" ] ; then
>  	traffic_checked='checked="checked" '
>  else
>  	traffic_checked=""
> @@ -55,16 +62,16 @@ fi
>  	<legend>Allgemeine Einstellungen</legend>
>  	<table>
>  		<tr><th>Knotenname:</th><td><input type="text" name="hostname" value="<%= ${HOSTNAME} %>" /></td></tr>
> -		<tr><th>Knotenbeschreibung:</th><td><input type="text" name="description" value="<%= $(uci -q get 'system.@system[0].description') %>" /></td></tr>
> +		<tr><th>Knotenbeschreibung:</th><td><input type="text" name="description" value="<%= $(uci -q get 'fff.system.description') %>" /></td></tr>
>  		<tr><th>GPS Breitengrad:</th>
> -			<td><input type="text" name="latitude" value="<%= $(uci -q get 'system.@system[0].latitude') %>" /></td>
> +			<td><input type="text" name="latitude" value="<%= $(uci -q get 'fff.system.latitude') %>" /></td>
>  			<td rowspan="2" style="vertical-align: middle;">
>  				<button type="button" style="height: 100%; width: 126px; margin-left: 5px;" onclick="window.open('/map.html', '_blank', 'location=0,status=0,scrollbars=1,width=400,height=300');">Position auf Karte anzeigen / setzen</button>
>  			</td>
>  		</tr>
> -		<tr><th>GPS L&auml;ngengrad:</th><td><input type="text" name="longitude" value="<%= $(uci -q get 'system.@system[0].longitude') %>" /></td></tr>
> -		<tr><th>Standortbeschreibung:</th><td><input type="text" name="position_comment" value="<%= $(uci -q get 'system.@system[0].position_comment') %>" /></td></tr>
> -		<tr><th>E-Mail Adresse:</th><td><input type="email" name="contact" value="<%= $(uci -q get 'system.@system[0].contact') %>" /></td></tr>
> +		<tr><th>GPS L&auml;ngengrad:</th><td><input type="text" name="longitude" value="<%= $(uci -q get 'fff.system.longitude') %>" /></td></tr>
> +		<tr><th>Standortbeschreibung:</th><td><input type="text" name="position_comment" value="<%= $(uci -q get 'fff.system.position_comment') %>" /></td></tr>
> +		<tr><th>E-Mail Adresse:</th><td><input type="email" name="contact" value="<%= $(uci -q get 'fff.system.contact') %>" /></td></tr>
>  	</table>
>  </fieldset>
>  </td><td>
> @@ -74,8 +81,8 @@ fi
>  		<tr><th>Aktiviert:</th><td colspan="2">
>  			<input type="checkbox" name="traffic_limit" <%= ${traffic_checked} %>/>
>  		</td></tr>
> -		<tr><th>Freifunk&nbsp;Download:</th><td><input type="text" name="limit_ingress" value="<%= $(uci -q get 'simple-tc.example.limit_ingress') %>" /></td><td>kbit/s</td></tr>
> -		<tr><th>Freifunk&nbsp;Upload:</th><td><input type="text" name="limit_egress" value="<%= $(uci -q get 'simple-tc.example.limit_egress') %>" /></td><td>kbit/s</td></tr>
> +		<tr><th>Freifunk&nbsp;Download:</th><td><input type="text" name="limit_ingress" value="<%= $(uci -q get 'fff.trafficcontrol.limit_in') %>" /></td><td>kbit/s</td></tr>
> +		<tr><th>Freifunk&nbsp;Upload:</th><td><input type="text" name="limit_egress" value="<%= $(uci -q get 'fff.trafficcontrol.limit_out') %>" /></td><td>kbit/s</td></tr>
>  	</table>
>  </fieldset>
>  </td></tr>
> diff --git a/src/packages/fff/fff/Makefile b/src/packages/fff/fff/Makefile
> index 305ab8d..dce33f9 100644
> --- a/src/packages/fff/fff/Makefile
> +++ b/src/packages/fff/fff/Makefile
> @@ -18,6 +18,7 @@ define Package/fff-base
>               +ip6tables \
>               +odhcp6c \
>               +micrond \
> +             +fff-config \
>               +fff-nodewatcher \
>               +fff-web \
>               +fff-uradvd \
> -- 
> 2.7.4
>
Tim Niemeyer Nov. 12, 2017, 7:29 p.m.
Hi

Patchset applied.

Tim

Am Freitag, den 03.11.2017, 15:00 +0100 schrieb Adrian Schmutzler:
> This moves the FFF configuration from
> /etc/config/system to a new file /etc/config/fff. Thus,
> this file can be copied as a whole during upgrade (with
> compatibility provided) and then resulting values in
> other files are re-set later.
> 
> This also fixes the bandwidth settings not being persistent
> during upgrade. Other settings may join ...
> 
> I tried to go through all the code and update all occurrences
> of the relevant system variables (looking for "system" both
> in GitHub and my local src folder).
> 
> Note that a downgrade will result in loss of configuration!
> 
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> 
> ---
> 
> Changes in v11:
>  - Redesign for keyexchange v2.
> 
> Changes in v12:
>  - Removed downgrade script
>  - Changed default hostname to FFF
>  - Rename FFF to $mac in nodewatcher
>  - Also update variables in show_info
> ---
>  src/packages/fff/fff-config/Makefile               | 40 ++++++++++++++++++++++
>  .../files/etc/uci-defaults/98-configure-fff        | 25 ++++++++++++++
>  src/packages/fff/fff-hoods/Makefile                |  2 +-
>  .../fff/fff-hoods/files/usr/sbin/configurehood     |  4 +--
>  src/packages/fff/fff-nodewatcher/Makefile          |  4 +--
>  .../fff/fff-nodewatcher/files/usr/sbin/nodewatcher | 21 ++++++------
>  .../fff/fff-support/files/usr/sbin/show_info       | 12 +++----
>  src/packages/fff/fff-sysupgrade/Makefile           |  2 +-
>  .../etc/uci-defaults/05-config-system-migration    | 36 +++++++++++--------
>  .../files/etc/uci-defaults/99-fff-sysupgrade       |  2 +-
>  src/packages/fff/fff-web/Makefile                  |  4 +--
>  .../fff-web/files/www/public/cgi-bin/status.html   | 12 +++----
>  .../fff/fff-web/files/www/ssl/cgi-bin/header       |  2 +-
>  .../fff-web/files/www/ssl/cgi-bin/settings.html    | 39 ++++++++++++---------
>  src/packages/fff/fff/Makefile                      |  1 +
>  15 files changed, 143 insertions(+), 63 deletions(-)
>  create mode 100644 src/packages/fff/fff-config/Makefile
>  create mode 100644 src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff
> 
> diff --git a/src/packages/fff/fff-config/Makefile b/src/packages/fff/fff-config/Makefile
> new file mode 100644
> index 0000000..fe4f5df
> --- /dev/null
> +++ b/src/packages/fff/fff-config/Makefile
> @@ -0,0 +1,40 @@
> +include $(TOPDIR)/rules.mk
> +
> +PKG_NAME:=fff-config
> +PKG_VERSION:=1
> +PKG_RELEASE:=1
> +
> +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> +
> +include $(INCLUDE_DIR)/package.mk
> +
> +define Package/$(PKG_NAME)
> +    SECTION:=base
> +    CATEGORY:=Freifunk
> +    TITLE:=Freifunk-Franken Config
> +    URL:=http://www.freifunk-franken.de
> +    DEPENDS:=+fff-boardname +@BUSYBOX_CONFIG_WGET
> +endef
> +
> +define Package/$(PKG_NAME)/description
> +    This is the Freifunk Franken Firmware Config package.
> +    This packages provides utilities for a central FFF config file.
> +endef
> +
> +define Build/Prepare
> +    echo "all: " > $(PKG_BUILD_DIR)/Makefile
> +endef
> +
> +define Build/Configure
> +    # nothing
> +endef
> +
> +define Build/Compile
> +    # nothing
> +endef
> +
> +define Package/$(PKG_NAME)/install
> +    $(CP) ./files/* $(1)/
> +endef
> +
> +$(eval $(call BuildPackage,$(PKG_NAME)))
> diff --git a/src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff b/src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff
> new file mode 100644
> index 0000000..677da15
> --- /dev/null
> +++ b/src/packages/fff/fff-config/files/etc/uci-defaults/98-configure-fff
> @@ -0,0 +1,25 @@
> +#!/bin/sh
> +# Copyright 2017 Adrian Schmutzler
> +# License GPLv3
> +
> +touch /etc/config/fff
> +
> +if ! uci -q get fff.system > /dev/null ; then
> +	uci -q set fff.system=fff
> +	uci -q set "fff.system.hostname=FFF"
> +fi
> +
> +FFF_hostname=$(uci -q get "fff.system.hostname")
> +test -n "${FFF_hostname}" && uci -q set "system.@system[0].hostname=${FFF_hostname}"
> +test -n "${FFF_hostname}" && echo "${FFF_hostname}" > /proc/sys/kernel/hostname
> +
> +traffic_enabled=$(uci -q get "fff.trafficcontrol.enabled")
> +traffic_in=$(uci -q get "fff.trafficcontrol.limit_in")
> +traffic_out=$(uci -q get "fff.trafficcontrol.limit_out")
> +
> +test -n "${traffic_enabled}" && uci -q set "simple-tc.example.enabled=${traffic_enabled}"
> +uci -q set "simple-tc.example.ifname=wan"
> +uci -q set "simple-tc.example.limit_ingress=${traffic_in}"
> +uci -q set "simple-tc.example.limit_egress=${traffic_out}"
> +
> +uci -q commit
> diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile
> index dd22df4..11ab6d1 100644
> --- a/src/packages/fff/fff-hoods/Makefile
> +++ b/src/packages/fff/fff-hoods/Makefile
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:= Freifunk-Franken hoods
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+fff-network
> +    DEPENDS:=+fff-network +fff-config
>  endef
>  
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> index f785b7d..aeec401 100755
> --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> @@ -60,8 +60,8 @@ if [ -f "$hiddenapfile" ]; then
>  	rm "$hiddenapfile"
>  fi
>  
> -lat=$(uci -q get system.@system[0].latitude)
> -long=$(uci -q get system.@system[0].longitude)
> +lat=$(uci -q get fff.system.latitude)
> +long=$(uci -q get fff.system.longitude)
>  
>  # if we have Internet, we download the Hoodfile from the keyxchangev2
>  if hasInternet ; then
> diff --git a/src/packages/fff/fff-nodewatcher/Makefile b/src/packages/fff/fff-nodewatcher/Makefile
> index 79cb917..7bfd08e 100644
> --- a/src/packages/fff/fff-nodewatcher/Makefile
> +++ b/src/packages/fff/fff-nodewatcher/Makefile
> @@ -1,7 +1,7 @@
>  include $(TOPDIR)/rules.mk
>  
>  PKG_NAME:=fff-nodewatcher
> -PKG_VERSION:=41
> +PKG_VERSION:=43
>  PKG_RELEASE:=1
>  
>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:= Freifunk-Franken Nodewatcher
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+alfred +micrond +fff-random +ip +ip-bridge
> +    DEPENDS:=+alfred +micrond +fff-config +fff-random +ip +ip-bridge
>  endef
>  
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
> index 35adf91..e4a9bc9 100755
> --- a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
> +++ b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
> @@ -2,7 +2,7 @@
>  # Netmon Nodewatcher (C) 2010-2012 Freifunk Oldenburg
>  # License; GPL v3
>  
> -SCRIPT_VERSION="41"
> +SCRIPT_VERSION="43"
>  
>  test -f /tmp/started || exit
>  
> @@ -58,20 +58,21 @@ crawl() {
>      hostname="$(cat /proc/sys/kernel/hostname)"
>      mac=$(awk '{ mac=toupper($1); gsub(":", "", mac); print mac }' /sys/class/net/br-mesh/address 2>/dev/null)
>      [ "$hostname" = "LEDE" ] && hostname="$mac"
> -    description="$(uci get system.@system[0].description)"
> +    [ "$hostname" = "FFF" ] && hostname="$mac"
> +    description="$(uci -q get fff.system.description)"
>      if [ -n "$description" ]; then
>          description="<description><![CDATA[$description]]></description>"
>      fi
> -    latitude="$(uci get system.@system[0].latitude)"
> -    longitude="$(uci get system.@system[0].longitude)"
> +    latitude="$(uci -q get fff.system.latitude)"
> +    longitude="$(uci -q get fff.system.longitude)"
>      if [ -n "$longitude" -a -n "$latitude" ]; then
>          geo="<geo><lat>$latitude</lat><lng>$longitude</lng></geo>";
>      fi
> -    position_comment="$(uci get system.@system[0].position_comment)"
> +    position_comment="$(uci -q get fff.system.position_comment)"
>      if [ -n "$position_comment" ]; then
>          position_comment="<position_comment><![CDATA[$position_comment]]></position_comment>"
>      fi
> -    contact="$(uci get system.@system[0].contact)"
> +    contact="$(uci -q get fff.system.contact)"
>      if [ -n "$contact" ]; then
>          contact="<contact>$contact</contact>"
>      fi
> @@ -137,10 +138,10 @@ crawl() {
>      SYSTEM_DATA=$SYSTEM_DATA"${geo}"
>      SYSTEM_DATA=$SYSTEM_DATA"${position_comment}"
>      SYSTEM_DATA=$SYSTEM_DATA"${contact}"
> -    if [ "$(uci -q get "system.@system[0].hood")" ] 
> -    then                                                                                                                         
> -        SYSTEM_DATA=$SYSTEM_DATA"<hood>$(uci -q get "system.@system[0].hood")</hood>"                                            
> -    fi  
> +    if [ "$(uci -q get "system.@system[0].hood")" ]
> +    then
> +        SYSTEM_DATA=$SYSTEM_DATA"<hood>$(uci -q get "system.@system[0].hood")</hood>"
> +    fi
>      SYSTEM_DATA=$SYSTEM_DATA"<distname>$distname</distname>"
>      SYSTEM_DATA=$SYSTEM_DATA"<distversion>$distversion</distversion>"
>      SYSTEM_DATA=$SYSTEM_DATA"$cpu"
> diff --git a/src/packages/fff/fff-support/files/usr/sbin/show_info b/src/packages/fff/fff-support/files/usr/sbin/show_info
> index 3914391..58c6853 100755
> --- a/src/packages/fff/fff-support/files/usr/sbin/show_info
> +++ b/src/packages/fff/fff-support/files/usr/sbin/show_info
> @@ -4,7 +4,7 @@
>  
>  board_name=$(uci -q get board.model.name)
>  
> -HOSTNAME=$(uci -q get 'system.@system[0].hostname')
> +HOSTNAME=$(uci -q get 'fff.system.hostname')
>  
>  human_bytes() {
>  	while read B ; do
> @@ -140,11 +140,11 @@ echo "IPv6 Adressen: $(addr 6 $wanif)"
>  echo ""
>  echo "-> EINSTELLUNGEN"
>  echo "Knotenname: ${HOSTNAME}"
> -echo "Knotenbeschreibung: $(uci -q get 'system.@system[0].description')"
> -echo "GPS Breitengrad: $(uci -q get 'system.@system[0].latitude')"
> -echo "GPS Laengengrad: $(uci -q get 'system.@system[0].longitude')"
> -echo "Standortbeschreibung: $(uci -q get 'system.@system[0].position_comment')"
> -echo "E-Mail Adresse: $(uci -q get 'system.@system[0].contact')"
> +echo "Knotenbeschreibung: $(uci -q get 'fff.system.description')"
> +echo "GPS Breitengrad: $(uci -q get 'fff.system.latitude')"
> +echo "GPS Laengengrad: $(uci -q get 'fff.system.longitude')"
> +echo "Standortbeschreibung: $(uci -q get 'fff.system.position_comment')"
> +echo "E-Mail Adresse: $(uci -q get 'fff.system.contact')"
>  
>  echo ""
>  echo "-> BITRATEN-BEGRENZUNG"
> diff --git a/src/packages/fff/fff-sysupgrade/Makefile b/src/packages/fff/fff-sysupgrade/Makefile
> index ab809c9..b2e1ffa 100644
> --- a/src/packages/fff/fff-sysupgrade/Makefile
> +++ b/src/packages/fff/fff-sysupgrade/Makefile
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:=Freifunk-Franken sysupgrade
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+fff-boardname +fff-hoods +@BUSYBOX_CONFIG_WGET
> +    DEPENDS:=+fff-boardname +fff-config +fff-hoods +@BUSYBOX_CONFIG_WGET
>  endef
>  
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration
> index 0e36587..fe4ad97 100644
> --- a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration
> +++ b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/05-config-system-migration
> @@ -1,21 +1,27 @@
>  #!/bin/sh
>  
> -UPGRADE_hostname=$(uci -q get "system.@system[0].hostname")
> -UPGRADE_description=$(uci -q get "system.@system[0].description")
> -UPGRADE_latitude=$(uci -q get "system.@system[0].latitude")
> -UPGRADE_longitude=$(uci -q get "system.@system[0].longitude")
> -UPGRADE_position_comment=$(uci -q get "system.@system[0].position_comment")
> -UPGRADE_contact=$(uci -q get "system.@system[0].contact")
> +if [ ! -s /etc/config/fff ] ; then
>  
> -/bin/rm -rf /etc/config/system
> +	UPGRADE_hostname=$(uci -q get "system.@system[0].hostname")
> +	UPGRADE_description=$(uci -q get "system.@system[0].description")
> +	UPGRADE_latitude=$(uci -q get "system.@system[0].latitude")
> +	UPGRADE_longitude=$(uci -q get "system.@system[0].longitude")
> +	UPGRADE_position_comment=$(uci -q get "system.@system[0].position_comment")
> +	UPGRADE_contact=$(uci -q get "system.@system[0].contact")
>  
> -/bin/config_generate
> +	/bin/rm -rf /etc/config/system
> +	
> +	/bin/config_generate
>  
> -test -n "${UPGRADE_hostname}" && uci -q set "system.@system[0].hostname=${UPGRADE_hostname}"
> -test -n "${UPGRADE_description}" && uci -q set "system.@system[0].description=${UPGRADE_description}"
> -test -n "${UPGRADE_latitude}" && uci -q set "system.@system[0].latitude=${UPGRADE_latitude}"
> -test -n "${UPGRADE_longitude}" && uci -q set "system.@system[0].longitude=${UPGRADE_longitude}"
> -test -n "${UPGRADE_position_comment}" && uci -q set "system.@system[0].position_comment=${UPGRADE_position_comment}"
> -test -n "${UPGRADE_contact}" && uci -q set "system.@system[0].contact=${UPGRADE_contact}"
> +	touch /etc/config/fff
>  
> -uci -q commit system
> +	uci -q set fff.system=fff
> +	test -n "${UPGRADE_hostname}" && uci -q set "fff.system.hostname=${UPGRADE_hostname}"
> +	test -n "${UPGRADE_description}" && uci -q set "fff.system.description=${UPGRADE_description}"
> +	test -n "${UPGRADE_latitude}" && uci -q set "fff.system.latitude=${UPGRADE_latitude}"
> +	test -n "${UPGRADE_longitude}" && uci -q set "fff.system.longitude=${UPGRADE_longitude}"
> +	test -n "${UPGRADE_position_comment}" && uci -q set "fff.system.position_comment=${UPGRADE_position_comment}"
> +	test -n "${UPGRADE_contact}" && uci -q set "fff.system.contact=${UPGRADE_contact}"
> +
> +	uci -q commit fff
> +fi
> diff --git a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> index ab6f2de..847ce1e 100644
> --- a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> +++ b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> @@ -8,5 +8,5 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>  /etc/dropbear/dropbear_rsa_host_key
>  /etc/dropbear/authorized_keys
>  /etc/network.config
> -/etc/config/system
> +/etc/config/fff
>  __EOF__
> diff --git a/src/packages/fff/fff-web/Makefile b/src/packages/fff/fff-web/Makefile
> index 708dbb9..d7201e2 100644
> --- a/src/packages/fff/fff-web/Makefile
> +++ b/src/packages/fff/fff-web/Makefile
> @@ -1,7 +1,7 @@
>  include $(TOPDIR)/rules.mk
>  
>  PKG_NAME:=fff-web
> -PKG_VERSION:=0.0.4
> +PKG_VERSION:=5
>  PKG_RELEASE:=2
>  
>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> @@ -13,7 +13,7 @@ define Package/$(PKG_NAME)
>      CATEGORY:=Freifunk
>      TITLE:= Freifunk-Franken Webinterface
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+uhttpd +libustream-mbedtls +haserl +px5g +simple-tc +fff-boardname +fff-network
> +    DEPENDS:=+uhttpd +libustream-mbedtls +haserl +px5g +simple-tc +fff-boardname +fff-config +fff-network
>  endef
>  
>  define Package/$(PKG_NAME)/description
> diff --git a/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html b/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html
> index f96846c..96d657b 100755
> --- a/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html
> +++ b/src/packages/fff/fff-web/files/www/public/cgi-bin/status.html
> @@ -2,13 +2,13 @@
>  
>  <%
>  echo -en "Content-Type: text/html\r\n\r\n"
> -HOSTNAME=$(uci -q get 'system.@system[0].hostname')
> +HOSTNAME="$(uci -q get "fff.system.hostname")"
>  hood="$(uci -q get "system.@system[0].hood")"
>  
>  MAC="$(uci -q get network.mesh.macaddr)"
> -lat="$(uci -q get system.@system[0].latitude)"
> -lon="$(uci -q get system.@system[0].longitude)"
> -contact="$(uci -q get system.@system[0].contact)"
> +lat="$(uci -q get "fff.system.latitude")"
> +lon="$(uci -q get "fff.system.longitude")"
> +contact="$(uci -q get "fff.system.contact")"
>  
>  . /etc/firmware_release
>  
> @@ -48,11 +48,11 @@ contact="$(uci -q get system.@system[0].contact)"
>  								<tr><th>MAC-Adresse:</th><td style="text-transform: uppercase;"><a href="https://monitoring.freifunk-franken.de/api/get_router_by_mac/<%= $MAC %>"><%= $MAC %></a></td></tr>
>  								<tr><th>Modell:</th><td><% cat /tmp/sysinfo/model 2>/dev/null %></td></tr>
>  								<tr><th>Firmware:</th><td><%= ${FIRMWARE_VERSION} %></td></tr>
> -								<tr><th>Beschreibung:</th><td><% uci -q get 'system.@system[0].description' %></td></tr>
> +								<tr><th>Beschreibung:</th><td><% uci -q get 'fff.system.description' %></td></tr>
>  								<tr><th>Position:</th><td><% if [ -n "$lat" -a -n "$lon" ]; then
>  									echo "<a href=\"https://monitoring.freifunk-franken.de/map?mapcenter=$lat,$lon,16\">${lat:0:8}N, ${lon:0:8}E</a>"
>  								fi %></td></tr>
> -								<tr><th>Standort:</th><td><% uci -q get 'system.@system[0].position_comment' %></td></tr>
> +								<tr><th>Standort:</th><td><% uci -q get 'fff.system.position_comment' %></td></tr>
>  								<tr><th>E-Mail Adresse:</th><td><a href="mailto:<%= $contact %>"><%= $contact %></a></td></tr>
>  							</table>
>  						</fieldset>
> diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
> index c327013..f98a3f3 100755
> --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
> +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
> @@ -12,7 +12,7 @@ nav_entry() {
>  	echo -ne "\t<li${class_active}><a href=\"${script_file}\">$2</a></li>\n\t\t"
>  }
>  
> -HOSTNAME=$(uci -q get 'system.@system[0].hostname')
> +HOSTNAME="$(uci -q get "fff.system.hostname")"
>  hood="$(uci -q get "system.@system[0].hood")"
>  
>  NOW=$(date +%s)
> diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
> index e7bc3e9..b785aed 100755
> --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
> +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
> @@ -13,25 +13,32 @@ if [ "$REQUEST_METHOD" == "POST" ] ; then
>  		MSG='<span class="red">Knotenname enth&auml;lt ung&uuml;ltige Zeichen!</span>'
>  	else
>  		# Allgemeine Einstellungen
> +		uci -q set "fff.system.hostname=${POST_hostname}"
> +		echo "$(uci -q get "fff.system.hostname")" > /proc/sys/kernel/hostname
>  		uci -q set "system.@system[0].hostname=${POST_hostname}"
> -		echo "$(uci -q get "system.@system[0].hostname")" > /proc/sys/kernel/hostname
> -		uci -q set "system.@system[0].description=${POST_description}"
> -		uci -q set "system.@system[0].latitude=${POST_latitude}"
> -		uci -q set "system.@system[0].longitude=${POST_longitude}"
> -		uci -q set "system.@system[0].position_comment=${POST_position_comment}"
> -		uci -q set "system.@system[0].contact=${POST_contact}"
> +		uci -q set "fff.system.description=${POST_description}"
> +		uci -q set "fff.system.latitude=${POST_latitude}"
> +		uci -q set "fff.system.longitude=${POST_longitude}"
> +		uci -q set "fff.system.position_comment=${POST_position_comment}"
> +		uci -q set "fff.system.contact=${POST_contact}"
>  
>  		# Bitratenbegrenzung
> +		uci -q get "fff.trafficcontrol" > /dev/null || uci -q set fff.trafficcontrol=fff
>  		if [ "$POST_traffic_limit" == "on" ] ; then
> -			uci -q set "simple-tc.example.ifname=wan"
> +			uci -q set "fff.trafficcontrol.enabled=1"
>  			uci -q set "simple-tc.example.enabled=1"
>  		else
> +			uci -q set "fff.trafficcontrol.enabled=0"
>  			uci -q set "simple-tc.example.enabled=0"
>  		fi
> +		uci -q set "fff.trafficcontrol.limit_in=${POST_limit_ingress}"
> +		uci -q set "fff.trafficcontrol.limit_out=${POST_limit_egress}"
> +		
> +		uci -q set "simple-tc.example.ifname=wan"
>  		uci -q set "simple-tc.example.limit_ingress=${POST_limit_ingress}"
>  		uci -q set "simple-tc.example.limit_egress=${POST_limit_egress}"
>  
> -		uci commit
> +		uci -q commit
>  
>  		MSG='<span class="green">Daten gespeichert! - Bitte Router neustarten.</span>'
>  	fi
> @@ -41,7 +48,7 @@ fi
>  <%in /www/ssl/cgi-bin/helpers %>
>  <%
>  # read
> -if [ "$(uci -q get 'simple-tc.example.enabled')" == "1" ] ; then
> +if [ "$(uci -q get 'fff.trafficcontrol.enabled')" == "1" ] ; then
>  	traffic_checked='checked="checked" '
>  else
>  	traffic_checked=""
> @@ -55,16 +62,16 @@ fi
>  	<legend>Allgemeine Einstellungen</legend>
>  	<table>
>  		<tr><th>Knotenname:</th><td><input type="text" name="hostname" value="<%= ${HOSTNAME} %>" /></td></tr>
> -		<tr><th>Knotenbeschreibung:</th><td><input type="text" name="description" value="<%= $(uci -q get 'system.@system[0].description') %>" /></td></tr>
> +		<tr><th>Knotenbeschreibung:</th><td><input type="text" name="description" value="<%= $(uci -q get 'fff.system.description') %>" /></td></tr>
>  		<tr><th>GPS Breitengrad:</th>
> -			<td><input type="text" name="latitude" value="<%= $(uci -q get 'system.@system[0].latitude') %>" /></td>
> +			<td><input type="text" name="latitude" value="<%= $(uci -q get 'fff.system.latitude') %>" /></td>
>  			<td rowspan="2" style="vertical-align: middle;">
>  				<button type="button" style="height: 100%; width: 126px; margin-left: 5px;" onclick="window.open('/map.html', '_blank', 'location=0,status=0,scrollbars=1,width=400,height=300');">Position auf Karte anzeigen / setzen</button>
>  			</td>
>  		</tr>
> -		<tr><th>GPS L&auml;ngengrad:</th><td><input type="text" name="longitude" value="<%= $(uci -q get 'system.@system[0].longitude') %>" /></td></tr>
> -		<tr><th>Standortbeschreibung:</th><td><input type="text" name="position_comment" value="<%= $(uci -q get 'system.@system[0].position_comment') %>" /></td></tr>
> -		<tr><th>E-Mail Adresse:</th><td><input type="email" name="contact" value="<%= $(uci -q get 'system.@system[0].contact') %>" /></td></tr>
> +		<tr><th>GPS L&auml;ngengrad:</th><td><input type="text" name="longitude" value="<%= $(uci -q get 'fff.system.longitude') %>" /></td></tr>
> +		<tr><th>Standortbeschreibung:</th><td><input type="text" name="position_comment" value="<%= $(uci -q get 'fff.system.position_comment') %>" /></td></tr>
> +		<tr><th>E-Mail Adresse:</th><td><input type="email" name="contact" value="<%= $(uci -q get 'fff.system.contact') %>" /></td></tr>
>  	</table>
>  </fieldset>
>  </td><td>
> @@ -74,8 +81,8 @@ fi
>  		<tr><th>Aktiviert:</th><td colspan="2">
>  			<input type="checkbox" name="traffic_limit" <%= ${traffic_checked} %>/>
>  		</td></tr>
> -		<tr><th>Freifunk&nbsp;Download:</th><td><input type="text" name="limit_ingress" value="<%= $(uci -q get 'simple-tc.example.limit_ingress') %>" /></td><td>kbit/s</td></tr>
> -		<tr><th>Freifunk&nbsp;Upload:</th><td><input type="text" name="limit_egress" value="<%= $(uci -q get 'simple-tc.example.limit_egress') %>" /></td><td>kbit/s</td></tr>
> +		<tr><th>Freifunk&nbsp;Download:</th><td><input type="text" name="limit_ingress" value="<%= $(uci -q get 'fff.trafficcontrol.limit_in') %>" /></td><td>kbit/s</td></tr>
> +		<tr><th>Freifunk&nbsp;Upload:</th><td><input type="text" name="limit_egress" value="<%= $(uci -q get 'fff.trafficcontrol.limit_out') %>" /></td><td>kbit/s</td></tr>
>  	</table>
>  </fieldset>
>  </td></tr>
> diff --git a/src/packages/fff/fff/Makefile b/src/packages/fff/fff/Makefile
> index 305ab8d..dce33f9 100644
> --- a/src/packages/fff/fff/Makefile
> +++ b/src/packages/fff/fff/Makefile
> @@ -18,6 +18,7 @@ define Package/fff-base
>               +ip6tables \
>               +odhcp6c \
>               +micrond \
> +             +fff-config \
>               +fff-nodewatcher \
>               +fff-web \
>               +fff-uradvd \
> -- 
> 2.7.4
>