[PATCH v12 4/6] Add fff-hoods
mail at adrianschmutzler.de
mail at adrianschmutzler.de
Di Okt 3 13:13:02 CEST 2017
Hallo,
der keyserver v2 schickt einen timestamp mit, daher ist der Vergleich der
SHA sinnlos und jeder File wird als neu behandelt!
> + sumnew=$(sha256sum /tmp/keyxchangev2data | cut -f1 -d " ")
> + sumold=$(sha256sum /www/public/keyxchangev2data &>/dev/null
> | cut -f1 -d " ")
> + if [ "$sumnew" != "$sumold" ]; then
Das muss am Server korrigiert werden, alternativ baue ich in den nächsten
Patch folgenden Workaround:
catnew="$(cat /tmp/keyxchangev2data | sed
's/"timestamp":[0-9]*/"timestamp":0/')"
catold="$(cat /www/public/keyxchangev2data 2>/dev/null | sed
's/"timestamp":[0-9]*/"timestamp":0/')"
sumnew=$(echo "$catnew" | sha256sum | cut -f1 -d " ")
sumold=$(echo "$catold" | sha256sum | cut -f1 -d " ")
if [ "$sumnew" != "$sumold" ]; then
Grüße
Adrian
> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf
> Of Adrian Schmutzler
> Sent: Montag, 2. Oktober 2017 18:06
> To: franken-dev at freifunk.net
> Cc: Jan Kraus <mayosemmel at gmail.com>
> Subject: [PATCH v12 4/6] Add fff-hoods
>
> From: Christian Dresel <fff at chrisi01.de>
>
> This package connects to keyxchangev2
> After review we must change the serveradress! This is only a example
>
> Signed-off-by: Christian Dresel <fff at chrisi01.de>
> Signed-off-by: Jan Kraus <mayosemmel at gmail.com>
> Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
>
> Update in v2:
> - clean tabstops
> - move the json vpn out of the if because we need this after reboot
>
> Update in v5:
> !!UNTESTED!!
> - change hidden AP ip to locallink
> - Open hidden AP after more checks
> - Load json File from Gateway if Gateway in Batman in Range
>
> Update in v6:
> !!UNTESTED!!
> - fix hidden station v6
> - fix -n to -f if
> - Add function to check for a gateway and use this
> - remove /etc/community.cfg and variables
> - send fewer infos to keyxchangev2
> - add a check if /tmp/keyxchangev2 not downloadable and edit a bit on
the
> wgets
> - change the position from json_load and do this only 1 times
>
> Update in v7:
> !!UNTESTED!!
> - delete keyxchangev2data at start of the script
> - do only things with keyxchangev2data if available
> - change keyxchangev2 url
>
> Update in v8/v9:
> - rebase onto 20170918-beta
>
> Update in v10:
> - Minor code fixes
> - Added fff-hoods to fff-base Makefile
> - Removed trailing whitespaces and harmonized tabs
> - Fixed some comments spelling
> - Added mac for hostname rewrite
> - Removed redundant check for /tmp/keyxchangev2data
>
> Update in v11:
> - Changed isGatewayAvailable to return integers (bool is
> not valid) and removed brackets for evaluations
> - Added variables for channels as they are used twice
> - Fixed $radio not set at the beginning (WORKAROUND!)
> - Changed OpenWRT to LEDE
> - Correctly reset json_select before reuse
> - Some tidying-up of comments and hyphens
> - Fixed vpn loop so it works for more than one host (TESTED)
> - Fixed "else" if no file received
>
> Changes in v12:
> - Removed obsolete hostname
>
> ToDo:
> - Mesh routers do not connect to config
> ---
> src/packages/fff/fff-hoods/Makefile | 39 ++++
> .../files/etc/hotplug.d/iface/50-fff-hoods | 5 +
> .../fff/fff-hoods/files/usr/lib/micron.d/fff-hoods | 1 +
> .../fff/fff-hoods/files/usr/sbin/configurehood | 210
> +++++++++++++++++++++
> src/packages/fff/fff/Makefile | 3 +-
> 5 files changed, 257 insertions(+), 1 deletion(-) create mode 100644
> src/packages/fff/fff-hoods/Makefile
> create mode 100644 src/packages/fff/fff-
> hoods/files/etc/hotplug.d/iface/50-fff-hoods
> create mode 100644 src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-
> hoods
> create mode 100755 src/packages/fff/fff-
> hoods/files/usr/sbin/configurehood
>
> diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-
> hoods/Makefile
> new file mode 100644
> index 0000000..f85178d
> --- /dev/null
> +++ b/src/packages/fff/fff-hoods/Makefile
> @@ -0,0 +1,39 @@
> +include $(TOPDIR)/rules.mk
> +
> +PKG_NAME:=fff-hoods
> +PKG_VERSION:=0.0.1
> +PKG_RELEASE:=1
> +
> +PKG_BUILD_DIR:=$(BUILD_DIR)/fff-hoods
> +
> +include $(INCLUDE_DIR)/package.mk
> +
> +define Package/fff-hoods
> + SECTION:=base
> + CATEGORY:=Freifunk
> + TITLE:= Freifunk-Franken hoods
> + URL:=http://www.freifunk-franken.de
> + DEPENDS:=+fff-network
> +endef
> +
> +define Package/fff-hoods/description
> + This package load and configures the current hood endef
> +
> +define Build/Prepare
> + echo "all: " > $(PKG_BUILD_DIR)/Makefile endef
> +
> +define Build/Configure
> + # nothing
> +endef
> +
> +define Build/Compile
> + # nothing
> +endef
> +
> +define Package/fff-hoods/install
> + $(CP) ./files/* $(1)/
> +endef
> +
> +$(eval $(call BuildPackage,fff-hoods))
> diff --git
a/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods
> b/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods
> new file mode 100644
> index 0000000..49f53e3
> --- /dev/null
> +++ b/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods
> @@ -0,0 +1,5 @@
> +#!/bin/sh
> +[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && {
> + sleep 3
> + /usr/sbin/configurehood
> +}
> diff --git a/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods
> b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods
> new file mode 100644
> index 0000000..ca8d798
> --- /dev/null
> +++ b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods
> @@ -0,0 +1 @@
> +*/5 * * * * /usr/sbin/configurehood
> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> new file mode 100755
> index 0000000..5346a90
> --- /dev/null
> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> @@ -0,0 +1,210 @@
> +#!/bin/sh
> +
> +. /usr/share/libubox/jshn.sh
> +. /lib/functions/fff/wireless
> +
> +rm /tmp/keyxchangev2data
> +
> +# Gatewaycheck function
> +isGatewayAvailable() {
> + if [ "$(batctl gwl | wc -l)" -gt 2 ]; then
> + return 0
> + else
> + return 1
> + fi
> +}
> +
> +chan2ghz="1"
> +chan5ghz="13"
> +
> +# Hidden AP check
> +
> +radio="radio0"
> +if [ -f /tmp/hiddenapflag ]; then
> + if isGatewayAvailable ; then
> + if ! wifiAddAP "$radio" "config.franken.freifunk.net"
> "configap" "configap" "1"; then
> + echo "Can't add AP interface on $radio."
> + exit 1
> + else
> + # We must set a fixed ip address here
> + uci set network.configap=interface
> + uci set network.configap.proto='static'
> + uci set network.configap.ip6addr='fe80::1/64'
> + uci commit network
> + fi
> + else
> + rm /tmp/hiddenapflag
> + fi
> +fi
> +
> +lat=$(uci get system. at system[0].latitude) long=$(uci get
> +system. at system[0].longitude)
> +
> +test_ipv4_host1="keyserver.freifunk-franken.de" # Freifunk-Franken
> keyserver
> +test_ipv4_host2="8.8.8.8" # Google DNS
> +test_ipv6_host1="heise.de" # heise Zeitschriftenverlag
> +
> +# if we have Internet, we download the Hoodfile from the keyxchangev2
> +if ping -w5 -c3 "$test_ipv4_host1" &>/dev/null ||
> + ping -w5 -c3 "$test_ipv4_host2" &>/dev/null ||
> + ping6 -w5 -c3 "$test_ipv6_host1" &>/dev/null; then
> + wget -T15 -t5 "http://keyserver.freifunk-
> franken.de/v2/?lat=$lat&long=$long" -O /tmp/keyxchangev2data
> + #if no Internet, we connect to the hidden AP and download the file
> +from another Node in range else
> + # connect to wireless hidden ap here and download the json File
> from the nearest router
> + # Only do that, when we have no gateway in range. If the
> Uplinkrouter changed the hood, we lost the GW and do this automatically
> again, I think! Nice idea?
> + if ! isGatewayAvailable ; then
> + #now we haven't a gateway in Range, we search for a hidden
> AP to get a keyxchangev2data file!
> + #first we delete all wifi settings
> + if ! wifiDelAll; then
> + echo "Can't delete current wifi setup"
> + exit 1
> + fi
> + #now we look for phy and add this
> + for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
> + if iw phy "$phy" info | grep -q -m1 "2... MHz"; then
> + echo "$phy is 2.4 GHz"
> + radio="$(wifiAddPhy "$phy" "$chan2ghz")"
> + if [ -z "$radio" ]; then
> + echo "Can't create radio for $phy"
> + exit 1
> + fi
> + fi
> + if iw phy "$phy" info | grep -q -m1 "5... MHz"; then
> + echo "$phy is 5 GHz"
> + radio="$(wifiAddPhy "$phy" "$chan5ghz")"
> + if [ -z "$radio" ]; then
> + echo "Can't create radio for $phy"
> + exit 1
> + fi
> + fi
> + #and here we add the station
> + if ! wifiAddSta "$radio"
"config.franken.freifunk.net"
> "configSta"; then
> + echo "Can't add Sta interface on $radio."
> + exit 1
> + fi
> + done
> +
> + wifi
> + # wait a moment to start the interface
> + sleep 10;
> + # and here we can download the Hoodfile from the other
> node
> + wget -T15 -t5 "http://[fe80::1%w2sta]/keyxchangev2data" -O
> /tmp/keyxchangev2data
> + else
> + echo "We have a Gateway in Range, we load the
> keyxchangev2data from fe80::1"
> + wget -T15 -t5 "http://[fe80::1%br-mesh]/keyxchangev2data"
> -O /tmp/keyxchangev2data
> + fi
> +fi
> +
> +if [ -s /tmp/keyxchangev2data ]; then
> +
> + # we get a json file in this format:
> + # https://pw.freifunk-franken.de/patch/205/
> + # but without signature, every hood file we get is valid!
> +
> + json_load "$(cat /tmp/keyxchangev2data)"
> + sumnew=$(sha256sum /tmp/keyxchangev2data | cut -f1 -d " ")
> + sumold=$(sha256sum /www/public/keyxchangev2data &>/dev/null
> | cut -f1 -d " ")
> + if [ "$sumnew" != "$sumold" ]; then
> + echo "New file detect, we reconfigure the Node";
> +
> + # copy the file to webroot so that other Meshrouter can
> download it
> + cp /tmp/keyxchangev2data /www/public/
> +
> + json_select hood
> +
> + json_get_var hood name
> + json_get_var mesh_bssid mesh_bssid
> + json_get_var mesh_essid mesh_essid
> + json_get_var essid essid
> + # i think the next things we don't active this in the first
> version! we can do it later
> + #json_get_var channel2 channel2
> + #json_get_var mode2 mode2
> + #json_get_var type2 type2
> + #json_get_var channel5 channel5
> + #json_get_var mode5 mode5
> + #json_get_var type5 type5
> + #json_get_var protocol protocol
> +
> + json_select ".." # back to root
> +
> + echo "Setting hood name: $hood"
> + uci set "system. at system[0].hood=$hood"
> +
> + if ! wifiDelAll; then
> + echo "Can't delete current wifi setup"
> + exit 1
> + fi
> +
> + for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
> + if iw phy "$phy" info | grep -q -m1 "2... MHz"; then
> + echo "$phy is 2.4 GHz"
> + radio="$(wifiAddPhy "$phy" "$chan2ghz")"
> + if [ -z "$radio" ]; then
> + echo "Can't create radio for $phy"
> + exit 1
> + fi
> + fi
> + if iw phy "$phy" info | grep -q -m1 "5... MHz"; then
> + echo "$phy is 5 GHz"
> + radio="$(wifiAddPhy "$phy" "$chan5ghz")"
> + if [ -z "$radio" ]; then
> + echo "Can't create radio for $phy"
> + exit 1
> + fi
> + fi
> +
> + if ! wifiAddAP "$radio" "$essid" "mesh" "ap" "0";
then
> + echo "Can't add AP interface on $radio."
> + exit 1
> + fi
> +
> + # here we set a bit for add hidden AP
> + touch /tmp/hiddenapflag
> +
> + if ! wifiAddAdHocMesh "$radio" "$mesh_essid"
> "$mesh_bssid"; then
> + echo "Can't add AP interface on $radio."
> + exit 1
> + fi
> + done
> +
> + echo "Loading wifi"
> + wifi
> +
> + else
> + echo "We have no new file. We do nothing. We try it again in
> 5 minutes...";
> + exit 0
> + fi
> +
> + # and now we read the VPN Data and give this data to fff-vpn
> + json_select vpn
> + Index=1
> + rm /tmp/fastd_fff_output
> + touch /tmp/fastd_fff_output
> + while json_select "$Index" > /dev/null
> + do
> + json_get_var protocol protocol
> + if [ "$protocol" == "fastd" ]; then
> + json_get_var servername name
> + echo "####${servername}.conf" >>
> /tmp/fastd_fff_output
> + echo "#name \"${servername}\";" >>
> /tmp/fastd_fff_output
> + json_get_var key key
> + echo "key \"${key}\";" >> /tmp/fastd_fff_output
> + json_get_var address address
> + json_get_var port port
> + echo "remote ipv4 \"${address}\" port $port float;"
> >> /tmp/fastd_fff_output
> + fi
> + echo "" >> /tmp/fastd_fff_output
> + json_select ".." # back to vpn
> + Index=$(( Index + 1 ))
> + done
> + echo "###" >> /tmp/fastd_fff_output
> + json_select ".." # back to root
> + #this we do every 5 minutes, because it can change the VPN Protocol
> + #and now we get to vpn-select Script and load VPNs
> + sh /usr/sbin/vpn-select
> +
> +else
> + echo "We haven't got a file. We do nothing. We try it again in 5
> minutes...";
> + exit 0
> +fi
> diff --git a/src/packages/fff/fff/Makefile b/src/packages/fff/fff/Makefile
> index 166d423..305ab8d 100644
> --- a/src/packages/fff/fff/Makefile
> +++ b/src/packages/fff/fff/Makefile
> @@ -29,7 +29,8 @@ define Package/fff-base
> +fff-wireless \
> +fff-timeserver \
> +fff-vpn-select \
> - +simple-tc
> + +simple-tc \
> + +fff-hoods
> endef
>
> define Package/fff-base/description
> --
> 2.7.4
>
> --
> franken-dev mailing list
> franken-dev at freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
Mehr Informationen über die Mailingliste franken-dev