From 4a0e71421fa3702c3b35af372b7be943e4396d63 Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Sat, 7 May 2016 20:27:27 +0200
Subject: [PATCH 001/135] Next experimental releases 0.8+

---
 site.mk | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/site.mk b/site.mk
index bda5e1e..633f663 100644
--- a/site.mk
+++ b/site.mk
@@ -13,6 +13,7 @@ GLUON_SITE_PACKAGES := \
 	gluon-luci-autoupdater \
 	gluon-luci-portconfig \
 	gluon-luci-private-wifi \
+	gluon-luci-wifi-config \
 	gluon-next-node \
 	gluon-mesh-vpn-fastd \
 	gluon-radvd \
@@ -25,7 +26,7 @@ GLUON_SITE_PACKAGES := \
 	haveged
 
 
-DEFAULT_GLUON_RELEASE := 0.8
+DEFAULT_GLUON_RELEASE := 0.8+exp$(shell date '+%Y%m%d')
 
 # Allow overriding the release number from the command line
 GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)

From f033bb58e2bafc003ba51c5bfc09f8af00cf491a Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Thu, 8 Sep 2016 17:39:17 +0200
Subject: [PATCH 002/135] site.mk: add region code

---
 site.mk | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/site.mk b/site.mk
index 633f663..0cea861 100644
--- a/site.mk
+++ b/site.mk
@@ -33,4 +33,7 @@ GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
 
 GLUON_PRIORITY ?= 0
 
+# Region code required for some images; supported values: us eu
+GLUON_REGION ?= eu
+
 GLUON_LANGS ?= en de

From 3d7324cbc426730b39774a8cbc3df23475cb9bec Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 26 Sep 2016 22:32:15 +0200
Subject: [PATCH 003/135] i18n: adjustments for gluon v2016.2

---
 i18n/de.po | 10 +++++-----
 i18n/en.po |  8 ++++----
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/i18n/de.po b/i18n/de.po
index f0bef46..d6af861 100644
--- a/i18n/de.po
+++ b/i18n/de.po
@@ -22,10 +22,10 @@ msgstr ""
 "<p>Dies ist der öffentliche Schlüssel deines Freifunkknotens. Erst nachdem "
 "er auf den Servern des Hamburger Freifunk-Projektes eingetragen wurde, "
 "kann sich dein Knoten mit dem Hamburger Mesh-VPN verbinden. "
-"Bitte trage dazu diesen Schlüssel, den Namen deines Knotens (<em><%=hostname%></em>) und ein paar andere Informationen unter "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=hostname%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> ein.</p>"
+"Bitte trage dazu diesen Schlüssel, den Namen deines Knotens (<em><%=escape(hostname)%></em>) und ein paar andere Informationen unter "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=escape(hostname)%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> ein.</p>"
 "<div class=\"the-key\">"
-" # <%= hostname %>"
+" # <%= escape(hostname) %>"
 " <br/>"
 "<%= pubkey %>"
 "</div>"
@@ -42,6 +42,6 @@ msgstr ""
 msgid "gluon-config-mode:nopubkey"
 msgstr ""
 "Bitte trage nun den Namen deines Knotens "
-"(<em><%=hostname%></em>) und ein paar andere Informationen unter "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=hostname%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
+"(<em><%=escape(hostname)%></em>) und ein paar andere Informationen unter "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=escape(hostname)%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
 "ein."
diff --git a/i18n/en.po b/i18n/en.po
index 2731910..978d199 100644
--- a/i18n/en.po
+++ b/i18n/en.po
@@ -24,10 +24,10 @@ msgstr ""
 "<p>This is the public key for your Freifunk node. You can only "
 "connect the node to the Hamburg mesh VPN after the key has been registered on "
 "the Freifunk Hamburg servers. "
-"Please register your key, the name of your node (<em><%=hostname%></em>), and a bit of additional info at "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=hostname%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a>.</p>"
+"Please register your key, the name of your node (<em><%=escape(hostname)%></em>), and a bit of additional info at "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=escape(hostname)%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a>.</p>"
 "<div class=\"the-key\">"
-" # <%= hostname %>"
+" # <%= escape(hostname) %>"
 " <br/>"
 "<%= pubkey %>"
 "</div>"
@@ -44,5 +44,5 @@ msgid "gluon-config-mode:nopubkey"
 msgstr ""
 "Please enter the name of your node "
 "(<em><%=hostname%></em>) and some additional information at "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=hostname%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=escape(hostname)%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
 "."

From 7c9ce52ad04c2009dce314fa645e91b897d40a34 Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 26 Sep 2016 22:33:57 +0200
Subject: [PATCH 004/135] site.conf: support for 802.11b data rates removed

---
 site.conf | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/site.conf b/site.conf
index 4b89dfe..12df01a 100644
--- a/site.conf
+++ b/site.conf
@@ -19,6 +19,10 @@
 
 	wifi24 = {
 		channel = 1,
+
+		supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
+		basic_rate = {6000, 9000, 18000, 36000, 54000},
+
 		ap = {
 			ssid = 'hamburg.freifunk.net',
 		},

From 363d59571be126de66c50a8ca3cb2d97a6a23182 Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 26 Sep 2016 22:36:16 +0200
Subject: [PATCH 005/135] site.conf: default VPN bandwidth limit raised

---
 site.conf | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/site.conf b/site.conf
index 12df01a..bbf890f 100644
--- a/site.conf
+++ b/site.conf
@@ -109,8 +109,8 @@
 		},
 		bandwidth_limit = {
 			enabled = false,
-			ingress = 8000,
-			egress = 500,
+			ingress = 8096,
+			egress = 1024,
 		},
 	},
 

From a56476065f4cc62b9372b6d66ffbb7813dbc38da Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 26 Sep 2016 22:39:19 +0200
Subject: [PATCH 006/135] site.mk: set GLUON_ATH10K_MESH default to ibss

---
 site.mk | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/site.mk b/site.mk
index 0cea861..fa85daf 100644
--- a/site.mk
+++ b/site.mk
@@ -36,4 +36,6 @@ GLUON_PRIORITY ?= 0
 # Region code required for some images; supported values: us eu
 GLUON_REGION ?= eu
 
+GLUON_ATH10K_MESH ?= ibss
+
 GLUON_LANGS ?= en de

From c3506961fd631d54e34a28de9855f80b76e332e0 Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 26 Sep 2016 22:41:28 +0200
Subject: [PATCH 007/135] site.mk: package gluon-ebtables-segment-mld added

---
 site.mk | 1 +
 1 file changed, 1 insertion(+)

diff --git a/site.mk b/site.mk
index fa85daf..6722c4a 100644
--- a/site.mk
+++ b/site.mk
@@ -9,6 +9,7 @@ GLUON_SITE_PACKAGES := \
 	gluon-config-mode-reboot-ffhh \
 	gluon-ebtables-filter-multicast \
 	gluon-ebtables-filter-ra-dhcp \
+	gluon-ebtables-segment-mld \
 	gluon-luci-admin \
 	gluon-luci-autoupdater \
 	gluon-luci-portconfig \

From 9b6934c63b3375dcf3f54776df634f12f90302bd Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Tue, 4 Oct 2016 19:54:04 +0200
Subject: [PATCH 008/135] modules: Update ffhh packages

---
 modules | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules b/modules
index 6a1e244..ab8c439 100644
--- a/modules
+++ b/modules
@@ -1,5 +1,5 @@
 GLUON_SITE_FEEDS='ffhh_packages'
 
 PACKAGES_FFHH_PACKAGES_REPO=git://github.com/freifunkhamburg/ffhh-packages.git
-PACKAGES_FFHH_PACKAGES_COMMIT=58a026ad0dbea4bd2727ce30a410bd9c6fdbaaa7
+PACKAGES_FFHH_PACKAGES_COMMIT=c9d083f52384c2a52c303924de3960705c7c945b
 

From 530cda260f0c21ada080b7362aeb57a1c40b7564 Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Tue, 4 Oct 2016 20:27:58 +0200
Subject: [PATCH 009/135] site.mk: remove package fastd-traffic-status

---
 site.mk | 1 -
 1 file changed, 1 deletion(-)

diff --git a/site.mk b/site.mk
index 6722c4a..4d22bed 100644
--- a/site.mk
+++ b/site.mk
@@ -21,7 +21,6 @@ GLUON_SITE_PACKAGES := \
 	gluon-respondd \
 	gluon-setup-mode \
 	gluon-status-page \
-	fastd-traffic-status \
 	iwinfo \
 	iptables \
 	haveged

From d73c8964ec0cb04b1ebc5fd5c1e6340e5437c2b6 Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 7 Nov 2016 10:11:06 +0100
Subject: [PATCH 010/135] site.conf: Add PoE pass through option to config mode

---
 site.conf | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/site.conf b/site.conf
index bbf890f..9352061 100644
--- a/site.conf
+++ b/site.conf
@@ -151,4 +151,6 @@
 			},
 		},
 	},
+
+	poe_passthrough = false,
 }

From cc1159b149693d674fe4c68b9b18abab39a8fa4d Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Thu, 19 Jan 2017 18:12:56 +0100
Subject: [PATCH 011/135] modules: Update ffhh packages

---
 modules | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules b/modules
index ab8c439..6416262 100644
--- a/modules
+++ b/modules
@@ -1,5 +1,5 @@
 GLUON_SITE_FEEDS='ffhh_packages'
 
 PACKAGES_FFHH_PACKAGES_REPO=git://github.com/freifunkhamburg/ffhh-packages.git
-PACKAGES_FFHH_PACKAGES_COMMIT=c9d083f52384c2a52c303924de3960705c7c945b
+PACKAGES_FFHH_PACKAGES_COMMIT=ef9fcc1222f74c3c045b1450537a4b8b80efb56c
 

From b651e7046baa31955e01ad978fa2b0d502c271fa Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Thu, 19 Jan 2017 18:18:30 +0100
Subject: [PATCH 012/135] site.mk: prepare for next LEDE based releases

---
 site.mk | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/site.mk b/site.mk
index 4d22bed..e94a3c3 100644
--- a/site.mk
+++ b/site.mk
@@ -15,7 +15,6 @@ GLUON_SITE_PACKAGES := \
 	gluon-luci-portconfig \
 	gluon-luci-private-wifi \
 	gluon-luci-wifi-config \
-	gluon-next-node \
 	gluon-mesh-vpn-fastd \
 	gluon-radvd \
 	gluon-respondd \
@@ -26,7 +25,7 @@ GLUON_SITE_PACKAGES := \
 	haveged
 
 
-DEFAULT_GLUON_RELEASE := 0.8+exp$(shell date '+%Y%m%d')
+DEFAULT_GLUON_RELEASE := 0.9~exp$(shell date '+%Y%m%d')
 
 # Allow overriding the release number from the command line
 GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)

From f416dcd4e3277279797be4bae4bd192e99c06afb Mon Sep 17 00:00:00 2001
From: Daniel Frank <github-523@danielfrank.net>
Date: Mon, 4 Sep 2017 19:29:09 +0200
Subject: [PATCH 013/135] =?UTF-8?q?Neuer=20key=20f=C3=BCr=20tokudan?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 site.conf | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/site.conf b/site.conf
index 9352061..8399090 100644
--- a/site.conf
+++ b/site.conf
@@ -127,6 +127,7 @@
 					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
 					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
 					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
