Skip to content
Snippets Groups Projects
Commit 722399d1 authored by chrissi^'s avatar chrissi^
Browse files

Merge branch 'chrissi/frido-deploy'

parents 52e62517 39d8a8fb
No related branches found
No related tags found
No related merge requests found
Showing
with 23 additions and 480 deletions
......@@ -15,18 +15,20 @@ build:
deployment:
stage: deploy
tags:
- ffbs-deploy
- ffbs-deploy-frido
only:
refs:
- master
- /^testbed/i
- "chrissi/frido-deploy"
variables:
- $CI_PROJECT_PATH == "ffbs/ffbs-website"
script:
- rm -r /var/www/$CI_COMMIT_REF_SLUG/htdocs
- cp -r flamingo/output /var/www/$CI_COMMIT_REF_SLUG/htdocs
- chmod go+r -R /var/www/$CI_COMMIT_REF_SLUG/htdocs/*
- CI_COMMIT_REF_SLUG=testbed
- rm -r /var/www/website/$CI_COMMIT_REF_SLUG/htdocs
- cp -r flamingo/output /var/www/website/$CI_COMMIT_REF_SLUG/htdocs
- chmod go+r -R /var/www/website/$CI_COMMIT_REF_SLUG/htdocs/*
- rm -r /var/www/$CI_COMMIT_REF_SLUG/cgi
- cp -r cgi /var/www/$CI_COMMIT_REF_SLUG/cgi
- chmod go+r -R /var/www/$CI_COMMIT_REF_SLUG/cgi/*
- rm -r /var/www/website/$CI_COMMIT_REF_SLUG/cgi
- cp -r cgi /var/www/website/$CI_COMMIT_REF_SLUG/cgi
- chmod go+r -R /var/www/website/$CI_COMMIT_REF_SLUG/cgi/*
#!/usr/bin/env python2
# coding=utf-8
import cgi
import cgitb
import re
import subprocess
cgitb.enable()
NAME_PATTERN = '^[a-zA-Z0-9-_\. äÄöÖüÜß]+$'
CODE_PATTERN = '^[a-zA-Z0-9]{64}$'
KEY_DIR='/home/kasalehlia/keys/'
KEY_SCRIPT = '/home/kasalehlia/bin/ffbs_keys'
GIT_DIR = '/home/kasalehlia/peers'
print "Content-Type: text/html;charset=utf-8"
print ""
form = cgi.FieldStorage()
try:
name = form['name'].value
code = form['code'].value
if re.match(NAME_PATTERN, name) and re.match(CODE_PATTERN, code) and name not in ['.','..']:
with open(KEY_DIR+'codes/'+code, 'r') as f:
validate = f.read()
if validate == name:
try:
print subprocess.check_output([KEY_SCRIPT, 'approve', name])
_ = subprocess.check_output(['/usr/bin/git', 'pull'], cwd=GIT_DIR)
_ = subprocess.check_output(['/usr/bin/git', 'add', 'peers/'+name], cwd=GIT_DIR)
_ = subprocess.check_output(['/usr/bin/git', 'commit', '-m', 'automated commit'], cwd=GIT_DIR)
_ = subprocess.check_output(['/usr/bin/git', 'push'], cwd=GIT_DIR)
except subprocess.CalledProcessError as e:
print e.output
else:
print "invalid request"
else:
print "invalid request"
except Exception as e:
print "Die Anfrage ist ungültig"
#!/usr/bin/env python2
# coding=utf-8
import cgi
import cgitb
import re
import subprocess
cgitb.enable()
NAME_PATTERN = '^[a-zA-Z0-9-_\. äÄöÖüÜß]+$'
CODE_PATTERN = '^[a-zA-Z0-9]{64}$'
KEY_DIR='/home/kasalehlia/keys/'
KEY_SCRIPT = '/home/kasalehlia/bin/ffbs_keys'
print "Content-Type: text/html"
print ""
form = cgi.FieldStorage()
try:
name = form['name'].value
code = form['code'].value
if re.match(NAME_PATTERN, name) and re.match(CODE_PATTERN, code) and name not in ['.','..']:
with open(KEY_DIR+'codes/'+code, 'r') as f:
validate = f.read()
if validate == name:
try:
print subprocess.check_output([KEY_SCRIPT, 'deny', name])
except subprocess.CalledProcessError as e:
print e.output
else:
print "invalid request"
else:
print "invalid request"
except Exception as e:
print template % "Die Anfrage ist ungültig"
#!/usr/bin/env python2
# coding=utf-8
import cgi
import cgitb
import datetime
import json
SECRET = "ahqu2Choshi7sahDme8aePh4iegh8Wee"
print "Content-Type: text/html"
print ""
params = cgi.FieldStorage()
if 'secret' in params and params['secret'].value == SECRET:
info = dict()
info['updated'] = datetime.datetime.now().isoformat()
for i in xrange(100): # be prepared for many gateways
key = "gw"+str(i).zfill(2)
if key in params:
try:
info[key] = int(params[key].value)
except ValueError: # value is not a number
pass
print "accepted status for "+str(len(info))+" gateways"
with open('/home/kasalehlia/ffbs-website/gatewaystatus.json','w') as f:
json.dump(info, f)
else:
print "nothing to see here"
#!/usr/bin/env python2
# coding=utf-8
import cgi
import cgitb
import os
import random
import re
import smtplib
import string
import time
from email.mime.text import MIMEText
from subprocess import Popen, PIPE, check_output, CalledProcessError
cgitb.enable()
KEY_DIR='/home/kasalehlia/keys/'
CONTACT_FILE='/home/kasalehlia/contacts.txt'
KEY_PATTERN = r'# ([a-zA-Z0-9-_\. äÄöÖüÜß]+) ?#? ?([\S ]+)?\r?\n([0-9a-f]{64})$';
#KEY_PATTERN = r'# ([\w.- ]+) ?#? ?([\S ]+)?\r?\n([0-9a-f]{64})$';
EMAIL_FROM = 'keys@freifunk-bs.de'
EMAIL_TO = 'ffbs-admin@stratum0.org'
#EMAIL_TO = 'kasa@shakik.de'
EMAIL_TEXT = """Key approval request: {name} with key {key}.\n
To approve: http://www.freifunk-bs.de/approve_key?name={name}&code={code}\n
To deny: http://www.freifunk-bs.de/deny_key?name={name}&code={code}\n
\n`{quote}`"""
QUOTES = list(open('/home/kasalehlia/portal.quotes'))
print "Content-Type: application/json; charset=utf-8"
print ""
form = cgi.FieldStorage()
try:
inp = form['key'].value.strip()
contact = form.getfirst('contact','').strip()
match = re.match(KEY_PATTERN, inp)
if match:
name,_contact,key = match.groups()
name = name.strip()
if not contact:
contact = _contact
code = ''.join(random.choice(string.letters + string.digits) for _ in xrange(64))
if os.path.isfile(KEY_DIR+name):
print '{"success":false, "message":"Dieser Name oder dieser Schlüssel ist bereits eingetragen"}'
else:
try:
res = check_output(['/bin/grep','-r','--exclude-dir=codes',key,KEY_DIR])
except CalledProcessError as e:
res = e.output
if len(res):
print '{"success":false, "message":"Dieser Name oder dieser Schlüssel ist bereits eingetragen"}'
else:
with open(KEY_DIR+name,'w') as f:
f.write('key "%s";\n' % key)
with open(KEY_DIR+'/codes/'+code,'w') as f:
f.write(name)
with open(CONTACT_FILE, 'a') as f:
f.write('{},{},{},{}\n'.format(time.time(),key,name,contact))
#s = smtplib.SMTP('localhost')
if 'NOMAIL' not in name:
msg = MIMEText(EMAIL_TEXT.format(name=name.replace(' ', '%20'), key=key, code=code, quote=random.choice(QUOTES)[:-1]),'plain','utf-8')
msg['From'] = EMAIL_FROM
msg['To'] = EMAIL_TO
msg['Subject'] = 'Key approval request for %s' % name
#s.sendmail(EMAIL_FROM, [EMAIL_TO], msg.as_string())
#s.quit()
p = Popen(["/usr/sbin/sendmail", "-t", "-oi"], stdin=PIPE)
p.communicate(msg.as_string())
print '{"success":true, "message":"Dein Schlüssel wurde eingetragen, muss aber noch von einem Administrator bestätigt werden"}'
else:
print '{"success":true, "message":"debug input accepted"}'
else:
print '{"success":false, "message":"Die Eingabe ist fehlerhaft"}'
except Exception as e:
print '{"success":false, "message":"Die Eingabe ist fehlerhaft", "err":"'+repr(e)+'"}'
#raise e
template: page_html.html
<div class="container">
<div class="page-header">
<h1>Router eintragen</h1>
</div>
<div class="row">
<div class="col-lg-6">
<div id="alert" class="alert" style="display:none"></div>
<form class="form" id="keyform" method="POST" action="/newkey">
<p>Du bist der Anleitung gefolgt und
hast einen Schlüssel von deinem Router bekommen? Dann trage hier deinen Schlüssel ein:</p>
<fieldset>
<textarea id="key" name="key" cols="50" rows="2" class="span6"></textarea><br><br>
</fieldset>
<p>Hier hast du die Möglichkeit einen Kontaktweg zu Dir einzutragen. Diese Information werden wir nicht
weitergeben, sondern nur auf unseren Servern speichern. Wir werden die Information nur im Falle technischer
Probleme mit deinem Router verwenden um Dich zu kontaktieren. Um diese Information löschen zu lassen
<a href="/kontakt.html">kontaktiere uns.</a></p>
<fieldset>
<input type="text" name="contact" id="contact" size="50">
</fieldset>
<fieldset>
<input type="submit" value="Absenden" class="btn btn-primary pull-right">
</fieldset>
</form>
</div>
<div class="col-lg-6">
<p>Die Schlüsselinformationen sollten so eingetragen werden:</p>
<!-- totally a random key... -->
<pre># Beispiel <br>70e9157d98c9780c27ea17e95e27885997cf321225050f397f0fa82ac1733639</pre>
</div>
</div>
</div>
<script type="text/javascript">
$(function () {
$('#keyform').submit(function () {
$.post('/newkey', {'key':$('#key').val(),'contact':$('#contact').val()}, function (ans) {
$('#alert').hide(500, function() {
if (ans.success) {
$('#alert').removeClass('alert-danger').addClass('alert-success').text(ans.message)
} else {
$('#alert').removeClass('alert-success').addClass('alert-danger').text(ans.message)
}
$('#alert').show(500)
});
}, 'json')
return false
});
if (document.location.hash !== '') {
$('#key').val(decodeURIComponent(document.location.hash));
}
});
</script>
......@@ -92,7 +92,7 @@ sehen ist. Dann kann folgendes helfen:
* Fritz!Box einschalten
* in *Terminal 1* mit *ftp 192.168.1.1* mit der Fritz!Box verbinden,
sobald in *Terminal 2* der Ping funktioniert
sobald in *Terminal 2* der Ping funktioniert
* Benutzer: adam2
* Passwort: adam2
* Eingabe von *quote SETENV linux_fs_start 0*
......
branches:
- name: v2018.2.2-ffbs-201907171911-stable
channel: stable
date: 2019-07-24
site: "https://gitli.stratum0.org/ffbs/ffbs-site/commit/b37e28d2135c9023ff4dd6c3ebfb0cebc41f2d06"
gluon: "https://gitli.stratum0.org/ffbs/ffbs-gluon/tree/v2018.2.2-ffbs"
rtd: "https://gluon.readthedocs.io/en/v2018.2.x/releases/v2018.2.2.html"
v2018.2.2-ffbs
==============
* Gluon ist nun auf v2018.2.2:
* Dieses Release repariert mehrere kritische Lücken im Linux-Kernel.
* Die Art kabelgebundene Clients zu zählen wurde überarbeitet.
Die Zahl der gemeldeten Benutzer kann sich mit diesem Release also
ändern.
* Dieses Release behebt einen Fehler im Mesh-Protokoll, durch den es
zu erhöhtem Management-Traffic gekommen sein kann.
* Es wird keine neue Hardware unterstützt.
* Mesh über IBSS wurde mit diesem Release in unserem Netz deaktiviert.
Damit setzt Freifunk Braunschweig nun auch auf das moderne 801.11s-mesh.
In den meisten Fällen sollte der Wechsel unbemerkt von statten gehen.
Wir erwarten nur bei einigen wenigen Routern Probleme bei oder nach
dem Update.
Mit der zusätzlichen Unterstützung von 802.11s stehen uns nun auch die Geräte
zur Verfügung, die kein IBSS unterstützen. z.B. der 841 v13.
Bitte beachte: Durch die Änderung der WLAN-Mesh-Technologie können Geräte, die
eine nicht aktuelle Firmware verwenden nicht mehr mit Geräten meshen, die eine
alte Firmware verwenden!
branches:
- name: v2018.2.3-ffbs-201909191459-stable
channel: stable
date: 2019-09-24
- name: v2018.2.3-ffbs-201909161954-beta
channel: beta
date: 2019-09-16
site: "https://gitli.stratum0.org/ffbs/ffbs-site/commit/b37e28d2135c9023ff4dd6c3ebfb0cebc41f2d06"
gluon: "https://gitli.stratum0.org/ffbs/ffbs-gluon/tree/v2018.2.3-ffbs"
rtd: "https://gluon.readthedocs.io/en/v2018.2.x/releases/v2018.2.3.html"
v2018.2.3-ffbs
==============
* Gluon ist nun auf v2018.2.3:
* Diese neue Version enthält Unterstützung für ein paar neue
Geräte. Die Liste findest du hinter dem Link oben.
* Traffic-Shaping sollte mit diesem Release nun wieder funktionieren.
Danke an Thorsten für das Melden des Fehlers und die Unterstützung
bei der Fehlersuche.
* Die Firmware sollte nun auch im stabilen Zweig auf der Fritzbox 4040
funktionieren.
* Weitere Änderungen sind in den Release-Notes nachzulesen.
* Es gibt keine kleine Änderung auf der SSH-Konfigurationsseite:
Wir weisen nun explizit darauf hin, dass wir nur RSA-Keys unterstützen
(können).
branches:
- name: v2019.1-ffbs-201909272234-stable
channel: stable
date: 2019-09-28
- name: v2019.1-ffbs-201909262250-beta
channel: beta
date: 2019-09-26
site: "https://gitli.stratum0.org/ffbs/ffbs-site/commit/82210db53b97480c8d763bf869da55ac17598f62"
gluon: "https://gitli.stratum0.org/ffbs/ffbs-gluon/tree/v2019.1-ffbs"
rtd: "https://gluon.readthedocs.io/en/v2019.1.x/releases/v2019.1.html"
v2019.1-ffbs
============
* Gluon ist nun auf v2019.1
* Diese neue Version enthält Unterstützung für ein paar neue
Geräte. Die Liste findest du hinter dem Link oben.
* Neu ist darüber hinaus der Outdoor-Mode:
Bei typischen Outdoor-Geräten hast du nun die Option diesen
Modus zu aktivieren.
Durch aktivieren dieses Modus verwendet dein Accesspoint nur
noch Kanäle, die in Deutschland auf 5GHz für den Betrieb
ausserhalb von Räumen zugelassen sind und aktiviert DFS.
Darüber hinaus wird auf 5GHz das Mesh deaktiviert.
(Da bei DFS der Kanal nicht fix sein darf ergibt Mesh dann
keinen Sinn mehr.)
* Neu ist auch die "Deprecation":
Im Gluon selbst sind nun 4MB-Flash Geräte als "veraltet"
markiert. Für uns Braunschweig ändert das aber vorerst nichts.
Wir werden zunächst weiterhin auch für diese Geräte Firmware
zur Verfügung stellen.
* Zusätzlich gab es eine ganze Reihe interne Änderungen.
Diese sind der Grund warum ich die Firmware langsam
ausrollen werde. Sollte es zu Problemen kommen gebt mir
daher bitte zeitnah Bescheid.
* Weitere Änderungen sind in den Release-Notes nachzulesen.
* In der Braunschweiger-Variante sind weiterhin die 8MB und 16MB
841er Geräte enthalten.
Diese Firmware kann für selbst umgebaute Geräte verwendet werden.
Hier würde ich mich weiterhin über Feedback freuen, falls jemand
so ein Gerät hat. Bis zum Feedback seht diese Firmware bitte
als experimentell an.
branches:
- name: v2019.1.1-ffbs-202001091902-beta
channel: beta
date: 2020-01-12
- name: v2019.1.1-ffbs-202001182319-stable
channel: stable
date: 2020-01-19
site: "https://gitli.stratum0.org/ffbs/ffbs-site/commit/0dc42bfe544e37d8c0da7aa7029ba4e198c7afd2"
gluon: "https://gitli.stratum0.org/ffbs/ffbs-gluon/tree/v2019.1.1-ffbs"
rtd: "https://gluon.readthedocs.io/en/v2019.1.x/releases/v2019.1.1.html"
v2019.1.1-ffbs
==============
* Gluon ist nun auf v2019.1.1:
Diese Version enthält im Wesentlichen keine für uns relevaten
Bugfixes.
* Mit dieser Version ändern wir die MTU in den Tunneln auf 1312 Bytes.
Um das Umzusetzen nutzen die Knoten nun einen anderen Port für das VPN:
Anstatt 10001 benutzen Knoten ab dieser Firmware den Port 10000.
Wir erwarten durch diese Änderun keine Probleme. Allerdings werden wir
erst einmal abwarten, wie sich die Geräte im Beta-Branch damit verhalten.
Wer bisher an einem DS-Lite Anschluss [0] (z.B. von HTP oder Kabeldeutschland)
ist sollte nach diesem Update einen Performance-Schub erfahren.
* In der Braunschweiger-Variante sind weiterhin die 8MB und 16MB
841er Geräte enthalten.
Diese Firmware kann für selbst umgebaute Geräte verwendet werden.
Hier würde ich mich weiterhin über Feedback freuen, falls jemand
so ein Gerät hat. Bis zum Feedback seht diese Firmware bitte
als experimentell an.
branches:
- name: v2019.1.2-ffbs-202003042122-beta
channel: beta
date: 2020-03-05
- name: v2019.1.2-ffbs-202003072230-stable
channel: stable
date: 2020-03-07
site: "https://gitli.stratum0.org/ffbs/ffbs-site/commit/0dc42bfe544e37d8c0da7aa7029ba4e198c7afd2"
gluon: "https://gitli.stratum0.org/ffbs/ffbs-gluon/tree/v2019.1.2-ffbs"
rtd: "https://gluon.readthedocs.io/en/v2020.1.x/releases/v2019.1.2.html"
v2019.1.2-ffbs
==============
* Gluon ist nun auf v2019.1.2:
Diese Version korrigiert zwei sicherheitsrelevante Fehler an Komponenten
des Betriebssystems. Weitere Informationen hierzu finden sich in den
Gluon Release-Notes.
branches:
- name: 2019.1.3-4-g68b5ddaa-202011211923-beta
channel: beta
date: 2020-11-21
- name: v2019.1.3-4-g68b5ddaa-202012022120-stable
channel: stable
date: 2020-12-30
site: "https://gitli.stratum0.org/ffbs/ffbs-site/commit/0dc42bfe544e37d8c0da7aa7029ba4e198c7afd2"
gluon: "https://gitli.stratum0.org/ffbs/ffbs-gluon/-/tree/v2019.1.3-ffbs"
rtd: "https://gluon.readthedocs.io/en/v2019.1.3/releases/v2019.1.3.html"
v2019.1.3-ffbs
==============
* Gluon ist nun auf v2019.1.3:
Dieses Release enthält diverse kleine Bugfixes, die für das Freifunk Braunschweig Netz
nicht von großer Bedeutung sein sollten.
template: firmware.html
title: Firmware
sort: 105
Firmware
========
Diese Seite gibt einen Überblick über die Änderungen zwischen unterschiedlichen
Versionen der Freifunk Braunschweig Firmware.
Die aktuellste Firmware kann über den folgenden Link heruntergeladen werden.
Solltest du eine ältere Firmware benötigen kannst du dich über
`Kontakt </kontakt.html>`__ an uns wenden.
:raw-html:`<a class="btn btn-success" style="display: inline-flex; align-items:center;" href="https://firmware.freifunk-bs.de/#stable" ><i class="fas fa-download" style="font-size:150%; margin-right:0.5em;"></i> Firmware herunterladen</a>`
......@@ -16,8 +16,6 @@ Freifunk Project Parker: Neue Technik für Freifunk
.. ffbsbox::
| **Schnellzugriff**:
| `Firmware Download </parker/firmware.html>`__
| `Karte <https://w.freifunk-bs.de/map/>`__ und `Meshansicht <https://w.freifunk-bs.de/map/#!/de/graph>`__
| `Statistiken <https://w.freifunk-bs.de/grafana/d/LqfM5XSWz/global?orgId=1>`__
Project Parker ist eine Initiative des Freifunk Braunschweig eine neue
......@@ -31,8 +29,9 @@ Damit unterstützten wir weiterhin die von Freifunk gewohnte Hardware und an
der Installation ändert sich ebenfalls nicht viel.
Die großen Änderungen sind im Verborgenen geschehen.
Seit Ende 2021 basiert Freifunk Braunschweig auf dem Projekct Parker.
Auf dieser Seite wollen wir eine Übersicht für Anwender und Profis geben.
Das Projekt befindet sich derzeit in der Public Beta Phase.
Mitmachen für Anwender
----------------------
......@@ -43,9 +42,8 @@ Für Endanwender gibt es die folgenden Möglichkeiten mitzumachen:
..........................
Dies ist der einfachste Weg mitzumachen.
Suche mit deinem Gerät nach dem WLAN **Freifunk-next** und verbinde dich mit diesem.
Du surfst nun über das Parker-Netz.
Im `Meshviewer <https://w.freifunk-bs.de/map/#!/de/map>`__ kannst du die Positionen vieler Router finden.
Suche mit deinem Gerät nach dem WLAN **Freifunk** und verbinde dich mit diesem.
Im `Meshviewer </map/#!/de/map>`__ kannst du die Positionen vieler Router finden.
Außerdem kannst Du im Parker-Netz wie gewohnt alle anderen Knoten erreichen.
......@@ -62,8 +60,8 @@ Einen eigenen Knoten zu betreiben ist mit *Project Parker* genau so einfach, wie
Die folgenden Links enthalten weitere Informationen:
* Die Firmware findest du `hier </parker/firmware.html>`__.
* Um das Netz im Blick zu behalten gibt es den `meshviewer <https://w.freifunk-bs.de/map/>`__, sowie ein `Grafana <https://w.freifunk-bs.de/grafana/>`__
* Die Firmware findest du `hier </parker/firmware.html>`__
* Um das Netz im Blick zu behalten gibt es den `meshviewer </map>`__, sowie ein `Grafana </grafana>`__
Während des Beta-Betriebs haben die Entwickler Zugriff auf die Geräte.
Zusätzlich senden die Geräte ihre Logdaten an einen zentralen Logserver in unserem Netz.
......
......@@ -13,4 +13,4 @@ Die aktuellste Firmware kann über den folgenden Link heruntergeladen werden.
Solltest du eine ältere Firmware benötigen kannst du dich über
`Kontakt </kontakt.html>`__ an uns wenden.
:raw-html:`<a class="btn btn-success" style="display: inline-flex; align-items:center;" href="https://w.freifunk-bs.de/firmware/" ><i class="fas fa-download" style="font-size:150%; margin-right:0.5em;"></i> Firmware herunterladen</a>`
:raw-html:`<a class="btn btn-success" style="display: inline-flex; align-items:center;" href="/firmware/" ><i class="fas fa-download" style="font-size:150%; margin-right:0.5em;"></i> Firmware herunterladen</a>`
......@@ -49,7 +49,7 @@
<a class="dropdown-toggle" data-toggle="dropdown" data-target="#" href="#">Projekte<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="/parker.html">Project Parker: Öffentlicher Test</a>
<a href="/parker.html">Project Parker</a>
</li>
<li>
<a href="/event.html">Event WLAN</a>
......@@ -78,10 +78,10 @@
{% endfor %}
{% endwith %}
<li role="presentation">
<a href="/spenden.html">Spenden</a>
<a href="/parker/firmware.html">Firmware</a>
</li>
<li role="presentation">
<a href="/eintragen.html">Router eintragen</a>
<a href="/spenden.html">Spenden</a>
</li>
</ul>
</li>
......@@ -100,13 +100,8 @@
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" data-target="#" href="/karte.html">Karte <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li role="presentation"><a role="menuitem" tabindex="-1" href="/karte.html#10/52.2645/10.522">Alle</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="/karte.html#13/52.263/10.5229">Braunschweig</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="/karte.html#14/52.2301/11.0099">Helmstedt</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="/karte.html#14/52.1438/10.7725">Sch&ouml;ppenstedt</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="/karte.html#13/52.1415/10.9634">Sch&ouml;ningen</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="/karte.html#12/52.4266/10.7834">Wolfsburg</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="//map.freifunk-bs.de#!v:g">Graph</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="/map/#!/de/map">Karte</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="/map/#!/de/graph">Graph</a></li>
</ul>
</li>
......@@ -143,7 +138,7 @@
</div>
<div class="col-md-3">
<ul class="nav nav-pills nav-stacked">
<li><a href="/mitmachen/firmware.html">Firmware</a></li>
<li><a href="/parker/firmware.html">Firmware</a></li>
<li><a href="/mitmachen/mailingliste.html">Mailingliste</a></li>
</ul>
</div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment