packages/fff: Add fff-gwinfo

Submitted by Adrian Schmutzler on Feb. 10, 2019, 10:11 p.m.

Details

Message ID 20190210221143.2130-1-freifunk@adrianschmutzler.de
State New
Headers show

Commit Message

Adrian Schmutzler Feb. 10, 2019, 10:11 p.m.
This package sends IP addresses and DNS ranges
to the Monitoring.

The current code version for the main script is
available at:
https://github.com/FreifunkFranken/fff-monitoring/blob/master/gwinfo/gwinfofirmware.sh

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

---

Ich würde auch diese Package gerne in die offizielle FW mit
aufnehmen. Es gibt drei Möglichkeiten:
- Default: Eintrag in fff-base und micrond aktiv
- Optional/built-in: Die Package wird mit in die Firmware
  kompiliert, aber der micrond fehlt, sodass by default keine
  Daten gesendet werden. Wer möchte, kann gwinfo einfach
  aktivieren, ohne selbst eine FW bauen zu müssen.
- Optional/not selected: Die Package enthält den micrond, aber
  wird nicht in fff-base als Dependency eintragen. Damit wird
  sie in der offiziellen FW nicht mit einkompiliert, wer selbst
  FW baut kann die Package aber mit reinnehmen (dies ist im
  aktuellen Patch der Fall).

Ich bitte um Feedback, wie die Meinung zu gwinfo ist.
---
 src/packages/fff/fff-gwinfo/Makefile               | 39 +++++++++++++++
 .../fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo   |  1 +
 src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo  | 55 ++++++++++++++++++++++
 3 files changed, 95 insertions(+)
 create mode 100644 src/packages/fff/fff-gwinfo/Makefile
 create mode 100644 src/packages/fff/fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo
 create mode 100755 src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-gwinfo/Makefile b/src/packages/fff/fff-gwinfo/Makefile
new file mode 100644
index 00000000..b4f01ee3
--- /dev/null
+++ b/src/packages/fff/fff-gwinfo/Makefile
@@ -0,0 +1,39 @@ 
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=fff-gwinfo
+PKG_VERSION:=1.4.6
+PKG_RELEASE:=3
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/$(PKG_NAME)
+	SECTION:=base
+	CATEGORY:=Freifunk
+	TITLE:= Freifunk-Franken GWinfo
+	URL:=https://github.com/FreifunkFranken/fff-monitoring/blob/master/gwinfo/gwinfofirmware.sh
+	DEPENDS:=+fff-network +fff-dhcp
+endef
+
+define Package/$(PKG_NAME)/description
+	This package sends IP addresses and DHCP ranges to the Monitoring
+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-gwinfo/files/usr/lib/micron.d/fff-gwinfo b/src/packages/fff/fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo
new file mode 100644
index 00000000..aaaeca3f
--- /dev/null
+++ b/src/packages/fff/fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo
@@ -0,0 +1 @@ 
+3-59/5 * * * * /usr/sbin/gwinfo
diff --git a/src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo b/src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo
new file mode 100755
index 00000000..566951a7
--- /dev/null
+++ b/src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo
@@ -0,0 +1,55 @@ 
+#!/bin/sh
+#
+# Gateway data script for FFF Monitoring
+# Copyright Adrian Schmutzler, 2018.
+# License GPLv3
+#
+# Gateway-Firmware Version 1.4.6
+#
+
+# Config
+api_urls="https://monitoring.freifunk-franken.de/api/gwinfo" # space-separated list of addresses (api_urls="url1 url2")
+batctlpath=/usr/sbin/batctl
+hostname="$(uci -q get system.@system[0].hostname)"
+statslink="$(uci -q get gateway.@gateway[0].statslink)"
+
+# Code
+tmp=$(/bin/mktemp)
+echo "{\"version\":\"1.4.6\",\"hostname\":\"$hostname\",\"stats_page\":\"$statslink\",\"netifs\":[" > $tmp
+
+comma=""
+for netif in $(ls /sys/class/net); do
+	if [ "$netif" = "lo" ] || echo "$netif" | grep -q "w" ; then # remove wXap, wXmesh, etc.
+		continue
+	fi
+	mac="$(cat "/sys/class/net/$netif/address")"
+	batctl="$("$batctlpath" -m "$netif" if | grep "eth" | sed -n 's/:.*//p')"
+
+	ipv4=""
+	ipv6=""
+	dhcpstart=""
+	dhcpend=""
+	if [ "$netif" = "bat0" ]; then
+		ipv4="$(ip -4 addr show dev br-mesh | grep " 10\." | sed 's/.* \(10\.[^ ]*\/[^ ]*\) .*/\1/')"
+		ipv6="$(ip -6 addr show dev br-mesh | grep " fd43" | grep '::' | sed 's/.* \(fd43[^ ]*\) .*/\1/')"
+		[ "$(echo "$ipv6" | wc -l)" = "1" ] || ipv6=""
+		dhcpstart="$(uci -q get dhcp.mesh.start)"
+	fi
+
+	echo "$comma{\"mac\":\"$mac\",\"netif\":\"$netif\",\"vpnif\":\"$batctl\",\"ipv4\":\"$ipv4\",\"ipv6\":\"$ipv6\",\"dhcpstart\":\"$dhcpstart\",\"dhcpend\":\"$dhcpend\"}" >> $tmp
+	comma=","
+done
+
+echo "],\"admins\":[" >> $tmp
+
+comma=""
+for admin in $(uci -q get gateway.@gateway[0].admin); do
+	echo "$comma\"$admin\"" >> $tmp && comma=","
+done
+
+echo "]}" >> $tmp
+
+for api_url in $api_urls; do
+	/usr/bin/curl -k -v -H "Content-type: application/json; charset=UTF-8" --data-binary @$tmp "$api_url"
+done
+/bin/rm "$tmp"

