diff --git a/package/gluon-core/Makefile b/package/gluon-core/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..730349808f71e34d6997cf65e172e328e136d8df --- /dev/null +++ b/package/gluon-core/Makefile @@ -0,0 +1,35 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=gluon-core +PKG_VERSION:=0.3.2.99 +PKG_RELEASE:=1 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/gluon-core + SECTION:=gluon + CATEGORY:=Gluon + TITLE:=Base files of Gluon +endef + +define Package/gluon-core/description + The core of the Gluon community wifi mesh firmware framework +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/gluon-core/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,gluon-core)) diff --git a/package/gluon-core/files/etc/uci-defaults/zzz-gluon-upgrade b/package/gluon-core/files/etc/uci-defaults/zzz-gluon-upgrade new file mode 100755 index 0000000000000000000000000000000000000000..3b9fc07d24d05c255561a4f3a44e60e29ad3c641 --- /dev/null +++ b/package/gluon-core/files/etc/uci-defaults/zzz-gluon-upgrade @@ -0,0 +1,69 @@ +#!/bin/sh + + +UPGRADE_DIR=/lib/gluon/upgrade +VERSION_DIR=/lib/gluon/version + + +version_of() { + opkg status "gluon-$1" | grep '^Version: ' | cut -d' ' -f 2 +} + +oldversion_of() { + oldversion="$(cat "$VERSION_DIR"/"$1" 2>/dev/null)" + + # Legacy support + if [ -z "$oldversion" ]; then oldversion="$(cat /etc/.freifunk_version_keep 2>/dev/null)"; fi + if [ -z "$oldversion" ]; then oldversion="$(cat /etc/.lff_version_keep 2>/dev/null)"; fi + if [ -z "$oldversion" ]; then oldversion="$(cat /etc/.kff_version_keep 2>/dev/null)"; fi + + echo "$oldversion" +} + +do_dir() { + if [ -d "$1" ]; then + local s + for s in "$1"/*; do "$s"; done + fi +} + + +version="$(version_of gluon-core)" + +oldversion="$(cat "$VERSION_FILE" 2>/dev/null)" +if [ -z "$oldversion" ]; then oldversion="$(cat "$VERSION_FILE_FREIFUNK" 2>/dev/null)"; fi +if [ -z "$oldversion" ]; then oldversion="$(cat "$VERSION_FILE_LFF" 2>/dev/null)"; fi +if [ -z "$oldversion" ]; then oldversion="$(cat "$VERSION_FILE_KFF" 2>/dev/null)"; fi + +( + cd "$UPGRADE_DIR" + + for component in *; do ( + local version="$(version_of "$component")" + if [ -z "$version" ]; then continue; fi + + cd "$component" + + local oldversion="$(oldversion_of "$component")" + if [ -z "$oldversion" ]; then + do_dir initial + else + local v + + for v in *; do + if [ "$v" = initial -o "$v" = invariant -o "$v" = version ]; then continue; fi + + # The return value of opkg compare-versions is negated + if ! opkg compare-versions "$v" '>>' "$oldversion"; then + do_dir "$v" + fi + done + fi + + do_dir invariant + + echo "$version" > "$VERSION_DIR"/"$component" + ) done +) + +rm -f "$VERSION_FILE_FREIFUNK" "$VERSION_FILE_LFF" "$VERSION_FILE_KFF" diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/010-freifunk-migrate-config b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/010-freifunk-migrate-config new file mode 100755 index 0000000000000000000000000000000000000000..8f6d7026de7f521f84296b85ab6fc86a9dcefe4a --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/010-freifunk-migrate-config @@ -0,0 +1,16 @@ +#!/bin/sh + + +[ -r /etc/config/ffhl ] || exit 0 + +cp /etc/config/ffhl /etc/config/config_mode +mv /etc/config/ffhl /etc/config/freifunk + +uci -q batch <<EOF +delete config_mode.@bandwidth[0] +commit config_mode + +delete freifunk.@wizard[0] +commit freifunk +EOF + diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/011-freifunk-disable-services b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/011-freifunk-disable-services new file mode 100755 index 0000000000000000000000000000000000000000..ac58cd6680b085389fff11991817a14d730c6022 --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/011-freifunk-disable-services @@ -0,0 +1,4 @@ +#!/bin/sh + +/etc/init.d/dnsmasq disable +/etc/init.d/telnet disable diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/012-freifunk-migrate-network b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/012-freifunk-migrate-network new file mode 100755 index 0000000000000000000000000000000000000000..b074b762a4f693433316af940eb5853fbf2bbde5 --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/012-freifunk-migrate-network @@ -0,0 +1,18 @@ +#!/bin/sh + +get_main_address() { + case "$board" in + tl-wdr3600|tl-wdr4300) + uci get wireless.radio1.macaddr + ;; + *) + uci get wireless.radio0.macaddr + ;; + esac +} + +uci set network.freifunk.proto='none' +uci set network.freifunk.auto='1' +uci set network.freifunk.accept_ra='1' +uci set network.freifunk.macaddr=$(get_main_address) +uci commit network diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/013-freifunk-migrate-batman-adv b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/013-freifunk-migrate-batman-adv new file mode 100755 index 0000000000000000000000000000000000000000..46f297f704b47483178cc1508a5669e33ceb7299 --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/013-freifunk-migrate-batman-adv @@ -0,0 +1,17 @@ +#!/bin/sh + +local interfaces='' +local interfaces_old="$(uci get batman-adv.bat0.interfaces)" + +for interface in $interfaces_old; do + if [ $interface != br-wan ]; then interfaces="${interfaces:+${interfaces} }$interface"; fi +done + +uci set batman-adv.bat0.interfaces="$interfaces" + +old_interval="$(uci -q get batman-adv.bat0.orig_interval)" +if [ -z "$old_interval" -o "$old_interval" = 1000 ]; then + uci set batman-adv.bat0.orig_interval=5000 +fi + +uci commit batman-adv diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/020-lff-wireless b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/020-lff-wireless new file mode 100755 index 0000000000000000000000000000000000000000..379f239f73ee8c5e3b21dbaa91decf9b547ee98f --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/020-lff-wireless @@ -0,0 +1,6 @@ +#!/bin/sh + +uci -q batch <<EOF +set wireless.wifi_freifunk.ssid='luebeck.freifunk.net' +commit wireless +EOF diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/021-lff-fastd b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/021-lff-fastd new file mode 100755 index 0000000000000000000000000000000000000000..0d5498c3bcc702858be9113b773f81cc8196e50a --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.1/021-lff-fastd @@ -0,0 +1,9 @@ +#!/bin/sh + + +uci -q batch <<EOF +delete fastd.ffhl_mesh_vpn.config +add_list fastd.ffhl_mesh_vpn.config=/lib/freifunk/mesh-vpn-up.conf + +commit fastd +EOF diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/010-freifunk-migrate-batman-adv b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/010-freifunk-migrate-batman-adv new file mode 100755 index 0000000000000000000000000000000000000000..6275f32a0d99e20bee9a8e5f97d3dab1e7da373d --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/010-freifunk-migrate-batman-adv @@ -0,0 +1,5 @@ +#!/bin/sh + + +uci set batman-adv.bat0.interfaces="mesh-vpn $(uci -q get batman-adv.bat0.interfaces)" +uci commit batman-adv diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/011-update-avahi-daemon-conf b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/011-update-avahi-daemon-conf new file mode 100755 index 0000000000000000000000000000000000000000..048eaa6f01a4db72c544a1eeec808e2f55437b2b --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/011-update-avahi-daemon-conf @@ -0,0 +1,6 @@ +#!/bin/sh + + +if [ "$(md5sum /etc/avahi/avahi-daemon.conf | cut -d ' ' -f 1)" = e63b3d69311b496c0a06555ea04bc20b ]; then + cp /rom/etc/avahi/avahi-daemon.conf /etc/avahi/avahi-daemon.conf +fi diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/020-lff-migrate-mesh-vpn b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/020-lff-migrate-mesh-vpn new file mode 100755 index 0000000000000000000000000000000000000000..ab46e516e887a0cc8fa6b6d21d6e91e761f68ff6 --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/020-lff-migrate-mesh-vpn @@ -0,0 +1,33 @@ +#!/bin/sh + + +uci rename fastd.ffhl_mesh_vpn=mesh_vpn + + +bind="$(uci -q get fastd.mesh_vpn.bind)" +uci -q delete fastd.mesh_vpn.bind + +if [ "$bind" -a "$bind" != '0.0.0.0' ]; then + uci add_list fastd.mesh_vpn.bind="$bind" +fi + + +method="$(uci -q get fastd.mesh_vpn.method)" +uci -q delete fastd.mesh_vpn.method + +if [ "$method" ]; then + uci add_list fastd.mesh_vpn.method="$method" +fi + + +uci -q batch <<EOF +set fastd.mesh_vpn.interface=mesh-vpn + +delete fastd.mesh_vpn.config +add_list fastd.mesh_vpn.config=/lib/freifunk/mesh-vpn/fastd.conf + +delete fastd.mesh_vpn.config_peer_dir +add_list fastd.mesh_vpn.config_peer_dir=/etc/fastd/mesh-vpn/peers + +commit fastd +EOF diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/021-lff-migrate-peers b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/021-lff-migrate-peers new file mode 100755 index 0000000000000000000000000000000000000000..71e8bf4abaf1d80ae4adbb188dcc5e4b815436e6 --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.2/021-lff-migrate-peers @@ -0,0 +1,11 @@ +#!/bin/sh + + +( + cd /etc/fastd/ffhl-mesh-vpn/peers + rm -f burgtor holstentor muehlentor huextertor + + mv * /etc/fastd/mesh-vpn/peers/ 2>/dev/null || true +) + +rmdir -p /etc/fastd/ffhl-mesh-vpn/peers 2>/dev/null || true diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/0.3.3/010-freifunk-migrate-batman-adv b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.3/010-freifunk-migrate-batman-adv new file mode 100755 index 0000000000000000000000000000000000000000..ba32c95b1e4528df2123b383386135996302c9a6 --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/0.3.3/010-freifunk-migrate-batman-adv @@ -0,0 +1,38 @@ +#!/bin/sh + +. /lib/ar71xx.sh + +local board="$(ar71xx_board_name)" + +uci -q batch <<EOF +set network.mesh.proto='batadv' +set network.mesh.mesh='bat0' + +set network.mesh_vpn='interface' +set network.mesh_vpn.ifname='mesh-vpn' +set network.mesh_vpn.proto='batadv' +set network.mesh_vpn.mesh='bat0' +EOF + +get_main_address() { + case "$board" in + tl-wdr3600|tl-wdr4300) + uci get wireless.radio1.macaddr + ;; + *) + uci get wireless.radio0.macaddr + ;; + esac +} + +local mainaddr=$(get_main_address) +local oIFS="$IFS"; IFS=":"; set -- $mainaddr; IFS="$oIFS" +local b2mask=0x02 + +local vpnaddr=$(printf "%02x:%s:%s:%02x:%s:%s" $(( 0x$1 | $b2mask )) $2 $3 $(( (0x$4 + 1) % 0x100 )) $5 $6) + +uci set network.mesh_vpn.macaddr="$vpnaddr" +uci commit network + +uci delete batman-adv.bat0.interfaces +uci commit batman-adv diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/initial/010-freifunk-system b/package/gluon-core/files/lib/gluon/upgrade/core/initial/010-freifunk-system new file mode 100755 index 0000000000000000000000000000000000000000..376ba8f70b67f498de6ef68cc785570bb458cd6d --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/initial/010-freifunk-system @@ -0,0 +1,40 @@ +#!/bin/sh + +. /lib/ar71xx.sh + +board="$(ar71xx_board_name)" + +case "$board" in +tl-wdr3600|\ +tl-wdr4300) + macaddr="$(uci get wireless.radio1.macaddr)" + + uci -q batch <<EOF + set system.led_wlan2g.trigger='netdev' + set system.led_wlan2g.dev='wlan0' + set system.led_wlan2g.mode='link' + + set system.led_wlan5='led' + set system.led_wlan5.name='WLAN5' + set system.led_wlan5.sysfs='ath9k-phy1' + set system.led_wlan5.trigger='netdev' + set system.led_wlan5.dev='wlan1' + set system.led_wlan5.mode='link' +EOF + ;; +*) + macaddr="$(uci get wireless.radio0.macaddr)" + + uci -q batch <<EOF + set system.led_wlan.trigger='netdev' + set system.led_wlan.dev='wlan0' + set system.led_wlan.mode='link' +EOF + ;; +esac + +uci -q batch <<EOF + set system.@system[0].hostname='Freifunk-${macaddr//:/}' + set system.@system[0].timezone='CET-1CEST,M3.5.0,M10.5.0/3' + commit system +EOF diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/initial/011-freifunk-network b/package/gluon-core/files/lib/gluon/upgrade/core/initial/011-freifunk-network new file mode 100755 index 0000000000000000000000000000000000000000..2962b763ee9c4976c11089fcf26d33453251ff56 --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/initial/011-freifunk-network @@ -0,0 +1,64 @@ +#!/bin/sh + +. /lib/ar71xx.sh + +local lan_ifname="$(uci get network.lan.ifname)" +local board="$(ar71xx_board_name)" + +uci -q batch <<EOF +delete network.lan + +set network.wan.type='bridge' +set network.wan.proto='dhcp' +set network.wan.accept_ra='0' +set network.wan.auto='1' + +set network.freifunk='interface' +set network.freifunk.ifname='$lan_ifname bat0' +set network.freifunk.type='bridge' +set network.freifunk.proto='none' +set network.freifunk.auto='1' +set network.freifunk.accept_ra='1' + +set network.mesh='interface' +set network.mesh.proto='batadv' +set network.mesh.mtu='1528' +set network.mesh.mesh='bat0' + +set network.mesh_vpn='interface' +set network.mesh_vpn.ifname='mesh-vpn' +set network.mesh_vpn.proto='batadv' +set network.mesh_vpn.mesh='bat0' +EOF + +get_main_address() { + case "$board" in + tl-wdr3600|tl-wdr4300) + uci get wireless.radio1.macaddr + ;; + *) + uci get wireless.radio0.macaddr + ;; + esac +} + +local mainaddr=$(get_main_address) +local oIFS="$IFS"; IFS=":"; set -- $mainaddr; IFS="$oIFS" +local b2mask=0x02 + +local vpnaddr=$(printf "%02x:%s:%s:%02x:%s:%s" $(( 0x$1 | $b2mask )) $2 $3 $(( (0x$4 + 1) % 0x100 )) $5 $6) + +uci set network.freifunk.macaddr="$mainaddr" +uci set network.mesh_vpn.macaddr="$vpnaddr" + +case "$board" in +tl-wr1043nd|\ +tl-wdr3600|\ +tl-wdr4300) # fix up duplicate mac addresses + local wanaddr=$(printf "%02x:%s:%s:%02x:%s:%02x" $(( 0x$1 | $b2mask )) $2 $3 $(( (0x$4 + 1) % 0x100 )) $5 $(( (0x$6 + 1) % 0x100 )) ) + + uci set network.wan.macaddr="$wanaddr" + ;; +esac + +uci commit network diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/initial/012-freifunk-disable-services b/package/gluon-core/files/lib/gluon/upgrade/core/initial/012-freifunk-disable-services new file mode 100755 index 0000000000000000000000000000000000000000..c4152059303795261f31dc2ce8e8048cab8aa9d1 --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/initial/012-freifunk-disable-services @@ -0,0 +1,5 @@ +#!/bin/sh + +/etc/init.d/dnsmasq disable +/etc/init.d/telnet disable +/etc/init.d/uhttpd disable diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/initial/020-lff-wireless b/package/gluon-core/files/lib/gluon/upgrade/core/initial/020-lff-wireless new file mode 100755 index 0000000000000000000000000000000000000000..18e9c7cdf736e87c5e4d8ae536491b658ecffde5 --- /dev/null +++ b/package/gluon-core/files/lib/gluon/upgrade/core/initial/020-lff-wireless @@ -0,0 +1,25 @@ +#!/bin/sh + +uci -q batch <<EOF +delete wireless.radio0.disabled +delete wireless.@wifi-iface[0] + +set wireless.radio0.channel='1' +set wireless.radio0.htmode='HT40+' +set wireless.radio0.country='DE' + +set wireless.wifi_freifunk='wifi-iface' +set wireless.wifi_freifunk.device='radio0' +set wireless.wifi_freifunk.network='freifunk' +set wireless.wifi_freifunk.mode='ap' +set wireless.wifi_freifunk.ssid='luebeck.freifunk.net' + +set wireless.wifi_mesh='wifi-iface' +set wireless.wifi_mesh.device='radio0' +set wireless.wifi_mesh.network='mesh' +set wireless.wifi_mesh.mode='adhoc' +set wireless.wifi_mesh.ssid='02:d1:11:37:fc:38' +set wireless.wifi_mesh.bssid='02:d1:11:37:fc:38' + +commit wireless +EOF diff --git a/package/gluon-core/files/lib/upgrade/keep.d/gluon b/package/gluon-core/files/lib/upgrade/keep.d/gluon new file mode 100644 index 0000000000000000000000000000000000000000..19904ba620fb39d2ee12df6d9af0f643bdfffe6a --- /dev/null +++ b/package/gluon-core/files/lib/upgrade/keep.d/gluon @@ -0,0 +1 @@ +/lib/gluon/version/