+					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
 				},
 			},
 			beta = {
@@ -139,6 +140,7 @@
 					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
 					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
 					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
+					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
 				},
 			},
 			experimental = {

From 1fac91557fa2497b65fb6a767a8dcbaf12e9518c Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 18 Sep 2017 20:06:18 +0200
Subject: [PATCH 014/135] Change to config structure for multiple sites. Merge
 site ffhh-sued to master branch

---
 .gitignore                        |   3 +
 Makefile                          |  18 ++++
 README.md                         |   5 ++
 i18n/de.po                        |  12 +--
 i18n/en.po                        |  10 +--
 sites/ffhh-sued/modules           |   5 ++
 sites/ffhh-sued/site.conf         | 139 ++++++++++++++++++++++++++++++
 sites/ffhh-sued/site.mk           |  38 ++++++++
 sites/ffhh/modules                |   5 ++
 site.conf => sites/ffhh/site.conf |   0
 site.mk => sites/ffhh/site.mk     |   0
 11 files changed, 224 insertions(+), 11 deletions(-)
 create mode 100644 Makefile
 create mode 100644 sites/ffhh-sued/modules
 create mode 100644 sites/ffhh-sued/site.conf
 create mode 100644 sites/ffhh-sued/site.mk
 create mode 100644 sites/ffhh/modules
 rename site.conf => sites/ffhh/site.conf (100%)
 rename site.mk => sites/ffhh/site.mk (100%)

diff --git a/.gitignore b/.gitignore
index b25c15b..0acb982 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
 *~
+/site.conf
+/site.mk
+/modules
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..5d45c2b
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,18 @@
+all: check_site site.mk site.conf modules
+
+.PHONY: check_site
+check_site:
+	if test -z "${SITE}"; then echo Usage: make SITE=ffhh; exit 1; else true; fi
+
+.PHONY: clean
+clean:
+	rm -f site.mk site.conf modules
+
+modules:
+	cp sites/${SITE}/$@ $@
+
+site.conf:
+	cp sites/${SITE}/$@ $@
+
+site.mk:
+	cp sites/${SITE}/$@ $@
diff --git a/README.md b/README.md
index 50a73cf..570c1e1 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,9 @@
     git clone https://github.com/freifunk-gluon/gluon.git            # Get the official Gluon repository
     cd gluon
     git clone https://github.com/freifunkhamburg/site-ffhh.git site  # Get the Freifunk Hamburg site repository
+    cd site
+    make SITE=ffhh
+    cd ..
     make update                                                    # Get other repositories used by Gluon
     make                                                           # Build Gluon
 
@@ -11,6 +14,8 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- 0.8.2: v2016.2.5
+- 0.8.1: v2016.2.4 (ffhh-sued only)
 - 0.8: v2016.1.4
 - 0.7.1: v2015.1.2
 - 0.7: v2015.1
diff --git a/i18n/de.po b/i18n/de.po
index d6af861..9951d23 100644
--- a/i18n/de.po
+++ b/i18n/de.po
@@ -22,10 +22,10 @@ msgstr ""
 "<p>Dies ist der öffentliche Schlüssel deines Freifunkknotens. Erst nachdem "
 "er auf den Servern des Hamburger Freifunk-Projektes eingetragen wurde, "
 "kann sich dein Knoten mit dem Hamburger Mesh-VPN verbinden. "
-"Bitte trage dazu diesen Schlüssel, den Namen deines Knotens (<em><%=escape(hostname)%></em>) und ein paar andere Informationen unter "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=escape(hostname)%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> ein.</p>"
+"Bitte trage dazu diesen Schlüssel, den Namen deines Knotens (<em><%=pcdata(hostname)%></em>) und ein paar andere Informationen unter "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> ein.</p>"
 "<div class=\"the-key\">"
-" # <%= escape(hostname) %>"
+" # <%= pcdata(hostname) %>"
 " <br/>"
 "<%= pubkey %>"
 "</div>"
@@ -39,9 +39,9 @@ msgstr ""
 "<a href=\"https://hamburg.freifunk.net/\">unserer Webseite</a>.</p>"
 "<p>Viel Spaß mit deinem Knoten und der Erkundung von Freifunk!</p>"
 
-msgid "gluon-config-mode:nopubkey"
+msgid "gluon-config-mode:novpn"
 msgstr ""
 "Bitte trage nun den Namen deines Knotens "
-"(<em><%=escape(hostname)%></em>) und ein paar andere Informationen unter "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=escape(hostname)%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
+"(<em><%=pcdata(hostname)%></em>) und ein paar andere Informationen unter "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
 "ein."
diff --git a/i18n/en.po b/i18n/en.po
index 978d199..7868a2b 100644
--- a/i18n/en.po
+++ b/i18n/en.po
@@ -24,10 +24,10 @@ msgstr ""
 "<p>This is the public key for your Freifunk node. You can only "
 "connect the node to the Hamburg mesh VPN after the key has been registered on "
 "the Freifunk Hamburg servers. "
-"Please register your key, the name of your node (<em><%=escape(hostname)%></em>), and a bit of additional info at "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=escape(hostname)%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a>.</p>"
+"Please register your key, the name of your node (<em><%=pcdata(hostname)%></em>), and a bit of additional info at "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a>.</p>"
 "<div class=\"the-key\">"
-" # <%= escape(hostname) %>"
+" # <%= pcdata(hostname) %>"
 " <br/>"
 "<%= pubkey %>"
 "</div>"
@@ -40,9 +40,9 @@ msgstr ""
 "<a href=\"https://hamburg.freifunk.net/\">our homepage</a>.</p>"
 "<p>Have fun with your node and exploring the Freifunk network!</p>"
 
-msgid "gluon-config-mode:nopubkey"
+msgid "gluon-config-mode:novpn"
 msgstr ""
 "Please enter the name of your node "
 "(<em><%=hostname%></em>) and some additional information at "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=escape(hostname)%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
 "."
diff --git a/sites/ffhh-sued/modules b/sites/ffhh-sued/modules
new file mode 100644
index 0000000..6416262
--- /dev/null
+++ b/sites/ffhh-sued/modules
@@ -0,0 +1,5 @@
+GLUON_SITE_FEEDS='ffhh_packages'
+
+PACKAGES_FFHH_PACKAGES_REPO=git://github.com/freifunkhamburg/ffhh-packages.git
+PACKAGES_FFHH_PACKAGES_COMMIT=ef9fcc1222f74c3c045b1450537a4b8b80efb56c
+
diff --git a/sites/ffhh-sued/site.conf b/sites/ffhh-sued/site.conf
new file mode 100644
index 0000000..c40b955
--- /dev/null
+++ b/sites/ffhh-sued/site.conf
@@ -0,0 +1,139 @@
+{
+	hostname_prefix = 'GibMirEinenNamen',
+	site_name = 'Freifunk Hamburg Sued',
+	site_code = 'ffhh-sued',
+
+	opkg = {
+		lede = 'http://opkg.services.ffhh/lede/snapshots/packages/%A',
+		extra = {
+			modules = 'http://updates.hamburg.freifunk.net/%GS/stable/archive/modules/gluon-%GS-%GR/%S',
+		},
+	},
+
+	prefix4 = '10.112.64.0/19',
+	prefix6 = '2a03:2267:1::/64',
+
+	timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', -- Europe/Berlin
+	ntp_servers = {'1.ntp.services.ffhh','2.ntp.services.ffhh'},
+	regdom = 'DE',
+
+	wifi24 = {
+		channel = 1,
+
+		supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
+		basic_rate = {6000, 9000, 18000, 36000, 54000},
+
+		ap = {
+			ssid = 'hamburg.freifunk.net',
+		},
+		mesh = {
+			id = '6668682D73756564',
+			mcast_rate = 12000,
+		},
+	},
+
+	wifi5 = {
+		channel = 44,
+		ap = {
+			ssid = 'hamburg.freifunk.net',
+		},
+		mesh = {
+			id = '6668682D73756564',
+			mcast_rate = 12000,
+		},
+	},
+
+	next_node = {
+		ip4 = '10.112.64.1',
+		ip6 = '2a03:2267:1::1',
+
+		mac = '16:41:95:40:f7:dc',
+	},
+
+	mesh_vpn = {
+		enabled = true,
+		mtu = 1312,
+		fastd = {
+			configurable = true,
+			methods = {'salsa2012+umac'},
+			groups = {
+				backbone = {
+					limit = 1,
+					peers = {
+						gateway01 = {
+							key = 'cb09c68e2d2f7d374d47035cd532e0a60b8b3a7447aa5a7f76f4f15c8ffa9e58',
+							remotes = {'"gw01-new.hamburg.freifunk.net" port 10003'},
+						},
+						gateway02 = {
+							key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
+							remotes = {'"gw02-new.hamburg.freifunk.net" port 10003'},
+						},
+						gateway03 = {
+							key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
+							remotes = {'"gw03-new.hamburg.freifunk.net" port 10003'},
+						},
+						gateway04 = {
+							key = 'fca88dd58316f4ab50d2a697123dddf4d0ba3aad52ddeb0ba7835cdbbeb60dbf',
+							remotes = {'"gw04-new.hamburg.freifunk.net" port 10004'},
+						},
+						gateway05 = {
+							key = '84986658775167dff6918dc8e0529c4a4524cb1782849a80933ddb6d8c6bd3f5',
+							remotes = {'"gw05-new.hamburg.freifunk.net" port 10004'},
+						},
+						gateway06 = {
+							key = 'fb608aa75180ba88b4a3399a6498e68796d200afc1bfd275a0dcb903a31f39b6',
+							remotes = {'"gw06-new.hamburg.freifunk.net" port 10004'},
+						},
+					},
+				},
+			},
+		},
+		bandwidth_limit = {
+			enabled = false,
+			ingress = 8096,
+			egress = 1024,
+		},
+	},
+
+	autoupdater = {
+		branch = 'experimental',
+		branches = {
+			stable = {
+				name = 'stable',
+				mirrors = {'http://1.updates.services.ffhh/ffhh-sued/stable/sysupgrade','http://2.updates.services.ffhh/ffhh-sued/stable/sysupgrade'},
+				good_signatures = 2,
+				pubkeys = {
+					'417ef22f886539ddbcffbad35e9f493195ca53e05f75bd8d8011a4999498b589', -- baldo
+					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
+					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
+					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
+					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
+					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
+				},
+			},
+			beta = {
+				name = 'beta',
+				mirrors = {'http://1.updates.services.ffhh/ffhh-sued/beta/sysupgrade','http://2.updates.services.ffhh/ffhh-sued/beta/sysupgrade'},
+				good_signatures = 2,
+				pubkeys = {
+					'417ef22f886539ddbcffbad35e9f493195ca53e05f75bd8d8011a4999498b589', -- baldo
+					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
+					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
+					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
+					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
+					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
+				},
+			},
+			experimental = {
+				name = 'experimental',
+				mirrors = {'http://1.updates.services.ffhh/ffhh-sued/experimental/sysupgrade','http://2.updates.services.ffhh/ffhh-sued/experimental/sysupgrade'},
+				good_signatures = 1,
+				pubkeys = {
+					'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', -- 1.builder
+				},
+			},
+		},
+	},
+
+	poe_passthrough = false,
+}
diff --git a/sites/ffhh-sued/site.mk b/sites/ffhh-sued/site.mk
new file mode 100644
index 0000000..ccd260c
--- /dev/null
+++ b/sites/ffhh-sued/site.mk
@@ -0,0 +1,38 @@
+GLUON_SITE_PACKAGES := \
+	gluon-mesh-batman-adv-15 \
+	gluon-autoupdater \
+	gluon-config-mode-autoupdater \
+	gluon-config-mode-core \
+	gluon-config-mode-hostname \
+	gluon-config-mode-mesh-vpn \
+	gluon-ebtables-filter-multicast \
+	gluon-ebtables-filter-ra-dhcp \
+	gluon-ebtables-segment-mld \
+	gluon-web-admin \
+	gluon-web-autoupdater \
+	gluon-web-network \
+	gluon-web-private-wifi \
+	gluon-web-wifi-config \
+	gluon-mesh-vpn-fastd \
+	gluon-radvd \
+	gluon-respondd \
+	gluon-setup-mode \
+	gluon-status-page \
+	iwinfo \
+	iptables \
+	haveged
+
+
+DEFAULT_GLUON_RELEASE := 0.9~exp$(shell date '+%Y%m%d')
+
+# Allow overriding the release number from the command line
+GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
+
+GLUON_PRIORITY ?= 0
+
+# Region code required for some images; supported values: us eu
+GLUON_REGION ?= eu
+
+GLUON_ATH10K_MESH ?= 11s
+
+GLUON_LANGS ?= en de
diff --git a/sites/ffhh/modules b/sites/ffhh/modules
new file mode 100644
index 0000000..6416262
--- /dev/null
+++ b/sites/ffhh/modules
@@ -0,0 +1,5 @@
+GLUON_SITE_FEEDS='ffhh_packages'
+
+PACKAGES_FFHH_PACKAGES_REPO=git://github.com/freifunkhamburg/ffhh-packages.git
+PACKAGES_FFHH_PACKAGES_COMMIT=ef9fcc1222f74c3c045b1450537a4b8b80efb56c
+
diff --git a/site.conf b/sites/ffhh/site.conf
similarity index 100%
rename from site.conf
rename to sites/ffhh/site.conf
diff --git a/site.mk b/sites/ffhh/site.mk
similarity index 100%
rename from site.mk
rename to sites/ffhh/site.mk

From 10d96dfd8b7a8be50077910d0c471430241fb1fa Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 18 Sep 2017 20:09:10 +0200
Subject: [PATCH 015/135] Delete modules file from config root

---
 modules | 5 -----
 1 file changed, 5 deletions(-)
 delete mode 100644 modules

diff --git a/modules b/modules
deleted file mode 100644
index 6416262..0000000
--- a/modules
+++ /dev/null
@@ -1,5 +0,0 @@
-GLUON_SITE_FEEDS='ffhh_packages'
-
-PACKAGES_FFHH_PACKAGES_REPO=git://github.com/freifunkhamburg/ffhh-packages.git
-PACKAGES_FFHH_PACKAGES_COMMIT=ef9fcc1222f74c3c045b1450537a4b8b80efb56c
-

From 4bb15ab0f9c6215cdf02fc98a270a294949c515b Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 18 Sep 2017 20:11:33 +0200
Subject: [PATCH 016/135] Update readme

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 570c1e1..5f50e56 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- 0.8.3: v2016.2.6 (ffhh-sued only)
 - 0.8.2: v2016.2.5
 - 0.8.1: v2016.2.4 (ffhh-sued only)
 - 0.8: v2016.1.4

From c917ae5dfd5f91373d9d9c504491929233bdedfd Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 22 Oct 2017 21:37:45 +0200
Subject: [PATCH 017/135] Migration to LEDE

---
 Makefile                                      |  24 ++-
 build.sh                                      |  78 +++++++++
 config/defaults.erb                           |  55 ++++++
 config/ffhh-sued.erb                          |  42 +++++
 config/ffhh.erb                               |  54 ++++++
 sites/ffhh-sued/site.conf                     | 139 ---------------
 sites/ffhh-sued/site.mk                       |  38 -----
 sites/ffhh/modules                            |   5 -
 sites/ffhh/site.conf                          | 158 ------------------
 sites/ffhh/site.mk                            |  40 -----
 template/info.erb                             |   3 +
 .../ffhh-sued/modules => template/modules.erb |   0
 template/site.conf.erb                        | 133 +++++++++++++++
 template/site.mk.erb                          |  17 ++
 14 files changed, 399 insertions(+), 387 deletions(-)
 create mode 100755 build.sh
 create mode 100644 config/defaults.erb
 create mode 100644 config/ffhh-sued.erb
 create mode 100644 config/ffhh.erb
 delete mode 100644 sites/ffhh-sued/site.conf
 delete mode 100644 sites/ffhh-sued/site.mk
 delete mode 100644 sites/ffhh/modules
 delete mode 100644 sites/ffhh/site.conf
 delete mode 100644 sites/ffhh/site.mk
 create mode 100644 template/info.erb
 rename sites/ffhh-sued/modules => template/modules.erb (100%)
 create mode 100644 template/site.conf.erb
 create mode 100644 template/site.mk.erb

diff --git a/Makefile b/Makefile
index 5d45c2b..3d87a6f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,18 +1,28 @@
-all: check_site site.mk site.conf modules
+sites: clean info sites/ffhh sites/ffhh-sued
 
-.PHONY: check_site
-check_site:
-	if test -z "${SITE}"; then echo Usage: make SITE=ffhh; exit 1; else true; fi
+info: config/defaults.erb template/info.erb
+	erb -T- config/defaults.erb template/$@.erb >$@
 
 .PHONY: clean
 clean:
+	rm -rf sites
+	rm -f info
+
+sites/%: config/%.erb
+	mkdir -p $@
+	cd $@ && $(MAKE) -f ../../Makefile site SITE=$(@F)
+
+site: siteclean site.mk site.conf modules
+
+.PHONY: siteclean
+siteclean:
 	rm -f site.mk site.conf modules
 
 modules:
-	cp sites/${SITE}/$@ $@
+	erb -T- ../../config/defaults.erb ../../config/$(SITE).erb ../../template/$@.erb >$@
 
 site.conf:
-	cp sites/${SITE}/$@ $@
+	erb -T- ../../config/defaults.erb ../../config/$(SITE).erb ../../template/$@.erb >$@
 
 site.mk:
-	cp sites/${SITE}/$@ $@
+	erb -T- ../../config/defaults.erb ../../config/$(SITE).erb ../../template/$@.erb >$@
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..4713fee
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,78 @@
+#!/bin/bash -e
+
+set -e
+
+function announce () {
+	echo '############################' $* >&2
+}
+
+proc=$(nproc)
+gluon_out="${HOME}/firmware"
+
+while getopts g:j:o:bv opt; do
+	case "$opt" in
+		g) gluon_path="$OPTARG" ;;
+		o) gluon_out="$OPTARG" ;;
+		b) export BROKEN=1 ;;
+		j) proc="$OPTARG" ;;
+		v) verbose=V=s ;;
+	esac
+done
+if [ -z "${gluon_path}" ]; then
+	echo "Usage: $0 -g GLUON_PATH" >&2
+	echo "       -g GLUON_PATH   Path to a checkout of the gluon repository." >&2
+	echo "       -o OUT_PATH     Path to a checkout of the gluon repository. Default: ${gluon_out}" >&2
+	echo "       -b              BROKEN=1" >&2
+	echo "       -v              verbose" >&2
+	echo "       -j JOBS         Run build with -jJOBS. Default: ${proc}" >&2
+	exit 1
+fi
+
+gluon_path=$(realpath $gluon_path)
+mkdir -p ${gluon_out}
+gluon_out=$(realpath $gluon_out)
+site_path=$(realpath $(dirname $BASH_SOURCE))
+
+announce GLUON: $gluon_path >&2
+announce FFHH SITES: $site_path >&2
+
+# Build the site repo and generate all site configs
+announce Building site repo and reading data >&2
+pushd $site_path > /dev/null
+make
+. info
+export GLUON_RELEASE
+export GLUON_BRANCH
+# get the available sites...
+sites=""
+for s in sites/*; do sites="${sites} ${s##*/}"; done
+announce Gluon will be built for the following sites:$sites >&2
+announce The following targets will be generated: $targets >&2
+popd >/dev/null
+
+pushd "${gluon_path}" >/dev/null
+announce Starting make update...
+for s in $sites; do
+	export GLUON_SITEDIR="${site_path}/sites/${s}"
+	export GLUON_OUTPUTDIR="${gluon_out}/${s}/${GLUON_BRANCH}/${GLUON_RELEASE}"
+	export GLUON_IMAGEDIR="${GLUON_OUTPUTDIR}/images"
+	export GLUON_MODULEDIR="${GLUON_OUTPUTDIR}/modules"
+	rm -rf "${GLUON_OUTPUTDIR}"
+	mkdir -p "${GLUON_IMAGEDIR}" "${GLUON_MODULEDIR}"
+	make update
+	# Try to install patches. I wasn't able to figure out how patches in gluon/site/patches work.
+	for p in ${site_path}/patches/*.patch; do
+		if [ -e "$p" -a ! -f "${gluon_path}/${p##*/}" ]; then
+			announce Installing patch $p
+			patch -p1 < $p
+			touch "${gluon_path}/${p##*/}"
+		fi
+	done
+	for t in $targets; do
+		announce Starting build for $s/$t... >&2
+		make -j$(nproc) GLUON_TARGET=$t $verbose
+	done
+	announce Building manifest...
+	make manifest
+done
+popd >/dev/null
diff --git a/config/defaults.erb b/config/defaults.erb
new file mode 100644
index 0000000..792707f
--- /dev/null
+++ b/config/defaults.erb
@@ -0,0 +1,55 @@
+<%
+#gluon_branch = "stable"
+gluon_branch = "experimental"
+gluon_release = "0.9.0"
+
+# Add the +exp and current date if this is an experimental release
+gluon_release += "+exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"
+
+gluon_targets = %w(
+	ar71xx-generic
+	ar71xx-nand
+	mpc85xx-generic
+	x86-generic
+	x86-64
+)
+
+gluon_site_packages = %w(
+	gluon-autoupdater
+	gluon-config-mode-autoupdater
+	gluon-config-mode-core
+	gluon-config-mode-hostname
+	gluon-config-mode-mesh-vpn
+	gluon-ebtables-filter-multicast
+	gluon-ebtables-filter-ra-dhcp
+	gluon-ebtables-segment-mld
+	gluon-mesh-vpn-fastd
+	gluon-radvd
+	gluon-respondd
+	gluon-setup-mode
+	gluon-status-page
+	gluon-web-admin
+	gluon-web-autoupdater
+	gluon-web-network
+	gluon-web-private-wifi
+	gluon-web-wifi-config
+	haveged
+	iptables
+	iwinfo
+)
+
+gluon_ath10k_mesh = "11s"
+
+signing_keys = [
+		'417ef22f886539ddbcffbad35e9f493195ca53e05f75bd8d8011a4999498b589', # baldo
+		'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', # leo
+		'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', # andre
+		'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', # gernot
+		'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', # bjoern
+		'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', # daniel
+]
+signing_keys_experimental = [
+		'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', # 1.builder
+]
+
+-%>
diff --git a/config/ffhh-sued.erb b/config/ffhh-sued.erb
new file mode 100644
index 0000000..cc64d7f
--- /dev/null
+++ b/config/ffhh-sued.erb
@@ -0,0 +1,42 @@
+<%
+site_name = 'Freifunk Hamburg Sued'
+site_code = 'ffhh-sued'
+
+gluon_site_packages += %w( gluon-mesh-batman-adv-15 )
+gluon_ath10k_mesh = "11s"
+
+prefix4 = '10.112.64.0/19'
+prefix6 = '2a03:2267:1::/64'
+
+next_node_ipv4 = '10.112.64.1'
+next_node_ipv6 = '2a03:2267:1::1'
+
+mtu = 1312
+
+gateways = {
+	"gateway01" => {
+		"key" => "cb09c68e2d2f7d374d47035cd532e0a60b8b3a7447aa5a7f76f4f15c8ffa9e58",
+		"remotes" => [ '"gw01-new.hamburg.freifunk.net" port 10003' ]
+	},
+	"gateway02" => {
+		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
+		"remotes" => [ '"gw02-new.hamburg.freifunk.net" port 10003' ]
+	},
+	"gateway03" => {
+		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
+		"remotes" => [ '"gw03-new.hamburg.freifunk.net" port 10003' ]
+	},
+	"gateway04" => {
+		"key" => "fca88dd58316f4ab50d2a697123dddf4d0ba3aad52ddeb0ba7835cdbbeb60dbf",
+		"remotes" => [ '"gw04-new.hamburg.freifunk.net" port 10004' ]
+	},
+	"gateway05" => {
+		"key" => "84986658775167dff6918dc8e0529c4a4524cb1782849a80933ddb6d8c6bd3f5",
+		"remotes" => [ '"gw05-new.hamburg.freifunk.net" port 10004' ]
+	},
+	"gateway06" => {
+		"key" => "fb608aa75180ba88b4a3399a6498e68796d200afc1bfd275a0dcb903a31f39b6",
+		"remotes" => [ '"gw06-new.hamburg.freifunk.net" port 10004' ]
+	},
+}
+-%>
diff --git a/config/ffhh.erb b/config/ffhh.erb
new file mode 100644
index 0000000..4edaff8
--- /dev/null
+++ b/config/ffhh.erb
@@ -0,0 +1,54 @@
+<%
+site_name = 'Freifunk Hamburg'
+site_code = 'ffhh'
+
+gluon_site_packages += %w( gluon-mesh-batman-adv-14 gluon-alfred )
+gluon_ath10k_mesh = "ibss"
+
+prefix4 = '10.112.0.0/18'
+prefix6 = '2a03:2267::/64'
+
+next_node_ipv4 = '10.112.0.1'
+next_node_ipv6 = '2a03:2267::1'
+
+mtu = 1280
+
+gateways = {
+	"gateway01" => {
+		"key" => "cb09c68e2d2f7d374d47035cd532e0a60b8b3a7447aa5a7f76f4f15c8ffa9e58",
+		"remotes" => [ '"gw01.hamburg.freifunk.net" port 10001' ]
+	},
+	"gateway02" => {
+		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
+		"remotes" => [ '"gw02.hamburg.freifunk.net" port 10001' ]
+	},
+	"gateway03" => {
+		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
+		"remotes" => [ '"gw03.hamburg.freifunk.net" port 10001' ]
+	},
+	"gateway04" => {
+		"key" => "fca88dd58316f4ab50d2a697123dddf4d0ba3aad52ddeb0ba7835cdbbeb60dbf",
+		"remotes" => [ '"gw04.hamburg.freifunk.net" port 10000' ]
+	},
+	"gateway05" => {
+		"key" => "84986658775167dff6918dc8e0529c4a4524cb1782849a80933ddb6d8c6bd3f5",
+		"remotes" => [ '"gw05.hamburg.freifunk.net" port 10001' ]
+	},
+	"gateway06" => {
+		"key" => "fb608aa75180ba88b4a3399a6498e68796d200afc1bfd275a0dcb903a31f39b6",
+		"remotes" => [ '"gw06.hamburg.freifunk.net" port 10000' ]
+	},
+	"gateway08" => {
+		"key" => "67e9b215248ada3f4ffcc9db0bdf897128f6236a0d4e8d660762b77bebc914d4",
+		"remotes" => [ '"gw08.hamburg.freifunk.net" port 10001' ]
+	},
+	"gateway09" => {
+		"key" => "5f483f6d26ac9106d86c0edcd08cf92c18caf67933719a394915ab809d1fb2bc",
+		"remotes" => [ '"gw09.hamburg.freifunk.net" port 10001' ]
+	},
+	"gateway12" => {
+		"key" => "facbbfb07525782fcde22b929f36ea508a295619eca35782003d9ca2dd3cc524",
+		"remotes" => [ '"gw12.hamburg.freifunk.net" port 10001' ]
+	}
+}
+-%>
diff --git a/sites/ffhh-sued/site.conf b/sites/ffhh-sued/site.conf
deleted file mode 100644
index c40b955..0000000
--- a/sites/ffhh-sued/site.conf
+++ /dev/null
@@ -1,139 +0,0 @@
-{
-	hostname_prefix = 'GibMirEinenNamen',
-	site_name = 'Freifunk Hamburg Sued',
-	site_code = 'ffhh-sued',
-
-	opkg = {
-		lede = 'http://opkg.services.ffhh/lede/snapshots/packages/%A',
-		extra = {
-			modules = 'http://updates.hamburg.freifunk.net/%GS/stable/archive/modules/gluon-%GS-%GR/%S',
-		},
-	},
-
-	prefix4 = '10.112.64.0/19',
-	prefix6 = '2a03:2267:1::/64',
-
-	timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', -- Europe/Berlin
-	ntp_servers = {'1.ntp.services.ffhh','2.ntp.services.ffhh'},
-	regdom = 'DE',
-
-	wifi24 = {
-		channel = 1,
-
-		supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
-		basic_rate = {6000, 9000, 18000, 36000, 54000},
-
-		ap = {
-			ssid = 'hamburg.freifunk.net',
-		},
-		mesh = {
-			id = '6668682D73756564',
-			mcast_rate = 12000,
-		},
-	},
-
-	wifi5 = {
-		channel = 44,
-		ap = {
-			ssid = 'hamburg.freifunk.net',
-		},
-		mesh = {
-			id = '6668682D73756564',
-			mcast_rate = 12000,
-		},
-	},
-
-	next_node = {
-		ip4 = '10.112.64.1',
-		ip6 = '2a03:2267:1::1',
-
-		mac = '16:41:95:40:f7:dc',
-	},
-
-	mesh_vpn = {
-		enabled = true,
-		mtu = 1312,
-		fastd = {
-			configurable = true,
-			methods = {'salsa2012+umac'},
-			groups = {
-				backbone = {
-					limit = 1,
-					peers = {
-						gateway01 = {
-							key = 'cb09c68e2d2f7d374d47035cd532e0a60b8b3a7447aa5a7f76f4f15c8ffa9e58',
-							remotes = {'"gw01-new.hamburg.freifunk.net" port 10003'},
-						},
-						gateway02 = {
-							key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
-							remotes = {'"gw02-new.hamburg.freifunk.net" port 10003'},
-						},
-						gateway03 = {
-							key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
-							remotes = {'"gw03-new.hamburg.freifunk.net" port 10003'},
-						},
-						gateway04 = {
-							key = 'fca88dd58316f4ab50d2a697123dddf4d0ba3aad52ddeb0ba7835cdbbeb60dbf',
-							remotes = {'"gw04-new.hamburg.freifunk.net" port 10004'},
-						},
-						gateway05 = {
-							key = '84986658775167dff6918dc8e0529c4a4524cb1782849a80933ddb6d8c6bd3f5',
-							remotes = {'"gw05-new.hamburg.freifunk.net" port 10004'},
-						},
-						gateway06 = {
-							key = 'fb608aa75180ba88b4a3399a6498e68796d200afc1bfd275a0dcb903a31f39b6',
-							remotes = {'"gw06-new.hamburg.freifunk.net" port 10004'},
-						},
-					},
-				},
-			},
-		},
-		bandwidth_limit = {
-			enabled = false,
-			ingress = 8096,
-			egress = 1024,
-		},
-	},
-
-	autoupdater = {
-		branch = 'experimental',
-		branches = {
-			stable = {
-				name = 'stable',
-				mirrors = {'http://1.updates.services.ffhh/ffhh-sued/stable/sysupgrade','http://2.updates.services.ffhh/ffhh-sued/stable/sysupgrade'},
-				good_signatures = 2,
-				pubkeys = {
-					'417ef22f886539ddbcffbad35e9f493195ca53e05f75bd8d8011a4999498b589', -- baldo
-					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
-					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
-					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
-					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
-					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
-				},
-			},
-			beta = {
-				name = 'beta',
-				mirrors = {'http://1.updates.services.ffhh/ffhh-sued/beta/sysupgrade','http://2.updates.services.ffhh/ffhh-sued/beta/sysupgrade'},
-				good_signatures = 2,
-				pubkeys = {
-					'417ef22f886539ddbcffbad35e9f493195ca53e05f75bd8d8011a4999498b589', -- baldo
-					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
-					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
-					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
-					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
-					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
-				},
-			},
-			experimental = {
-				name = 'experimental',
-				mirrors = {'http://1.updates.services.ffhh/ffhh-sued/experimental/sysupgrade','http://2.updates.services.ffhh/ffhh-sued/experimental/sysupgrade'},
-				good_signatures = 1,
-				pubkeys = {
-					'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', -- 1.builder
-				},
-			},
-		},
-	},
-
-	poe_passthrough = false,
-}
diff --git a/sites/ffhh-sued/site.mk b/sites/ffhh-sued/site.mk
deleted file mode 100644
index ccd260c..0000000
--- a/sites/ffhh-sued/site.mk
+++ /dev/null
@@ -1,38 +0,0 @@
-GLUON_SITE_PACKAGES := \
-	gluon-mesh-batman-adv-15 \
-	gluon-autoupdater \
-	gluon-config-mode-autoupdater \
-	gluon-config-mode-core \
-	gluon-config-mode-hostname \
-	gluon-config-mode-mesh-vpn \
-	gluon-ebtables-filter-multicast \
-	gluon-ebtables-filter-ra-dhcp \
-	gluon-ebtables-segment-mld \
-	gluon-web-admin \
-	gluon-web-autoupdater \
-	gluon-web-network \
-	gluon-web-private-wifi \
-	gluon-web-wifi-config \
-	gluon-mesh-vpn-fastd \
-	gluon-radvd \
-	gluon-respondd \
-	gluon-setup-mode \
-	gluon-status-page \
-	iwinfo \
-	iptables \
-	haveged
-
-
-DEFAULT_GLUON_RELEASE := 0.9~exp$(shell date '+%Y%m%d')
-
-# Allow overriding the release number from the command line
-GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
-
-GLUON_PRIORITY ?= 0
-
-# Region code required for some images; supported values: us eu
-GLUON_REGION ?= eu
-
-GLUON_ATH10K_MESH ?= 11s
-
-GLUON_LANGS ?= en de
diff --git a/sites/ffhh/modules b/sites/ffhh/modules
deleted file mode 100644
index 6416262..0000000
--- a/sites/ffhh/modules
+++ /dev/null
@@ -1,5 +0,0 @@
-GLUON_SITE_FEEDS='ffhh_packages'
-
-PACKAGES_FFHH_PACKAGES_REPO=git://github.com/freifunkhamburg/ffhh-packages.git
-PACKAGES_FFHH_PACKAGES_COMMIT=ef9fcc1222f74c3c045b1450537a4b8b80efb56c
-
diff --git a/sites/ffhh/site.conf b/sites/ffhh/site.conf
deleted file mode 100644
index 8399090..0000000
--- a/sites/ffhh/site.conf
+++ /dev/null
@@ -1,158 +0,0 @@
-{
-	hostname_prefix = 'GibMirEinenNamen',
-	site_name = 'Freifunk Hamburg',
-	site_code = 'ffhh',
-
-	opkg = {
-		openwrt = 'http://opkg.services.ffhh/%n/%v/%S/packages',
-		extra = {
-			modules = 'http://updates.hamburg.freifunk.net/stable/archive/modules/gluon-%GS-%GR/%S',
-		},
-	},
-
-	prefix4 = '10.112.0.0/18',
-	prefix6 = '2a03:2267::/64',
-
-	timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', -- Europe/Berlin
-	ntp_servers = {'1.ntp.services.ffhh','2.ntp.services.ffhh'},
-	regdom = 'DE',
-
-	wifi24 = {
-		channel = 1,
-
-		supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
-		basic_rate = {6000, 9000, 18000, 36000, 54000},
-
-		ap = {
-			ssid = 'hamburg.freifunk.net',
-		},
-		ibss = {
-			ssid = 'f8:d1:11:87:52:2e',
-			bssid = 'f8:d1:11:87:52:2e',
-			mcast_rate = 12000,
-		},
-		--[[ mesh = {
-			id = 'ffhh-mesh',
-			mcast_rate = 12000,
-		}, --]]
-	},
-
-	wifi5 = {
-		channel = 44,
-		ap = {
-			ssid = 'hamburg.freifunk.net',
-		},
-		ibss = {
-			ssid = 'f8:d1:11:87:52:2e',
-			bssid = 'f8:d1:11:87:52:2e',
-			mcast_rate = 12000,
-		},
-		--[[ mesh = {
-			id = 'ffhh-mesh',
-			mcast_rate = 12000,
-		}, --]]
-	},
-
-	next_node = {
-		ip4 = '10.112.0.1',
-		ip6 = '2a03:2267::1',
-
-		mac = '16:41:95:40:f7:dc',
-	},
-
-	fastd_mesh_vpn = {
-		enabled = true,
-		methods = {'salsa2012+umac'},
-		mtu = 1280,
-		groups = {
-			backbone = {
-				limit = 1,
-				peers = {
-					gateway01 = {
-						key = 'cb09c68e2d2f7d374d47035cd532e0a60b8b3a7447aa5a7f76f4f15c8ffa9e58',
-						remotes = {'"gw01.hamburg.freifunk.net" port 10001'},
-					},
-					gateway02 = {
-						key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
-						remotes = {'"gw02.hamburg.freifunk.net" port 10001'},
-					},
-					gateway03 = {
-						key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
-						remotes = {'"gw03.hamburg.freifunk.net" port 10001'},
-					},
-					gateway04 = {
-						key = 'fca88dd58316f4ab50d2a697123dddf4d0ba3aad52ddeb0ba7835cdbbeb60dbf',
-						remotes = {'"gw04.hamburg.freifunk.net" port 10000'},
-					},
-					gateway05 = {
-						key = '84986658775167dff6918dc8e0529c4a4524cb1782849a80933ddb6d8c6bd3f5',
-						remotes = {'"gw05.hamburg.freifunk.net" port 10001'},
-					},
-					gateway06 = {
-						key = 'fb608aa75180ba88b4a3399a6498e68796d200afc1bfd275a0dcb903a31f39b6',
-						remotes = {'"gw06.hamburg.freifunk.net" port 10000'},
-					},
-						gateway08 = {
-						key = '67e9b215248ada3f4ffcc9db0bdf897128f6236a0d4e8d660762b77bebc914d4',
-						remotes = {'"gw08.hamburg.freifunk.net" port 10001'},
-					},
-					gateway09 = {
-						key = '5f483f6d26ac9106d86c0edcd08cf92c18caf67933719a394915ab809d1fb2bc',
-						remotes = {'"gw09.hamburg.freifunk.net" port 10001'},
-					},
-					gateway12 = {
-						key = 'facbbfb07525782fcde22b929f36ea508a295619eca35782003d9ca2dd3cc524',
-						remotes = {'"gw12.hamburg.freifunk.net" port 10001'},
-					},
-				},
-			},
-		},
-		bandwidth_limit = {
-			enabled = false,
-			ingress = 8096,
-			egress = 1024,
-		},
-	},
-
-	autoupdater = {
-		branch = 'experimental',
-		branches = {
-			stable = {
-				name = 'stable',
-				mirrors = {'http://1.updates.services.ffhh/stable/sysupgrade','http://2.updates.services.ffhh/stable/sysupgrade'},
-				good_signatures = 2,
-				pubkeys = {
-					'417ef22f886539ddbcffbad35e9f493195ca53e05f75bd8d8011a4999498b589', -- baldo
-					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
-					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
-					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
-					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
-					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
-				},
-			},
-			beta = {
-				name = 'beta',
-				mirrors = {'http://1.updates.services.ffhh/beta/sysupgrade','http://2.updates.services.ffhh/beta/sysupgrade'},
-				good_signatures = 2,
-				pubkeys = {
-					'417ef22f886539ddbcffbad35e9f493195ca53e05f75bd8d8011a4999498b589', -- baldo
-					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
-					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
-					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
-					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
-					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
-				},
-			},
-			experimental = {
-				name = 'experimental',
-				mirrors = {'http://1.updates.services.ffhh/experimental/sysupgrade','http://2.updates.services.ffhh/experimental/sysupgrade'},
-				good_signatures = 1,
-				pubkeys = {
-					'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', -- 1.builder
-				},
-			},
-		},
-	},
-
-	poe_passthrough = false,
-}
diff --git a/sites/ffhh/site.mk b/sites/ffhh/site.mk
deleted file mode 100644
index e94a3c3..0000000
--- a/sites/ffhh/site.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-GLUON_SITE_PACKAGES := \
-	gluon-mesh-batman-adv-14 \
-	gluon-alfred \
-	gluon-autoupdater \
-	gluon-config-mode-autoupdater \
-	gluon-config-mode-core \
-	gluon-config-mode-hostname \
-	gluon-config-mode-mesh-vpn \
-	gluon-config-mode-reboot-ffhh \
-	gluon-ebtables-filter-multicast \
-	gluon-ebtables-filter-ra-dhcp \
-	gluon-ebtables-segment-mld \
-	gluon-luci-admin \
-	gluon-luci-autoupdater \
-	gluon-luci-portconfig \
-	gluon-luci-private-wifi \
-	gluon-luci-wifi-config \
-	gluon-mesh-vpn-fastd \
-	gluon-radvd \
-	gluon-respondd \
-	gluon-setup-mode \
-	gluon-status-page \
-	iwinfo \
-	iptables \
-	haveged
-
-
-DEFAULT_GLUON_RELEASE := 0.9~exp$(shell date '+%Y%m%d')
-
-# Allow overriding the release number from the command line
-GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
-
-GLUON_PRIORITY ?= 0
-
-# Region code required for some images; supported values: us eu
-GLUON_REGION ?= eu
-
-GLUON_ATH10K_MESH ?= ibss
-
-GLUON_LANGS ?= en de
diff --git a/template/info.erb b/template/info.erb
new file mode 100644
index 0000000..685d4a9
--- /dev/null
+++ b/template/info.erb
@@ -0,0 +1,3 @@
+GLUON_RELEASE="<%= gluon_release %>"
+GLUON_BRANCH="<%= gluon_branch %>"
+targets="<%= gluon_targets.join(" ") %>"
diff --git a/sites/ffhh-sued/modules b/template/modules.erb
similarity index 100%
rename from sites/ffhh-sued/modules
rename to template/modules.erb
diff --git a/template/site.conf.erb b/template/site.conf.erb
new file mode 100644
index 0000000..2a5f60c
--- /dev/null
+++ b/template/site.conf.erb
@@ -0,0 +1,133 @@
+{
+	hostname_prefix = 'GibMirEinenNamen',
+	site_name = '<%= site_name %>',
+	site_code = '<%= site_code %>',
+
+	opkg = {
+		lede = 'http://opkg.services.ffhh/lede/snapshots/packages/%A',
+		extra = {
+			modules = 'http://updates.hamburg.freifunk.net/%GS/stable/archive/modules/gluon-%GS-%GR/%S',
+		},
+	},
+
+	prefix4 = '<%= prefix4 %>',
+	prefix6 = '<%= prefix6 %>',
+
+	timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', -- Europe/Berlin
+	ntp_servers = {'1.ntp.services.ffhh','2.ntp.services.ffhh'},
+	regdom = 'DE',
+
+	wifi24 = {
+		channel = 1,
+
+		supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
+		basic_rate = {6000, 9000, 18000, 36000, 54000},
+
+		ap = {
+			ssid = 'hamburg.freifunk.net',
+		},
+<% if gluon_ath10k_mesh == "11s" -%>
+		mesh = {
+			id = '6668682D73756564',
+			mcast_rate = 12000,
+		},
+<% else -%>
+		ibss = {
+			ssid = 'f8:d1:11:87:52:2e',
+			bssid = 'f8:d1:11:87:52:2e',
+			mcast_rate = 12000,
+		},
+<% end -%>
+	},
+
+	wifi5 = {
+		channel = 44,
+		ap = {
+			ssid = 'hamburg.freifunk.net',
+		},
+<% if gluon_ath10k_mesh == "11s" -%>
+		mesh = {
+			id = '6668682D73756564',
+			mcast_rate = 12000,
+		},
+<% else -%>
+		ibss = {
+			ssid = 'f8:d1:11:87:52:2e',
+			bssid = 'f8:d1:11:87:52:2e',
+			mcast_rate = 12000,
+		},
+<% end -%>
+	},
+
+	next_node = {
+		ip4 = '<%= next_node_ipv4 %>',
+		ip6 = '<%= next_node_ipv6 %>',
+
+		mac = '16:41:95:40:f7:dc',
+	},
+
+	mesh_vpn = {
+		enabled = true,
+		mtu = <%= mtu %>,
+		fastd = {
+			configurable = true,         
+			methods = {'salsa2012+umac'},
+			groups = {
+				backbone = {
+					limit = 1,
+					peers = {
+<% gateways.each_pair do | name, gw_data | -%>
+						<%= name %> = {
+							key = '<%= gw_data['key'] %>',
+							remotes = { '<%= gw_data['remotes'].join("', '") %>' },
+						},
+<% end -%>
+					},
+				},
+			},
+			},
+		bandwidth_limit = {
+			enabled = false,
+			ingress = 8096,
+			egress = 1024,
+		},
+	},
+
+	autoupdater = {
+		branch = '<%= gluon_branch %>',
+		branches = {
+			stable = {
+				name = 'stable',
+				mirrors = {'http://1.updates.services.ffhh/<%= site_code %>/stable/sysupgrade','http://2.updates.services.ffhh/<%= site_code %>/stable/sysupgrade'},
+				good_signatures = 2,
+				pubkeys = {
+<% signing_keys.each do | key | -%>
+					'<%= key %>',
+<% end -%>
+				},
+			},
+			beta = {
+				name = 'beta',
+				mirrors = {'http://1.updates.services.ffhh/<%= site_code %>/beta/sysupgrade','http://2.updates.services.ffhh/<%= site_code %>/beta/sysupgrade'},
+				good_signatures = 2,
+				pubkeys = {
+<% signing_keys.each do | key | -%>
+					'<%= key %>',
+<% end -%>
+				},
+			},
+			experimental = {
+				name = 'experimental',
+				mirrors = {'http://1.updates.services.ffhh/<%= site_code %>/experimental/sysupgrade','http://2.updates.services.ffhh/<%= site_code %>/experimental/sysupgrade'},
+				good_signatures = 1,
+				pubkeys = {
+<% signing_keys_experimental.each do | key | -%>
+					'<%= key %>',
+<% end -%>
+				},
+			},
+		},
+	},
+
+	poe_passthrough = false,
+}
diff --git a/template/site.mk.erb b/template/site.mk.erb
new file mode 100644
index 0000000..48d48b7
--- /dev/null
+++ b/template/site.mk.erb
@@ -0,0 +1,17 @@
+GLUON_SITE_PACKAGES :=<% gluon_site_packages.each do | p | -%>
+<%= " " + p -%>
+<% end -%>
+
+DEFAULT_GLUON_RELEASE := <%= gluon_release %>
+
+# Allow overriding the release number from the command line
+GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
+
+GLUON_PRIORITY ?= 0
+
+# Region code required for some images; supported values: us eu
+GLUON_REGION ?= eu
+
+GLUON_ATH10K_MESH ?= <%= gluon_ath10k_mesh %>
+
+GLUON_LANGS ?= en de

From 552d48b12f9fbeb5443059830b8b51c3c96e8dac Mon Sep 17 00:00:00 2001
From: Entil-Zha <entil_zha@hamburg.freifunk.net>
Date: Mon, 23 Oct 2017 21:16:18 +0200
Subject: [PATCH 018/135] change URL

---
 template/site.conf.erb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/template/site.conf.erb b/template/site.conf.erb
index 2a5f60c..57e2398 100644
--- a/template/site.conf.erb
+++ b/template/site.conf.erb
@@ -4,7 +4,7 @@
 	site_code = '<%= site_code %>',
 
 	opkg = {
-		lede = 'http://opkg.services.ffhh/lede/snapshots/packages/%A',
+		lede = 'http://lede.opkg.services.ffhh/lede/snapshots/packages/%A',
 		extra = {
 			modules = 'http://updates.hamburg.freifunk.net/%GS/stable/archive/modules/gluon-%GS-%GR/%S',
 		},

From 3e1e1a5c4caa080c0d57e1dbc21a60893d90be8a Mon Sep 17 00:00:00 2001
From: Entil-Zha <entil_zha@hamburg.freifunk.net>
Date: Mon, 23 Oct 2017 21:53:13 +0200
Subject: [PATCH 019/135] change URL

---
 template/site.conf.erb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/template/site.conf.erb b/template/site.conf.erb
index 57e2398..4b51d73 100644
--- a/template/site.conf.erb
+++ b/template/site.conf.erb
@@ -4,7 +4,7 @@
 	site_code = '<%= site_code %>',
 
 	opkg = {
-		lede = 'http://lede.opkg.services.ffhh/lede/snapshots/packages/%A',
+		lede = 'http://lede.opkg.services.ffhh/snapshots/packages/%A',
 		extra = {
 			modules = 'http://updates.hamburg.freifunk.net/%GS/stable/archive/modules/gluon-%GS-%GR/%S',
 		},

From a4bb8b863d0f5dd9a8808e031b9b235e5abbe29f Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 30 Oct 2017 21:08:43 +0100
Subject: [PATCH 020/135] Copy build.sh from 0.8.x

---
 build.sh | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/build.sh b/build.sh
index 4713fee..b193a38 100755
--- a/build.sh
+++ b/build.sh
@@ -1,7 +1,5 @@
 #!/bin/bash -e
 
-set -e
-
 function announce () {
 	echo '############################' $* >&2
 }
@@ -9,10 +7,11 @@ function announce () {
 proc=$(nproc)
 gluon_out="${HOME}/firmware"
 
-while getopts g:j:o:bv opt; do
+while getopts g:j:o:s:bv opt; do
 	case "$opt" in
 		g) gluon_path="$OPTARG" ;;
 		o) gluon_out="$OPTARG" ;;
+		s) signature="$OPTARG" ;;
 		b) export BROKEN=1 ;;
 		j) proc="$OPTARG" ;;
 		v) verbose=V=s ;;
@@ -22,6 +21,7 @@ if [ -z "${gluon_path}" ]; then
 	echo "Usage: $0 -g GLUON_PATH" >&2
 	echo "       -g GLUON_PATH   Path to a checkout of the gluon repository." >&2
 	echo "       -o OUT_PATH     Path to a checkout of the gluon repository. Default: ${gluon_out}" >&2
+	echo "       -s SIGNATURE    Sign firmware with signature" >&2
 	echo "       -b              BROKEN=1" >&2
 	echo "       -v              verbose" >&2
 	echo "       -j JOBS         Run build with -jJOBS. Default: ${proc}" >&2
@@ -29,7 +29,6 @@ if [ -z "${gluon_path}" ]; then
 fi
 
 gluon_path=$(realpath $gluon_path)
-mkdir -p ${gluon_out}
 gluon_out=$(realpath $gluon_out)
 site_path=$(realpath $(dirname $BASH_SOURCE))
 
@@ -40,12 +39,13 @@ announce FFHH SITES: $site_path >&2
 announce Building site repo and reading data >&2
 pushd $site_path > /dev/null
 make
-. info
+. ./info
 export GLUON_RELEASE
 export GLUON_BRANCH
 # get the available sites...
-sites=""
-for s in sites/*; do sites="${sites} ${s##*/}"; done
+if [ "$sites" == "" ]; then
+	for s in sites/*; do sites="${sites} ${s##*/}"; done
+fi
 announce Gluon will be built for the following sites:$sites >&2
 announce The following targets will be generated: $targets >&2
 popd >/dev/null