Comments

Tim Niemeyer Feb. 12, 2019, 3:23 p.m.
Hi

Wenn du batctl raus wirfst könnte man es meinet wegen auch aktivieren.
Ehrlich gesagt kapiere ich das eh nicht so recht, was das da tut. Die
Variable im json scheint auf VPN hinzudeuten, aber dann werden da nur
"eth"s aus dem batman if gegreppt... ?

Von der Architektur her wäre es langfristig sicher sinnvoll die
einzelnen Schritte von dem gwinfo in separate Scripte zu werfen. z.B.
könnte es Gateways geben die kein dhcpd haben.. Vielleicht gibt es
welche die kein radvd kram haben.

Unten noch ne kleine Anmerkung.

On Sun, 2019-02-10 at 23:11 +0100, Adrian Schmutzler wrote:
> This package sends IP addresses and DNS ranges
> to the Monitoring.
> 
> The current code version for the main script is
> available at:
> https://github.com/FreifunkFranken/fff-monitoring/blob/master/gwinfo/
> gwinfofirmware.sh
> 
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> 
> ---
> 
> Ich würde auch diese Package gerne in die offizielle FW mit
> aufnehmen. Es gibt drei Möglichkeiten:
> - Default: Eintrag in fff-base und micrond aktiv
> - Optional/built-in: Die Package wird mit in die Firmware
>   kompiliert, aber der micrond fehlt, sodass by default keine
>   Daten gesendet werden. Wer möchte, kann gwinfo einfach
>   aktivieren, ohne selbst eine FW bauen zu müssen.
> - Optional/not selected: Die Package enthält den micrond, aber
>   wird nicht in fff-base als Dependency eintragen. Damit wird
>   sie in der offiziellen FW nicht mit einkompiliert, wer selbst
>   FW baut kann die Package aber mit reinnehmen (dies ist im
>   aktuellen Patch der Fall).
> 
> Ich bitte um Feedback, wie die Meinung zu gwinfo ist.
> ---
>  src/packages/fff/fff-gwinfo/Makefile               | 39
> +++++++++++++++
>  .../fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo   |  1 +
>  src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo  | 55
> ++++++++++++++++++++++
>  3 files changed, 95 insertions(+)
>  create mode 100644 src/packages/fff/fff-gwinfo/Makefile
>  create mode 100644 src/packages/fff/fff-
> gwinfo/files/usr/lib/micron.d/fff-gwinfo
>  create mode 100755 src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo
> 
> diff --git a/src/packages/fff/fff-gwinfo/Makefile
> b/src/packages/fff/fff-gwinfo/Makefile
> new file mode 100644
> index 00000000..b4f01ee3
> --- /dev/null
> +++ b/src/packages/fff/fff-gwinfo/Makefile
> @@ -0,0 +1,39 @@
> +include $(TOPDIR)/rules.mk
> +
> +PKG_NAME:=fff-gwinfo
> +PKG_VERSION:=1.4.6
> +PKG_RELEASE:=3
> +
> +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> +
> +include $(INCLUDE_DIR)/package.mk
> +
> +define Package/$(PKG_NAME)
> +	SECTION:=base
> +	CATEGORY:=Freifunk
> +	TITLE:= Freifunk-Franken GWinfo
> +	URL:=https://github.com/FreifunkFranken/fff-monitoring/blob/
> master/gwinfo/gwinfofirmware.sh
> +	DEPENDS:=+fff-network +fff-dhcp
> +endef
> +
> +define Package/$(PKG_NAME)/description
> +	This package sends IP addresses and DHCP ranges to the
> Monitoring
> +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-gwinfo/files/usr/lib/micron.d/fff-
> gwinfo b/src/packages/fff/fff-gwinfo/files/usr/lib/micron.d/fff-
> gwinfo
> new file mode 100644
> index 00000000..aaaeca3f
> --- /dev/null
> +++ b/src/packages/fff/fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo
> @@ -0,0 +1 @@
> +3-59/5 * * * * /usr/sbin/gwinfo
> diff --git a/src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo
> b/src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo
> new file mode 100755
> index 00000000..566951a7
> --- /dev/null
> +++ b/src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo
> @@ -0,0 +1,55 @@
> +#!/bin/sh
> +#
> +# Gateway data script for FFF Monitoring
> +# Copyright Adrian Schmutzler, 2018.
> +# License GPLv3
> +#
> +# Gateway-Firmware Version 1.4.6
> +#
> +
> +# Config
> +api_urls="https://monitoring.freifunk-franken.de/api/gwinfo" #
> space-separated list of addresses (api_urls="url1 url2")
> +batctlpath=/usr/sbin/batctl
> +hostname="$(uci -q get system.@system[0].hostname)"
> +statslink="$(uci -q get gateway.@gateway[0].statslink)"
> +
> +# Code
> +tmp=$(/bin/mktemp)
> +echo
> "{\"version\":\"1.4.6\",\"hostname\":\"$hostname\",\"stats_page\":\"$
> statslink\",\"netifs\":[" > $tmp
> +
> +comma=""
> +for netif in $(ls /sys/class/net); do
> +	if [ "$netif" = "lo" ] || echo "$netif" | grep -q "w" ; then
> # remove wXap, wXmesh, etc.
> +		continue
> +	fi
> +	mac="$(cat "/sys/class/net/$netif/address")"
> +	batctl="$("$batctlpath" -m "$netif" if | grep "eth" | sed -n
> 's/:.*//p')"
> +
> +	ipv4=""
> +	ipv6=""
> +	dhcpstart=""
> +	dhcpend=""
> +	if [ "$netif" = "bat0" ]; then
> +		ipv4="$(ip -4 addr show dev br-mesh | grep " 10\." |
> sed 's/.* \(10\.[^ ]*\/[^ ]*\) .*/\1/')"
> +		ipv6="$(ip -6 addr show dev br-mesh | grep " fd43" |
> grep '::' | sed 's/.* \(fd43[^ ]*\) .*/\1/')"
> +		[ "$(echo "$ipv6" | wc -l)" = "1" ] || ipv6=""
> +		dhcpstart="$(uci -q get dhcp.mesh.start)"
Fehlt hier dhcpend?

> +	fi
> +
> +	echo
> "$comma{\"mac\":\"$mac\",\"netif\":\"$netif\",\"vpnif\":\"$batctl\",\
> "ipv4\":\"$ipv4\",\"ipv6\":\"$ipv6\",\"dhcpstart\":\"$dhcpstart\",\"d
> hcpend\":\"$dhcpend\"}" >> $tmp
> +	comma=","
> +done
> +
> +echo "],\"admins\":[" >> $tmp
> +
> +comma=""
> +for admin in $(uci -q get gateway.@gateway[0].admin); do
> +	echo "$comma\"$admin\"" >> $tmp && comma=","
> +done
> +
> +echo "]}" >> $tmp
> +
> +for api_url in $api_urls; do
> +	/usr/bin/curl -k -v -H "Content-type: application/json;
> charset=UTF-8" --data-binary @$tmp "$api_url"

Hab das jetzt nicht sicher auf dem Schirm.. Sollte das nicht alles curl
auf wget portiert werden? Oder war es jetzt genau anders rum?

Grüße
Tim


> +done
> +/bin/rm "$tmp"