Freifunk Map Backend¶
Installation¶
Als Benutzer map
die Verzeichnisse /home/map/scripts/map
mit mkdir -p /home/map/scripts/map
anlegen.
Eine virtuelle Python3 Umgebung erstellen:
apt install python3 python3-dev python-virtualenv
cd /home/map/scripts/map
virtualenv --python=python3 venv3
Folgenden Inhalt in die PIP Vorraussetzungsdatei unter dem Dateinamen und Pfad /home/map/scripts/map/requirements.txt
abspeichern.
Die Vorraussetzungen für FFMap-Backend in der virtuellen Python3 Umgebung installieren:
cd /home/map/scripts/map
source venv3/bin/active
pip install --upgrade pip -r requirements.txt
Das FFMap-Backend Repository in das Verzeichnis /home/map/scripts/map/ffmap-backend
klonen:
git clone https://github.com/freifunk-herford/ffmap-backend.git /home/map/scripts/map/ffmap-backend
Folgenden Inhalt in ein Script unter dem Dateinamen und Pfad /home/map/scripts/update-ffmap.sh
abspeichern.
#!/usr/bin/env bash
# Copyright 2016 - 2016 Tobias Benzin tbenzin@digital-nerv.net
# Rally Vincent rvincent@digital-nerv.net
# This file is managed by Salt, do not edit.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
base="/home/map/scripts"
python ${base}/update-node.py \
--url http://gw-hf.herford.freifunk.net/node.json \
--node ${base}/map/gw-hf.json
${base}/map/venv3/bin/python ${base}/map/ffmap-backend/backend.py \
--mesh {{ batman }}:{{ socket }} --dest-dir {{ data }} \
--online-aliases ${base}/map/aliases.json ${base}/map/gw-hf.json --prune 30 \
--with-rrd --rrd-time-global 14d --rrd-time-node 7d \
--anonymize
${base}/map/venv3/bin/python ${base}/map/ffflash/ffflash.py \
--nodelist {{ data }}/nodelist.json \
/var/www/meshviewer/freifunk-api/herford.json
Folgenden Inhalt in die JSON Aliases Datei unter dem Dateinamen und Pfad /home/map/scripts/map/aliases.json
abspeichern.
[
{
"node_id": "altermarkt2",
"hostname": "Alter Markt 2",
"location": {
"longitude": 8.6710792,
"latitude": 52.1140500
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:bf",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:bf"
]
}
}
}
}
},
{
"node_id": "rathaus",
"hostname": "Rathaus",
"location": {
"longitude": 8.6700260,
"latitude": 52.1160820
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:c0",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:c0"
]
}
}
}
}
},
{
"node_id": "berlinerstr10",
"hostname": "Berliner Str",
"location": {
"longitude": 8.6734110,
"latitude": 52.1172614
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:c8",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:c8"
]
}
}
}
}
},
{
"node_id": "technrathaus",
"hostname": "Technisches Rathaus",
"location": {
"longitude": 8.666325,
"latitude": 52.117278
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:c9",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:c9"
]
}
}
}
}
},
{
"node_id": "aufderfreiheit",
"hostname": "Auf der Freiheit",
"location": {
"longitude": 8.665359,
"latitude": 52.117281
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d0",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d0"
]
}
}
}
}
},
{
"node_id": "elsbachhaus2",
"hostname": "Elsbach-Haus 2",
"location": {
"longitude": 8.666357,
"latitude": 52.120941
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d1",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d1"
]
}
}
}
}
},
{
"node_id": "goebenstr",
"hostname": "Goebenstr.",
"location": {
"longitude": 8.669983,
"latitude": 52.124366
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d2",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d2"
]
}
}
}
}
},
{
"node_id": "feuerwehr001",
"hostname": "Feuerwehr Herford 01",
"location": {
"longitude": 8.674908,
"latitude": 52.129905
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d3",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d3"
]
}
}
}
}
},
{
"node_id": "freiwfeuerwehr001",
"hostname": "Freiwillige Feuerwehr 01",
"location": {
"longitude": 8.737907,
"latitude": 52.140709
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d4",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d4"
]
}
}
}
}
},
{
"node_id": "freiwfeuerwehr002",
"hostname": "Freiwillige Feuerwehr 02",
"location": {
"longitude": 8.649266,
"latitude": 52.079021
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d5",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d5"
]
}
}
}
}
},
{
"node_id": "freiwfeuerwehr003",
"hostname": "Freiwillige Feuerwehr 03",
"location": {
"longitude": 8.638301,
"latitude": 52.103362
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d6",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d6"
]
}
}
}
}
},
{
"node_id": "stadttheater",
"hostname": "Stadt Theater",
"location": {
"longitude": 8.678545,
"latitude": 52.120312
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d7",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d7"
]
}
}
}
}
},
{
"node_id": "bibliothek",
"hostname": "Bibliothek",
"location": {
"longitude": 8.672955,
"latitude": 52.115805
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d8",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d8"
]
}
}
}
}
},
{
"node_id": "villaschoenfeld",
"hostname": "Villa Schönfeld",
"location": {
"longitude": 8.663535,
"latitude": 52.115298
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:d9",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:d9"
]
}
}
}
}
},
{
"node_id": "Poeppelmannhaus",
"hostname": "Daniel Pöppelmann Haus",
"location": {
"longitude": 8.663203,
"latitude": 52.115127
},
"network": {
"gateway": "0000000000a1",
"mac": "00:25:86:e6:f1:e0",
"mesh": {
"bat0": {
"interfaces": {
"tunnel": [
"00:25:86:e6:f1:e0"
]
}
}
}
}
}
]
Die Verzeichnisrechte für den Benutzer map
mit dem Befehl chown map:map /var/www/meshviewer/data -R
korrigieren.
Einen Cronjob mit Hilfe von crontab -e -u map
mit folgendem Inhalt anlegen.
*/1 * * * * /home/map/scripts/update-ffmap.sh
Salt State File¶
ffmap-backend.sls
# Freifunk Map Backend
ffmap-backend-prepare:
pkg.installed:
- pkgs:
{% if grains['os_family'] == 'Debian' %}
- python3
- python3-dev
- python-virtualenv
{% endif %}
file.managed:
- name: /home/map/scripts/map/requirements.txt
- source: salt://map/home/map/scripts/map/requirements.txt
- user: map
- group: map
- makedirs: True
ffmap-backend-venv:
virtualenv.managed:
- python: python3
- cwd: /home/map/scripts/map
- name: /home/map/scripts/map/venv3
- requirements: /home/map/scripts/map/requirements.txt
- pip_upgrade: True
- user: map
- require:
- pkg: ffmap-backend-prepare
- file: ffmap-backend-prepare
ffmap-backend-repository:
git.latest:
- name: https://github.com/freifunk-herford/ffmap-backend.git
- target: /home/map/scripts/map/ffmap-backend
- unless: test -d /home/map/scripts/map/ffmap-backend
- user: map
- require:
- file: ffmap-backend-prepare
/home/map/scripts/update-ffmap.sh:
file.managed:
- name: /home/map/scripts/update-ffmap.sh
- source: salt://map/home/map/scripts/update-ffmap.sh
- template: jinja
- defaults:
batman: {{ pillar['network']['batman']['interface'] }}
socket: {{ pillar['alfred']['socket'] }}
data: {{ pillar['meshviewer']['data'] }}
- mode: 755
- user: map
- group: map
- makedirs: True
/home/map/scripts/update-node.py:
file.managed:
- name: /home/map/scripts/update-node.py
- source: salt://map/home/map/scripts/update-node.py
- mode: 755
- user: map
- group: map
- makedirs: True
/home/map/scripts/map/aliases.json:
file.managed:
- name: /home/map/scripts/map/aliases.json
- source: salt://map/home/map/scripts/map/aliases.json
- user: map
- group: map
- makedirs: True
/home/map/scripts/map/gw-hf.json:
file.managed:
- name: /home/map/scripts/map/gw-hf.json
- source: salt://map/home/map/scripts/map/gw-hf.json
- unless: test -f /home/map/scripts/map/gw-hf.json
- user: map
- group: map
- makedirs: True
{{ pillar['meshviewer']['data'] }}:
file.directory:
- name: {{ pillar['meshviewer']['data'] }}
- user: map
- group: map
- makedirs: True
- recurse:
- user
- group
update-ffmap-cron:
cron.present:
- name: /home/map/scripts/update-ffmap.sh
- identifier: update-ffmap
- user: map
- minute: '*/1'
- comment: 'Update Map Data every Minute'
- require:
- file: /home/map/scripts/update-ffmap.sh