Rearrange fff config values into their own config file

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>
Reviewed-by: Tim Niemeyer <tim@tn-x.org>
- Rebased
Signed-off-by: Tim Niemeyer <tim@tn-x.org>
This commit is contained in:
Adrian Schmutzler 2017-11-03 15:00:00 +01:00 committed by Tim Niemeyer
parent 09a84bdd7b
commit 39d147da8d
15 changed files with 144 additions and 64 deletions

View File

@ -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)))

View File

@ -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

View File

@ -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

View File

@ -62,8 +62,8 @@ if [ -f "$hiddenapfile" ]; then
fi
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

View File

@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fff-nodewatcher
PKG_VERSION:=41
PKG_RELEASE:=2
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:=+fff-alfred +micrond +fff-random +ip +ip-bridge
DEPENDS:=+fff-alfred +micrond +fff-config +fff-random +ip +ip-bridge
endef
define Package/$(PKG_NAME)/description

View File

@ -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"

View File

@ -5,7 +5,7 @@
board_name=$(uci -q get board.model.name)
HOSTNAME=$(uci -q get 'system.@system[0].hostname')
HOSTNAME=$(uci -q get 'fff.system.hostname')
hood="$(uci -q get "system.@system[0].hood")"
human_bytes() {
@ -154,11 +154,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"

View File

@ -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

View File

@ -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

View File

@ -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__

View File

@ -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

View File

@ -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>

View File

@ -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)

View File

@ -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>

View File

@ -18,6 +18,7 @@ define Package/fff-base
+ip6tables \
+odhcp6c \
+micrond \
+fff-config \
+fff-nodewatcher \
+fff-web \
+fff-uradvd \