[v9,4/4] Add fff-hoods

Christian Dresel fff at chrisi01.de
Mi Sep 27 12:52:40 CEST 2017


und es geht weiter

On 27.09.2017 12:15, Christian Dresel wrote:
> hi
> 
> On 27.09.2017 11:25, mail at adrianschmutzler.de wrote:
>> Hallo,
>>
>> ist das so jetzt schon benutzbar?
> 
> es fehlen noch Gateways, wenn du die Router Koordinatentechnisch nach
> Fürth setzt (in der Nähe von
> http://keyserver.freifunk-franken.de/v2/?lat=49.48&long=10.9 damit du
> nicht in Nürnberg landest was noch kein GW hat:
> http://keyserver.freifunk-franken.de/v2/?lat=47.48&long=9.9 ) könnte es
> schon halbwegs klappen (Internetrouting ist noch ungetestet, das mach
> ich jetzt gleich aber per Batman sollte er sich schon verbinden), ich
> bin grad dabei einiges zu fixen und das GW zum laufen zu bringen, ist
> aber noch SEHR testphasig und kann jederzeit noch viel kaputt gehen,
> also bitte nur Router flashen die bei dir daheim zum testen rumstehen.
> 
> Auch das ganze Patchset ist noch experiementell wie man an meinen Mails
> und div. Fehlern die noch auftauchen sieht ;)
> 
>>
>> Würde bei mir ein paar Router testweise flashen ...
>>
>> Durch das neue Batman dürften die ja dann keine Loops mit meiner bestehenden
>> Installation bauen, oder?
> 
> da sich die BSSID ändert sowieso nicht, das Problem wird sich mit dem
> keyxchangev2 komplett lösen da jede Hood ne eigene BSSID hat damit kann
> es gar keine Loops mehr geben (JUCHU keine Arbeit mehr ;))
> 
> Kleine Anmerkung noch Inline im Code, bin auf einen weiteren Fehler
> gestolpert:
> 
>>
>> Grüße
>>
>> Adrian
>>
>>> -----Original Message-----
>>> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf
>>> Of Christian Dresel
>>> Sent: Mittwoch, 27. September 2017 10:53
>>> To: Adrian Schmutzler <freifunk at adrianschmutzler.de>; franken-
>>> dev at freifunk.net
>>> Cc: Jan Kraus <mayosemmel at gmail.com>
>>> Subject: Re: [v9,4/4] Add fff-hoods
>>>
>>> Falls jemand damit arbeiten will, einige Syntaxfehler:
>>>
>>> On 27.09.2017 09:54, Christian Dresel wrote:
>>>> hi
>>>>
>>>> Das ganze Paket muss noch in der fff-base aktiviert werden, das hab
>>>> aber wohl schon ich vermasselt da es wohl auch schon in den früheren
>>>> Patchversionen von mir fehlt. Sollte bei der nächsten Version mit
>>>> nachgetragen werden.
>>>>
>>>> mfg
>>>>
>>>> Christian
>>>>
>>>> (sry wegen der doppelten Mail, ich hab die Absenderadresse mal wieder
>>>> vermurkst...)
>>>>
>>>> On 21.09.2017 16:02, Adrian Schmutzler wrote:
>>>>> From: Christian Dresel <fff at chrisi01.de>
>>>>>
>>>>> this packages connect 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>
>>>>>
>>>>> 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
>>>>> ---
>>>>>  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     | 205
>>> +++++++++++++++++++++
>>>>>  4 files changed, 250 insertions(+)
>>>>>  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-hoo
>>>>> +++ ds
>>>>> @@ -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..bfec822
>>>>> --- /dev/null
>>>>> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
>>>>> @@ -0,0 +1,205 @@
>>>>> +#!/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 true;
>>>>> +	else
>>>>> +		return false;
>>>>> +	fi
>>>>> +}
>>>>> +
>>>>> +
>>>>> +# hidden AP check
>>>>> +
>>>>> +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 here a fix ip adress
>>>>> +			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) hostname=$(cat
>>>>> +/proc/sys/kernel/hostname) [ "$hostname" = "OpenWrt" ] &&
>>>>> +hostname=""
>>>>> +[ "$hostname" = "" ] &&  hostname="$mac"
>>>>> +
>>>>> +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 from the next
>>> router the json File -O /tmp/keyxchangev2data
>>>>> +	# only to that, when we have no gateway in range. If the
>>> Uplinkrouter change the hood, we lost the GW and to 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"
>>> "$BATMAN_CHANNEL")
>>>>> +				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"
>>> "$BATMAN_CHANNEL_5GHZ")
>>>>> +				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 | cut -f1 -d "
>>> ")
>>>>> +	if [ "$sumnew" != "$sumold" ] && [ -f /tmp/keyxchangev2data]; then
> 
> [ ! -f /tmp/keyxchangev2data]

dazu kommt noch, das wir da natürlich rein wollen wenn:

"$sumnew" != "$sumold" ODER ! -f /tmp/keyxchangev2data

also wäre nun richtig:

if [ "$sumnew" != "$sumold" ] || [ ! -f /tmp/keyxchangev2data]; then

mfg

Christian

> wäre richtig, da wir da ja rein wollen wenn die File NICHT existiert.
> 
> mfg
> 
> Christian
> 
>>>
>>> möp wichtiges Leerzeichen vor ]
>>>
>>>>> +		echo "New file detect, we reconfigure the Node";
>>>>> +
>>>>> +		# copy the file to webroot that other Meshrouter can
>>> download them
>>>>> +		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
>>>>> +
>>>>> +		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" "1")
>>>>> +				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" "13")
>>>>> +				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 or we have no file get. We do
>>> nothing. We try it again in 5 minutes...";
>>>>> +	fi
>>>>> +
>>>>> +	# and now we read the VPN Data and give this data to fff-vpn
>>>
>>> hier ist (warum auch immer) ein:
>>>
>>> json_load "$(cat /tmp/keyxchangev2data)"
>>>
>>> nötig obwohl es oben schon gemacht wurde, warum? Weiß ich gerade nicht
>>> genau aber ohne geht es nicht.
>>>
>>>>> +
>>>>> +	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
>>>
>>> möp, wichtiges Leerzeichen vor ]
>>>
>>> mfg
>>>
>>> Christian
>>>
>>>>> +			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
>>>>> +		echo "###" >> /tmp/fastd_fff_output
>>>>> +	done
>>>>> +	#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
>>>>> +fi
>>>>
>>>>
>>>>
>>>>
>>
>>
> 
> 
> 

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 819 bytes
Beschreibung: OpenPGP digital signature
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20170927/84fd6056/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev