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