@@ -54,7 +54,7 @@ pushd "${gluon_path}" >/dev/null
 announce Starting make update...
 for s in $sites; do
 	export GLUON_SITEDIR="${site_path}/sites/${s}"
-	export GLUON_OUTPUTDIR="${gluon_out}/${s}/${GLUON_BRANCH}/${GLUON_RELEASE}"
+	export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}/${s}"
 	export GLUON_IMAGEDIR="${GLUON_OUTPUTDIR}/images"
 	export GLUON_MODULEDIR="${GLUON_OUTPUTDIR}/modules"
 	rm -rf "${GLUON_OUTPUTDIR}"
@@ -69,10 +69,21 @@ for s in $sites; do
 		fi
 	done
 	for t in $targets; do
+		announce make clean for $s/$t... >&2
+		make -j1 clean GLUON_TARGET=$t
 		announce Starting build for $s/$t... >&2
 		make -j$(nproc) GLUON_TARGET=$t $verbose
 	done
 	announce Building manifest...
 	make manifest
+	if [ -n "${signature}" ]; then
+		if [ "$GLUON_BRANCH" == "experimental" ]; then
+			announce Signing
+			"${gluon_path}/contrib/sign.sh" "${signature}" "${GLUON_IMAGEDIR}/sysupgrade/experimental.manifest"
+		else
+			echo ERROR: can only sign experimental branch >&2
+			exit 1
+		fi
+	fi
 done
 popd >/dev/null

From c43417bdeadc95f4ae570839817b08ef63083ee9 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 28 Nov 2017 18:47:56 +0100
Subject: [PATCH 021/135] gw01-new hatte einen falschen key

(cherry picked from commit c7f81cc3b31c7bba333adef9a421a3da15717584)
---
 config/ffhh-nowe.erb | 42 ++++++++++++++++++++++++++++++++++++++++++
 config/ffhh-ost.erb  | 42 ++++++++++++++++++++++++++++++++++++++++++
 config/ffhh-sued.erb |  2 +-
 config/ffhh-west.erb | 42 ++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 127 insertions(+), 1 deletion(-)
 create mode 100644 config/ffhh-nowe.erb
 create mode 100644 config/ffhh-ost.erb
 create mode 100644 config/ffhh-west.erb

diff --git a/config/ffhh-nowe.erb b/config/ffhh-nowe.erb
new file mode 100644
index 0000000..f7d3f61
--- /dev/null
+++ b/config/ffhh-nowe.erb
@@ -0,0 +1,42 @@
+<%
+site_name = 'Freifunk Hamburg Nordwest'
+site_code = 'ffhh-nowe'
+
+gluon_site_packages += %w( gluon-mesh-batman-adv-15 )
+gluon_ath10k_mesh = "11s"
+
+prefix4 = '10.112.192.0/19'
+prefix6 = '2a03:2267:3::/64'
+
+next_node_ipv4 = '10.112.192.1'
+next_node_ipv6 = '2a03:2267:3::1'
+
+mtu = 1312
+
+gateways = {
+	"gateway01" => {
+		"key" => "aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b",
+		"remotes" => [ '"gw01-new.hamburg.freifunk.net" port 10007' ]
+	},
+	"gateway02" => {
+		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
+		"remotes" => [ '"gw02-new.hamburg.freifunk.net" port 10007' ]
+	},
+	"gateway03" => {
+		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
+		"remotes" => [ '"gw03-new.hamburg.freifunk.net" port 10007' ]
+	},
+	"gateway04" => {
+		"key" => "a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669",
+		"remotes" => [ '"gw04-new.hamburg.freifunk.net" port 10008' ]
+	},
+	"gateway05" => {
+		"key" => "291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f",
+		"remotes" => [ '"gw05-new.hamburg.freifunk.net" port 10008' ]
+	},
+	"gateway06" => {
+		"key" => "8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43",
+		"remotes" => [ '"gw06-new.hamburg.freifunk.net" port 10008' ]
+	},
+}
+-%>
diff --git a/config/ffhh-ost.erb b/config/ffhh-ost.erb
new file mode 100644
index 0000000..53052c8
--- /dev/null
+++ b/config/ffhh-ost.erb
@@ -0,0 +1,42 @@
+<%
+site_name = 'Freifunk Hamburg Ost'
+site_code = 'ffhh-ost'
+
+gluon_site_packages += %w( gluon-mesh-batman-adv-15 )
+gluon_ath10k_mesh = "11s"
+
+prefix4 = '10.112.224.0/19'
+prefix6 = '2a03:2267:4::/64'
+
+next_node_ipv4 = '10.112.224.1'
+next_node_ipv6 = '2a03:2267:4::1'
+
+mtu = 1312
+
+gateways = {
+	"gateway01" => {
+		"key" => "aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b",
+		"remotes" => [ '"gw01-new.hamburg.freifunk.net" port 10009' ]
+	},
+	"gateway02" => {
+		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
+		"remotes" => [ '"gw02-new.hamburg.freifunk.net" port 10009' ]
+	},
+	"gateway03" => {
+		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
+		"remotes" => [ '"gw03-new.hamburg.freifunk.net" port 10009' ]
+	},
+	"gateway04" => {
+		"key" => "a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669",
+		"remotes" => [ '"gw04-new.hamburg.freifunk.net" port 10010' ]
+	},
+	"gateway05" => {
+		"key" => "291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f",
+		"remotes" => [ '"gw05-new.hamburg.freifunk.net" port 10010' ]
+	},
+	"gateway06" => {
+		"key" => "8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43",
+		"remotes" => [ '"gw06-new.hamburg.freifunk.net" port 10010' ]
+	},
+}
+-%>
diff --git a/config/ffhh-sued.erb b/config/ffhh-sued.erb
index cc64d7f..65e09f2 100644
--- a/config/ffhh-sued.erb
+++ b/config/ffhh-sued.erb
@@ -15,7 +15,7 @@ mtu = 1312
 
 gateways = {
 	"gateway01" => {
-		"key" => "cb09c68e2d2f7d374d47035cd532e0a60b8b3a7447aa5a7f76f4f15c8ffa9e58",
+		"key" => "aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b",
 		"remotes" => [ '"gw01-new.hamburg.freifunk.net" port 10003' ]
 	},
 	"gateway02" => {
diff --git a/config/ffhh-west.erb b/config/ffhh-west.erb
new file mode 100644
index 0000000..428199e
--- /dev/null
+++ b/config/ffhh-west.erb
@@ -0,0 +1,42 @@
+<%
+site_name = 'Freifunk Hamburg West'
+site_code = 'ffhh-west'
+
+gluon_site_packages += %w( gluon-mesh-batman-adv-15 )
+gluon_ath10k_mesh = "11s"
+
+prefix4 = '10.112.96.0/19'
+prefix6 = '2a03:2267:2::/64'
+
+next_node_ipv4 = '10.112.96.1'
+next_node_ipv6 = '2a03:2267:2::1'
+
+mtu = 1312
+
+gateways = {
+	"gateway01" => {
+		"key" => "aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b",
+		"remotes" => [ '"gw01-new.hamburg.freifunk.net" port 10005' ]
+	},
+	"gateway02" => {
+		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
+		"remotes" => [ '"gw02-new.hamburg.freifunk.net" port 10005' ]
+	},
+	"gateway03" => {
+		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
+		"remotes" => [ '"gw03-new.hamburg.freifunk.net" port 10005' ]
+	},
+	"gateway04" => {
+		"key" => "a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669",
+		"remotes" => [ '"gw04-new.hamburg.freifunk.net" port 10006' ]
+	},
+	"gateway05" => {
+		"key" => "291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f",
+		"remotes" => [ '"gw05-new.hamburg.freifunk.net" port 10006' ]
+	},
+	"gateway06" => {
+		"key" => "8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43",
+		"remotes" => [ '"gw06-new.hamburg.freifunk.net" port 10006' ]
+	},
+}
+-%>

From c2486baaafb4c88e89fbecc29646b21b59b45fe7 Mon Sep 17 00:00:00 2001
From: Alexander <7adietri@users.noreply.github.com>
Date: Mon, 18 Dec 2017 21:57:14 +0100
Subject: [PATCH 022/135] Add key for Alexander

---
 config/defaults.erb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/config/defaults.erb b/config/defaults.erb
index 792707f..dba91ab 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -47,6 +47,7 @@ signing_keys = [
 		'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', # gernot
 		'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', # bjoern
 		'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', # daniel
+		'961495a04512e5ba1843fd3c216d8af6ef2fdb19f93055142803e2da26d670b9', # alexander
 ]
 signing_keys_experimental = [
 		'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', # 1.builder

From a99439a550bfa164e1c7916bc9f989ca1fe18a99 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 18 Dec 2017 22:01:15 +0100
Subject: [PATCH 023/135] Add key for Olli

---
 config/defaults.erb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/config/defaults.erb b/config/defaults.erb
index dba91ab..b6ac076 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -48,6 +48,7 @@ signing_keys = [
 		'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', # bjoern
 		'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', # daniel
 		'961495a04512e5ba1843fd3c216d8af6ef2fdb19f93055142803e2da26d670b9', # alexander
+		'ed6278f168f0382adf4f058cb9c31d8f1145abb968a8626045de7d6d87a0be40', # olli
 ]
 signing_keys_experimental = [
 		'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', # 1.builder

From 76214078fc76805c8ad34b3ab6ed71be002fdf04 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 18 Dec 2017 20:07:15 +0100
Subject: [PATCH 024/135] Neuer NTP-Server 3.ntp.services.ffhh

(cherry picked from commit 0971a6125c5dcf54eb4854b4e7a3f67526c40b69)
---
 template/site.conf.erb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/template/site.conf.erb b/template/site.conf.erb
index 4b51d73..e0103ec 100644
--- a/template/site.conf.erb
+++ b/template/site.conf.erb
@@ -14,7 +14,7 @@
 	prefix6 = '<%= prefix6 %>',
 
 	timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', -- Europe/Berlin
-	ntp_servers = {'1.ntp.services.ffhh','2.ntp.services.ffhh'},
+	ntp_servers = {'1.ntp.services.ffhh','2.ntp.services.ffhh','3.ntp.services.ffhh'},
 	regdom = 'DE',
 
 	wifi24 = {

From 1544c80a4f1c8057319ae3c1bee156d59da106f4 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 20 Nov 2017 19:43:05 +0100
Subject: [PATCH 025/135] Baldo hat den Key nicht mehr

(cherry picked from commit 6691d804546666aa764bdfc94692154c54cfe4f2)
---
 config/defaults.erb | 1 -
 1 file changed, 1 deletion(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index b6ac076..5ac57bf 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -41,7 +41,6 @@ gluon_site_packages = %w(
 gluon_ath10k_mesh = "11s"
 
 signing_keys = [
-		'417ef22f886539ddbcffbad35e9f493195ca53e05f75bd8d8011a4999498b589', # baldo
 		'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', # leo
 		'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', # andre
 		'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', # gernot

From 03a399b547f2f58f724360debc01028a3adf4e34 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 19 Dec 2017 03:00:34 +0100
Subject: [PATCH 026/135] Update the build.sh in master to the version used in
 0.8.x

---
 build.sh | 33 +++++++++++++++++++++++----------
 1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/build.sh b/build.sh
index b193a38..55974cf 100755
--- a/build.sh
+++ b/build.sh
@@ -7,12 +7,15 @@ function announce () {
 proc=$(nproc)
 gluon_out="${HOME}/firmware"
 
-while getopts g:j:o:s:bv opt; do
+while getopts g:j:l:o:s:u:bmv opt; do
 	case "$opt" in
 		g) gluon_path="$OPTARG" ;;
+		l) sites="$OPTARG" ;;
 		o) gluon_out="$OPTARG" ;;
 		s) signature="$OPTARG" ;;
+		u) uploadscript="$OPTARG" ;;
 		b) export BROKEN=1 ;;
+		m) dont_make_sites=1 ;;
 		j) proc="$OPTARG" ;;
 		v) verbose=V=s ;;
 	esac
@@ -20,9 +23,12 @@ done
 if [ -z "${gluon_path}" ]; then
 	echo "Usage: $0 -g GLUON_PATH" >&2
 	echo "       -g GLUON_PATH   Path to a checkout of the gluon repository." >&2
-	echo "       -o OUT_PATH     Path to a checkout of the gluon repository. Default: ${gluon_out}" >&2
+	echo "       -l SITES        Comma separated list of sites to build" >&2
+	echo "       -o OUT_PATH     Path to the firmware output directory. Default: ${gluon_out}" >&2
 	echo "       -s SIGNATURE    Sign firmware with signature" >&2
+	echo "       -u UPLOADSCRIPT Run UPLOADSCRIPT after building. Argument: $gluon_out/<GLUON_RELEASE>" >&2
 	echo "       -b              BROKEN=1" >&2
+	echo "       -m              Do not regenerate the sites" >&2
 	echo "       -v              verbose" >&2
 	echo "       -j JOBS         Run build with -jJOBS. Default: ${proc}" >&2
 	exit 1
@@ -33,24 +39,27 @@ gluon_out=$(realpath $gluon_out)
 site_path=$(realpath $(dirname $BASH_SOURCE))
 
 announce GLUON: $gluon_path >&2
-announce FFHH SITES: $site_path >&2
+announce FFHH SITE PATH: $site_path >&2
 
-# Build the site repo and generate all site configs
-announce Building site repo and reading data >&2
-pushd $site_path > /dev/null
-make
+pushd $site_path
+if [ "$dont_make_sites" == "" ]; then
+	# Build the site repo and generate all site configs
+	announce Building site repo and reading data >&2
+	make
+fi
 . ./info
 export GLUON_RELEASE
 export GLUON_BRANCH
 # get the available sites...
+sites="$(echo "$sites" | sed -e 's_,_ _g')"
 if [ "$sites" == "" ]; then
 	for s in sites/*; do sites="${sites} ${s##*/}"; done
 fi
 announce Gluon will be built for the following sites:$sites >&2
 announce The following targets will be generated: $targets >&2
-popd >/dev/null
+popd
 
-pushd "${gluon_path}" >/dev/null
+pushd "${gluon_path}"
 announce Starting make update...
 for s in $sites; do
 	export GLUON_SITEDIR="${site_path}/sites/${s}"
@@ -86,4 +95,8 @@ for s in $sites; do
 		fi
 	fi
 done
-popd >/dev/null
+popd
+if [ -n "$uploadscript" ]; then
+		announce Starting upload. Executing: $uploadscript $gluon_out/$GLUON_RELEASE
+		"$uploadscript" "$gluon_out/$GLUON_RELEASE"
+fi

From 1dcb8657d7fc26395142d6cd65b955e90fa0cacf Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 19 Dec 2017 03:11:17 +0100
Subject: [PATCH 027/135] Alle Targets von LEDE bauen

---
 config/defaults.erb | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/config/defaults.erb b/config/defaults.erb
index 5ac57bf..01c7eb6 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -8,9 +8,13 @@ gluon_release += "+exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experi
 
 gluon_targets = %w(
 	ar71xx-generic
+	ar71xx-tiny
 	ar71xx-nand
+	brcm2708-bcm2708
+	brcm2708-bcm2709
 	mpc85xx-generic
 	x86-generic
+	x86-geode
 	x86-64
 )
 

From 8f67ce9aac3ffa0117ef214de71af62b0ecfba15 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 19 Dec 2017 03:12:10 +0100
Subject: [PATCH 028/135] Paket gluon-ebtables-source-filter ersetzt das Gluon
 v2016er Paket ffho-ebtables-net-rules

---
 config/defaults.erb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/config/defaults.erb b/config/defaults.erb
index 01c7eb6..da87eb1 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -27,6 +27,7 @@ gluon_site_packages = %w(
 	gluon-ebtables-filter-multicast
 	gluon-ebtables-filter-ra-dhcp
 	gluon-ebtables-segment-mld
+	gluon-ebtables-source-filter
 	gluon-mesh-vpn-fastd
 	gluon-radvd
 	gluon-respondd

From 33d9a521cabe969c36bdd9a8f9e957ba35819375 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 19 Dec 2017 03:17:57 +0100
Subject: [PATCH 029/135] =?UTF-8?q?Alte=20ffhh=20Site=20l=C3=B6schen=20und?=
 =?UTF-8?q?=20die=20neuen=20Sites=20eintragen?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Makefile        |  2 +-
 config/ffhh.erb | 54 -------------------------------------------------
 2 files changed, 1 insertion(+), 55 deletions(-)
 delete mode 100644 config/ffhh.erb

diff --git a/Makefile b/Makefile
index 3d87a6f..8c0986d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-sites: clean info sites/ffhh sites/ffhh-sued
+sites: clean info sites/ffhh-nowe sites/ffhh-ost sites/ffhh-sued sites/ffhh-west
 
 info: config/defaults.erb template/info.erb
 	erb -T- config/defaults.erb template/$@.erb >$@
diff --git a/config/ffhh.erb b/config/ffhh.erb
deleted file mode 100644
index 4edaff8..0000000
--- a/config/ffhh.erb
+++ /dev/null
@@ -1,54 +0,0 @@
-<%
-site_name = 'Freifunk Hamburg'
-site_code = 'ffhh'
-
-gluon_site_packages += %w( gluon-mesh-batman-adv-14 gluon-alfred )
-gluon_ath10k_mesh = "ibss"
-
-prefix4 = '10.112.0.0/18'
-prefix6 = '2a03:2267::/64'
-
-next_node_ipv4 = '10.112.0.1'
-next_node_ipv6 = '2a03:2267::1'
-
-mtu = 1280
-
-gateways = {
-	"gateway01" => {
-		"key" => "cb09c68e2d2f7d374d47035cd532e0a60b8b3a7447aa5a7f76f4f15c8ffa9e58",
-		"remotes" => [ '"gw01.hamburg.freifunk.net" port 10001' ]
-	},
-	"gateway02" => {
-		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
-		"remotes" => [ '"gw02.hamburg.freifunk.net" port 10001' ]
-	},
-	"gateway03" => {
-		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
-		"remotes" => [ '"gw03.hamburg.freifunk.net" port 10001' ]
-	},
-	"gateway04" => {
-		"key" => "fca88dd58316f4ab50d2a697123dddf4d0ba3aad52ddeb0ba7835cdbbeb60dbf",
-		"remotes" => [ '"gw04.hamburg.freifunk.net" port 10000' ]
-	},
-	"gateway05" => {
-		"key" => "84986658775167dff6918dc8e0529c4a4524cb1782849a80933ddb6d8c6bd3f5",
-		"remotes" => [ '"gw05.hamburg.freifunk.net" port 10001' ]
-	},
-	"gateway06" => {
-		"key" => "fb608aa75180ba88b4a3399a6498e68796d200afc1bfd275a0dcb903a31f39b6",
-		"remotes" => [ '"gw06.hamburg.freifunk.net" port 10000' ]
-	},
-	"gateway08" => {
-		"key" => "67e9b215248ada3f4ffcc9db0bdf897128f6236a0d4e8d660762b77bebc914d4",
-		"remotes" => [ '"gw08.hamburg.freifunk.net" port 10001' ]
-	},
-	"gateway09" => {
-		"key" => "5f483f6d26ac9106d86c0edcd08cf92c18caf67933719a394915ab809d1fb2bc",
-		"remotes" => [ '"gw09.hamburg.freifunk.net" port 10001' ]
-	},
-	"gateway12" => {
-		"key" => "facbbfb07525782fcde22b929f36ea508a295619eca35782003d9ca2dd3cc524",
-		"remotes" => [ '"gw12.hamburg.freifunk.net" port 10001' ]
-	}
-}
--%>

From bd256ba6c04ce7b138c97544267fd3b16353a83a Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sat, 30 Dec 2017 20:02:48 +0100
Subject: [PATCH 030/135] =?UTF-8?q?bug=20fixes=20durch=20lede=20=C3=A4nder?=
 =?UTF-8?q?ungen=20und=20jede=20domain=20hatte=20die=20gleiche=20mesh=20id?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 build.sh               | 2 --
 template/site.conf.erb | 6 +++---
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/build.sh b/build.sh
index 55974cf..2262645 100755
--- a/build.sh
+++ b/build.sh
@@ -64,8 +64,6 @@ announce Starting make update...
 for s in $sites; do
 	export GLUON_SITEDIR="${site_path}/sites/${s}"
 	export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}/${s}"
-	export GLUON_IMAGEDIR="${GLUON_OUTPUTDIR}/images"
-	export GLUON_MODULEDIR="${GLUON_OUTPUTDIR}/modules"
 	rm -rf "${GLUON_OUTPUTDIR}"
 	mkdir -p "${GLUON_IMAGEDIR}" "${GLUON_MODULEDIR}"
 	make update
diff --git a/template/site.conf.erb b/template/site.conf.erb
index e0103ec..1b46d6c 100644
--- a/template/site.conf.erb
+++ b/template/site.conf.erb
@@ -28,7 +28,7 @@
 		},
 <% if gluon_ath10k_mesh == "11s" -%>
 		mesh = {
-			id = '6668682D73756564',
+			id = '<%= ("00000000" + site_code)[-8..-1].each_byte.map { |b| b.to_s(16) }.join.upcase %>',
 			mcast_rate = 12000,
 		},
 <% else -%>
@@ -47,7 +47,7 @@
 		},
 <% if gluon_ath10k_mesh == "11s" -%>
 		mesh = {
-			id = '6668682D73756564',
+			id = '<%= ("00000000" + site_code)[-8..-1].each_byte.map { |b| b.to_s(16) }.join.upcase %>',
 			mcast_rate = 12000,
 		},
 <% else -%>
