From patchwork Wed Oct 18 21:30:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v11,1/6] Rearrange fff config values into their own config file From: Adrian Schmutzler X-Patchwork-Id: 604 Message-Id: <1508362258-8918-1-git-send-email-freifunk@adrianschmutzler.de> To: franken-dev@freifunk.net Date: Wed, 18 Oct 2017 23:30:53 +0200 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). When downgrading, this requires rewriting the values into the /etc/config/system. For this purpose, a script has been added. (Which will be integrated into the WebUI in another patch) Changes in v11: - Redesign for keyexchange v2. Signed-off-by: Adrian Schmutzler Tested-by: Adrian Schmutzler --- src/packages/fff/fff-config/Makefile | 40 ++++++++++++++++++++++ .../files/etc/uci-defaults/98-configure-fff | 25 ++++++++++++++ .../files/usr/sbin/prepare_firmware_downgrade.sh | 23 +++++++++++++ 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 | 20 +++++------ 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, 159 insertions(+), 57 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 create mode 100755 src/packages/fff/fff-config/files/usr/sbin/prepare_firmware_downgrade.sh 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..e337e88 --- /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=Freifunk-Router" +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-config/files/usr/sbin/prepare_firmware_downgrade.sh b/src/packages/fff/fff-config/files/usr/sbin/prepare_firmware_downgrade.sh new file mode 100755 index 0000000..ab96ba4 --- /dev/null +++ b/src/packages/fff/fff-config/files/usr/sbin/prepare_firmware_downgrade.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +if ! grep -q '/etc/config/system' /etc/sysupgrade.conf 2> /dev/null ; then + echo "/etc/config/system" >> /etc/sysupgrade.conf +fi + +if [ -s /etc/config/fff ] ; then + UPGRADE_hostname=$(uci -q get "fff.system.hostname") + UPGRADE_description=$(uci -q get "fff.system.description") + UPGRADE_latitude=$(uci -q get "fff.system.latitude") + UPGRADE_longitude=$(uci -q get "fff.system.longitude") + UPGRADE_position_comment=$(uci -q get "fff.system.position_comment") + UPGRADE_contact=$(uci -q get "fff.system.contact") + + 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}" + + uci -q commit system +fi 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 f7ddb6e..e7a6eda 100755 --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood @@ -57,8 +57,8 @@ if [ -f /tmp/hiddenapflag ]; then rm /tmp/hiddenapflag 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..80548ac 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,20 @@ 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)" + description="$(uci -q get fff.system.description)" if [ -n "$description" ]; then 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="$latitude$longitude"; 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="" fi - contact="$(uci get system.@system[0].contact)" + contact="$(uci -q get fff.system.contact)" if [ -n "$contact" ]; then contact="$contact" fi @@ -137,10 +137,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"$(uci -q get "system.@system[0].hood")" - fi + if [ "$(uci -q get "system.@system[0].hood")" ] + then + SYSTEM_DATA=$SYSTEM_DATA"$(uci -q get "system.@system[0].hood")" + fi SYSTEM_DATA=$SYSTEM_DATA"$distname" SYSTEM_DATA=$SYSTEM_DATA"$distversion" SYSTEM_DATA=$SYSTEM_DATA"$cpu" 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)" MAC-Adresse:<%= $MAC %> Modell:<% cat /tmp/sysinfo/model 2>/dev/null %> Firmware:<%= ${FIRMWARE_VERSION} %> - Beschreibung:<% uci -q get 'system.@system[0].description' %> + Beschreibung:<% uci -q get 'fff.system.description' %> Position:<% if [ -n "$lat" -a -n "$lon" ]; then echo "${lat:0:8}N, ${lon:0:8}E" fi %> - Standort:<% uci -q get 'system.@system[0].position_comment' %> + Standort:<% uci -q get 'fff.system.position_comment' %> E-Mail Adresse:<%= $contact %> 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$2\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='Knotenname enthält ungültige Zeichen!' 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='Daten gespeichert! - Bitte Router neustarten.' 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 Allgemeine Einstellungen - + - + - - - + + +
Knotenname:
Knotenbeschreibung:
Knotenbeschreibung:
GPS Breitengrad:
GPS Längengrad:
Standortbeschreibung:
E-Mail Adresse:
GPS Längengrad:
Standortbeschreibung:
E-Mail Adresse:
@@ -74,8 +81,8 @@ fi Aktiviert: /> - Freifunk Download:kbit/s - Freifunk Upload:kbit/s + Freifunk Download:kbit/s + Freifunk Upload:kbit/s 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 \