@@ -70,7 +70,7 @@
 		enabled = true,
 		mtu = <%= mtu %>,
 		fastd = {
-			configurable = true,         
+			configurable = true,
 			methods = {'salsa2012+umac'},
 			groups = {
 				backbone = {

From bb7459154446103c412ecd5733659ac4fecf24d7 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sat, 30 Dec 2017 20:06:26 +0100
Subject: [PATCH 031/135] one more bugfix (variables didnt exist anymore)

---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index 2262645..13f2c05 100755
--- a/build.sh
+++ b/build.sh
@@ -65,7 +65,7 @@ for s in $sites; do
 	export GLUON_SITEDIR="${site_path}/sites/${s}"
 	export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}/${s}"
 	rm -rf "${GLUON_OUTPUTDIR}"
-	mkdir -p "${GLUON_IMAGEDIR}" "${GLUON_MODULEDIR}"
+	mkdir -p "${GLUON_OUTPUTDIR}"
 	make update
 	# Try to install patches. I wasn't able to figure out how patches in gluon/site/patches work.
 	for p in ${site_path}/patches/*.patch; do

From 7a9d0ef39d7158d3a8000a18a0c3efe895a665e3 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sat, 30 Dec 2017 22:13:57 +0100
Subject: [PATCH 032/135] yet another wrong variable

---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index 13f2c05..ad86111 100755
--- a/build.sh
+++ b/build.sh
@@ -86,7 +86,7 @@ for s in $sites; do
 	if [ -n "${signature}" ]; then
 		if [ "$GLUON_BRANCH" == "experimental" ]; then
 			announce Signing
-			"${gluon_path}/contrib/sign.sh" "${signature}" "${GLUON_IMAGEDIR}/sysupgrade/experimental.manifest"
+			"${gluon_path}/contrib/sign.sh" "${signature}" "${GLUON_OUTPUTDIR}/images/sysupgrade/experimental.manifest"
 		else
 			echo ERROR: can only sign experimental branch >&2
 			exit 1

From 96046d19ef5aefe30547bef212f607163e202033 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 19 Jan 2018 20:16:05 +0100
Subject: [PATCH 033/135] Update .gitignore

---
 .gitignore | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/.gitignore b/.gitignore
index 0acb982..e63911a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
 *~
-/site.conf
-/site.mk
-/modules
+info
+sites/

From 0ed780b634adde8923c422acd29c521e950b24d2 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 19 Jan 2018 20:18:49 +0100
Subject: [PATCH 034/135] Add the support for the form for Freifunk Hamburg

---
 Makefile            | 5 ++++-
 config/defaults.erb | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 8c0986d..08c41b8 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,7 @@ sites/%: config/%.erb
 	mkdir -p $@
 	cd $@ && $(MAKE) -f ../../Makefile site SITE=$(@F)
 
-site: siteclean site.mk site.conf modules
+site: siteclean site.mk site.conf modules i18n
 
 .PHONY: siteclean
 siteclean:
@@ -26,3 +26,6 @@ site.conf:
 
 site.mk:
 	erb -T- ../../config/defaults.erb ../../config/$(SITE).erb ../../template/$@.erb >$@
+
+i18n:
+	ln -s ../../i18n
diff --git a/config/defaults.erb b/config/defaults.erb
index da87eb1..04173f4 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -24,6 +24,7 @@ gluon_site_packages = %w(
 	gluon-config-mode-core
 	gluon-config-mode-hostname
 	gluon-config-mode-mesh-vpn
+	gluon-config-mode-reboot-ffhh
 	gluon-ebtables-filter-multicast
 	gluon-ebtables-filter-ra-dhcp
 	gluon-ebtables-segment-mld

From bc6d9bd33b4bf4bb238cdd562f45a92a796e2c34 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 19 Jan 2018 22:19:57 +0100
Subject: [PATCH 035/135] the config mode reboot package is not required
 anymore

---
 config/defaults.erb | 1 -
 1 file changed, 1 deletion(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index 04173f4..da87eb1 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -24,7 +24,6 @@ gluon_site_packages = %w(
 	gluon-config-mode-core
 	gluon-config-mode-hostname
 	gluon-config-mode-mesh-vpn
-	gluon-config-mode-reboot-ffhh
 	gluon-ebtables-filter-multicast
 	gluon-ebtables-filter-ra-dhcp
 	gluon-ebtables-segment-mld

From 2176aa8a1d71a589e359a881310879af46ce7c3c Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 19 Jan 2018 23:12:30 +0100
Subject: [PATCH 036/135] yay... xml...

---
 i18n/de.po | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/i18n/de.po b/i18n/de.po
index 9951d23..1bcda92 100644
--- a/i18n/de.po
+++ b/i18n/de.po
@@ -23,7 +23,7 @@ msgstr ""
 "er auf den Servern des Hamburger Freifunk-Projektes eingetragen wurde, "
 "kann sich dein Knoten mit dem Hamburger Mesh-VPN verbinden. "
 "Bitte trage dazu diesen Schlüssel, den Namen deines Knotens (<em><%=pcdata(hostname)%></em>) und ein paar andere Informationen unter "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> ein.</p>"
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&amp;key=<%=pubkey%>&amp;mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> ein.</p>"
 "<div class=\"the-key\">"
 " # <%= pcdata(hostname) %>"
 " <br/>"

From e19deffe617bbb3db728c0ba1235367e00580c00 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 19 Jan 2018 23:25:17 +0100
Subject: [PATCH 037/135] yay... more xml...

---
 i18n/de.po | 2 +-
 i18n/en.po | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/i18n/de.po b/i18n/de.po
index 1bcda92..9119cd8 100644
--- a/i18n/de.po
+++ b/i18n/de.po
@@ -43,5 +43,5 @@ msgid "gluon-config-mode:novpn"
 msgstr ""
 "Bitte trage nun den Namen deines Knotens "
 "(<em><%=pcdata(hostname)%></em>) und ein paar andere Informationen unter "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&amp;mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
 "ein."
diff --git a/i18n/en.po b/i18n/en.po
index 7868a2b..124cfba 100644
--- a/i18n/en.po
+++ b/i18n/en.po
@@ -25,7 +25,7 @@ msgstr ""
 "connect the node to the Hamburg mesh VPN after the key has been registered on "
 "the Freifunk Hamburg servers. "
 "Please register your key, the name of your node (<em><%=pcdata(hostname)%></em>), and a bit of additional info at "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&key=<%=pubkey%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a>.</p>"
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&amp;key=<%=pubkey%>&amp;mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a>.</p>"
 "<div class=\"the-key\">"
 " # <%= pcdata(hostname) %>"
 " <br/>"
@@ -44,5 +44,5 @@ msgid "gluon-config-mode:novpn"
 msgstr ""
 "Please enter the name of your node "
 "(<em><%=hostname%></em>) and some additional information at "
-"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
+"<a href=\"https://formular.hamburg.freifunk.net/#/new?hostname=<%=pcdata(hostname)%>&amp;mac=<%= sysconfig.primary_mac %>\" target=\"_blank\">https://formular.hamburg.freifunk.net/</a> "
 "."

From 60f30382209ffc050baa82be9bad3622a1d88d5b Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 26 Jan 2018 20:49:19 +0100
Subject: [PATCH 038/135] v0.9.0-stable

---
 README.md           | 24 ++++++++++++++++--------
 config/defaults.erb |  4 ++--
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index 5f50e56..cebcf2d 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,27 @@
 #### How to build the Freifunk Hamburg Firmware
 
-    git clone https://github.com/freifunk-gluon/gluon.git            # Get the official Gluon repository
-    cd gluon
-    git clone https://github.com/freifunkhamburg/site-ffhh.git site  # Get the Freifunk Hamburg site repository
-    cd site
-    make SITE=ffhh
-    cd ..
-    make update                                                    # Get other repositories used by Gluon
-    make                                                           # Build Gluon
+	$ git clone -b v2017.1.x https://github.com/freifunk-gluon/gluon.git
+	$ git clone -b v0.9.0 https://github.com/freifunkhamburg/site-ffhh.git
+	$ cd site-ffhh
+
+	To build all domains into the subdirectory firmware:
+	$ ./build -g ../gluon -o firmware
+	To build a specific domain (for example ffhh-nowe) into the subdirectory firmware:
+	$ ./build -g ../gluon -l ffhh-nowe -o firmware
+	To build two specific domains (for example ffhh-nowe and ffhh-sued) into the subdirectory firmware:
+	$ ./build -g ../gluon -l ffhh-nowe,ffhh-sued -o firmware
+
+	The build.sh supports the argument -b if you wish to also build firmware images marked as broken in gluon.
 
 Please see [the official Gluon repository](https://github.com/freifunk-gluon/gluon) for an in-depth explanation of the build process.
 
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- 0.9.0: site-ffhh: xxx, gluon: v2017.1.x (9295abcea7b016b0fe4b05c534ea0731b48ef593)
+- 0.8.6: v2016.2.7 Fix gw01-new key, add 3.ntp.services.ffhh to NTP servers, add Firmware signing keys for Alexander and Olli, remove old domain
+- 0.8.5: v2016.2.7 Domain split, new package: ffho-ebtables-net-rules
+- 0.8.4: v2016.2.7 (updated openwrt/package/network/services/dnsmasq/Makefile: PKG\_VERSION:=2.78 & PKG\_MD5SUM:=6d0241b72c79d2b510776ccc4ed69ca4)
 - 0.8.3: v2016.2.6 (ffhh-sued only)
 - 0.8.2: v2016.2.5
 - 0.8.1: v2016.2.4 (ffhh-sued only)
diff --git a/config/defaults.erb b/config/defaults.erb
index da87eb1..d58e332 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -1,6 +1,6 @@
 <%
-#gluon_branch = "stable"
-gluon_branch = "experimental"
+gluon_branch = "stable"
+#gluon_branch = "experimental"
 gluon_release = "0.9.0"
 
 # Add the +exp and current date if this is an experimental release

From 49510972d015f379d297cf6cb823ad5449d7b4dd Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 30 Jan 2018 19:42:33 +0100
Subject: [PATCH 039/135] Update README for 0.9.0-stable

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index cebcf2d..082fcff 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
-- 0.9.0: site-ffhh: xxx, gluon: v2017.1.x (9295abcea7b016b0fe4b05c534ea0731b48ef593)
+- 0.9.0: site-ffhh: 60f30382209ffc050baa82be9bad3622a1d88d5b, gluon: v2017.1.x (9295abcea7b016b0fe4b05c534ea0731b48ef593)
 - 0.8.6: v2016.2.7 Fix gw01-new key, add 3.ntp.services.ffhh to NTP servers, add Firmware signing keys for Alexander and Olli, remove old domain
 - 0.8.5: v2016.2.7 Domain split, new package: ffho-ebtables-net-rules
 - 0.8.4: v2016.2.7 (updated openwrt/package/network/services/dnsmasq/Makefile: PKG\_VERSION:=2.78 & PKG\_MD5SUM:=6d0241b72c79d2b510776ccc4ed69ca4)

From b3b01248aa95cc056c2a050d5fc13c722e0cb426 Mon Sep 17 00:00:00 2001
From: Alexander <7adietri@users.noreply.github.com>
Date: Sat, 3 Feb 2018 15:55:16 +0100
Subject: [PATCH 040/135] Update README.md

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 082fcff..5581691 100644
--- a/README.md
+++ b/README.md
@@ -5,11 +5,11 @@
 	$ cd site-ffhh
 
 	To build all domains into the subdirectory firmware:
-	$ ./build -g ../gluon -o firmware
+	$ ./build.sh -g ../gluon -o firmware
 	To build a specific domain (for example ffhh-nowe) into the subdirectory firmware:
-	$ ./build -g ../gluon -l ffhh-nowe -o firmware
+	$ ./build.sh -g ../gluon -l ffhh-nowe -o firmware
 	To build two specific domains (for example ffhh-nowe and ffhh-sued) into the subdirectory firmware:
-	$ ./build -g ../gluon -l ffhh-nowe,ffhh-sued -o firmware
+	$ ./build.sh -g ../gluon -l ffhh-nowe,ffhh-sued -o firmware
 
 	The build.sh supports the argument -b if you wish to also build firmware images marked as broken in gluon.
 

From 656fa92f2ffc22c580acc03f29657d76ff87366e Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 4 Feb 2018 02:04:23 +0100
Subject: [PATCH 041/135] Update README.md for the upcoming v0.9.1

---
 README.md | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 5581691..aee1635 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,8 @@
 #### How to build the Freifunk Hamburg Firmware
 
-	$ git clone -b v2017.1.x https://github.com/freifunk-gluon/gluon.git
-	$ git clone -b v0.9.0 https://github.com/freifunkhamburg/site-ffhh.git
+	In the next two commands replace GLUON_VERSION and SITE_VERSION with the actual version numbers.
+	$ git clone -b GLUON_VERSION https://github.com/freifunk-gluon/gluon.git
+	$ git clone -b SITE_VERSION https://github.com/freifunkhamburg/site-ffhh.git
 	$ cd site-ffhh
 
 	To build all domains into the subdirectory firmware:
@@ -18,7 +19,8 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
-- 0.9.0: site-ffhh: 60f30382209ffc050baa82be9bad3622a1d88d5b, gluon: v2017.1.x (9295abcea7b016b0fe4b05c534ea0731b48ef593)
+- 0.9.1: site-ffhh: TBD, gluon: v2017.1.5
+- 0.9.0: site-ffhh: 60f30382209ffc050baa82be9bad3622a1d88d5b, gluon: v2017.1.x (9295abcea7b016b0fe4b05c534ea0731b48ef593) (never rolled out due to 0.9.1)
 - 0.8.6: v2016.2.7 Fix gw01-new key, add 3.ntp.services.ffhh to NTP servers, add Firmware signing keys for Alexander and Olli, remove old domain
 - 0.8.5: v2016.2.7 Domain split, new package: ffho-ebtables-net-rules
 - 0.8.4: v2016.2.7 (updated openwrt/package/network/services/dnsmasq/Makefile: PKG\_VERSION:=2.78 & PKG\_MD5SUM:=6d0241b72c79d2b510776ccc4ed69ca4)

From 9fd3468455534863940b07805572dcdeafa84611 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 4 Feb 2018 02:07:19 +0100
Subject: [PATCH 042/135] Change separator from + to ~ between version and
 "exp"

---
 config/defaults.erb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index d58e332..b6c1adc 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -4,7 +4,7 @@ gluon_branch = "stable"
 gluon_release = "0.9.0"
 
 # Add the +exp and current date if this is an experimental release
-gluon_release += "+exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"
+gluon_release += "~exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"
 
 gluon_targets = %w(
 	ar71xx-generic

From 7a94914ecdd2915f73c8cb2f35267bd80856d16f Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 4 Feb 2018 02:07:59 +0100
Subject: [PATCH 043/135] Update version number to 0.9.1 experimental

---
 config/defaults.erb | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index b6c1adc..5da8a77 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -1,7 +1,7 @@
 <%
-gluon_branch = "stable"
-#gluon_branch = "experimental"
-gluon_release = "0.9.0"
+#gluon_branch = "stable"
+gluon_branch = "experimental"
+gluon_release = "0.9.1"
 
 # Add the +exp and current date if this is an experimental release
 gluon_release += "~exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"

From b4bcec2c5254e2cd62c119998a302c2a383ba611 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 4 Feb 2018 02:10:18 +0100
Subject: [PATCH 044/135] Add new target to build: ramips-mt7621

---
 config/defaults.erb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/config/defaults.erb b/config/defaults.erb
index 5da8a77..0b4fa7b 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -13,6 +13,7 @@ gluon_targets = %w(
 	brcm2708-bcm2708
 	brcm2708-bcm2709
 	mpc85xx-generic
+	ramips-mt7621
 	x86-generic
 	x86-geode
 	x86-64

From bf41f1cf378a5994932ee1c654ae3cf7db541790 Mon Sep 17 00:00:00 2001
From: Entil-Zha <entil_zha@hamburg.freifunk.net>
Date: Mon, 5 Feb 2018 19:02:27 +0100
Subject: [PATCH 045/135] add x86 extras

---
 template/site.mk.erb | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/template/site.mk.erb b/template/site.mk.erb
index 48d48b7..0b0e45d 100644
--- a/template/site.mk.erb
+++ b/template/site.mk.erb
@@ -2,6 +2,27 @@ GLUON_SITE_PACKAGES :=<% gluon_site_packages.each do | p | -%>
 <%= " " + p -%>
 <% end -%>
 
+
+# EXTRA_SOFTWARE_TOOLS_01
+EXTRA_SOFTWARE_TOOLS_01 := \
+        nano \
+        htop \
+        ethtool
+
+# x86
+ifeq ($(GLUON_TARGET),x86-generic)
+GLUON_SITE_PACKAGES += \
+    $(EXTRA_SOFTWARE_TOOLS_01)
+endif
+
+# x86-64
+ifeq ($(GLUON_TARGET),x86-64)
+GLUON_SITE_PACKAGES += \
+    $(EXTRA_SOFTWARE_TOOLS_01)
+endif
+
+
+
 DEFAULT_GLUON_RELEASE := <%= gluon_release %>
 
 # Allow overriding the release number from the command line

From 6fe02bdcbab99920e54aca4a81c11caf168cb169 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Thu, 8 Feb 2018 21:36:46 +0100
Subject: [PATCH 046/135] 0.9.1 stable preparation

---
 config/defaults.erb | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index 0b4fa7b..59c18c8 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -1,6 +1,6 @@
 <%
-#gluon_branch = "stable"
-gluon_branch = "experimental"
+gluon_branch = "stable"
+#gluon_branch = "experimental"
 gluon_release = "0.9.1"
 
 # Add the +exp and current date if this is an experimental release

From e3d70eb44e2506bc777b547726131d01b1dd66de Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 13 Feb 2018 21:08:59 +0100
Subject: [PATCH 047/135] Update README.md for 0.9.1

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index aee1635..4af811c 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
-- 0.9.1: site-ffhh: TBD, gluon: v2017.1.5
+- 0.9.1: site-ffhh: v0.9.1, gluon: v2017.1.5
 - 0.9.0: site-ffhh: 60f30382209ffc050baa82be9bad3622a1d88d5b, gluon: v2017.1.x (9295abcea7b016b0fe4b05c534ea0731b48ef593) (never rolled out due to 0.9.1)
 - 0.8.6: v2016.2.7 Fix gw01-new key, add 3.ntp.services.ffhh to NTP servers, add Firmware signing keys for Alexander and Olli, remove old domain
 - 0.8.5: v2016.2.7 Domain split, new package: ffho-ebtables-net-rules

From 8767ae099defebce1b482b5e493573d09e425a54 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 6 Apr 2018 20:40:37 +0200
Subject: [PATCH 048/135] bump version

---
 config/defaults.erb | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index 59c18c8..02cd4fc 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -1,7 +1,7 @@
 <%
-gluon_branch = "stable"
-#gluon_branch = "experimental"
-gluon_release = "0.9.1"
+#gluon_branch = "stable"
+gluon_branch = "experimental"
+gluon_release = "0.9.2"
 
 # Add the +exp and current date if this is an experimental release
 gluon_release += "~exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"

From c4c8ed4596d9f9741ae63b50e53ca517a671daf7 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 6 Apr 2018 20:43:58 +0200
Subject: [PATCH 049/135] ibss aus config entfernen. gluon-mesh-batman-adv-15
 in die zentrale config verschieben

---
 config/defaults.erb    |  3 +--
 config/ffhh-nowe.erb   |  3 +--
 config/ffhh-ost.erb    |  3 +--
 config/ffhh-sued.erb   |  3 +--
 config/ffhh-west.erb   |  3 +--
 template/site.conf.erb | 16 ----------------
 6 files changed, 5 insertions(+), 26 deletions(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index 02cd4fc..55eee20 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -29,6 +29,7 @@ gluon_site_packages = %w(
 	gluon-ebtables-filter-ra-dhcp
 	gluon-ebtables-segment-mld
 	gluon-ebtables-source-filter
+	gluon-mesh-batman-adv-15
 	gluon-mesh-vpn-fastd
 	gluon-radvd
 	gluon-respondd
@@ -44,8 +45,6 @@ gluon_site_packages = %w(
 	iwinfo
 )
 
-gluon_ath10k_mesh = "11s"
-
 signing_keys = [
 		'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', # leo
 		'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', # andre
diff --git a/config/ffhh-nowe.erb b/config/ffhh-nowe.erb
index f7d3f61..92b157d 100644
--- a/config/ffhh-nowe.erb
+++ b/config/ffhh-nowe.erb
@@ -2,8 +2,7 @@
 site_name = 'Freifunk Hamburg Nordwest'
 site_code = 'ffhh-nowe'
 
-gluon_site_packages += %w( gluon-mesh-batman-adv-15 )
-gluon_ath10k_mesh = "11s"
+gluon_site_packages += %w( )
 
 prefix4 = '10.112.192.0/19'
 prefix6 = '2a03:2267:3::/64'
diff --git a/config/ffhh-ost.erb b/config/ffhh-ost.erb
index 53052c8..1cb7b72 100644
--- a/config/ffhh-ost.erb
+++ b/config/ffhh-ost.erb
@@ -2,8 +2,7 @@
 site_name = 'Freifunk Hamburg Ost'
 site_code = 'ffhh-ost'
 
-gluon_site_packages += %w( gluon-mesh-batman-adv-15 )
-gluon_ath10k_mesh = "11s"
+gluon_site_packages += %w( )
 
 prefix4 = '10.112.224.0/19'
 prefix6 = '2a03:2267:4::/64'
diff --git a/config/ffhh-sued.erb b/config/ffhh-sued.erb
index 65e09f2..b970c9c 100644
--- a/config/ffhh-sued.erb
+++ b/config/ffhh-sued.erb
@@ -2,8 +2,7 @@
 site_name = 'Freifunk Hamburg Sued'
 site_code = 'ffhh-sued'
 
-gluon_site_packages += %w( gluon-mesh-batman-adv-15 )
-gluon_ath10k_mesh = "11s"
+gluon_site_packages += %w( )
 
 prefix4 = '10.112.64.0/19'
 prefix6 = '2a03:2267:1::/64'
diff --git a/config/ffhh-west.erb b/config/ffhh-west.erb
index 428199e..b9775de 100644
--- a/config/ffhh-west.erb
+++ b/config/ffhh-west.erb
@@ -2,8 +2,7 @@
 site_name = 'Freifunk Hamburg West'
 site_code = 'ffhh-west'
 
-gluon_site_packages += %w( gluon-mesh-batman-adv-15 )
-gluon_ath10k_mesh = "11s"
+gluon_site_packages += %w( )
 
 prefix4 = '10.112.96.0/19'
 prefix6 = '2a03:2267:2::/64'
diff --git a/template/site.conf.erb b/template/site.conf.erb
index 1b46d6c..05f9ccd 100644
--- a/template/site.conf.erb
+++ b/template/site.conf.erb
@@ -26,18 +26,10 @@
 		ap = {
 			ssid = 'hamburg.freifunk.net',
 		},
-<% if gluon_ath10k_mesh == "11s" -%>
 		mesh = {
 			id = '<%= ("00000000" + site_code)[-8..-1].each_byte.map { |b| b.to_s(16) }.join.upcase %>',
 			mcast_rate = 12000,
 		},
-<% else -%>
-		ibss = {
-			ssid = 'f8:d1:11:87:52:2e',
-			bssid = 'f8:d1:11:87:52:2e',
-			mcast_rate = 12000,
-		},
-<% end -%>
 	},
 
 	wifi5 = {
@@ -45,18 +37,10 @@
 		ap = {
 			ssid = 'hamburg.freifunk.net',
 		},
-<% if gluon_ath10k_mesh == "11s" -%>
 		mesh = {
 			id = '<%= ("00000000" + site_code)[-8..-1].each_byte.map { |b| b.to_s(16) }.join.upcase %>',
 			mcast_rate = 12000,
 		},
-<% else -%>
-		ibss = {
-			ssid = 'f8:d1:11:87:52:2e',
-			bssid = 'f8:d1:11:87:52:2e',
-			mcast_rate = 12000,
-		},
-<% end -%>
 	},
 
 	next_node = {

From 1af0a7fa5fc6c6141547345490b4566f003e3814 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 6 Apr 2018 20:44:33 +0200
Subject: [PATCH 050/135] domain seed aus site_code generieren lassen

---
 template/site.conf.erb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/template/site.conf.erb b/template/site.conf.erb
index 05f9ccd..1e5ac63 100644
--- a/template/site.conf.erb
+++ b/template/site.conf.erb
@@ -2,6 +2,7 @@
 	hostname_prefix = 'GibMirEinenNamen',
 	site_name = '<%= site_name %>',
 	site_code = '<%= site_code %>',
+	domain_seed = '<%= (site_code + ("Hamburg" * 7))[0..31].each_byte.map { |b| b.to_s(16) }.join.upcase %>',
 
 	opkg = {
 		lede = 'http://lede.opkg.services.ffhh/snapshots/packages/%A',

From 7381c864acdfbf252cef7b1eb99c6c657e75c6af Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 6 Apr 2018 21:33:30 +0200
Subject: [PATCH 051/135] update build.sh shebang

---
 build.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index ad86111..d7ff90b 100755
--- a/build.sh
+++ b/build.sh
@@ -1,4 +1,5 @@
-#!/bin/bash -e
+#!/usr/bin/env bash
+set -e
 
 function announce () {
 	echo '############################' $* >&2

From d7a554c430acada1275f74556121610b3bdcc6e7 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 6 Apr 2018 21:46:23 +0200
Subject: [PATCH 052/135] rework build.sh option parsing

---
 build.sh | 71 +++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 52 insertions(+), 19 deletions(-)

diff --git a/build.sh b/build.sh
index d7ff90b..2f8f21a 100755
--- a/build.sh
+++ b/build.sh
@@ -4,34 +4,67 @@ set -e
 function announce () {
 	echo '############################' $* >&2
 }
-
-proc=$(nproc)
-gluon_out="${HOME}/firmware"
-
-while getopts g:j:l:o:s:u:bmv opt; do
-	case "$opt" in
-		g) gluon_path="$OPTARG" ;;
-		l) sites="$OPTARG" ;;
-		o) gluon_out="$OPTARG" ;;
-		s) signature="$OPTARG" ;;
-		u) uploadscript="$OPTARG" ;;
-		b) export BROKEN=1 ;;
-		m) dont_make_sites=1 ;;
-		j) proc="$OPTARG" ;;
-		v) verbose=V=s ;;
-	esac
-done
-if [ -z "${gluon_path}" ]; then
+function usage () {
 	echo "Usage: $0 -g GLUON_PATH" >&2
 	echo "       -g GLUON_PATH   Path to a checkout of the gluon repository." >&2
 	echo "       -l SITES        Comma separated list of sites to build" >&2
 	echo "       -o OUT_PATH     Path to the firmware output directory. Default: ${gluon_out}" >&2
 	echo "       -s SIGNATURE    Sign firmware with signature" >&2
-	echo "       -u UPLOADSCRIPT Run UPLOADSCRIPT after building. Argument: $gluon_out/<GLUON_RELEASE>" >&2
+	echo "       -u UPLOADSCRIPT Run UPLOADSCRIPT after building. Will be run with one argument: $gluon_out/<GLUON_RELEASE>" >&2
 	echo "       -b              BROKEN=1" >&2
 	echo "       -m              Do not regenerate the sites" >&2
 	echo "       -v              verbose" >&2
 	echo "       -j JOBS         Run build with -jJOBS. Default: ${proc}" >&2
+}
+
+proc=$(nproc)
+gluon_out="${HOME}/firmware"
+
+while [ $# -gt 0 ]; do
+	case "$1" in
+		-g)
+			gluon_path="$2"
+			shift
+			;;
+		-l)
+			sites="$2"
+			shift
+			;;
+		-o)
+			gluon_out="$2"
+			shift
+			;;
+		-s)
+			signature="$2"
+			shift
+			;;
+		-u)
+			uploadscript="$2"
+			shift
+			;;
+		-b)
+			export BROKEN=1
+			;;
+		-m)
+			dont_make_sites=1
+			;;
+		-j)
+			proc="$2"
+			shift
+			;;
+		-v)
+			verbose=V=s
+			;;
+		*)
+			usage
+			exit 1
+			;;
+	esac
+	shift
+done
+
+if [ -z "$gluon_path" ]; then
+	usage
 	exit 1
 fi
 

From 10ce183652136e051711ab84f9c2ac4b3598f72e Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 6 Apr 2018 21:50:20 +0200
Subject: [PATCH 053/135] fix 11s mesh build

---
 template/site.mk.erb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/template/site.mk.erb b/template/site.mk.erb
index 0b0e45d..b5fa761 100644
--- a/template/site.mk.erb
+++ b/template/site.mk.erb
@@ -33,6 +33,6 @@ GLUON_PRIORITY ?= 0
 # Region code required for some images; supported values: us eu
 GLUON_REGION ?= eu
 
-GLUON_ATH10K_MESH ?= <%= gluon_ath10k_mesh %>
+GLUON_ATH10K_MESH ?= 11s
 
 GLUON_LANGS ?= en de

From dd949f3db314f91453c3b16d603e69cf4fe50660 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 6 Apr 2018 21:59:26 +0200
Subject: [PATCH 054/135] Package removed in master by gluon #1339

---
 config/defaults.erb | 1 -
 1 file changed, 1 deletion(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index 55eee20..a620a90 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -27,7 +27,6 @@ gluon_site_packages = %w(
 	gluon-config-mode-mesh-vpn
 	gluon-ebtables-filter-multicast
 	gluon-ebtables-filter-ra-dhcp
-	gluon-ebtables-segment-mld
 	gluon-ebtables-source-filter
 	gluon-mesh-batman-adv-15
 	gluon-mesh-vpn-fastd

From 16d601c9c902b69506f742d4733229c609157678 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 9 Jul 2018 19:13:55 +0200
Subject: [PATCH 055/135] Update readme for v0.9.2

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 4af811c..ee5360f 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- 0.9.2: site-ffhh: v0.9.2, gluon: v2017.1.8
 - 0.9.1: site-ffhh: v0.9.1, gluon: v2017.1.5
 - 0.9.0: site-ffhh: 60f30382209ffc050baa82be9bad3622a1d88d5b, gluon: v2017.1.x (9295abcea7b016b0fe4b05c534ea0731b48ef593) (never rolled out due to 0.9.1)
 - 0.8.6: v2016.2.7 Fix gw01-new key, add 3.ntp.services.ffhh to NTP servers, add Firmware signing keys for Alexander and Olli, remove old domain

From 729407b7890f98c43e4c7d25a2f93512399fa372 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 13 Jul 2018 20:09:02 +0200
Subject: [PATCH 056/135] Disable VXLAN until we have a migration path

---
 template/site.conf.erb | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/template/site.conf.erb b/template/site.conf.erb
index 1e5ac63..a2a83f6 100644
--- a/template/site.conf.erb
+++ b/template/site.conf.erb
@@ -18,6 +18,10 @@
 	ntp_servers = {'1.ntp.services.ffhh','2.ntp.services.ffhh','3.ntp.services.ffhh'},
 	regdom = 'DE',
 
+	mesh = {
+		vxlan = false,
+	},
+
 	wifi24 = {
 		channel = 1,
 

From 2839cdc4513682a697b16ff0df18b6ec1b79bc45 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 13 Jul 2018 22:21:50 +0200
Subject: [PATCH 057/135] Update version number for next gluon build

---
 config/defaults.erb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index a620a90..03ae0a2 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -1,7 +1,7 @@
 <%
 #gluon_branch = "stable"
 gluon_branch = "experimental"
-gluon_release = "0.9.2"
+gluon_release = "v2018.1.0.0"
 
 # Add the +exp and current date if this is an experimental release
 gluon_release += "~exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"

From 0b518e27fd2b3e79a579e54ebcb8fd6812c2c36a Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 30 Jul 2018 20:12:06 +0200
Subject: [PATCH 058/135] Add more targets when potentially broken models are
 included

---
 config/defaults.erb | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/config/defaults.erb b/config/defaults.erb
index 03ae0a2..f088ada 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -19,6 +19,21 @@ gluon_targets = %w(
 	x86-64
 )
 
+# Add more targets for experimental builds...
+if ENV["BROKEN"]
+	gluon_targets += %w(
+		ar71xx-mikrotik
+		brcm2708-bcm2710
+		ipq806x
+		mvebu
+		ramips-mt7620
+		ramips-mt7628
+		ramips-rt305x
+		sunxi
+	)
+end
+gluon_targets.sort!.uniq!
+
 gluon_site_packages = %w(
 	gluon-autoupdater
 	gluon-config-mode-autoupdater

From 4b9b64fe8d79417003f2c7ea62779b619cefffaa Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 30 Jul 2018 20:23:37 +0200
Subject: [PATCH 059/135] fix a comment

---
 config/defaults.erb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index f088ada..a606bd8 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -19,7 +19,7 @@ gluon_targets = %w(
 	x86-64
 )
 
-# Add more targets for experimental builds...
+# Add more targets if broken images are included...
 if ENV["BROKEN"]
 	gluon_targets += %w(
 		ar71xx-mikrotik

From b3b559103e07df2fe945a69cd16669aff8e3859f Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 30 Jul 2018 20:31:23 +0200
Subject: [PATCH 060/135] prepare next stable v2018.1.0.0

---
 README.md           | 1 +
 config/defaults.erb | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index ee5360f..59d578f 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2018.1.0.0: site-ffhh: v2018.1.0.0, gluon: v2018.1
 - 0.9.2: site-ffhh: v0.9.2, gluon: v2017.1.8
 - 0.9.1: site-ffhh: v0.9.1, gluon: v2017.1.5
 - 0.9.0: site-ffhh: 60f30382209ffc050baa82be9bad3622a1d88d5b, gluon: v2017.1.x (9295abcea7b016b0fe4b05c534ea0731b48ef593) (never rolled out due to 0.9.1)
diff --git a/config/defaults.erb b/config/defaults.erb
index a606bd8..686dc26 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -1,6 +1,6 @@
 <%
-#gluon_branch = "stable"
-gluon_branch = "experimental"
+gluon_branch = "stable"
+#gluon_branch = "experimental"
 gluon_release = "v2018.1.0.0"
 
 # Add the +exp and current date if this is an experimental release

From 2bd0396c03d062feb7152987d8b2c9d503e65cb9 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 6 Aug 2018 19:57:33 +0200
Subject: [PATCH 061/135] Update targets

---
 config/defaults.erb | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index 686dc26..5cff607 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -8,15 +8,21 @@ gluon_release += "~exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experi
 
 gluon_targets = %w(
 	ar71xx-generic
-	ar71xx-tiny
 	ar71xx-nand
+	ar71xx-tiny
 	brcm2708-bcm2708
 	brcm2708-bcm2709
+	ipq40xx
+	ipq806x
 	mpc85xx-generic
+	ramips-mt7620
 	ramips-mt7621
+	ramips-mt76x8
+	ramips-rt305x
+	sunxi-cortexa7
+	x86-64
 	x86-generic
 	x86-geode
-	x86-64
 )
 
 # Add more targets if broken images are included...
@@ -24,12 +30,7 @@ if ENV["BROKEN"]
 	gluon_targets += %w(
 		ar71xx-mikrotik
 		brcm2708-bcm2710
-		ipq806x
-		mvebu
-		ramips-mt7620
-		ramips-mt7628
-		ramips-rt305x
-		sunxi
+		mvebu-cortexa9
 	)
 end
 gluon_targets.sort!.uniq!

From dc5cc9eb694b41719a5cfbe0537aef79a61b810d Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 28 Aug 2018 21:41:53 +0200
Subject: [PATCH 062/135] =?UTF-8?q?Update=20f=C3=BCr=20Gluon=20v2018.1.1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md           | 3 ++-
 config/defaults.erb | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 59d578f..be0254a 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,8 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
-- v2018.1.0.0: site-ffhh: v2018.1.0.0, gluon: v2018.1
+- v2018.1.1.0: site-ffhh: v2018.1.1.0, gluon: v2018.1.1
+- v2018.1.0.0: site-ffhh: v2018.1.0.0, gluon: v2018.1 (never rolled out due to issues with the auto updater in gluon)
 - 0.9.2: site-ffhh: v0.9.2, gluon: v2017.1.8
 - 0.9.1: site-ffhh: v0.9.1, gluon: v2017.1.5
 - 0.9.0: site-ffhh: 60f30382209ffc050baa82be9bad3622a1d88d5b, gluon: v2017.1.x (9295abcea7b016b0fe4b05c534ea0731b48ef593) (never rolled out due to 0.9.1)
diff --git a/config/defaults.erb b/config/defaults.erb
index 5cff607..bcb4a45 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -1,7 +1,7 @@
 <%
 gluon_branch = "stable"
 #gluon_branch = "experimental"
-gluon_release = "v2018.1.0.0"
+gluon_release = "v2018.1.1.0"
 
 # Add the +exp and current date if this is an experimental release
 gluon_release += "~exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"

From c1f2d4ec37da7b8c1e33092396ddeff5adce2c11 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 28 Aug 2018 23:41:02 +0200
Subject: [PATCH 063/135] =?UTF-8?q?Targets=20f=C3=BCr=20v2018.1.1.0=20aktu?=
 =?UTF-8?q?alisieren?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 config/defaults.erb | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index bcb4a45..5671fe2 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -7,22 +7,21 @@ gluon_release = "v2018.1.1.0"
 gluon_release += "~exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"
 
 gluon_targets = %w(
-	ar71xx-generic
-	ar71xx-nand
-	ar71xx-tiny
-	brcm2708-bcm2708
-	brcm2708-bcm2709
-	ipq40xx
-	ipq806x
-	mpc85xx-generic
-	ramips-mt7620
-	ramips-mt7621
-	ramips-mt76x8
-	ramips-rt305x
-	sunxi-cortexa7
-	x86-64
-	x86-generic
-	x86-geode
+		ar71xx-generic
+		ar71xx-tiny
+		ar71xx-nand
+		brcm2708-bcm2708
+		brcm2708-bcm2709
+		mpc85xx-generic
+		ramips-mt7621
+		sunxi
+		x86-generic
+		x86-geode
+		x86-64
+		ipq806x
+		ramips-mt7620
+		ramips-mt7628
+		ramips-rt305x
 )
 
 # Add more targets if broken images are included...
@@ -30,7 +29,9 @@ if ENV["BROKEN"]
 	gluon_targets += %w(
 		ar71xx-mikrotik
 		brcm2708-bcm2710
+		ipq40xx
 		mvebu-cortexa9
+		ramips-mt7620
 	)
 end
 gluon_targets.sort!.uniq!

From 7e94b11623249edf521afcdc1629d0557b2dfd92 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Thu, 30 Aug 2018 19:03:18 +0200
Subject: [PATCH 064/135] =?UTF-8?q?Targets=20f=C3=BCr=20v2018.1.1.0-exp=20?=
 =?UTF-8?q?aktualisieren?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 config/defaults.erb | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index 5671fe2..ee95038 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -24,14 +24,27 @@ gluon_targets = %w(
 		ramips-rt305x
 )
 
-# Add more targets if broken images are included...
+# Targets to build if possibly broken or untested images are included
 if ENV["BROKEN"]
-	gluon_targets += %w(
+	gluon_targets = %w(
+		ar71xx-generic
 		ar71xx-mikrotik
+		ar71xx-nand
+		ar71xx-tiny
+		brcm2708-bcm2708
+		brcm2708-bcm2709
 		brcm2708-bcm2710
-		ipq40xx
-		mvebu-cortexa9
+		ipq806x
+		mpc85xx-generic
+		mvebu
 		ramips-mt7620
+		ramips-mt7621
+		ramips-mt7628
+		ramips-rt305x
+		sunxi
+		x86-64
+		x86-generic
+		x86-geode
 	)
 end
 gluon_targets.sort!.uniq!

From af558e46767f4f71ef1165399dc87e5f9e8ae656 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 7 Sep 2018 21:07:51 +0200
Subject: [PATCH 065/135] build.sh: Allow specifying the gluon targets that
 should be built

---
 build.sh | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/build.sh b/build.sh
index 2f8f21a..56da0ec 100755
--- a/build.sh
+++ b/build.sh
@@ -8,6 +8,7 @@ function usage () {
 	echo "Usage: $0 -g GLUON_PATH" >&2
 	echo "       -g GLUON_PATH   Path to a checkout of the gluon repository." >&2
 	echo "       -l SITES        Comma separated list of sites to build" >&2
+	echo "       -t TARGETS      Comma separated list of gluon targets to build" >&2
 	echo "       -o OUT_PATH     Path to the firmware output directory. Default: ${gluon_out}" >&2
 	echo "       -s SIGNATURE    Sign firmware with signature" >&2
 	echo "       -u UPLOADSCRIPT Run UPLOADSCRIPT after building. Will be run with one argument: $gluon_out/<GLUON_RELEASE>" >&2
@@ -30,6 +31,10 @@ while [ $# -gt 0 ]; do
 			sites="$2"
 			shift
 			;;
+		-t)
+			build_targets="$2"
+			shift
+			;;
 		-o)
 			gluon_out="$2"
 			shift
@@ -84,6 +89,8 @@ fi
 . ./info
 export GLUON_RELEASE
 export GLUON_BRANCH
+# if a list of build targets has been supplied, only build those
+targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"
 # get the available sites...
 sites="$(echo "$sites" | sed -e 's_,_ _g')"
 if [ "$sites" == "" ]; then

From 2f528b1c448b6d6feaff6d83da5590f163ab9e77 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 21 Sep 2018 19:51:50 +0200
Subject: [PATCH 066/135] =?UTF-8?q?Targets=20f=C3=BCr=20Gluon=20master=20s?=
 =?UTF-8?q?etzen?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 config/defaults.erb | 52 +++++++++++++++++----------------------------
 1 file changed, 19 insertions(+), 33 deletions(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index ee95038..bcb4a45 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -7,44 +7,30 @@ gluon_release = "v2018.1.1.0"
 gluon_release += "~exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"
 
 gluon_targets = %w(
-		ar71xx-generic
-		ar71xx-tiny
-		ar71xx-nand
-		brcm2708-bcm2708
-		brcm2708-bcm2709
-		mpc85xx-generic
-		ramips-mt7621
-		sunxi
-		x86-generic
-		x86-geode
-		x86-64
-		ipq806x
-		ramips-mt7620
-		ramips-mt7628
-		ramips-rt305x
+	ar71xx-generic
+	ar71xx-nand
+	ar71xx-tiny
+	brcm2708-bcm2708
+	brcm2708-bcm2709
+	ipq40xx
+	ipq806x
+	mpc85xx-generic
+	ramips-mt7620
+	ramips-mt7621
+	ramips-mt76x8
+	ramips-rt305x
+	sunxi-cortexa7
+	x86-64
+	x86-generic
+	x86-geode
 )
 
-# Targets to build if possibly broken or untested images are included
+# Add more targets if broken images are included...
 if ENV["BROKEN"]
-	gluon_targets = %w(
-		ar71xx-generic
+	gluon_targets += %w(
 		ar71xx-mikrotik
-		ar71xx-nand
-		ar71xx-tiny
-		brcm2708-bcm2708
-		brcm2708-bcm2709
 		brcm2708-bcm2710
-		ipq806x
-		mpc85xx-generic
-		mvebu
-		ramips-mt7620
-		ramips-mt7621
-		ramips-mt7628
-		ramips-rt305x
-		sunxi
-		x86-64
-		x86-generic
-		x86-geode
+		mvebu-cortexa9
 	)
 end
 gluon_targets.sort!.uniq!

From fa474b7a7dae02be4235e5441b2e4b6fcb64bfbf Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 23 Sep 2018 23:21:05 +0200
Subject: [PATCH 067/135] Set config_mode options for hostname

---
 template/site.conf.erb | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/template/site.conf.erb b/template/site.conf.erb
index a2a83f6..024df96 100644
--- a/template/site.conf.erb
+++ b/template/site.conf.erb
@@ -1,5 +1,11 @@
 {
 	hostname_prefix = 'GibMirEinenNamen',
+	config_mode = {
+		hostname = {
+			optional = false,
+			prefill = true,
+		},
+	},
 	site_name = '<%= site_name %>',
 	site_code = '<%= site_code %>',
 	domain_seed = '<%= (site_code + ("Hamburg" * 7))[0..31].each_byte.map { |b| b.to_s(16) }.join.upcase %>',

From 86637d726275e9710b66cf0f4df60523621755fe Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 24 Sep 2018 21:42:39 +0200
Subject: [PATCH 068/135] Migration zu Gluon Features

---
 config/defaults.erb  | 25 -------------------------
 config/ffhh-nowe.erb |  2 --
 config/ffhh-ost.erb  |  2 --
 config/ffhh-sued.erb |  2 --
 config/ffhh-west.erb |  2 --
 template/site.mk.erb | 21 ++++++++++++++++++---
 6 files changed, 18 insertions(+), 36 deletions(-)

diff --git a/config/defaults.erb b/config/defaults.erb
index bcb4a45..9d3236a 100644
--- a/config/defaults.erb
+++ b/config/defaults.erb
@@ -35,31 +35,6 @@ if ENV["BROKEN"]
 end
 gluon_targets.sort!.uniq!
 
-gluon_site_packages = %w(
-	gluon-autoupdater
-	gluon-config-mode-autoupdater
-	gluon-config-mode-core
-	gluon-config-mode-hostname
-	gluon-config-mode-mesh-vpn
-	gluon-ebtables-filter-multicast
-	gluon-ebtables-filter-ra-dhcp
-	gluon-ebtables-source-filter
-	gluon-mesh-batman-adv-15
-	gluon-mesh-vpn-fastd
-	gluon-radvd
-	gluon-respondd
-	gluon-setup-mode
-	gluon-status-page
-	gluon-web-admin
-	gluon-web-autoupdater
-	gluon-web-network
-	gluon-web-private-wifi
-	gluon-web-wifi-config
-	haveged
-	iptables
-	iwinfo
-)
-
 signing_keys = [
 		'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', # leo
 		'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', # andre
diff --git a/config/ffhh-nowe.erb b/config/ffhh-nowe.erb
index 92b157d..39f6aec 100644
--- a/config/ffhh-nowe.erb
+++ b/config/ffhh-nowe.erb
@@ -2,8 +2,6 @@
 site_name = 'Freifunk Hamburg Nordwest'
 site_code = 'ffhh-nowe'
 
-gluon_site_packages += %w( )
-
 prefix4 = '10.112.192.0/19'
 prefix6 = '2a03:2267:3::/64'
 
diff --git a/config/ffhh-ost.erb b/config/ffhh-ost.erb
index 1cb7b72..8539b32 100644
--- a/config/ffhh-ost.erb
+++ b/config/ffhh-ost.erb
@@ -2,8 +2,6 @@
 site_name = 'Freifunk Hamburg Ost'
 site_code = 'ffhh-ost'
 
-gluon_site_packages += %w( )
-
 prefix4 = '10.112.224.0/19'
 prefix6 = '2a03:2267:4::/64'
 
diff --git a/config/ffhh-sued.erb b/config/ffhh-sued.erb
index b970c9c..2f76b16 100644
--- a/config/ffhh-sued.erb
+++ b/config/ffhh-sued.erb
@@ -2,8 +2,6 @@
 site_name = 'Freifunk Hamburg Sued'
 site_code = 'ffhh-sued'
 
-gluon_site_packages += %w( )
-
 prefix4 = '10.112.64.0/19'
 prefix6 = '2a03:2267:1::/64'
 
diff --git a/config/ffhh-west.erb b/config/ffhh-west.erb
index b9775de..aaf5399 100644
--- a/config/ffhh-west.erb
+++ b/config/ffhh-west.erb
@@ -2,8 +2,6 @@
 site_name = 'Freifunk Hamburg West'
 site_code = 'ffhh-west'
 
-gluon_site_packages += %w( )
-
 prefix4 = '10.112.96.0/19'
 prefix6 = '2a03:2267:2::/64'
 
diff --git a/template/site.mk.erb b/template/site.mk.erb
index b5fa761..facd7d8 100644
--- a/template/site.mk.erb
+++ b/template/site.mk.erb
@@ -1,7 +1,22 @@
-GLUON_SITE_PACKAGES :=<% gluon_site_packages.each do | p | -%>
-<%= " " + p -%>
-<% end -%>
+GLUON_SITE_PACKAGES := -gluon-config-mode-geo-location \
+	-gluon-config-mode-contact-info \
+	gluon-ebtables-source-filter \
+	haveged \
+	iptables \
+	iwinfo
 
+GLUON_FEATURES := \
+	autoupdater \
+	ebtables-filter-multicast \
+	ebtables-filter-ra-dhcp \
+	ebtables-limit-arp \
+	mesh-batman-adv-15 \
+	mesh-vpn-fastd \
+	radvd \
+	respondd \
+	status-page \
+	web-advanced \
+	web-wizard
 
 # EXTRA_SOFTWARE_TOOLS_01
 EXTRA_SOFTWARE_TOOLS_01 := \

From 7161a0bc69fdcc3b4e08e44ec07e6739bbcd3cb1 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 28 Sep 2018 20:00:36 +0200
Subject: [PATCH 069/135] Eingabe eines Knotennamens erzwingen

---
 template/site.conf.erb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/template/site.conf.erb b/template/site.conf.erb
index 024df96..cb8c9c0 100644
--- a/template/site.conf.erb
+++ b/template/site.conf.erb
@@ -3,7 +3,7 @@
 	config_mode = {
 		hostname = {
 			optional = false,
-			prefill = true,
+			prefill = false,
 		},
 	},
 	site_name = '<%= site_name %>',

From bd5ba8ca40d7887b9bb1e8e7bb90fa19b38388b6 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 28 Sep 2018 20:55:08 +0200
Subject: [PATCH 070/135] Neues Paket: gluon-web-mesh-vpn-fastd

---
 template/site.mk.erb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/template/site.mk.erb b/template/site.mk.erb
index facd7d8..2b4b7de 100644
--- a/template/site.mk.erb
+++ b/template/site.mk.erb
@@ -1,6 +1,7 @@
 GLUON_SITE_PACKAGES := -gluon-config-mode-geo-location \
 	-gluon-config-mode-contact-info \
 	gluon-ebtables-source-filter \
+	gluon-web-mesh-vpn-fastd \
 	haveged \
 	iptables \
 	iwinfo

From e59d96d6dd42f74fa206ba950b04ec6c8311fa1f Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 1 Oct 2018 21:37:30 +0200
Subject: [PATCH 071/135] Umbau auf Multi-Domain firmware

---
 Makefile                        |  31 --------
 build.conf                      |   3 +
 build.sh                        |  88 +++++++---------------
 config/defaults.erb             |  51 -------------
 config/ffhh-nowe.erb            |  39 ----------
 config/ffhh-ost.erb             |  39 ----------
 config/ffhh-sued.erb            |  39 ----------
 config/ffhh-west.erb            |  39 ----------
 domains/ffhh_nowe.conf          |  72 ++++++++++++++++++
 domains/ffhh_ost.conf           |  72 ++++++++++++++++++
 domains/ffhh_sued.conf          |  72 ++++++++++++++++++
 domains/ffhh_west.conf          |  72 ++++++++++++++++++
 template/modules.erb => modules |   0
 site.conf                       | 105 ++++++++++++++++++++++++++
 template/site.mk.erb => site.mk |  12 +--
 template/info.erb               |   3 -
 template/site.conf.erb          | 128 --------------------------------
 17 files changed, 428 insertions(+), 437 deletions(-)
 delete mode 100644 Makefile
 create mode 100644 build.conf
 delete mode 100644 config/defaults.erb
 delete mode 100644 config/ffhh-nowe.erb
 delete mode 100644 config/ffhh-ost.erb
 delete mode 100644 config/ffhh-sued.erb
 delete mode 100644 config/ffhh-west.erb
 create mode 100644 domains/ffhh_nowe.conf
 create mode 100644 domains/ffhh_ost.conf
 create mode 100644 domains/ffhh_sued.conf
 create mode 100644 domains/ffhh_west.conf
 rename template/modules.erb => modules (100%)
 create mode 100644 site.conf
 rename template/site.mk.erb => site.mk (83%)
 delete mode 100644 template/info.erb
 delete mode 100644 template/site.conf.erb

diff --git a/Makefile b/Makefile
deleted file mode 100644
index 08c41b8..0000000
--- a/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-sites: clean info sites/ffhh-nowe sites/ffhh-ost sites/ffhh-sued sites/ffhh-west
-
-info: config/defaults.erb template/info.erb
-	erb -T- config/defaults.erb template/$@.erb >$@
-
-.PHONY: clean
-clean:
-	rm -rf sites
-	rm -f info
-
-sites/%: config/%.erb
-	mkdir -p $@
-	cd $@ && $(MAKE) -f ../../Makefile site SITE=$(@F)
-
-site: siteclean site.mk site.conf modules i18n
-
-.PHONY: siteclean
-siteclean:
-	rm -f site.mk site.conf modules
-
-modules:
-	erb -T- ../../config/defaults.erb ../../config/$(SITE).erb ../../template/$@.erb >$@
-
-site.conf:
-	erb -T- ../../config/defaults.erb ../../config/$(SITE).erb ../../template/$@.erb >$@
-
-site.mk:
-	erb -T- ../../config/defaults.erb ../../config/$(SITE).erb ../../template/$@.erb >$@
-
-i18n:
-	ln -s ../../i18n
diff --git a/build.conf b/build.conf
new file mode 100644
index 0000000..84afa92
--- /dev/null
+++ b/build.conf
@@ -0,0 +1,3 @@
+GLUON_RELEASE="master~201810011"
+GLUON_BRANCH="experimental"
+targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 ipq40xx ipq806x mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
diff --git a/build.sh b/build.sh
index 56da0ec..5a4bbe6 100755
--- a/build.sh
+++ b/build.sh
@@ -7,13 +7,10 @@ function announce () {
 function usage () {
 	echo "Usage: $0 -g GLUON_PATH" >&2
 	echo "       -g GLUON_PATH   Path to a checkout of the gluon repository." >&2
-	echo "       -l SITES        Comma separated list of sites to build" >&2
 	echo "       -t TARGETS      Comma separated list of gluon targets to build" >&2
 	echo "       -o OUT_PATH     Path to the firmware output directory. Default: ${gluon_out}" >&2
 	echo "       -s SIGNATURE    Sign firmware with signature" >&2
-	echo "       -u UPLOADSCRIPT Run UPLOADSCRIPT after building. Will be run with one argument: $gluon_out/<GLUON_RELEASE>" >&2
 	echo "       -b              BROKEN=1" >&2
-	echo "       -m              Do not regenerate the sites" >&2
 	echo "       -v              verbose" >&2
 	echo "       -j JOBS         Run build with -jJOBS. Default: ${proc}" >&2
 }
@@ -27,10 +24,6 @@ while [ $# -gt 0 ]; do
 			gluon_path="$2"
 			shift
 			;;
-		-l)
-			sites="$2"
-			shift
-			;;
 		-t)
 			build_targets="$2"
 			shift
@@ -43,16 +36,9 @@ while [ $# -gt 0 ]; do
 			signature="$2"
 			shift
 			;;
-		-u)
-			uploadscript="$2"
-			shift
-			;;
 		-b)
 			export BROKEN=1
 			;;
-		-m)
-			dont_make_sites=1
-			;;
 		-j)
 			proc="$2"
 			shift
@@ -61,6 +47,7 @@ while [ $# -gt 0 ]; do
 			verbose=V=s
 			;;
 		*)
+			echo ERROR: Failed to parse: "${1}" >&2
 			usage
 			exit 1
 			;;
@@ -81,61 +68,42 @@ announce GLUON: $gluon_path >&2
 announce FFHH SITE PATH: $site_path >&2
 
 pushd $site_path
-if [ "$dont_make_sites" == "" ]; then
-	# Build the site repo and generate all site configs
-	announce Building site repo and reading data >&2
-	make
-fi
-. ./info
+. ./build.conf
 export GLUON_RELEASE
 export GLUON_BRANCH
 # if a list of build targets has been supplied, only build those
 targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"
-# get the available sites...
-sites="$(echo "$sites" | sed -e 's_,_ _g')"
-if [ "$sites" == "" ]; then
-	for s in sites/*; do sites="${sites} ${s##*/}"; done
-fi
-announce Gluon will be built for the following sites:$sites >&2
 announce The following targets will be generated: $targets >&2
 popd
 
 pushd "${gluon_path}"
 announce Starting make update...
-for s in $sites; do
-	export GLUON_SITEDIR="${site_path}/sites/${s}"
-	export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}/${s}"
-	rm -rf "${GLUON_OUTPUTDIR}"
-	mkdir -p "${GLUON_OUTPUTDIR}"
-	make update
-	# Try to install patches. I wasn't able to figure out how patches in gluon/site/patches work.
-	for p in ${site_path}/patches/*.patch; do
-		if [ -e "$p" -a ! -f "${gluon_path}/${p##*/}" ]; then
-			announce Installing patch $p
-			patch -p1 < $p
-			touch "${gluon_path}/${p##*/}"
-		fi
-	done
-	for t in $targets; do
-		announce make clean for $s/$t... >&2
-		make -j1 clean GLUON_TARGET=$t
-		announce Starting build for $s/$t... >&2
-		make -j$(nproc) GLUON_TARGET=$t $verbose
-	done
-	announce Building manifest...
-	make manifest
-	if [ -n "${signature}" ]; then
-		if [ "$GLUON_BRANCH" == "experimental" ]; then
-			announce Signing
-			"${gluon_path}/contrib/sign.sh" "${signature}" "${GLUON_OUTPUTDIR}/images/sysupgrade/experimental.manifest"
-		else
-			echo ERROR: can only sign experimental branch >&2
-			exit 1
-		fi
+export GLUON_SITEDIR="${site_path}"
+export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}"
+rm -rf "${GLUON_OUTPUTDIR}"
+mkdir -p "${GLUON_OUTPUTDIR}"
+make update
+# Try to install patches. I wasn't able to figure out how patches in gluon/site/patches work.
+for p in ${site_path}/patches/*.patch; do
+	if [ -e "$p" -a ! -f "${gluon_path}/${p##*/}" ]; then
+		announce Installing patch $p
+		patch -p1 < $p
+		touch "${gluon_path}/${p##*/}"
 	fi
 done
-popd
-if [ -n "$uploadscript" ]; then
-		announce Starting upload. Executing: $uploadscript $gluon_out/$GLUON_RELEASE
-		"$uploadscript" "$gluon_out/$GLUON_RELEASE"
+for t in $targets; do
+	announce Starting build for $t... >&2
+	make -j$(nproc) GLUON_TARGET=$t $verbose
+done
+announce Building manifest...
+make manifest
+if [ -n "${signature}" ]; then
+	if [ "$GLUON_BRANCH" == "experimental" ]; then
+		announce Signing...
+		"${gluon_path}/contrib/sign.sh" "${signature}" "${GLUON_OUTPUTDIR}/images/sysupgrade/experimental.manifest"
+	else
+		echo ERROR: can only sign experimental branch >&2
+		exit 1
+	fi
 fi
+popd
diff --git a/config/defaults.erb b/config/defaults.erb
deleted file mode 100644
index 9d3236a..0000000
--- a/config/defaults.erb
+++ /dev/null
@@ -1,51 +0,0 @@
-<%
-gluon_branch = "stable"
-#gluon_branch = "experimental"
-gluon_release = "v2018.1.1.0"
-
-# Add the +exp and current date if this is an experimental release
-gluon_release += "~exp" + Time.new.strftime("%Y%m%d") if gluon_branch == "experimental"
-
-gluon_targets = %w(
-	ar71xx-generic
-	ar71xx-nand
-	ar71xx-tiny
-	brcm2708-bcm2708
-	brcm2708-bcm2709
-	ipq40xx
-	ipq806x
-	mpc85xx-generic
-	ramips-mt7620
-	ramips-mt7621
-	ramips-mt76x8
-	ramips-rt305x
-	sunxi-cortexa7
-	x86-64
-	x86-generic
-	x86-geode
-)
-
-# Add more targets if broken images are included...
-if ENV["BROKEN"]
-	gluon_targets += %w(
-		ar71xx-mikrotik
-		brcm2708-bcm2710
-		mvebu-cortexa9
-	)
-end
-gluon_targets.sort!.uniq!
-
-signing_keys = [
-		'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', # leo
-		'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', # andre
-		'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', # gernot
-		'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', # bjoern
-		'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', # daniel
-		'961495a04512e5ba1843fd3c216d8af6ef2fdb19f93055142803e2da26d670b9', # alexander
-		'ed6278f168f0382adf4f058cb9c31d8f1145abb968a8626045de7d6d87a0be40', # olli
-]
-signing_keys_experimental = [
-		'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', # 1.builder
-]
-
--%>
diff --git a/config/ffhh-nowe.erb b/config/ffhh-nowe.erb
deleted file mode 100644
index 39f6aec..0000000
--- a/config/ffhh-nowe.erb
+++ /dev/null
@@ -1,39 +0,0 @@
-<%
-site_name = 'Freifunk Hamburg Nordwest'
-site_code = 'ffhh-nowe'
-
-prefix4 = '10.112.192.0/19'
-prefix6 = '2a03:2267:3::/64'
-
-next_node_ipv4 = '10.112.192.1'
-next_node_ipv6 = '2a03:2267:3::1'
-
-mtu = 1312
-
-gateways = {
-	"gateway01" => {
-		"key" => "aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b",
-		"remotes" => [ '"gw01-new.hamburg.freifunk.net" port 10007' ]
-	},
-	"gateway02" => {
-		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
-		"remotes" => [ '"gw02-new.hamburg.freifunk.net" port 10007' ]
-	},
-	"gateway03" => {
-		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
-		"remotes" => [ '"gw03-new.hamburg.freifunk.net" port 10007' ]
-	},
-	"gateway04" => {
-		"key" => "a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669",
-		"remotes" => [ '"gw04-new.hamburg.freifunk.net" port 10008' ]
-	},
-	"gateway05" => {
-		"key" => "291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f",
-		"remotes" => [ '"gw05-new.hamburg.freifunk.net" port 10008' ]
-	},
-	"gateway06" => {
-		"key" => "8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43",
-		"remotes" => [ '"gw06-new.hamburg.freifunk.net" port 10008' ]
-	},
-}
--%>
diff --git a/config/ffhh-ost.erb b/config/ffhh-ost.erb
deleted file mode 100644
index 8539b32..0000000
--- a/config/ffhh-ost.erb
+++ /dev/null
@@ -1,39 +0,0 @@
-<%
-site_name = 'Freifunk Hamburg Ost'
-site_code = 'ffhh-ost'
-
-prefix4 = '10.112.224.0/19'
-prefix6 = '2a03:2267:4::/64'
-
-next_node_ipv4 = '10.112.224.1'
-next_node_ipv6 = '2a03:2267:4::1'
-
-mtu = 1312
-
-gateways = {
-	"gateway01" => {
-		"key" => "aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b",
-		"remotes" => [ '"gw01-new.hamburg.freifunk.net" port 10009' ]
-	},
-	"gateway02" => {
-		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
-		"remotes" => [ '"gw02-new.hamburg.freifunk.net" port 10009' ]
-	},
-	"gateway03" => {
-		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
-		"remotes" => [ '"gw03-new.hamburg.freifunk.net" port 10009' ]
-	},
-	"gateway04" => {
-		"key" => "a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669",
-		"remotes" => [ '"gw04-new.hamburg.freifunk.net" port 10010' ]
-	},
-	"gateway05" => {
-		"key" => "291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f",
-		"remotes" => [ '"gw05-new.hamburg.freifunk.net" port 10010' ]
-	},
-	"gateway06" => {
-		"key" => "8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43",
-		"remotes" => [ '"gw06-new.hamburg.freifunk.net" port 10010' ]
-	},
-}
--%>
diff --git a/config/ffhh-sued.erb b/config/ffhh-sued.erb
deleted file mode 100644
index 2f76b16..0000000
--- a/config/ffhh-sued.erb
+++ /dev/null
@@ -1,39 +0,0 @@
-<%
-site_name = 'Freifunk Hamburg Sued'
-site_code = 'ffhh-sued'
-
-prefix4 = '10.112.64.0/19'
-prefix6 = '2a03:2267:1::/64'
-
-next_node_ipv4 = '10.112.64.1'
-next_node_ipv6 = '2a03:2267:1::1'
-
-mtu = 1312
-
-gateways = {
-	"gateway01" => {
-		"key" => "aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b",
-		"remotes" => [ '"gw01-new.hamburg.freifunk.net" port 10003' ]
-	},
-	"gateway02" => {
-		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
-		"remotes" => [ '"gw02-new.hamburg.freifunk.net" port 10003' ]
-	},
-	"gateway03" => {
-		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
-		"remotes" => [ '"gw03-new.hamburg.freifunk.net" port 10003' ]
-	},
-	"gateway04" => {
-		"key" => "fca88dd58316f4ab50d2a697123dddf4d0ba3aad52ddeb0ba7835cdbbeb60dbf",
-		"remotes" => [ '"gw04-new.hamburg.freifunk.net" port 10004' ]
-	},
-	"gateway05" => {
-		"key" => "84986658775167dff6918dc8e0529c4a4524cb1782849a80933ddb6d8c6bd3f5",
-		"remotes" => [ '"gw05-new.hamburg.freifunk.net" port 10004' ]
-	},
-	"gateway06" => {
-		"key" => "fb608aa75180ba88b4a3399a6498e68796d200afc1bfd275a0dcb903a31f39b6",
-		"remotes" => [ '"gw06-new.hamburg.freifunk.net" port 10004' ]
-	},
-}
--%>
diff --git a/config/ffhh-west.erb b/config/ffhh-west.erb
deleted file mode 100644
index aaf5399..0000000
--- a/config/ffhh-west.erb
+++ /dev/null
@@ -1,39 +0,0 @@
-<%
-site_name = 'Freifunk Hamburg West'
-site_code = 'ffhh-west'
-
-prefix4 = '10.112.96.0/19'
-prefix6 = '2a03:2267:2::/64'
-
-next_node_ipv4 = '10.112.96.1'
-next_node_ipv6 = '2a03:2267:2::1'
-
-mtu = 1312
-
-gateways = {
-	"gateway01" => {
-		"key" => "aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b",
-		"remotes" => [ '"gw01-new.hamburg.freifunk.net" port 10005' ]
-	},
-	"gateway02" => {
-		"key" => "462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0",
-		"remotes" => [ '"gw02-new.hamburg.freifunk.net" port 10005' ]
-	},
-	"gateway03" => {
-		"key" => "e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546",
-		"remotes" => [ '"gw03-new.hamburg.freifunk.net" port 10005' ]
-	},
-	"gateway04" => {
-		"key" => "a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669",
-		"remotes" => [ '"gw04-new.hamburg.freifunk.net" port 10006' ]
-	},
-	"gateway05" => {
-		"key" => "291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f",
-		"remotes" => [ '"gw05-new.hamburg.freifunk.net" port 10006' ]
-	},
-	"gateway06" => {
-		"key" => "8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43",
-		"remotes" => [ '"gw06-new.hamburg.freifunk.net" port 10006' ]
-	},
-}
--%>
diff --git a/domains/ffhh_nowe.conf b/domains/ffhh_nowe.conf
new file mode 100644
index 0000000..90aed0c
--- /dev/null
+++ b/domains/ffhh_nowe.conf
@@ -0,0 +1,72 @@
+{
+	domain_names = {
+		ffhh_nowe = "Hamburg Nordwest",
+	},
+	domain_seed = '666668682D6E6F776548616D6275726748616D6275726748616D627572674861',
+
+	prefix4 = '10.112.192.0/19',
+	prefix6 = '2a03:2267:3::/64',
+
+	next_node = {
+		ip4 = '10.112.192.1',
+		ip6 = '2a03:2267:3::1',
+		mac = '16:41:95:40:f7:dc',
+	},
+
+	wifi24 = {
+		ap = {
+			ssid = "hamburg.freifunk.net",
+		},
+		mesh = {
+			id = '6668682D6E6F7765',
+		},
+	},
+
+	wifi5 = {
+		ap = {
+			ssid = "hamburg.freifunk.net",
+		},
+		mesh = {
+			id = '6668682D6E6F7765',
+		},
+	},
+
+	mesh = {
+		vxlan = false,
+	},
+
+	mesh_vpn = {
+		fastd = {
+			groups = {
+				backbone = {
+					peers = {
+						gateway01 = {
+							remotes = { '"gw01-new.hamburg.freifunk.net" port 10007' },
+                            key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
+						},
+						gateway02 = {
+							remotes = { '"gw02-new.hamburg.freifunk.net" port 10007' },
+                            key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
+						},
+						gateway03 = {
+							remotes = { '"gw03-new.hamburg.freifunk.net" port 10007' },
+                            key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
+						},
+						gateway04 = {
+							remotes = { '"gw04-new.hamburg.freifunk.net" port 10008' },
+                            key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
+						},
+						gateway05 = {
+							remotes = { '"gw05-new.hamburg.freifunk.net" port 10008' },
+                            key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
+						},
+						gateway06 = {
+							remotes = { '"gw06-new.hamburg.freifunk.net" port 10008' },
+                            key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
+						},
+					},
+				},
+			},
+		},
+	},
+}
diff --git a/domains/ffhh_ost.conf b/domains/ffhh_ost.conf
new file mode 100644
index 0000000..7c2b948
--- /dev/null
+++ b/domains/ffhh_ost.conf
@@ -0,0 +1,72 @@
+{
+	domain_names = {
+		ffhh_ost  = "Hamburg Ost",
+	},
+	domain_seed = '666668682D6F737448616D6275726748616D6275726748616D6275726748616D',
+
+	prefix4 = '10.112.224.0/19',
+	prefix6 = '2a03:2267:4::/64',
+
+	next_node = {
+		ip4 = '10.112.224.1',
+		ip6 = '2a03:2267:4::1',
+		mac = '16:41:95:40:f7:dc',
+	},
+
+	wifi24 = {
+		ap = {
+			ssid = "hamburg.freifunk.net",
+		},
+		mesh = {
+			id = '666668682D6F7374',
+		},
+	},
+
+	wifi5 = {
+		ap = {
+			ssid = "hamburg.freifunk.net",
+		},
+		mesh = {
+			id = '666668682D6F7374',
+		},
+	},
+
+	mesh = {
+		vxlan = false,
+	},
+
+	mesh_vpn = {
+		fastd = {
+			groups = {
+				backbone = {
+					peers = {
+						gateway01 = {
+							remotes = { '"gw01-new.hamburg.freifunk.net" port 10009' },
+                            key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
+						},
+						gateway02 = {
+							remotes = { '"gw02-new.hamburg.freifunk.net" port 10009' },
+                            key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
+						},
+						gateway03 = {
+							remotes = { '"gw03-new.hamburg.freifunk.net" port 10009' },
+                            key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
+						},
+						gateway04 = {
+							remotes = { '"gw04-new.hamburg.freifunk.net" port 10010' },
+                            key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
+						},
+						gateway05 = {
+							remotes = { '"gw05-new.hamburg.freifunk.net" port 10010' },
+                            key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
+						},
+						gateway06 = {
+                            key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
+							remotes = { '"gw06-new.hamburg.freifunk.net" port 10010' },
+						},
+					},
+				},
+			},
+		},
+	},
+}
diff --git a/domains/ffhh_sued.conf b/domains/ffhh_sued.conf
new file mode 100644
index 0000000..42da4ca
--- /dev/null
+++ b/domains/ffhh_sued.conf
@@ -0,0 +1,72 @@
+{
+	domain_names = {
+		ffhh_sued = "Hamburg Süd",
+	},
+	domain_seed = '666668682D7375656448616D6275726748616D6275726748616D627572674861',
+
+	prefix4 = '10.112.64.0/19',
+	prefix6 = '2a03:2267:1::/64',
+
+	next_node = {
+		ip4 = '10.112.64.1',
+		ip6 = '2a03:2267:1::1',
+		mac = '16:41:95:40:f7:dc',
+	},
+
+	wifi24 = {
+		ap = {
+			ssid = "hamburg.freifunk.net",
+		},
+		mesh = {
+			id = '6668682D73756564',
+		},
+	},
+
+	wifi5 = {
+		ap = {
+			ssid = "hamburg.freifunk.net",
+		},
+		mesh = {
+			id = '6668682D73756564',
+		},
+	},
+
+	mesh = {
+		vxlan = false,
+	},
+
+	mesh_vpn = {
+		fastd = {
+			groups = {
+				backbone = {
+					peers = {
+						gateway01 = {
+							remotes = { '"gw01-new.hamburg.freifunk.net" port 10003' },
+                            key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
+						},
+						gateway02 = {
+                            key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
+							remotes = { '"gw02-new.hamburg.freifunk.net" port 10003' },
+						},
+						gateway03 = {
+							remotes = { '"gw03-new.hamburg.freifunk.net" port 10003' },
+                            key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
+						},
+						gateway04 = {
+							remotes = { '"gw04-new.hamburg.freifunk.net" port 10004' },
+                            key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
+						},
+						gateway05 = {
+							remotes = { '"gw05-new.hamburg.freifunk.net" port 10004' },
+                            key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
+						},
+						gateway06 = {
+							remotes = { '"gw06-new.hamburg.freifunk.net" port 10004' },
+                            key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
+						},
+					},
+				},
+			},
+		},
+	},
+}
diff --git a/domains/ffhh_west.conf b/domains/ffhh_west.conf
new file mode 100644
index 0000000..80c0c15
--- /dev/null
+++ b/domains/ffhh_west.conf
@@ -0,0 +1,72 @@
+{
+	domain_names = {
+		ffhh_west = "Hamburg West",
+	},
+	domain_seed = '666668682D7765737448616D6275726748616D6275726748616D627572674861',
+
+	prefix4 = '10.112.96.0/19',
+	prefix6 = '2a03:2267:2::/64',
+
+	next_node = {
+		ip4 = '10.112.96.1',
+		ip6 = '2a03:2267:2::1',
+		mac = '16:41:95:40:f7:dc',
+	},
+
+	wifi24 = {
+		ap = {
+			ssid = "hamburg.freifunk.net",
+		},
+		mesh = {
+			id = '6668682D77657374',
+		},
+	},
+
+	wifi5 = {
+		ap = {
+			ssid = "hamburg.freifunk.net",
+		},
+		mesh = {
+			id = '6668682D77657374',
+		},
+	},
+
+	mesh = {
+		vxlan = false,
+	},
+
+	mesh_vpn = {
+		fastd = {
+			groups = {
+				backbone = {
+					peers = {
+						gateway01 = {
+							remotes = { '"gw01-new.hamburg.freifunk.net" port 10005' },
+                            key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
+						},
+						gateway02 = {
+                            key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
+							remotes = { '"gw02-new.hamburg.freifunk.net" port 10005' },
+						},
+						gateway03 = {
+							remotes = { '"gw03-new.hamburg.freifunk.net" port 10005' },
+                            key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
+						},
+						gateway04 = {
+							remotes = { '"gw04-new.hamburg.freifunk.net" port 10006' },
+                            key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
+						},
+						gateway05 = {
+							remotes = { '"gw05-new.hamburg.freifunk.net" port 10006' },
+                            key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
+						},
+						gateway06 = {
+							remotes = { '"gw06-new.hamburg.freifunk.net" port 10006' },
+                            key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
+						},
+					},
+				},
+			},
+		},
+	},
+}
diff --git a/template/modules.erb b/modules
similarity index 100%
rename from template/modules.erb
rename to modules
diff --git a/site.conf b/site.conf
new file mode 100644
index 0000000..6de2bb8
--- /dev/null
+++ b/site.conf
@@ -0,0 +1,105 @@
+{
+	hostname_prefix = 'GibMirEinenNamen',
+	config_mode = {
+		hostname = {
+			optional = false,
+			prefill = false,
+		},
+	},
+
+	site_name = 'Freifunk Hamburg',
+	site_code = 'ffhh',
+	default_domain = 'ffhh_nowe',
+
+	opkg = {
+		lede = 'http://lede.opkg.services.ffhh/snapshots/packages/%A',
+		extra = {
+			modules = 'http://updates.hamburg.freifunk.net/all/stable/archive/modules/gluon-%GR/%S',
+		},
+	},
+
+	timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', -- Europe/Berlin
+	ntp_servers = {'1.ntp.services.ffhh','2.ntp.services.ffhh','3.ntp.services.ffhh'},
+	regdom = 'DE',
+
+	wifi24 = {
+		channel = 1,
+
+		supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
+		basic_rate = {6000, 9000, 18000, 36000, 54000},
+
+		mesh = {
+			mcast_rate = 12000,
+		},
+	},
+
+	wifi5 = {
+		channel = 44,
+		mesh = {
+			mcast_rate = 12000,
+		},
+	},
+
+	mesh_vpn = {
+		enabled = true,
+		mtu = 1312,
+		fastd = {
+			configurable = true,
+			methods = {'salsa2012+umac'},
+			groups = {
+				backbone = {
+					limit = 1,
+				},
+			},
+		},
+		bandwidth_limit = {
+			enabled = false,
+			ingress = 8096,
+			egress = 1024,
+		},
+	},
+
+	autoupdater = {
+		branch = 'stable',
+		branches = {
+			stable = {
+				name = 'stable',
+				mirrors = {'http://1.updates.services.ffhh/all/stable/sysupgrade','http://2.updates.services.ffhh/all/stable/sysupgrade'},
+				good_signatures = 2,
+				pubkeys = {
+					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
+					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
+					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
+					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
+					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
+					'961495a04512e5ba1843fd3c216d8af6ef2fdb19f93055142803e2da26d670b9', -- alexander
+					'ed6278f168f0382adf4f058cb9c31d8f1145abb968a8626045de7d6d87a0be40', -- olli
+				},
+			},
+			beta = {
+				name = 'beta',
+				mirrors = {'http://1.updates.services.ffhh/all/beta/sysupgrade','http://2.updates.services.ffhh/all/beta/sysupgrade'},
+				good_signatures = 2,
+				pubkeys = {
+					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
+					'3f0fc50d4e5c893f9f58f98874bd21080b93c28ff5e4d4946352cada1b4e6441', -- andre
+					'1d37eacbd70f72730b1f5aba246a6a8eab100e2d45dda0163d9ad827f70f88d4', -- gernot
+					'bd5a70d4c3df30eaa860d615c0e0526b0dda5bc60c09c20972bce4ffa7512659', -- bjoern
+					'd9992853c0fe1a2e983cc222b6bd26e70d4fb2a53862ac099144e9e8142238d0', -- daniel
+					'961495a04512e5ba1843fd3c216d8af6ef2fdb19f93055142803e2da26d670b9', -- alexander
+					'ed6278f168f0382adf4f058cb9c31d8f1145abb968a8626045de7d6d87a0be40', -- olli
+				},
+			},
+			experimental = {
+				name = 'experimental',
+				mirrors = {'http://1.updates.services.ffhh/all/experimental/sysupgrade','http://2.updates.services.ffhh/all/experimental/sysupgrade'},
+				good_signatures = 1,
+				pubkeys = {
+					'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', -- builder1/2
+				},
+			},
+		},
+	},
+
+	poe_passthrough = false,
+}
diff --git a/template/site.mk.erb b/site.mk
similarity index 83%
rename from template/site.mk.erb
rename to site.mk
index 2b4b7de..3c5fb5d 100644
--- a/template/site.mk.erb
+++ b/site.mk
@@ -1,3 +1,5 @@
+GLUON_MULTIDOMAIN := 1
+
 GLUON_SITE_PACKAGES := -gluon-config-mode-geo-location \
 	-gluon-config-mode-contact-info \
 	gluon-ebtables-source-filter \
@@ -8,6 +10,7 @@ GLUON_SITE_PACKAGES := -gluon-config-mode-geo-location \
 
 GLUON_FEATURES := \
 	autoupdater \
+	config-mode-domain-select \
 	ebtables-filter-multicast \
 	ebtables-filter-ra-dhcp \
 	ebtables-limit-arp \
@@ -37,14 +40,7 @@ GLUON_SITE_PACKAGES += \
     $(EXTRA_SOFTWARE_TOOLS_01)
 endif
 
-
-
-DEFAULT_GLUON_RELEASE := <%= gluon_release %>
-
-# Allow overriding the release number from the command line
-GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
-
-GLUON_PRIORITY ?= 0
+GLUON_PRIORITY ?= 7
 
 # Region code required for some images; supported values: us eu
 GLUON_REGION ?= eu
diff --git a/template/info.erb b/template/info.erb
deleted file mode 100644
index 685d4a9..0000000
--- a/template/info.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-GLUON_RELEASE="<%= gluon_release %>"
-GLUON_BRANCH="<%= gluon_branch %>"
-targets="<%= gluon_targets.join(" ") %>"
diff --git a/template/site.conf.erb b/template/site.conf.erb
deleted file mode 100644
index cb8c9c0..0000000
--- a/template/site.conf.erb
+++ /dev/null
@@ -1,128 +0,0 @@
-{
-	hostname_prefix = 'GibMirEinenNamen',
-	config_mode = {
-		hostname = {
-			optional = false,
-			prefill = false,
-		},
-	},
-	site_name = '<%= site_name %>',
-	site_code = '<%= site_code %>',
-	domain_seed = '<%= (site_code + ("Hamburg" * 7))[0..31].each_byte.map { |b| b.to_s(16) }.join.upcase %>',
-
-	opkg = {
-		lede = 'http://lede.opkg.services.ffhh/snapshots/packages/%A',
-		extra = {
-			modules = 'http://updates.hamburg.freifunk.net/%GS/stable/archive/modules/gluon-%GS-%GR/%S',
-		},
-	},
-
-	prefix4 = '<%= prefix4 %>',
-	prefix6 = '<%= prefix6 %>',
-
-	timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', -- Europe/Berlin
-	ntp_servers = {'1.ntp.services.ffhh','2.ntp.services.ffhh','3.ntp.services.ffhh'},
-	regdom = 'DE',
-
-	mesh = {
-		vxlan = false,
-	},
-
-	wifi24 = {
-		channel = 1,
-
-		supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
-		basic_rate = {6000, 9000, 18000, 36000, 54000},
-
-		ap = {
-			ssid = 'hamburg.freifunk.net',
-		},
-		mesh = {
-			id = '<%= ("00000000" + site_code)[-8..-1].each_byte.map { |b| b.to_s(16) }.join.upcase %>',
-			mcast_rate = 12000,
-		},
-	},
-
-	wifi5 = {
-		channel = 44,
-		ap = {
-			ssid = 'hamburg.freifunk.net',
-		},
-		mesh = {
-			id = '<%= ("00000000" + site_code)[-8..-1].each_byte.map { |b| b.to_s(16) }.join.upcase %>',
-			mcast_rate = 12000,
-		},
-	},
-
-	next_node = {
-		ip4 = '<%= next_node_ipv4 %>',
-		ip6 = '<%= next_node_ipv6 %>',
-
-		mac = '16:41:95:40:f7:dc',
-	},
-
-	mesh_vpn = {
-		enabled = true,
-		mtu = <%= mtu %>,
-		fastd = {
-			configurable = true,
-			methods = {'salsa2012+umac'},
-			groups = {
-				backbone = {
-					limit = 1,
-					peers = {
-<% gateways.each_pair do | name, gw_data | -%>
-						<%= name %> = {
-							key = '<%= gw_data['key'] %>',
-							remotes = { '<%= gw_data['remotes'].join("', '") %>' },
-						},
-<% end -%>
-					},
-				},
-			},
-			},
-		bandwidth_limit = {
-			enabled = false,
-			ingress = 8096,
-			egress = 1024,
-		},
-	},
-
-	autoupdater = {
-		branch = '<%= gluon_branch %>',
-		branches = {
-			stable = {
-				name = 'stable',
-				mirrors = {'http://1.updates.services.ffhh/<%= site_code %>/stable/sysupgrade','http://2.updates.services.ffhh/<%= site_code %>/stable/sysupgrade'},
-				good_signatures = 2,
-				pubkeys = {
-<% signing_keys.each do | key | -%>
-					'<%= key %>',
-<% end -%>
-				},
-			},
-			beta = {
-				name = 'beta',
-				mirrors = {'http://1.updates.services.ffhh/<%= site_code %>/beta/sysupgrade','http://2.updates.services.ffhh/<%= site_code %>/beta/sysupgrade'},
-				good_signatures = 2,
-				pubkeys = {
-<% signing_keys.each do | key | -%>
-					'<%= key %>',
-<% end -%>
-				},
-			},
-			experimental = {
-				name = 'experimental',
-				mirrors = {'http://1.updates.services.ffhh/<%= site_code %>/experimental/sysupgrade','http://2.updates.services.ffhh/<%= site_code %>/experimental/sysupgrade'},
-				good_signatures = 1,
-				pubkeys = {
-<% signing_keys_experimental.each do | key | -%>
-					'<%= key %>',
-<% end -%>
-				},
-			},
-		},
-	},
-
-	poe_passthrough = false,
-}

From 791e08de22e9c79b38dee971a563be1b5aa21908 Mon Sep 17 00:00:00 2001
From: Matthias Wientapper <m.wientapper@gmx.de>
Date: Tue, 9 Oct 2018 23:15:30 +0200
Subject: [PATCH 072/135] =?UTF-8?q?Text=20f=C3=BCr=20Multi-Domain=20Konfig?=
 =?UTF-8?q?urationsseite?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 i18n/de.po | 8 ++++++++
 i18n/en.po | 9 +++++++++
 2 files changed, 17 insertions(+)

diff --git a/i18n/de.po b/i18n/de.po
index 9119cd8..58dfb28 100644
--- a/i18n/de.po
+++ b/i18n/de.po
@@ -16,6 +16,14 @@ msgstr ""
 "Freifunk-Knoten. Fülle das folgende Formular deinen Vorstellungen "
 "entsprechend aus und sende es ab. "
 "Den unten anzugebenden Knotennamen kannst du beliebig wählen. Denke Dir also etwas schönes aus. Er ist der Name des Knotens im Netzwerk und hat nichts mit dem ausgestrahlten Netzwerknamen (SSID) zu tun. Letzterer ist immer hamburg.freifunk.net."
+ 
+msgid "gluon-config-mode:domain"
+msgstr "Domäne" 
+
+msgid "gluon-config-mode:domain-select"
+msgstr ""
+"Hier kannst du Domäne auswählen, in dem sich dein Knoten befindet. "
+"Bitte bedenke, dass sich dein Knoten nur mit Routern in der gleichen Domäne verbinden kann."
 
 msgid "gluon-config-mode:pubkey"
 msgstr ""
diff --git a/i18n/en.po b/i18n/en.po
index 124cfba..f64501f 100644
--- a/i18n/en.po
+++ b/i18n/en.po
@@ -19,6 +19,15 @@ msgstr ""
 "the network and has nothing to do with the broadcast network name (SSID). "
 "The latter is always hamburg.freifunk.net."
 
+msgid "gluon-config-mode:domain"
+msgstr "Domain" 
+
+msgid "gluon-config-mode:domain-select"
+msgstr ""
+"Here you have the possibility of selecting the mesh domain in which your node "
+"is placed. Please keep in mind that your router only connects with the nodes "
+"of the selected domain"
+
 msgid "gluon-config-mode:pubkey"
 msgstr ""
 "<p>This is the public key for your Freifunk node. You can only "

From d1ff8a93eab322a57c4e5d5f3c2d30a70a8b867e Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 4 Nov 2018 21:59:52 +0100
Subject: [PATCH 073/135] Variable was renamed to GLUON_WLAN_MESH and 11s is
 the default, so just remove the variable

---
 site.mk | 2 --
 1 file changed, 2 deletions(-)

diff --git a/site.mk b/site.mk
index 3c5fb5d..76cc687 100644
--- a/site.mk
+++ b/site.mk
@@ -45,6 +45,4 @@ GLUON_PRIORITY ?= 7
 # Region code required for some images; supported values: us eu
 GLUON_REGION ?= eu
 
-GLUON_ATH10K_MESH ?= 11s
-
 GLUON_LANGS ?= en de

From b8cdd470595d37405925b967859b6eac22c1f438 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 30 Nov 2018 21:49:29 +0100
Subject: [PATCH 074/135] Update README.md for v2018.1.3.0

(cherry picked from commit eb41a5a3cd774be058351d33b76cf87470c77b8f)
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index be0254a..45a61af 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2018.1.3.0: site-ffhh: v2018.1.3.0, gluon: v2018.1.3
 - v2018.1.1.0: site-ffhh: v2018.1.1.0, gluon: v2018.1.1
 - v2018.1.0.0: site-ffhh: v2018.1.0.0, gluon: v2018.1 (never rolled out due to issues with the auto updater in gluon)
 - 0.9.2: site-ffhh: v0.9.2, gluon: v2017.1.8

From f86bb6ca0c068eb915a4cb456e6725dd756057ab Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 21 Dec 2018 20:26:32 +0100
Subject: [PATCH 075/135] bump version numbers to gluon v2018.1.4

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 45a61af..94d5584 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2018.1.4.0: site-ffhh: v2018.1.4.0, gluon: v2018.1.4
 - v2018.1.3.0: site-ffhh: v2018.1.3.0, gluon: v2018.1.3
 - v2018.1.1.0: site-ffhh: v2018.1.1.0, gluon: v2018.1.1
 - v2018.1.0.0: site-ffhh: v2018.1.0.0, gluon: v2018.1 (never rolled out due to issues with the auto updater in gluon)

From 680e7a2501fd9fb538e8d4dbc39b64ab52a6acf5 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 1 Feb 2019 21:17:33 +0100
Subject: [PATCH 076/135] Fix Version and update URL for autoupdate

---
 build.conf | 2 +-
 site.conf  | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/build.conf b/build.conf
index 84afa92..f3b8466 100644
--- a/build.conf
+++ b/build.conf
@@ -1,3 +1,3 @@
-GLUON_RELEASE="master~201810011"
+GLUON_RELEASE="v2018.1.4.x-multi"
 GLUON_BRANCH="experimental"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 ipq40xx ipq806x mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
diff --git a/site.conf b/site.conf
index 6de2bb8..f598cdd 100644
--- a/site.conf
+++ b/site.conf
@@ -14,7 +14,7 @@
 	opkg = {
 		lede = 'http://lede.opkg.services.ffhh/snapshots/packages/%A',
 		extra = {
-			modules = 'http://updates.hamburg.freifunk.net/all/stable/archive/modules/gluon-%GR/%S',
+			modules = 'http://updates.hamburg.freifunk.net/multi/stable/archive/modules/gluon-%GR/%S',
 		},
 	},
 
@@ -64,7 +64,7 @@
 		branches = {
 			stable = {
 				name = 'stable',
-				mirrors = {'http://1.updates.services.ffhh/all/stable/sysupgrade','http://2.updates.services.ffhh/all/stable/sysupgrade'},
+				mirrors = {'http://1.updates.services.ffhh/multi/stable/sysupgrade','http://2.updates.services.ffhh/multi/stable/sysupgrade'},
 				good_signatures = 2,
 				pubkeys = {
 					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
@@ -78,7 +78,7 @@
 			},
 			beta = {
 				name = 'beta',
-				mirrors = {'http://1.updates.services.ffhh/all/beta/sysupgrade','http://2.updates.services.ffhh/all/beta/sysupgrade'},
+				mirrors = {'http://1.updates.services.ffhh/multi/beta/sysupgrade','http://2.updates.services.ffhh/multi/beta/sysupgrade'},
 				good_signatures = 2,
 				pubkeys = {
 					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
@@ -92,7 +92,7 @@
 			},
 			experimental = {
 				name = 'experimental',
-				mirrors = {'http://1.updates.services.ffhh/all/experimental/sysupgrade','http://2.updates.services.ffhh/all/experimental/sysupgrade'},
+				mirrors = {'http://1.updates.services.ffhh/multi/experimental/sysupgrade','http://2.updates.services.ffhh/multi/experimental/sysupgrade'},
 				good_signatures = 1,
 				pubkeys = {
 					'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', -- builder1/2

From 35d976d1363fb2f9035d0b0cb7b0f4fd809b74b0 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 4 Feb 2019 22:28:09 +0100
Subject: [PATCH 077/135] =?UTF-8?q?build.sh=20bugfix=20f=C3=BCr=20experime?=
 =?UTF-8?q?ntal?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 build.sh | 1 +
 1 file changed, 1 insertion(+)

diff --git a/build.sh b/build.sh
index 5a4bbe6..5ac1e42 100755
--- a/build.sh
+++ b/build.sh
@@ -69,6 +69,7 @@ announce FFHH SITE PATH: $site_path >&2
 
 pushd $site_path
 . ./build.conf
+[ "${GLUON_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
 export GLUON_RELEASE
 export GLUON_BRANCH
 # if a list of build targets has been supplied, only build those

From 40b96f1213c36bd7234e69715317757bde963c8a Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 8 Feb 2019 15:34:43 +0100
Subject: [PATCH 078/135] Version bump v2018.1.4.2

---
 build.conf | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/build.conf b/build.conf
index f3b8466..3af16cb 100644
--- a/build.conf
+++ b/build.conf
@@ -1,3 +1,3 @@
-GLUON_RELEASE="v2018.1.4.x-multi"
-GLUON_BRANCH="experimental"
+GLUON_RELEASE="v2018.1.4.2"
+GLUON_BRANCH="stable"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 ipq40xx ipq806x mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"

From bc84c03fc4d92bc10fb3ab5e454cb4d6519964eb Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 8 Feb 2019 20:56:16 +0100
Subject: [PATCH 079/135] Update readme for single domain firmware

---
 README.md | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index 94d5584..6eb52b5 100644
--- a/README.md
+++ b/README.md
@@ -5,12 +5,8 @@
 	$ git clone -b SITE_VERSION https://github.com/freifunkhamburg/site-ffhh.git
 	$ cd site-ffhh
 
-	To build all domains into the subdirectory firmware:
+	To build the firmware into the subdirectory firmware:
 	$ ./build.sh -g ../gluon -o firmware
-	To build a specific domain (for example ffhh-nowe) into the subdirectory firmware:
-	$ ./build.sh -g ../gluon -l ffhh-nowe -o firmware
-	To build two specific domains (for example ffhh-nowe and ffhh-sued) into the subdirectory firmware:
-	$ ./build.sh -g ../gluon -l ffhh-nowe,ffhh-sued -o firmware
 
 	The build.sh supports the argument -b if you wish to also build firmware images marked as broken in gluon.
 
@@ -19,6 +15,8 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2018.1.4.2: site-ffhh: v2018.1.4.2, gluon: v2018.1.4
+- v2018.1.4.1: site-ffhh: v2018.1.4.1, gluon: v2018.1.4
 - v2018.1.4.0: site-ffhh: v2018.1.4.0, gluon: v2018.1.4
 - v2018.1.3.0: site-ffhh: v2018.1.3.0, gluon: v2018.1.3
 - v2018.1.1.0: site-ffhh: v2018.1.1.0, gluon: v2018.1.1

From 6201fe4f0622c97d3ac13a98856334821942ce77 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 8 Feb 2019 20:27:13 +0100
Subject: [PATCH 080/135] Fix package directory and path for the autoupdater

---
 site.conf | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/site.conf b/site.conf
index f598cdd..da5ffc1 100644
--- a/site.conf
+++ b/site.conf
@@ -14,7 +14,7 @@
 	opkg = {
 		lede = 'http://lede.opkg.services.ffhh/snapshots/packages/%A',
 		extra = {
-			modules = 'http://updates.hamburg.freifunk.net/multi/stable/archive/modules/gluon-%GR/%S',
+			modules = 'http://updates.hamburg.freifunk.net/multi/archive/%GR/packages/gluon-%GS-%GR/%S',
 		},
 	},
 
@@ -64,7 +64,7 @@
 		branches = {
 			stable = {
 				name = 'stable',
-				mirrors = {'http://1.updates.services.ffhh/multi/stable/sysupgrade','http://2.updates.services.ffhh/multi/stable/sysupgrade'},
+				mirrors = {'http://1.updates.services.ffhh/multi/stable/images/sysupgrade','http://2.updates.services.ffhh/multi/stable/images/sysupgrade'},
 				good_signatures = 2,
 				pubkeys = {
 					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
@@ -78,7 +78,7 @@
 			},
 			beta = {
 				name = 'beta',
-				mirrors = {'http://1.updates.services.ffhh/multi/beta/sysupgrade','http://2.updates.services.ffhh/multi/beta/sysupgrade'},
+				mirrors = {'http://1.updates.services.ffhh/multi/stable/images/sysupgrade','http://2.updates.services.ffhh/multi/stable/images/sysupgrade'},
 				good_signatures = 2,
 				pubkeys = {
 					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
@@ -92,7 +92,7 @@
 			},
 			experimental = {
 				name = 'experimental',
-				mirrors = {'http://1.updates.services.ffhh/multi/experimental/sysupgrade','http://2.updates.services.ffhh/multi/experimental/sysupgrade'},
+				mirrors = {'http://1.updates.services.ffhh/multi/experimental/images/sysupgrade','http://2.updates.services.ffhh/multi/experimental/images/sysupgrade'},
 				good_signatures = 1,
 				pubkeys = {
 					'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', -- builder1/2

From 4914976cda08a8355409564fac1ed29fb1891b0a Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 8 Feb 2019 21:48:18 +0100
Subject: [PATCH 081/135] Update targets

---
 build.conf | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.conf b/build.conf
index 3af16cb..84056db 100644
--- a/build.conf
+++ b/build.conf
@@ -1,3 +1,3 @@
 GLUON_RELEASE="v2018.1.4.2"
 GLUON_BRANCH="stable"
-targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 ipq40xx ipq806x mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
+targets="ar71xx-generic ar71xx-mikrotik ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 brcm2708-bcm2710 ipq806x mpc85xx-generic mvebu ramips-mt7620 ramips-mt7621 ramips-mt7628 ramips-rt305x sunxi x86-64 x86-generic x86-geode"

From feb4f63df7ecb3ee45e2ecc430187b6234a02fd8 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 10 Feb 2019 17:23:58 +0100
Subject: [PATCH 082/135] Move update servers away from .ffhh domain

---
 site.conf | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/site.conf b/site.conf
index da5ffc1..c8c0822 100644
--- a/site.conf
+++ b/site.conf
@@ -64,7 +64,7 @@
 		branches = {
 			stable = {
 				name = 'stable',
-				mirrors = {'http://1.updates.services.ffhh/multi/stable/images/sysupgrade','http://2.updates.services.ffhh/multi/stable/images/sysupgrade'},
+				mirrors = {'http://updates-a.hamburg.freifunk.net/multi/stable/images/sysupgrade','http://updates-b.hamburg.freifunk.net/multi/stable/images/sysupgrade'},
 				good_signatures = 2,
 				pubkeys = {
 					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
@@ -78,7 +78,7 @@
 			},
 			beta = {
 				name = 'beta',
-				mirrors = {'http://1.updates.services.ffhh/multi/stable/images/sysupgrade','http://2.updates.services.ffhh/multi/stable/images/sysupgrade'},
+				mirrors = {'http://updates-a.hamburg.freifunk.net/multi/stable/images/sysupgrade','http://updates-b.hamburg.freifunk.net/multi/stable/images/sysupgrade'},
 				good_signatures = 2,
 				pubkeys = {
 					'ef73bc52b929fd11efce9a5c8f0b5463f1766bb995c8a0b3b6bcd7ba45b8b1e6', -- leo
@@ -92,7 +92,7 @@
 			},
 			experimental = {
 				name = 'experimental',
-				mirrors = {'http://1.updates.services.ffhh/multi/experimental/images/sysupgrade','http://2.updates.services.ffhh/multi/experimental/images/sysupgrade'},
+				mirrors = {'http://updates-a.hamburg.freifunk.net/multi/experimental/images/sysupgrade','http://updates-b.hamburg.freifunk.net/multi/experimental/images/sysupgrade'},
 				good_signatures = 1,
 				pubkeys = {
 					'1a0112fe489860068480c611c5dc56196c2f1a645db651ea2ed19ae0f0e8e1d1', -- builder1/2

From 7bbd9ad6218da8a221a8284534dafc1e44908f97 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 18 Feb 2019 20:45:31 +0100
Subject: [PATCH 083/135] Fix stable target build list

---
 build.conf | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.conf b/build.conf
index 84056db..d03c1a4 100644
--- a/build.conf
+++ b/build.conf
@@ -1,3 +1,3 @@
 GLUON_RELEASE="v2018.1.4.2"
 GLUON_BRANCH="stable"
-targets="ar71xx-generic ar71xx-mikrotik ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 brcm2708-bcm2710 ipq806x mpc85xx-generic mvebu ramips-mt7620 ramips-mt7621 ramips-mt7628 ramips-rt305x sunxi x86-64 x86-generic x86-geode"
+targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt7628 ramips-rt305x sunxi x86-64 x86-generic x86-geode"

From 001a6b6a6b996e72e4e86678e17876d96149c32f Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 22 Mar 2019 20:56:30 +0100
Subject: [PATCH 084/135] generate images.list after building the firmware

---
 build.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/build.sh b/build.sh
index 5ac1e42..d9360f1 100755
--- a/build.sh
+++ b/build.sh
@@ -96,6 +96,8 @@ for t in $targets; do
 	announce Starting build for $t... >&2
 	make -j$(nproc) GLUON_TARGET=$t $verbose
 done
+# Generate the images.list
+( cd "${GLUON_OUTPUTDIR}/images" && find -type f ! -iname '*.manifest' ! -iname images.list | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )
 announce Building manifest...
 make manifest
 if [ -n "${signature}" ]; then

From 4fb0b6769a1ea386ccdb1a8415f3535c7d9858e4 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 12 Apr 2019 19:59:34 +0200
Subject: [PATCH 085/135] fix the list of the firmware files in images.list to
 include symlinks

---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index d9360f1..5008580 100755
--- a/build.sh
+++ b/build.sh
@@ -97,7 +97,7 @@ for t in $targets; do
 	make -j$(nproc) GLUON_TARGET=$t $verbose
 done
 # Generate the images.list
-( cd "${GLUON_OUTPUTDIR}/images" && find -type f ! -iname '*.manifest' ! -iname images.list | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )
+( cd "${GLUON_OUTPUTDIR}/images" && ( find -type f ! -iname '*.manifest' ! -iname images.list; find -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )
 announce Building manifest...
 make manifest
 if [ -n "${signature}" ]; then

From 67ee1300b838f6e4ebc35bc93b6cc318bf9754af Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 26 Apr 2019 19:47:12 +0200
Subject: [PATCH 086/135] Bump version numbers for v2018.2.1.0

---
 README.md  | 1 +
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6eb52b5..1f20ab2 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2018.2.1.0: site-ffhh: v2018.2.1.0, gluon: v2018.2.1
 - v2018.1.4.2: site-ffhh: v2018.1.4.2, gluon: v2018.1.4
 - v2018.1.4.1: site-ffhh: v2018.1.4.1, gluon: v2018.1.4
 - v2018.1.4.0: site-ffhh: v2018.1.4.0, gluon: v2018.1.4
diff --git a/build.conf b/build.conf
index d03c1a4..79f9521 100644
--- a/build.conf
+++ b/build.conf
@@ -1,3 +1,3 @@
-GLUON_RELEASE="v2018.1.4.2"
+GLUON_RELEASE="v2018.2.1.0"
 GLUON_BRANCH="stable"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt7628 ramips-rt305x sunxi x86-64 x86-generic x86-geode"

From 7c9f32db1ebefca9cd05ebd208e64e2f7eab3d53 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 26 Apr 2019 22:20:13 +0200
Subject: [PATCH 087/135] rename target ramips-mt7628 to ramips-mt76x8

---
 build.conf | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.conf b/build.conf
index 79f9521..050ec2f 100644
--- a/build.conf
+++ b/build.conf
@@ -1,3 +1,3 @@
 GLUON_RELEASE="v2018.2.1.0"
 GLUON_BRANCH="stable"
-targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt7628 ramips-rt305x sunxi x86-64 x86-generic x86-geode"
+targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi x86-64 x86-generic x86-geode"

From 1dc6507e8cc3fe29b35c85c1fa7dbd24615b96d0 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sat, 27 Apr 2019 22:58:53 +0200
Subject: [PATCH 088/135] rename target sunxi to sunxi-cortexa7

---
 build.conf | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.conf b/build.conf
index 050ec2f..5b9c9c4 100644
--- a/build.conf
+++ b/build.conf
@@ -1,3 +1,3 @@
 GLUON_RELEASE="v2018.2.1.0"
 GLUON_BRANCH="stable"
-targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi x86-64 x86-generic x86-geode"
+targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"

From 12e8b053f5d7e1a133d892bb8d2ffb1e18423d5c Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 26 May 2019 22:14:30 +0200
Subject: [PATCH 089/135] fix some (not all) warnings that shellcheck displays

---
 build.sh | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/build.sh b/build.sh
index 5008580..90d36d1 100755
--- a/build.sh
+++ b/build.sh
@@ -2,7 +2,7 @@
 set -e
 
 function announce () {
-	echo '############################' $* >&2
+	echo '############################' "$@" >&2
 }
 function usage () {
 	echo "Usage: $0 -g GLUON_PATH" >&2
@@ -60,21 +60,21 @@ if [ -z "$gluon_path" ]; then
 	exit 1
 fi
 
-gluon_path=$(realpath $gluon_path)
-gluon_out=$(realpath $gluon_out)
-site_path=$(realpath $(dirname $BASH_SOURCE))
+gluon_path=$(realpath "$gluon_path")
+gluon_out=$(realpath "$gluon_out")
+site_path=$(realpath "$(dirname "$BASH_SOURCE")")
 
-announce GLUON: $gluon_path >&2
-announce FFHH SITE PATH: $site_path >&2
+announce GLUON: "$gluon_path" >&2
+announce FFHH SITE PATH: "$site_path" >&2
 
-pushd $site_path
+pushd "$site_path"
 . ./build.conf
 [ "${GLUON_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
 export GLUON_RELEASE
 export GLUON_BRANCH
 # if a list of build targets has been supplied, only build those
 targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"
-announce The following targets will be generated: $targets >&2
+announce "The following targets will be generated: $targets" >&2
 popd
 
 pushd "${gluon_path}"
@@ -85,16 +85,16 @@ rm -rf "${GLUON_OUTPUTDIR}"
 mkdir -p "${GLUON_OUTPUTDIR}"
 make update
 # Try to install patches. I wasn't able to figure out how patches in gluon/site/patches work.
-for p in ${site_path}/patches/*.patch; do
-	if [ -e "$p" -a ! -f "${gluon_path}/${p##*/}" ]; then
-		announce Installing patch $p
-		patch -p1 < $p
+for p in "${site_path}"/patches/*.patch; do
+	if [ -e "$p" ] && [ ! -f "${gluon_path}/${p##*/}" ]; then
+		announce "Installing patch $p"
+		patch -p1 < "$p"
 		touch "${gluon_path}/${p##*/}"
 	fi
 done
 for t in $targets; do
-	announce Starting build for $t... >&2
-	make -j$(nproc) GLUON_TARGET=$t $verbose
+	announce "Starting build for $t..." >&2
+	make "-j$(nproc)" "GLUON_TARGET=$t" "$verbose"
 done
 # Generate the images.list
 ( cd "${GLUON_OUTPUTDIR}/images" && ( find -type f ! -iname '*.manifest' ! -iname images.list; find -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )

From 256e9dfe98acfe801800b10d98e01b10d5e58bea Mon Sep 17 00:00:00 2001
From: bobcanthelpyou <bob@canthelpyou.com>
Date: Tue, 18 Jun 2019 22:42:27 +0200
Subject: [PATCH 090/135] Remove lede opkg mirror

---
 site.conf | 1 -
 1 file changed, 1 deletion(-)

diff --git a/site.conf b/site.conf
index c8c0822..4f76331 100644
--- a/site.conf
+++ b/site.conf
@@ -12,7 +12,6 @@
 	default_domain = 'ffhh_nowe',
 
 	opkg = {
-		lede = 'http://lede.opkg.services.ffhh/snapshots/packages/%A',
 		extra = {
 			modules = 'http://updates.hamburg.freifunk.net/multi/archive/%GR/packages/gluon-%GS-%GR/%S',
 		},

From 23952fdaf5b10d53c881b09b12c430459cbfc75e Mon Sep 17 00:00:00 2001
From: bobcanthelpyou <bob@canthelpyou.com>
Date: Sun, 16 Jun 2019 23:38:13 +0200
Subject: [PATCH 091/135] remove obsolete wifi24 rates settings

---
 site.conf | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/site.conf b/site.conf
index 4f76331..c8ea474 100644
--- a/site.conf
+++ b/site.conf
@@ -24,9 +24,6 @@
 	wifi24 = {
 		channel = 1,
 
-		supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
-		basic_rate = {6000, 9000, 18000, 36000, 54000},
-
 		mesh = {
 			mcast_rate = 12000,
 		},

From bc82d9d6b75c992ae08a0683e4dd776d9f68dc8b Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 5 Jul 2019 21:15:35 +0200
Subject: [PATCH 092/135] Add GLUON_DEPRECATED variable

---
 site.mk | 1 +
 1 file changed, 1 insertion(+)

diff --git a/site.mk b/site.mk
index 76cc687..efd1464 100644
--- a/site.mk
+++ b/site.mk
@@ -1,4 +1,5 @@
 GLUON_MULTIDOMAIN := 1
+GLUON_DEPRECATED := upgrade
 
 GLUON_SITE_PACKAGES := -gluon-config-mode-geo-location \
 	-gluon-config-mode-contact-info \

From 9eadb86c82474ab9aa3d1278cc25daf7863a3667 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 16 Aug 2019 22:44:43 +0200
Subject: [PATCH 093/135] build.sh: automatically detect available targets and
 build them all

---
 build.sh | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/build.sh b/build.sh
index 90d36d1..768a212 100755
--- a/build.sh
+++ b/build.sh
@@ -8,6 +8,7 @@ function usage () {
 	echo "Usage: $0 -g GLUON_PATH" >&2
 	echo "       -g GLUON_PATH   Path to a checkout of the gluon repository." >&2
 	echo "       -t TARGETS      Comma separated list of gluon targets to build" >&2
+	echo "       -a              Automatically detect and build all targets." >&2
 	echo "       -o OUT_PATH     Path to the firmware output directory. Default: ${gluon_out}" >&2
 	echo "       -s SIGNATURE    Sign firmware with signature" >&2
 	echo "       -b              BROKEN=1" >&2
@@ -20,6 +21,9 @@ gluon_out="${HOME}/firmware"
 
 while [ $# -gt 0 ]; do
 	case "$1" in
+		-a)
+			auto_targets=1
+			;;
 		-g)
 			gluon_path="$2"
 			shift
@@ -72,15 +76,20 @@ pushd "$site_path"
 [ "${GLUON_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
 export GLUON_RELEASE
 export GLUON_BRANCH
-# if a list of build targets has been supplied, only build those
-targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"
+export GLUON_SITEDIR="${site_path}"
+export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}"
+pushd "${gluon_path}"
+if [ "$auto_targets" = "1" ]; then
+	# detect available targets
+	targets="$(make | awk '$1 == "*" {print $2}' | sort | xargs)"
+else
+	# if a list of build targets has been supplied, only build those
+	targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"
+fi
 announce "The following targets will be generated: $targets" >&2
 popd
 
-pushd "${gluon_path}"
 announce Starting make update...
-export GLUON_SITEDIR="${site_path}"
-export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}"
 rm -rf "${GLUON_OUTPUTDIR}"
 mkdir -p "${GLUON_OUTPUTDIR}"
 make update

From e763875644aabae083fa704d841b36b6e451791c Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 16 Aug 2019 22:53:20 +0200
Subject: [PATCH 094/135] build.sh: fix the ordering of the steps

---
 build.sh | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/build.sh b/build.sh
index 768a212..b724efc 100755
--- a/build.sh
+++ b/build.sh
@@ -78,17 +78,9 @@ export GLUON_RELEASE
 export GLUON_BRANCH
 export GLUON_SITEDIR="${site_path}"
 export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}"
-pushd "${gluon_path}"
-if [ "$auto_targets" = "1" ]; then
-	# detect available targets
-	targets="$(make | awk '$1 == "*" {print $2}' | sort | xargs)"
-else
-	# if a list of build targets has been supplied, only build those
-	targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"
-fi
-announce "The following targets will be generated: $targets" >&2
 popd
 
+pushd "${gluon_path}"
 announce Starting make update...
 rm -rf "${GLUON_OUTPUTDIR}"
 mkdir -p "${GLUON_OUTPUTDIR}"
@@ -101,6 +93,16 @@ for p in "${site_path}"/patches/*.patch; do
 		touch "${gluon_path}/${p##*/}"
 	fi
 done
+
+if [ "$auto_targets" = "1" ]; then
+	# detect available targets
+	targets="$(make | awk '$1 == "*" {print $2}' | sort | xargs)"
+else
+	# if a list of build targets has been supplied, only build those
+	targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"
+fi
+announce "The following targets will be generated: $targets" >&2
+
 for t in $targets; do
 	announce "Starting build for $t..." >&2
 	make "-j$(nproc)" "GLUON_TARGET=$t" "$verbose"

From f4b45ff5f7789afc631b73fb9ba7e6cf61a8f61e Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 16 Aug 2019 22:58:56 +0200
Subject: [PATCH 095/135] build.sh: the make that lists the targets can run a
 long time, copy the output to /dev/stderr

---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index b724efc..820790a 100755
--- a/build.sh
+++ b/build.sh
@@ -96,7 +96,7 @@ done
 
 if [ "$auto_targets" = "1" ]; then
 	# detect available targets
-	targets="$(make | awk '$1 == "*" {print $2}' | sort | xargs)"
+	targets="$(make | tee /dev/stderr | awk '$1 == "*" {print $2}' | sort | xargs)"
 else
 	# if a list of build targets has been supplied, only build those
 	targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"

From 44e04d3d9c7f7a435e7740aad3c0d023a54c2079 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 16 Aug 2019 23:01:45 +0200
Subject: [PATCH 096/135] build.sh: dont build everything while detecting the
 targets...

---
 build.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index 820790a..8ea0fc2 100755
--- a/build.sh
+++ b/build.sh
@@ -96,7 +96,8 @@ done
 
 if [ "$auto_targets" = "1" ]; then
 	# detect available targets
-	targets="$(make | tee /dev/stderr | awk '$1 == "*" {print $2}' | sort | xargs)"
+	make
+	targets="$(make | awk '$1 == "*" {print $2}' | sort | xargs)"
 else
 	# if a list of build targets has been supplied, only build those
 	targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"

From fbb4b5dc780c33a28891af5f07993513807b09c2 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 16 Aug 2019 23:23:55 +0200
Subject: [PATCH 097/135] build.sh: use list-targets make target

---
 build.sh | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/build.sh b/build.sh
index 8ea0fc2..13e874b 100755
--- a/build.sh
+++ b/build.sh
@@ -96,8 +96,7 @@ done
 
 if [ "$auto_targets" = "1" ]; then
 	# detect available targets
-	make
-	targets="$(make | awk '$1 == "*" {print $2}' | sort | xargs)"
+	targets="$(make list-targets | sort | xargs)"
 else
 	# if a list of build targets has been supplied, only build those
 	targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"

From cfebeb94b5b044dc1ae38529482cb0833a2e6838 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 18 Aug 2019 13:15:52 +0200
Subject: [PATCH 098/135] build.sh: some cleanup with shellcheck

---
 build.sh | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index 13e874b..ac89af9 100755
--- a/build.sh
+++ b/build.sh
@@ -72,6 +72,7 @@ announce GLUON: "$gluon_path" >&2
 announce FFHH SITE PATH: "$site_path" >&2
 
 pushd "$site_path"
+# shellcheck source=/dev/null
 . ./build.conf
 [ "${GLUON_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
 export GLUON_RELEASE
@@ -108,7 +109,8 @@ for t in $targets; do
 	make "-j$(nproc)" "GLUON_TARGET=$t" "$verbose"
 done
 # Generate the images.list
-( cd "${GLUON_OUTPUTDIR}/images" && ( find -type f ! -iname '*.manifest' ! -iname images.list; find -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )
+# shellcheck disable=SC2094
+( cd "${GLUON_OUTPUTDIR}/images" && ( find . -type f ! -iname '*.manifest' ! -iname images.list; find . -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )
 announce Building manifest...
 make manifest
 if [ -n "${signature}" ]; then

From 50b79c0dc415725195930f8fccf04c971e22e23c Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 18 Aug 2019 13:16:31 +0200
Subject: [PATCH 099/135] build.sh: remove known-broken images after the build

---
 build.conf | 3 +++
 build.sh   | 6 ++++++
 2 files changed, 9 insertions(+)

diff --git a/build.conf b/build.conf
index 5b9c9c4..6cb03ae 100644
--- a/build.conf
+++ b/build.conf
@@ -1,3 +1,6 @@
 GLUON_RELEASE="v2018.2.1.0"
 GLUON_BRANCH="stable"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
+broken_images=(
+	'*dir*615*d*'
+)
diff --git a/build.sh b/build.sh
index ac89af9..bd80e84 100755
--- a/build.sh
+++ b/build.sh
@@ -108,6 +108,12 @@ for t in $targets; do
 	announce "Starting build for $t..." >&2
 	make "-j$(nproc)" "GLUON_TARGET=$t" "$verbose"
 done
+# Remove known-broken images
+# shellcheck disable=SC2154
+for broken_image in "${broken_images[@]}"; do
+	announce "Removing broken image ${broken_image}..."
+	find "${GLUON_OUTPUTDIR}/${GLUON_BRANCH}/images" -iname "${broken_image}" \( -type f -o -type l \) -ls -exec rm -f {} \;
+done
 # Generate the images.list
 # shellcheck disable=SC2094
 ( cd "${GLUON_OUTPUTDIR}/images" && ( find . -type f ! -iname '*.manifest' ! -iname images.list; find . -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )

From 74088a18a9c2cc648bcd341d7768e8f6bc4c7d71 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 18 Aug 2019 23:55:55 +0200
Subject: [PATCH 100/135] build.sh: fix remove known-broken images after the
 build

---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index bd80e84..ce00e05 100755
--- a/build.sh
+++ b/build.sh
@@ -112,7 +112,7 @@ done
 # shellcheck disable=SC2154
 for broken_image in "${broken_images[@]}"; do
 	announce "Removing broken image ${broken_image}..."
-	find "${GLUON_OUTPUTDIR}/${GLUON_BRANCH}/images" -iname "${broken_image}" \( -type f -o -type l \) -ls -exec rm -f {} \;
+	find "${GLUON_OUTPUTDIR}/images" -iname "${broken_image}" \( -type f -o -type l \) -ls -exec rm -f {} \;
 done
 # Generate the images.list
 # shellcheck disable=SC2094

From 91adc7864649673c8de58eb21d7d4c2079289b34 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 6 Sep 2019 20:48:30 +0200
Subject: [PATCH 101/135] Cleanup some wrong indentation

---
 domains/ffhh_nowe.conf | 12 ++++++------
 domains/ffhh_ost.conf  | 12 ++++++------
 domains/ffhh_sued.conf | 12 ++++++------
 domains/ffhh_west.conf | 12 ++++++------
 4 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/domains/ffhh_nowe.conf b/domains/ffhh_nowe.conf
index 90aed0c..cefc8ee 100644
--- a/domains/ffhh_nowe.conf
+++ b/domains/ffhh_nowe.conf
@@ -42,27 +42,27 @@
 					peers = {
 						gateway01 = {
 							remotes = { '"gw01-new.hamburg.freifunk.net" port 10007' },
-                            key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
+							key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
 						},
 						gateway02 = {
 							remotes = { '"gw02-new.hamburg.freifunk.net" port 10007' },
-                            key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
+							key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
 						},
 						gateway03 = {
 							remotes = { '"gw03-new.hamburg.freifunk.net" port 10007' },
-                            key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
+							key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
 						},
 						gateway04 = {
 							remotes = { '"gw04-new.hamburg.freifunk.net" port 10008' },
-                            key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
+							key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
 						},
 						gateway05 = {
 							remotes = { '"gw05-new.hamburg.freifunk.net" port 10008' },
-                            key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
+							key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
 						},
 						gateway06 = {
 							remotes = { '"gw06-new.hamburg.freifunk.net" port 10008' },
-                            key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
+							key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
 						},
 					},
 				},
diff --git a/domains/ffhh_ost.conf b/domains/ffhh_ost.conf
index 7c2b948..be7bf30 100644
--- a/domains/ffhh_ost.conf
+++ b/domains/ffhh_ost.conf
@@ -42,26 +42,26 @@
 					peers = {
 						gateway01 = {
 							remotes = { '"gw01-new.hamburg.freifunk.net" port 10009' },
-                            key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
+							key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
 						},
 						gateway02 = {
 							remotes = { '"gw02-new.hamburg.freifunk.net" port 10009' },
-                            key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
+							key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
 						},
 						gateway03 = {
 							remotes = { '"gw03-new.hamburg.freifunk.net" port 10009' },
-                            key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
+							key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
 						},
 						gateway04 = {
 							remotes = { '"gw04-new.hamburg.freifunk.net" port 10010' },
-                            key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
+							key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
 						},
 						gateway05 = {
 							remotes = { '"gw05-new.hamburg.freifunk.net" port 10010' },
-                            key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
+							key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
 						},
 						gateway06 = {
-                            key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
+							key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
 							remotes = { '"gw06-new.hamburg.freifunk.net" port 10010' },
 						},
 					},
diff --git a/domains/ffhh_sued.conf b/domains/ffhh_sued.conf
index 42da4ca..722aa25 100644
--- a/domains/ffhh_sued.conf
+++ b/domains/ffhh_sued.conf
@@ -42,27 +42,27 @@
 					peers = {
 						gateway01 = {
 							remotes = { '"gw01-new.hamburg.freifunk.net" port 10003' },
-                            key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
+							key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
 						},
 						gateway02 = {
-                            key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
+							key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
 							remotes = { '"gw02-new.hamburg.freifunk.net" port 10003' },
 						},
 						gateway03 = {
 							remotes = { '"gw03-new.hamburg.freifunk.net" port 10003' },
-                            key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
+							key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
 						},
 						gateway04 = {
 							remotes = { '"gw04-new.hamburg.freifunk.net" port 10004' },
-                            key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
+							key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
 						},
 						gateway05 = {
 							remotes = { '"gw05-new.hamburg.freifunk.net" port 10004' },
-                            key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
+							key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
 						},
 						gateway06 = {
 							remotes = { '"gw06-new.hamburg.freifunk.net" port 10004' },
-                            key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
+							key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
 						},
 					},
 				},
diff --git a/domains/ffhh_west.conf b/domains/ffhh_west.conf
index 80c0c15..361446c 100644
--- a/domains/ffhh_west.conf
+++ b/domains/ffhh_west.conf
@@ -42,27 +42,27 @@
 					peers = {
 						gateway01 = {
 							remotes = { '"gw01-new.hamburg.freifunk.net" port 10005' },
-                            key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
+							key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b',
 						},
 						gateway02 = {
-                            key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
+							key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0',
 							remotes = { '"gw02-new.hamburg.freifunk.net" port 10005' },
 						},
 						gateway03 = {
 							remotes = { '"gw03-new.hamburg.freifunk.net" port 10005' },
-                            key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
+							key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546',
 						},
 						gateway04 = {
 							remotes = { '"gw04-new.hamburg.freifunk.net" port 10006' },
-                            key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
+							key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669',
 						},
 						gateway05 = {
 							remotes = { '"gw05-new.hamburg.freifunk.net" port 10006' },
-                            key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
+							key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f',
 						},
 						gateway06 = {
 							remotes = { '"gw06-new.hamburg.freifunk.net" port 10006' },
-                            key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
+							key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43',
 						},
 					},
 				},

From 9ec6df8a052a5d502ebea7ff6b5ea73f24b3e5f5 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 6 Sep 2019 21:26:31 +0200
Subject: [PATCH 102/135] set mesh.batman_adv.routing_algo to BATMAN_IV as it
 is now mandatory

---
 domains/ffhh_nowe.conf | 3 +++
 domains/ffhh_ost.conf  | 3 +++
 domains/ffhh_sued.conf | 3 +++
 domains/ffhh_west.conf | 3 +++
 4 files changed, 12 insertions(+)

diff --git a/domains/ffhh_nowe.conf b/domains/ffhh_nowe.conf
index cefc8ee..4ecba48 100644
--- a/domains/ffhh_nowe.conf
+++ b/domains/ffhh_nowe.conf
@@ -33,6 +33,9 @@
 
 	mesh = {
 		vxlan = false,
+		batman_adv = {
+			routing_algo = "BATMAN_IV",
+		},
 	},
 
 	mesh_vpn = {
diff --git a/domains/ffhh_ost.conf b/domains/ffhh_ost.conf
index be7bf30..941b75d 100644
--- a/domains/ffhh_ost.conf
+++ b/domains/ffhh_ost.conf
@@ -33,6 +33,9 @@
 
 	mesh = {
 		vxlan = false,
+		batman_adv = {
+			routing_algo = "BATMAN_IV",
+		},
 	},
 
 	mesh_vpn = {
diff --git a/domains/ffhh_sued.conf b/domains/ffhh_sued.conf
index 722aa25..1a6f31f 100644
--- a/domains/ffhh_sued.conf
+++ b/domains/ffhh_sued.conf
@@ -33,6 +33,9 @@
 
 	mesh = {
 		vxlan = false,
+		batman_adv = {
+			routing_algo = "BATMAN_IV",
+		},
 	},
 
 	mesh_vpn = {
diff --git a/domains/ffhh_west.conf b/domains/ffhh_west.conf
index 361446c..ca3c22a 100644
--- a/domains/ffhh_west.conf
+++ b/domains/ffhh_west.conf
@@ -33,6 +33,9 @@
 
 	mesh = {
 		vxlan = false,
+		batman_adv = {
+			routing_algo = "BATMAN_IV",
+		},
 	},
 
 	mesh_vpn = {

From 2affcbeb3e9dbd1c4fea0ffa989b464c35232438 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sun, 25 Aug 2019 11:12:56 +0200
Subject: [PATCH 103/135] build.sh: create images.list with first line
 indication the release version

---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index ce00e05..72fe790 100755
--- a/build.sh
+++ b/build.sh
@@ -116,7 +116,7 @@ for broken_image in "${broken_images[@]}"; do
 done
 # Generate the images.list
 # shellcheck disable=SC2094
-( cd "${GLUON_OUTPUTDIR}/images" && ( find . -type f ! -iname '*.manifest' ! -iname images.list; find . -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )
+( cd "${GLUON_OUTPUTDIR}/images" && ( echo "RELEASE=${GLUON_RELEASE}"; find . -type f ! -iname '*.manifest' ! -iname images.list; find . -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )
 announce Building manifest...
 make manifest
 if [ -n "${signature}" ]; then

From 678c61ae10df15dbad77229c91998fa462edd6bb Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 13 Sep 2019 20:26:13 +0200
Subject: [PATCH 104/135] Update README.md for v2018.2.3.0

(cherry picked from commit 4608dcd94ae8b9a383fe250502b0f86055afbc6e)
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 1f20ab2..ef1a9a2 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2018.2.3.0: site-ffhh: v2018.2.3.0, gluon: v2018.2.3
 - v2018.2.1.0: site-ffhh: v2018.2.1.0, gluon: v2018.2.1
 - v2018.1.4.2: site-ffhh: v2018.1.4.2, gluon: v2018.1.4
 - v2018.1.4.1: site-ffhh: v2018.1.4.1, gluon: v2018.1.4

From a60bb91b77d4f8a238d4a88d0c3f1e8b4663e491 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sat, 21 Sep 2019 16:38:11 +0200
Subject: [PATCH 105/135] build.sh: Fix a stupid error that prevents building
 without -v

Signed-off-by: Daniel Frank <git@danielfrank.net>
---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index 72fe790..88611d9 100755
--- a/build.sh
+++ b/build.sh
@@ -106,7 +106,7 @@ announce "The following targets will be generated: $targets" >&2
 
 for t in $targets; do
 	announce "Starting build for $t..." >&2
-	make "-j$(nproc)" "GLUON_TARGET=$t" "$verbose"
+	make "-j$(nproc)" "GLUON_TARGET=$t" $verbose
 done
 # Remove known-broken images
 # shellcheck disable=SC2154

From 88a1d79c852edbc99cbf04317c79328904dd7a4e Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sat, 21 Sep 2019 16:41:58 +0200
Subject: [PATCH 106/135] build.sh: get rid of some shellcheck warnings

---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index 88611d9..4bf0eed 100755
--- a/build.sh
+++ b/build.sh
@@ -66,7 +66,7 @@ fi
 
 gluon_path=$(realpath "$gluon_path")
 gluon_out=$(realpath "$gluon_out")
-site_path=$(realpath "$(dirname "$BASH_SOURCE")")
+site_path=$(realpath "$(dirname "${BASH_SOURCE[0]}")")
 
 announce GLUON: "$gluon_path" >&2
 announce FFHH SITE PATH: "$site_path" >&2

From e5934ce04fc1d3b0aec60a59f6cfb686294afe4f Mon Sep 17 00:00:00 2001
From: Ruben Barkow <github@r.z11.de>
Date: Sun, 1 Dec 2019 19:37:15 +0100
Subject: [PATCH 107/135] fix indentions

---
 site.mk | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/site.mk b/site.mk
index efd1464..4d57d91 100644
--- a/site.mk
+++ b/site.mk
@@ -1,7 +1,8 @@
 GLUON_MULTIDOMAIN := 1
 GLUON_DEPRECATED := upgrade
 
-GLUON_SITE_PACKAGES := -gluon-config-mode-geo-location \
+GLUON_SITE_PACKAGES := \
+	-gluon-config-mode-geo-location \
 	-gluon-config-mode-contact-info \
 	gluon-ebtables-source-filter \
 	gluon-web-mesh-vpn-fastd \
@@ -25,20 +26,20 @@ GLUON_FEATURES := \
 
 # EXTRA_SOFTWARE_TOOLS_01
 EXTRA_SOFTWARE_TOOLS_01 := \
-        nano \
-        htop \
-        ethtool
+	nano \
+	htop \
+	ethtool
 
 # x86
 ifeq ($(GLUON_TARGET),x86-generic)
 GLUON_SITE_PACKAGES += \
-    $(EXTRA_SOFTWARE_TOOLS_01)
+	$(EXTRA_SOFTWARE_TOOLS_01)
 endif
 
 # x86-64
 ifeq ($(GLUON_TARGET),x86-64)
 GLUON_SITE_PACKAGES += \
-    $(EXTRA_SOFTWARE_TOOLS_01)
+	$(EXTRA_SOFTWARE_TOOLS_01)
 endif
 
 GLUON_PRIORITY ?= 7

From cd90115c7461ec01ce9226689545658a7aba7e4b Mon Sep 17 00:00:00 2001
From: Ruben Barkow <github@r.z11.de>
Date: Sun, 1 Dec 2019 19:40:00 +0100
Subject: [PATCH 108/135] gluon-radvd and gluon-ebtables-limit-arp are already
 in batman feature

---
 site.mk | 2 --
 1 file changed, 2 deletions(-)

diff --git a/site.mk b/site.mk
index 4d57d91..7c9fbe0 100644
--- a/site.mk
+++ b/site.mk
@@ -15,10 +15,8 @@ GLUON_FEATURES := \
 	config-mode-domain-select \
 	ebtables-filter-multicast \
 	ebtables-filter-ra-dhcp \
-	ebtables-limit-arp \
 	mesh-batman-adv-15 \
 	mesh-vpn-fastd \
-	radvd \
 	respondd \
 	status-page \
 	web-advanced \

From 553ba5c01e1498f58e0e61c14c79f2f7901b6732 Mon Sep 17 00:00:00 2001
From: Ruben Barkow <github@r.z11.de>
Date: Sun, 1 Dec 2019 19:50:36 +0100
Subject: [PATCH 109/135] unify setting of extra software on x86-generic and
 x86-64

---
 site.mk | 22 ++++++----------------
 1 file changed, 6 insertions(+), 16 deletions(-)

diff --git a/site.mk b/site.mk
index 7c9fbe0..aea0325 100644
--- a/site.mk
+++ b/site.mk
@@ -22,22 +22,12 @@ GLUON_FEATURES := \
 	web-advanced \
 	web-wizard
 
-# EXTRA_SOFTWARE_TOOLS_01
-EXTRA_SOFTWARE_TOOLS_01 := \
-	nano \
-	htop \
-	ethtool
-
-# x86
-ifeq ($(GLUON_TARGET),x86-generic)
-GLUON_SITE_PACKAGES += \
-	$(EXTRA_SOFTWARE_TOOLS_01)
-endif
-
-# x86-64
-ifeq ($(GLUON_TARGET),x86-64)
-GLUON_SITE_PACKAGES += \
-	$(EXTRA_SOFTWARE_TOOLS_01)
+# x86 and x86-64 add extra software
+ifeq ($(GLUON_TARGET),$(filter $(GLUON_TARGET),x86-generic x86-64))
+	GLUON_SITE_PACKAGES += \
+		nano \
+		htop \
+		ethtool
 endif
 
 GLUON_PRIORITY ?= 7

From dcc3abbea9cb6bc4639be9b1bde74fd3737a718b Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 13 Dec 2019 22:11:59 +0100
Subject: [PATCH 110/135] Prepare migration to gluon v2019.1

---
 README.md  | 1 +
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ef1a9a2..43739ca 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2019.1.0.0: site-ffhh: v2019.1.0.0, gluon: v2019.1
 - v2018.2.3.0: site-ffhh: v2018.2.3.0, gluon: v2018.2.3
 - v2018.2.1.0: site-ffhh: v2018.2.1.0, gluon: v2018.2.1
 - v2018.1.4.2: site-ffhh: v2018.1.4.2, gluon: v2018.1.4
diff --git a/build.conf b/build.conf
index 6cb03ae..deac187 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2018.2.1.0"
+GLUON_RELEASE="v2019.1.0.0"
 GLUON_BRANCH="stable"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
 broken_images=(

From 049172bb0341154d4bdba6a516978161a3c3a397 Mon Sep 17 00:00:00 2001
From: Ruben Barkow-Kuder <rubo77@users.noreply.github.com>
Date: Sun, 1 Dec 2019 13:03:55 +0100
Subject: [PATCH 111/135] add web-private-wifi

---
 site.mk | 1 +
 1 file changed, 1 insertion(+)

diff --git a/site.mk b/site.mk
index efd1464..c2a3ba0 100644
--- a/site.mk
+++ b/site.mk
@@ -17,6 +17,7 @@ GLUON_FEATURES := \
 	ebtables-limit-arp \
 	mesh-batman-adv-15 \
 	mesh-vpn-fastd \
+	web-private-wifi \
 	radvd \
 	respondd \
 	status-page \

From c23854de97487b2edfd57f93431a259973f09284 Mon Sep 17 00:00:00 2001
From: Ruben Barkow <github@r.z11.de>
Date: Sun, 1 Dec 2019 19:35:15 +0100
Subject: [PATCH 112/135] add gluon-radv-filterd

---
 site.mk | 1 +
 1 file changed, 1 insertion(+)

diff --git a/site.mk b/site.mk
index c2a3ba0..d214e8c 100644
--- a/site.mk
+++ b/site.mk
@@ -19,6 +19,7 @@ GLUON_FEATURES := \
 	mesh-vpn-fastd \
 	web-private-wifi \
 	radvd \
+	radv-filterd \
 	respondd \
 	status-page \
 	web-advanced \

From 48083c51def4783a317dfb7225a3e669a7fce205 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 8 Jun 2020 20:45:04 +0200
Subject: [PATCH 113/135] bump version to 2019.1.2

---
 README.md  | 2 +-
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 43739ca..85bf9ad 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
-- v2019.1.0.0: site-ffhh: v2019.1.0.0, gluon: v2019.1
+- v2019.1.2.0: site-ffhh: v2019.1.2.0, gluon: v2019.1.2
 - v2018.2.3.0: site-ffhh: v2018.2.3.0, gluon: v2018.2.3
 - v2018.2.1.0: site-ffhh: v2018.2.1.0, gluon: v2018.2.1
 - v2018.1.4.2: site-ffhh: v2018.1.4.2, gluon: v2018.1.4
diff --git a/build.conf b/build.conf
index deac187..84b8c24 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2019.1.0.0"
+GLUON_RELEASE="v2019.1.2.0"
 GLUON_BRANCH="stable"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
 broken_images=(

From ccad2d2a2ba4fc36ef0f9673d8eb5471ca475ca5 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 19 Jun 2020 22:00:28 +0200
Subject: [PATCH 114/135] Bump to v2020.1.3.0

---
 README.md  | 1 +
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 85bf9ad..c6fabf1 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2020.1.3.0: site-ffhh: v2020.1.3.0, gluon: v2020.1.3
 - v2019.1.2.0: site-ffhh: v2019.1.2.0, gluon: v2019.1.2
 - v2018.2.3.0: site-ffhh: v2018.2.3.0, gluon: v2018.2.3
 - v2018.2.1.0: site-ffhh: v2018.2.1.0, gluon: v2018.2.1
diff --git a/build.conf b/build.conf
index 84b8c24..0ca7d8a 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2019.1.2.0"
+GLUON_RELEASE="v2020.1.3.0"
 GLUON_BRANCH="stable"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
 broken_images=(

From 0d3140f32573058012f498a6f59f82b376b40ce0 Mon Sep 17 00:00:00 2001
From: bdobe <bdobe@users.noreply.github.com>
Date: Mon, 22 Jun 2020 13:17:10 +0200
Subject: [PATCH 115/135] site.conf: add channel list for 5GHz outdoor mode

---
 site.conf | 1 +
 1 file changed, 1 insertion(+)

diff --git a/site.conf b/site.conf
index c8ea474..d1432a8 100644
--- a/site.conf
+++ b/site.conf
@@ -31,6 +31,7 @@
 
 	wifi5 = {
 		channel = 44,
+		outdoor_chanlist = "100-140",
 		mesh = {
 			mcast_rate = 12000,
 		},

From f996941c77b9c95a2699b2c9ffc752bb59a187df Mon Sep 17 00:00:00 2001
From: Bjoern Dobe <bjoern@dobecom.de>
Date: Sat, 8 Aug 2020 12:15:35 +0200
Subject: [PATCH 116/135] site.mk: remove haveged

Remove the package haveged from site config, since it is no longer supported from Gluon
2020.2.
---
 site.mk | 1 -
 1 file changed, 1 deletion(-)

diff --git a/site.mk b/site.mk
index a46537b..5952e73 100644
--- a/site.mk
+++ b/site.mk
@@ -6,7 +6,6 @@ GLUON_SITE_PACKAGES := \
 	-gluon-config-mode-contact-info \
 	gluon-ebtables-source-filter \
 	gluon-web-mesh-vpn-fastd \
-	haveged \
 	iptables \
 	iwinfo
 

From 8e01a9a42a05e63955bdbd559449fda789867350 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Sat, 12 Sep 2020 00:37:24 +0200
Subject: [PATCH 117/135] README update for v2020.1.4.0

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index c6fabf1..97ae8ce 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2020.1.4.0: site-ffhh: v2020.1.4.0, gluon: v2020.1.4
 - v2020.1.3.0: site-ffhh: v2020.1.3.0, gluon: v2020.1.3
 - v2019.1.2.0: site-ffhh: v2019.1.2.0, gluon: v2019.1.2
 - v2018.2.3.0: site-ffhh: v2018.2.3.0, gluon: v2018.2.3

From 78606aea3af1f579d721625903548047166f3278 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Wed, 16 Dec 2020 22:07:43 +0100
Subject: [PATCH 118/135] Prepare v2020.2.2.0

---
 README.md  | 1 +
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 97ae8ce..99413eb 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2020.2.2.0: site-ffhh: v2020.2.2.0, gluon: v2020.2.2
 - v2020.1.4.0: site-ffhh: v2020.1.4.0, gluon: v2020.1.4
 - v2020.1.3.0: site-ffhh: v2020.1.3.0, gluon: v2020.1.3
 - v2019.1.2.0: site-ffhh: v2019.1.2.0, gluon: v2019.1.2
diff --git a/build.conf b/build.conf
index 0ca7d8a..3185df3 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2020.1.3.0"
+GLUON_RELEASE="v2020.2.2.0"
 GLUON_BRANCH="stable"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
 broken_images=(

From 9ddf2f6720ce6598ddf4fcd6cbaea773a35f13a1 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 17 May 2021 20:05:27 +0200
Subject: [PATCH 119/135] Prepare release of v2020.2.3.0

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 99413eb..01cc4a6 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2020.2.3.0: site-ffhh: v2020.2.3.0, gluon: v2020.2.3
 - v2020.2.2.0: site-ffhh: v2020.2.2.0, gluon: v2020.2.2
 - v2020.1.4.0: site-ffhh: v2020.1.4.0, gluon: v2020.1.4
 - v2020.1.3.0: site-ffhh: v2020.1.3.0, gluon: v2020.1.3

From 28795fdd67fb9ec7bb5f22d5378f34c1ecc348a0 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 10 Jan 2022 20:28:41 +0100
Subject: [PATCH 120/135] Updates for v2021.1.1.0

---
 README.md  |  1 +
 build.conf |  3 +--
 build.sh   | 13 +++++++++----
 site.mk    |  2 ++
 4 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 01cc4a6..8f05274 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2021.1.1.0: site-ffhh: v2021.1.1.0, gluon: v2021.1.1
 - v2020.2.3.0: site-ffhh: v2020.2.3.0, gluon: v2020.2.3
 - v2020.2.2.0: site-ffhh: v2020.2.2.0, gluon: v2020.2.2
 - v2020.1.4.0: site-ffhh: v2020.1.4.0, gluon: v2020.1.4
diff --git a/build.conf b/build.conf
index 3185df3..fa24547 100644
--- a/build.conf
+++ b/build.conf
@@ -1,5 +1,4 @@
-GLUON_RELEASE="v2020.2.2.0"
-GLUON_BRANCH="stable"
+GLUON_RELEASE="v2021.1.1.0"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
 broken_images=(
 	'*dir*615*d*'
diff --git a/build.sh b/build.sh
index 4bf0eed..c907d12 100755
--- a/build.sh
+++ b/build.sh
@@ -11,6 +11,7 @@ function usage () {
 	echo "       -a              Automatically detect and build all targets." >&2
 	echo "       -o OUT_PATH     Path to the firmware output directory. Default: ${gluon_out}" >&2
 	echo "       -s SIGNATURE    Sign firmware with signature" >&2
+	echo "       -stable         Set GLUON_AUTOUPDATER_BRANCH=stable" >&2
 	echo "       -b              BROKEN=1" >&2
 	echo "       -v              verbose" >&2
 	echo "       -j JOBS         Run build with -jJOBS. Default: ${proc}" >&2
@@ -40,6 +41,10 @@ while [ $# -gt 0 ]; do
 			signature="$2"
 			shift
 			;;
+		-stable)
+			export GLUON_AUTOUPDATER_BRANCH=stable
+			shift
+			;;
 		-b)
 			export BROKEN=1
 			;;
@@ -74,11 +79,11 @@ announce FFHH SITE PATH: "$site_path" >&2
 pushd "$site_path"
 # shellcheck source=/dev/null
 . ./build.conf
-[ "${GLUON_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
+[ "${GLUON_AUTOUPDATER_BRANCH:-experimental}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
 export GLUON_RELEASE
-export GLUON_BRANCH
+export GLUON_AUTOUPDATER_BRANCH
 export GLUON_SITEDIR="${site_path}"
-export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}"
+export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_AUTOUPDATER_BRANCH}"
 popd
 
 pushd "${gluon_path}"
@@ -120,7 +125,7 @@ done
 announce Building manifest...
 make manifest
 if [ -n "${signature}" ]; then
-	if [ "$GLUON_BRANCH" == "experimental" ]; then
+	if [ "$GLUON_AUTOUPDATER_BRANCH" == "experimental" ]; then
 		announce Signing...
 		"${gluon_path}/contrib/sign.sh" "${signature}" "${GLUON_OUTPUTDIR}/images/sysupgrade/experimental.manifest"
 	else
diff --git a/site.mk b/site.mk
index 5952e73..2d6fb10 100644
--- a/site.mk
+++ b/site.mk
@@ -1,6 +1,8 @@
 GLUON_MULTIDOMAIN := 1
 GLUON_DEPRECATED := upgrade
 
+GLUON_AUTOUPDATER_ENABLED ?= 1
+
 GLUON_SITE_PACKAGES := \
 	-gluon-config-mode-geo-location \
 	-gluon-config-mode-contact-info \

From cffd0a85530d8e918e6c84a3c5f4806a0061ad4b Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 11 Jan 2022 01:25:05 +0100
Subject: [PATCH 121/135] no more git on github

---
 modules | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules b/modules
index 6416262..d1b67ac 100644
--- a/modules
+++ b/modules
@@ -1,5 +1,5 @@
 GLUON_SITE_FEEDS='ffhh_packages'
 
-PACKAGES_FFHH_PACKAGES_REPO=git://github.com/freifunkhamburg/ffhh-packages.git
+PACKAGES_FFHH_PACKAGES_REPO=https://github.com/freifunkhamburg/ffhh-packages.git
 PACKAGES_FFHH_PACKAGES_COMMIT=ef9fcc1222f74c3c045b1450537a4b8b80efb56c
 

From 9647ec46934a50af371d7624a2662f699a8c8ce1 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 21 Mar 2022 21:53:35 +0100
Subject: [PATCH 122/135] Updates for v2021.1.1.0

---
 build.conf | 2 +-
 build.sh   | 6 +++++-
 modules    | 2 +-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/build.conf b/build.conf
index fa24547..f69fe80 100644
--- a/build.conf
+++ b/build.conf
@@ -1,5 +1,5 @@
 GLUON_RELEASE="v2021.1.1.0"
-targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
+targets="ar71xx-generic ar71xx-nand ar71xx-tiny ath79-generic brcm2708-bcm2708 brcm2708-bcm2709 ipq40xx-generic ipq806x-generic lantiq-xrx200 lantiq-xway mpc85xx-generic mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x x86-64 x86-generic x86-geode x86-legacy"
 broken_images=(
 	'*dir*615*d*'
 )
diff --git a/build.sh b/build.sh
index c907d12..507a127 100755
--- a/build.sh
+++ b/build.sh
@@ -79,13 +79,17 @@ announce FFHH SITE PATH: "$site_path" >&2
 pushd "$site_path"
 # shellcheck source=/dev/null
 . ./build.conf
-[ "${GLUON_AUTOUPDATER_BRANCH:-experimental}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
+GLUON_AUTOUPDATER_BRANCH="${GLUON_AUTOUPDATER_BRANCH:-experimental}"
+[ "${GLUON_AUTOUPDATER_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
 export GLUON_RELEASE
 export GLUON_AUTOUPDATER_BRANCH
 export GLUON_SITEDIR="${site_path}"
 export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_AUTOUPDATER_BRANCH}"
 popd
 
+announce GLUON Variables:
+env | egrep '^GLUON' | sort
+
 pushd "${gluon_path}"
 announce Starting make update...
 rm -rf "${GLUON_OUTPUTDIR}"
diff --git a/modules b/modules
index 6416262..d1b67ac 100644
--- a/modules
+++ b/modules
@@ -1,5 +1,5 @@
 GLUON_SITE_FEEDS='ffhh_packages'
 
-PACKAGES_FFHH_PACKAGES_REPO=git://github.com/freifunkhamburg/ffhh-packages.git
+PACKAGES_FFHH_PACKAGES_REPO=https://github.com/freifunkhamburg/ffhh-packages.git
 PACKAGES_FFHH_PACKAGES_COMMIT=ef9fcc1222f74c3c045b1450537a4b8b80efb56c
 

From 7ad2cd6af6d014590e7b6ef6e0d0d1ae64ca8766 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 2 May 2022 21:37:49 +0200
Subject: [PATCH 123/135] build.sh: fix broken build.sh

---
 build.sh | 1 -
 1 file changed, 1 deletion(-)

diff --git a/build.sh b/build.sh
index 507a127..ac09d08 100755
--- a/build.sh
+++ b/build.sh
@@ -43,7 +43,6 @@ while [ $# -gt 0 ]; do
 			;;
 		-stable)
 			export GLUON_AUTOUPDATER_BRANCH=stable
-			shift
 			;;
 		-b)
 			export BROKEN=1

From 639d076417430b3ee3865fb484dc11adc43d32d4 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 3 May 2022 22:00:52 +0200
Subject: [PATCH 124/135] Add new version numbers in preparation for the
 security update

---
 README.md  | 1 +
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8f05274..53cbfb6 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2021.1.2.0: site-ffhh: v2021.1.2.0, gluon: v2021.1.2
 - v2021.1.1.0: site-ffhh: v2021.1.1.0, gluon: v2021.1.1
 - v2020.2.3.0: site-ffhh: v2020.2.3.0, gluon: v2020.2.3
 - v2020.2.2.0: site-ffhh: v2020.2.2.0, gluon: v2020.2.2
diff --git a/build.conf b/build.conf
index f69fe80..13f862f 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2021.1.1.0"
+GLUON_RELEASE="v2021.1.2.0"
 targets="ar71xx-generic ar71xx-nand ar71xx-tiny ath79-generic brcm2708-bcm2708 brcm2708-bcm2709 ipq40xx-generic ipq806x-generic lantiq-xrx200 lantiq-xway mpc85xx-generic mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x x86-64 x86-generic x86-geode x86-legacy"
 broken_images=(
 	'*dir*615*d*'

From 932dfba35e47eb3097f9306e865159940ffadedd Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 17 Oct 2022 20:29:52 +0200
Subject: [PATCH 125/135] Updates for gluon v2022.1

---
 README.md  | 1 +
 build.conf | 4 ++--
 site.conf  | 2 +-
 site.mk    | 1 -
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 53cbfb6..773f866 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2022.1.0.0: site-ffhh: v2022.1.0.0, gluon: v2022.1
 - v2021.1.2.0: site-ffhh: v2021.1.2.0, gluon: v2021.1.2
 - v2021.1.1.0: site-ffhh: v2021.1.1.0, gluon: v2021.1.1
 - v2020.2.3.0: site-ffhh: v2020.2.3.0, gluon: v2020.2.3
diff --git a/build.conf b/build.conf
index 13f862f..282bef3 100644
--- a/build.conf
+++ b/build.conf
@@ -1,5 +1,5 @@
-GLUON_RELEASE="v2021.1.2.0"
-targets="ar71xx-generic ar71xx-nand ar71xx-tiny ath79-generic brcm2708-bcm2708 brcm2708-bcm2709 ipq40xx-generic ipq806x-generic lantiq-xrx200 lantiq-xway mpc85xx-generic mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x x86-64 x86-generic x86-geode x86-legacy"
+GLUON_RELEASE="v2022.1.0.0"
+targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
 broken_images=(
 	'*dir*615*d*'
 )
diff --git a/site.conf b/site.conf
index d1432a8..04919a0 100644
--- a/site.conf
+++ b/site.conf
@@ -39,9 +39,9 @@
 
 	mesh_vpn = {
 		enabled = true,
-		mtu = 1312,
 		fastd = {
 			configurable = true,
+			mtu = 1312,
 			methods = {'salsa2012+umac'},
 			groups = {
 				backbone = {
diff --git a/site.mk b/site.mk
index 2d6fb10..419cb23 100644
--- a/site.mk
+++ b/site.mk
@@ -8,7 +8,6 @@ GLUON_SITE_PACKAGES := \
 	-gluon-config-mode-contact-info \
 	gluon-ebtables-source-filter \
 	gluon-web-mesh-vpn-fastd \
-	iptables \
 	iwinfo
 
 GLUON_FEATURES := \

From df829eb3d03caa4f7e33222e516e4ee7890d8716 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 6 Feb 2023 20:45:11 +0100
Subject: [PATCH 126/135] Update for v2022.1.1.0

---
 README.md  | 2 +-
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 773f866..386cd89 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
-- v2022.1.0.0: site-ffhh: v2022.1.0.0, gluon: v2022.1
+- v2022.1.1.0: site-ffhh: v2022.1.1.0, gluon: v2022.1.1
 - v2021.1.2.0: site-ffhh: v2021.1.2.0, gluon: v2021.1.2
 - v2021.1.1.0: site-ffhh: v2021.1.1.0, gluon: v2021.1.1
 - v2020.2.3.0: site-ffhh: v2020.2.3.0, gluon: v2020.2.3
diff --git a/build.conf b/build.conf
index 282bef3..44a981b 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2022.1.0.0"
+GLUON_RELEASE="v2022.1.1.0"
 targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
 broken_images=(
 	'*dir*615*d*'

From cd2d266749421eff3a9d9381c7c1df773408a093 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 20 Mar 2023 20:11:49 +0100
Subject: [PATCH 127/135] Updates for v2022.1.3.0

---
 README.md  | 2 +-
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 386cd89..02de4be 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
-- v2022.1.1.0: site-ffhh: v2022.1.1.0, gluon: v2022.1.1
+- v2022.1.3.0: site-ffhh: v2022.1.3.0, gluon: v2022.1.3
 - v2021.1.2.0: site-ffhh: v2021.1.2.0, gluon: v2021.1.2
 - v2021.1.1.0: site-ffhh: v2021.1.1.0, gluon: v2021.1.1
 - v2020.2.3.0: site-ffhh: v2020.2.3.0, gluon: v2020.2.3
diff --git a/build.conf b/build.conf
index 44a981b..7b0d90e 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2022.1.1.0"
+GLUON_RELEASE="v2022.1.3.0"
 targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
 broken_images=(
 	'*dir*615*d*'

From e0206d03726a5537a736f69b9a4ae66b198dcd08 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 2 Feb 2024 20:05:50 +0100
Subject: [PATCH 128/135] v2022.1.4.0

---
 README.md  | 3 ++-
 build.conf | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 02de4be..8a01a20 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,8 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
-- v2022.1.3.0: site-ffhh: v2022.1.3.0, gluon: v2022.1.3
+- v2022.1.4.0: site-ffhh: v2022.1.4.0, gluon: v2022.1.4
+- v2022.1.3.0: site-ffhh: v2022.1.3.0, gluon: v2022.1.3 (nur experimental verteilt)
 - v2021.1.2.0: site-ffhh: v2021.1.2.0, gluon: v2021.1.2
 - v2021.1.1.0: site-ffhh: v2021.1.1.0, gluon: v2021.1.1
 - v2020.2.3.0: site-ffhh: v2020.2.3.0, gluon: v2020.2.3
diff --git a/build.conf b/build.conf
index 7b0d90e..387c8db 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2022.1.3.0"
+GLUON_RELEASE="v2022.1.4.0"
 targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
 broken_images=(
 	'*dir*615*d*'

From 6436e5cec6148af26bcf738da08d96cac5685ecc Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 25 Mar 2024 17:00:17 +0100
Subject: [PATCH 129/135] v2023.1.2

---
 README.md  | 1 +
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8a01a20..5f1ea19 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2023.1.2.0: site-ffhh: v2023.1.2.0, gluon: v2023.1.2
 - v2022.1.4.0: site-ffhh: v2022.1.4.0, gluon: v2022.1.4
 - v2022.1.3.0: site-ffhh: v2022.1.3.0, gluon: v2022.1.3 (nur experimental verteilt)
 - v2021.1.2.0: site-ffhh: v2021.1.2.0, gluon: v2021.1.2
diff --git a/build.conf b/build.conf
index 387c8db..7c44063 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2022.1.4.0"
+GLUON_RELEASE="v2023.1.2.0"
 targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
 broken_images=(
 	'*dir*615*d*'

From 1a956e5375e11473955b490614e46e4d97fb2e48 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 26 Mar 2024 21:33:19 +0100
Subject: [PATCH 130/135] =?UTF-8?q?add=20updates=20for=20v2023.2=20from=20?=
 =?UTF-8?q?Bj=C3=B6rn?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 image-customization.lua | 36 ++++++++++++++++++++++++++++++++++++
 site.mk                 | 29 -----------------------------
 2 files changed, 36 insertions(+), 29 deletions(-)
 create mode 100644 image-customization.lua

diff --git a/image-customization.lua b/image-customization.lua
new file mode 100644
index 0000000..79abeed
--- /dev/null
+++ b/image-customization.lua
@@ -0,0 +1,36 @@
+features({
+    'autoupdater',
+    'config-mode-domain-select',
+    'ebtables-filter-multicast',
+    'ebtables-filter-ra-dhcp',
+    'mesh-batman-adv-15',
+    'mesh-vpn-fastd',
+    'web-private-wifi',
+    'radv-filterd',
+    'respondd',
+    'status-page',
+    'web-advanced',
+    'web-wizard',
+})
+
+if not device_class('tiny') then
+    features({
+        'wireless-encryption-wpa3',
+    })
+end
+
+packages({
+    '-gluon-config-mode-geo-location',
+    '-gluon-config-mode-contact-info',
+    'gluon-ebtables-source-filter',
+    'gluon-web-mesh-vpn-fastd',
+    'iwinfo',
+})
+
+if target('x86') then
+    packages({
+        'nano',
+        'htop',
+        'ethtool',
+    })
+end
diff --git a/site.mk b/site.mk
index 419cb23..45aa428 100644
--- a/site.mk
+++ b/site.mk
@@ -3,35 +3,6 @@ GLUON_DEPRECATED := upgrade
 
 GLUON_AUTOUPDATER_ENABLED ?= 1
 
-GLUON_SITE_PACKAGES := \
-	-gluon-config-mode-geo-location \
-	-gluon-config-mode-contact-info \
-	gluon-ebtables-source-filter \
-	gluon-web-mesh-vpn-fastd \
-	iwinfo
-
-GLUON_FEATURES := \
-	autoupdater \
-	config-mode-domain-select \
-	ebtables-filter-multicast \
-	ebtables-filter-ra-dhcp \
-	mesh-batman-adv-15 \
-	mesh-vpn-fastd \
-	web-private-wifi \
-	radv-filterd \
-	respondd \
-	status-page \
-	web-advanced \
-	web-wizard
-
-# x86 and x86-64 add extra software
-ifeq ($(GLUON_TARGET),$(filter $(GLUON_TARGET),x86-generic x86-64))
-	GLUON_SITE_PACKAGES += \
-		nano \
-		htop \
-		ethtool
-endif
-
 GLUON_PRIORITY ?= 7
 
 # Region code required for some images; supported values: us eu

From 87e65917f87469570d966cd0e1a870b6bcc31b8f Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Tue, 26 Mar 2024 21:34:19 +0100
Subject: [PATCH 131/135] v2023.2.2.0

---
 README.md  | 1 +
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5f1ea19..a4daeb7 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2023.2.2.0: site-ffhh: v2023.2.2.0, gluon: v2023.2.2
 - v2023.1.2.0: site-ffhh: v2023.1.2.0, gluon: v2023.1.2
 - v2022.1.4.0: site-ffhh: v2022.1.4.0, gluon: v2022.1.4
 - v2022.1.3.0: site-ffhh: v2022.1.3.0, gluon: v2022.1.3 (nur experimental verteilt)
diff --git a/build.conf b/build.conf
index 7c44063..fa36fb5 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2023.1.2.0"
+GLUON_RELEASE="v2023.2.2.0"
 targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
 broken_images=(
 	'*dir*615*d*'

From 6251517fe4696099b092ede352fe48e1a4f8df74 Mon Sep 17 00:00:00 2001
From: Entil_Zha <Entil_Zha@localhost.localdomain>
Date: Mon, 16 Sep 2024 19:38:57 +0200
Subject: [PATCH 132/135] add mediatek-filogic targets

---
 README.md  | 3 ++-
 build.conf | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index a4daeb7..0a79e19 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 	In the next two commands replace GLUON_VERSION and SITE_VERSION with the actual version numbers.
 	$ git clone -b GLUON_VERSION https://github.com/freifunk-gluon/gluon.git
-	$ git clone -b SITE_VERSION https://github.com/freifunkhamburg/site-ffhh.git
+	$ git clone -b SITE_VERSION https://git.hamburg.ccc.de/freifunk/site-ffhh.git
 	$ cd site-ffhh
 
 	To build the firmware into the subdirectory firmware:
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2023.2.2.1: site-ffhh: v2023.2.2.0, gluon: v2023.2.2 (add mediatek-filogic Routers)
 - v2023.2.2.0: site-ffhh: v2023.2.2.0, gluon: v2023.2.2
 - v2023.1.2.0: site-ffhh: v2023.1.2.0, gluon: v2023.1.2
 - v2022.1.4.0: site-ffhh: v2022.1.4.0, gluon: v2022.1.4
diff --git a/build.conf b/build.conf
index fa36fb5..ee3219a 100644
--- a/build.conf
+++ b/build.conf
@@ -1,5 +1,5 @@
 GLUON_RELEASE="v2023.2.2.0"
-targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
+targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-filogic mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
 broken_images=(
 	'*dir*615*d*'
 )

From 9c77f1954908127d12478b8cf14878589ca20fb0 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Fri, 1 Nov 2024 20:52:11 +0100
Subject: [PATCH 133/135] v2023.2.4.0

---
 README.md  | 1 +
 build.conf | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 0a79e19..d9e669a 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
+- v2023.2.4.0: site-ffhh: v2023.2.4.0, gluon: v2023.2.4
 - v2023.2.2.1: site-ffhh: v2023.2.2.0, gluon: v2023.2.2 (add mediatek-filogic Routers)
 - v2023.2.2.0: site-ffhh: v2023.2.2.0, gluon: v2023.2.2
 - v2023.1.2.0: site-ffhh: v2023.1.2.0, gluon: v2023.1.2
diff --git a/build.conf b/build.conf
index ee3219a..07358e1 100644
--- a/build.conf
+++ b/build.conf
@@ -1,4 +1,4 @@
-GLUON_RELEASE="v2023.2.2.0"
+GLUON_RELEASE="v2023.2.4.0"
 targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-filogic mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
 broken_images=(
 	'*dir*615*d*'

From db81f77fd00b983b89154a2697a28bc1fa96f918 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 4 Nov 2024 00:49:48 +0100
Subject: [PATCH 134/135] dont nuke the output directory on each run

---
 build.sh | 1 -
 1 file changed, 1 deletion(-)

diff --git a/build.sh b/build.sh
index ac09d08..a91a46d 100755
--- a/build.sh
+++ b/build.sh
@@ -91,7 +91,6 @@ env | egrep '^GLUON' | sort
 
 pushd "${gluon_path}"
 announce Starting make update...
-rm -rf "${GLUON_OUTPUTDIR}"
 mkdir -p "${GLUON_OUTPUTDIR}"
 make update
 # Try to install patches. I wasn't able to figure out how patches in gluon/site/patches work.

From b3c3b41e3099a5c3379bbbd0501975f274ca7706 Mon Sep 17 00:00:00 2001
From: Daniel Frank <git@danielfrank.net>
Date: Mon, 4 Nov 2024 20:05:53 +0100
Subject: [PATCH 135/135] support BUILD_DATE for experimental versions

---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index a91a46d..5647ba5 100755
--- a/build.sh
+++ b/build.sh
@@ -79,7 +79,7 @@ pushd "$site_path"
 # shellcheck source=/dev/null
 . ./build.conf
 GLUON_AUTOUPDATER_BRANCH="${GLUON_AUTOUPDATER_BRANCH:-experimental}"
-[ "${GLUON_AUTOUPDATER_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
+[ "${GLUON_AUTOUPDATER_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp${BUILD_DATE:-$(date +%Y%m%d)}"
 export GLUON_RELEASE
 export GLUON_AUTOUPDATER_BRANCH
 export GLUON_SITEDIR="${site_path}"