Freifunk/Aufsetzen der Mesh Karte: Unterschied zwischen den Versionen

Aus Wiki CCC Göttingen
Zur Navigation springen Zur Suche springen
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
==Voraussetzungen==
==Voraussetzungen==
Die Installation von ffmap-d3 und dem backend hat von allen Aufgaben am meisten Zeit und Nerven gekostet, u.a. weil so viele Versionen existieren, keine Anleitung auffindbar war und kjo eigentlich keine Ahnung von modernen Webanwendungen hat.


* Die Karte zieht ihre Informationen aus der A.L.F.R.E.D Datenbank. Mindestens das Backend muss also auf einem Rechner laufen, der Verbindung zu Alfred Datenbank hat, bzw. der Verbindung zum Mesh-Netzwerk hat. Wenn er das hat muss das hier funktionieren:
* Die Karte zieht ihre Informationen aus der A.L.F.R.E.D Datenbank. Mindestens das Backend muss also auf einem Rechner laufen, der Verbindung zu Alfred Datenbank hat, bzw. der Verbindung zum Mesh-Netzwerk hat. Wenn er das hat muss das hier funktionieren:
Zeile 36: Zeile 38:


==Pfade==
==Pfade==
Die Karte besteht aus einem Frontend und einem Backend.
Die Karte besteht aus einem Frontend und einem Backend die wir in folgende Pfade gelegt haben:
 
Ich werde folgende Pfade verwenden:


  '''Frontend''' /opt/ffmap-d3
  '''Frontend''' /opt/ffmap-d3
Zeile 47: Zeile 47:
Das Original Frontend liegt hier: https://github.com/ffnord/ffmap-d3
Das Original Frontend liegt hier: https://github.com/ffnord/ffmap-d3


Ich verwende den Göttinger Clone davon.
Wir verwenden den Göttinger Clone davon.


  root@linux:/opt# git clone https://github.com/freifunk-goettingen/ffmap-d3.git -b ffgoe  
  root@linux:/opt# git clone https://github.com/freifunk-goettingen/ffmap-d3.git -b ffgoe  
Zeile 69: Zeile 69:
  }
  }


Jetzt bitte tapfer sein. Ab jetzt wird es sehr schlimm.
 


==Node.js und NPM installieren==
==Node.js und NPM installieren==
root@linux:/opt/ffmap-d3# curl -sL https://deb.nodesource.com/setup | bash -
root@linux:/opt/ffmap-d3# apt-get install nodejs


Grunt und Bower installieren
Der folgende Befehl sollte von einem Gebet an einen heiligen Deiner Wahl begleitet werden
root@linux:/opt/ffmap-d3# npm install -g grunt-cli bower
root@linux:/opt/ffmap-d3# curl -sL https://deb.nodesource.com/setup | bash -
root@linux:/opt/ffmap-d3# apt-get install nodejs
 
==Grunt und Bower installieren==
Mit dem nun gewonnenen npm
root@linux:/opt/ffmap-d3# npm install -g grunt-cli bower
root@linux:/opt/ffmap-d3# npm install


root@linux:/opt/ffmap-d3# npm install
Bower geht klugerweise davon aus, nicht als Root gestartet zu werden. Hab ich aber trotzdem gemacht:
root@linux:/opt/ffmap-d3# bower install --allow-root


root@linux:/opt/ffmap-d3# bower install --allow-root
== Grunt benutzen ==
root@linux:/opt/ffmap-d3# grunt
Mit grunt wird das Projekt fertig übersetzt. Der Output spricht für sich sebst.
[...]
 
Done, without errors.
grunt ist sowas wie make. Ohne Parameter aufgerufen übersetzt er den Code neu. Mit "grunt clean" kann man aufäumen. Aufräumen musste ich um Änderungen in config.js zu übernehmen, sonst nie.
<VirtualHost *:80>
 
root@linux:/opt/ffmap-d3# grunt
[...]
Done, without errors.
 
Das wars. Den Inhalt von ./build kann man direkt an Browser ausliefern.
 
==Abkürzung==
npm install -g grunt-cli bower ; npm install ; bower install --allow-root ; grunt
 
== Webserver konfigurieren ==
Lass den den Apache einen Alias auf das Buildverzeichnis zeigen:
 
<tt>
'''/etc/apache2/sites-enabled/000-default'''
<VirtualHost *:80>
         ServerAdmin webmaster@localhost
         ServerAdmin webmaster@localhost
 
         DocumentRoot /var/www
         DocumentRoot /var/www
         <Directory />
         <Directory />
Zeile 98: Zeile 118:
                 allow from all
                 allow from all
         </Directory>
         </Directory>
 
         ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
         ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
         <Directory "/usr/lib/cgi-bin">
         <Directory "/usr/lib/cgi-bin">
Zeile 106: Zeile 126:
                 Allow from all
                 Allow from all
         </Directory>
         </Directory>
 
         ErrorLog ${APACHE_LOG_DIR}/error.log
         ErrorLog ${APACHE_LOG_DIR}/error.log
 
         # Possible values include: debug, info, notice, warn, error, crit,
         # Possible values include: debug, info, notice, warn, error, crit,
         # alert, emerg.
         # alert, emerg.
         LogLevel warn
         LogLevel warn
 
         CustomLog ${APACHE_LOG_DIR}/access.log combined
         CustomLog ${APACHE_LOG_DIR}/access.log combined
        '''Alias /map /opt/ffmap-d3/build'''
</VirtualHost>
</tt>


        Alias /map /opt/ffmap-d3/build
Unter http://example.com/map ist jetzt schon die leere Karte zu sehen.
</VirtualHost>


=Backend?
== Backend ==


Das Backend ist in python geschrieben. Es hat die Aufgabe die Daten für die Karte zu besorgen.  
Das Backend hat die Aufgabe die Daten für die Karte zu besorgen.  


Dazu benutzt es die Ausgabe folgender Kommandos:
Dazu benutzt es die Ausgabe folgender Kommandos:


alfred-json -z -r 158
alfred-json -z -r 158
alfred-json -z -r 159
alfred-json -z -r 159
batadv-vis -u /var/run/alfred.sock -i bat0 -f json
batadv-vis -u /var/run/alfred.sock -i bat0 -f json
batctl -m bat0 gwl -n
batctl -m bat0 gwl -n
batctl -m bat0 gw
batctl -m bat0 gw


Und eine "Konfigurationsdatei"
Und eine "Konfigurationsdatei":


/opt/ffmap-backend/aliases.json
/opt/ffmap-backend/aliases.json
Der Inhalt dieser Datei wird den oben gewonnenen Informationen hinzugefügt. Vor allem werden hier die VPN Gateways bekannt gemacht. Ohne diese Datei würden die VPN Gateways als normale Nodes mit sehr vielen Verbindungen erscheinen.


Die dabei gewonnenen Informationen landen hier:
Die gewonnenen Informationen landen hier:


1. /opt/ffmap-d3/build/nodes.json - Die zentrale Informationsammlung, die via Web Verfügbar gemacht wird. Hieraus bedient sich die Geo Karte, die Mesh-Karte, die Liste und sogar externe Dienste, freifunk-karte.de und hoffentlich bald auch die IOS Freifunk App.
;1. /opt/ffmap-d3/build/nodes.json  
a. /opt/ffmap-d3/build/nodes/*png - Graphen die auf der Karte verlinkt sind
:Die zentrale Informationsammlung, die via Web Verfügbar gemacht wird. Hieraus bedient sich die Geo Karte, die Mesh-Karte, die Liste und sogar externe Dienste, freifunk-karte.de und hoffentlich bald auch die IOS Freifunk App.
2. /opt/ffmap-backend/state.json - Statusinformationen, die auch Nodes beinhalten die mangels Aktivität aus der Alfred Datenbank verschwunden sind. Dank dieser Datei haben wir auch ausgeschaltete Nodes auf der Karte.
;2.. /opt/ffmap-d3/build/nodes/*png
3. /opt/ffmap-backend/nodesdb/<mac>.rrd - RRD Datenbanken in denen für jeden einzelnen Node gespeichert wird, wann er Online war und wieviele Clients er hatte
:Graphen die auf der Karte verlinkt sind. Hier liegen auch die sehr interessanten Übersichtsgraphen '''globalGraph_30d.png, globalGraph_365d.png und globalGraph.png'''
4. /opt/ffmap-backend/nodesdb/nodes.rrd -
;3. /opt/ffmap-backend/state.json  
:Statusinformationen, die auch Nodes beinhalten die mangels Aktivität aus der Alfred Datenbank verschwunden sind. Dank dieser Datei haben wir auch ausgeschaltete Nodes auf der Karte.
;4. /opt/ffmap-backend/nodesdb/<mac>.rrd
:RRD Datenbanken in denen für jeden einzelnen Node gespeichert wird, wann er Online war und wieviele Clients er hatte
;5. /opt/ffmap-backend/nodesdb/nodes.rrd  
:RRD Datenbank mit der Anzahl Knoten und Clients im Netz über das gesamte letzte Jahr


Das Backend gibt es in zig unterschiedlichen Versionen. Die Ursprungsversion ist zur Zeit hier:
Das Backend gibt es in zig unterschiedlichen Versionen. Die Ursprungsversion ist zur Zeit hier: https://github.com/ffnord/ffmap-backend


https://github.com/ffnord/ffmap-backend
Wir haben uns nach Studium des Entwicklungsverlaufs dazu entschieden, die Version von Freifunk Mainz, Wiesbaden & Umgebung zu nehmen.


Wir haben uns nach Studium des Entwicklungsverlaufs dazu entschieden die Version von Freifunk Mainz, Wiesbaden & Umgebung zu nehmen.
root@linux:/opt# git clone https://github.com/freifunk-mwu/ffmap-backend.git -b mwu
Cloning into 'ffmap-backend'...
remote: Counting objects: 1501, done.
remote: Compressing objects: 100% (581/581), done.
remote: Total 1501 (delta 912), reused 1492 (delta 907)
Receiving objects: 100% (1501/1501), 489.23 KiB | 285 KiB/s, done.
Resolving deltas: 100% (912/912), done.


root@linux:/opt# git clone https://github.com/freifunk-mwu/ffmap-backend.git
==Photon Installieren==
Cloning into 'ffmap-backend'...
Das MWU Backend verwendet eine spezielle Software. Ob das folgende so ist wie es sich der Autor gedacht hat weiss ich nicht 100%ig.
remote: Counting objects: 1501, done.
remote: Compressing objects: 100% (581/581), done.
remote: Total 1501 (delta 912), reused 1492 (delta 907)
Receiving objects: 100% (1501/1501), 489.23 KiB | 285 KiB/s, done.
Resolving deltas: 100% (912/912), done.


Photon Installieren
Paketmanager...
root@linux:/opt/ffmap-backend#  aptitude install python3-pip


aptitude install python3-pip


# pip-3.2 install photon_core
Photon..
Requirement already satisfied (use --upgrade to upgrade): photon-core in /usr/local/lib/python3.2/dist-packages
Requirement already satisfied (use --upgrade to upgrade): PyYAML in /usr/lib/python3/dist-packages (from photon-core)
Cleaning up...


root@linux:/opt/ffmap-backend#  pip-3.2 install photon_core
Requirement already satisfied (use --upgrade to upgrade): photon-core in /usr/local/lib/python3.2/dist-packages
Requirement already satisfied (use --upgrade to upgrade): PyYAML in /usr/lib/python3/dist-packages (from photon-core)
Cleaning up...


root@linux:/opt/ffmap-backend# git clone https://github.com/spookey/photon.git
Offenbar wird das hier auch noch gebraucht:
root@linux:/opt/ffmap-backend# cd photon/
root@linux:/opt/ffmap-backend/photon# python3 setup.py install


Die Aliases Datei schreiben:
root@linux:/opt/ffmap-backend# git clone https://github.com/spookey/photon.git
root@linux:/opt/ffmap-backend# cd photon/
root@linux:/opt/ffmap-backend/photon# python3 setup.py install
 
== Aliases Datei ==
Die Aliases Datei ist wichtig. Aus ihr geht hervor welche der Nodes VPN Gateways sind. Ohne das sieht die Karte falsch aus:
 
<pre>
root@linux:/opt/ffmap-backend# cat aliases.json
root@linux:/opt/ffmap-backend# cat aliases.json
{
{
Zeile 187: Zeile 221:
   }
   }
}
}
</pre>


== Cron ==


Einen Cron-Job einrichten der folgendes so oft tut wie die Karte upgedatet werden soll:


cd /opt/ffmap-backend
./bat2nodes.py -a aliases.json -m bat0 -d /opt/ffmap-d3/build/


Einen Cron-Job einrichten der folgendes tut:
Das wars.
 
cd /opt/ffmap-backend
./bat2nodes.py -a aliases.json -m bat0 -d /opt/ffmap-d3/build/
 
Das sollte bereits Fehlerfrei durchlaufen.

Aktuelle Version vom 6. Mai 2015, 23:58 Uhr

Voraussetzungen[Bearbeiten]

Die Installation von ffmap-d3 und dem backend hat von allen Aufgaben am meisten Zeit und Nerven gekostet, u.a. weil so viele Versionen existieren, keine Anleitung auffindbar war und kjo eigentlich keine Ahnung von modernen Webanwendungen hat.

  • Die Karte zieht ihre Informationen aus der A.L.F.R.E.D Datenbank. Mindestens das Backend muss also auf einem Rechner laufen, der Verbindung zu Alfred Datenbank hat, bzw. der Verbindung zum Mesh-Netzwerk hat. Wenn er das hat muss das hier funktionieren:
root@linux:~# alfred-json -z -r 158 

Da sollte sowas raus kommen:

{
  "c4:6e:1f:7a:9c:a8": {
    "location": {
      "longitude": 9.9046559999999992,
      "latitude": 51.553319000000002
    },
    "network": {
      "mac": "c4:6e:1f:7a:9c:a8",
      "addresses": [
        "fde6:36fc:c985:0:c66e:1fff:fe7a:9ca8",
        "fe80:0:0:0:c66e:1fff:fe7a:9ca8"
      ],
      "mesh_interfaces": [
        "c6:72:1f:7a:9c:a8",
        "c6:71:20:7a:9c:a8"
      ]
    },
    "node_id": "c46e1f7a9ca8",
    "hostname": "ffgoe-2abc",
    "hardware": {
      "model": "TP-Link TL-WR841N/ND v9"
[...]
  • Auf dem Frontend muss ein Webserver laufen, in unserem Fall ein Apache2.
  • Auf dem Server ist Debian Wheezy installiert

Pfade[Bearbeiten]

Die Karte besteht aus einem Frontend und einem Backend die wir in folgende Pfade gelegt haben:

Frontend /opt/ffmap-d3
Backend  /opt/ffmap-backend

Frontend[Bearbeiten]

Das Original Frontend liegt hier: https://github.com/ffnord/ffmap-d3

Wir verwenden den Göttinger Clone davon.

root@linux:/opt# git clone https://github.com/freifunk-goettingen/ffmap-d3.git -b ffgoe 
Cloning into 'ffmap-d3'...
remote: Counting objects: 1838, done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 1838 (delta 9), reused 0 (delta 0) 
Receiving objects: 100% (1838/1838), 869.95 KiB | 609 KiB/s, done.
Resolving deltas: 100% (1064/1064), done.

Zwei Konfigurationsdateien anpassen:

/opt/ffmap-d3/config.js
sitename:  "goettingen.freifunk.net",
/opt/ffmap-d3/config.json
{
 "cityname": "Freifunk Göttingen",
 "sitename": "goettingen.freifunk.net",
 "url": "http://freifunk-goettingen.de"
}


Node.js und NPM installieren[Bearbeiten]

Der folgende Befehl sollte von einem Gebet an einen heiligen Deiner Wahl begleitet werden

root@linux:/opt/ffmap-d3# curl -sL https://deb.nodesource.com/setup | bash -
root@linux:/opt/ffmap-d3# apt-get install nodejs

Grunt und Bower installieren[Bearbeiten]

Mit dem nun gewonnenen npm

root@linux:/opt/ffmap-d3# npm install -g grunt-cli bower
root@linux:/opt/ffmap-d3# npm install

Bower geht klugerweise davon aus, nicht als Root gestartet zu werden. Hab ich aber trotzdem gemacht:

root@linux:/opt/ffmap-d3# bower install --allow-root

Grunt benutzen[Bearbeiten]

Mit grunt wird das Projekt fertig übersetzt. Der Output spricht für sich sebst.

grunt ist sowas wie make. Ohne Parameter aufgerufen übersetzt er den Code neu. Mit "grunt clean" kann man aufäumen. Aufräumen musste ich um Änderungen in config.js zu übernehmen, sonst nie.

root@linux:/opt/ffmap-d3# grunt
[...]
Done, without errors.

Das wars. Den Inhalt von ./build kann man direkt an Browser ausliefern.

Abkürzung[Bearbeiten]

npm install -g grunt-cli bower ; npm install ; bower install --allow-root ; grunt

Webserver konfigurieren[Bearbeiten]

Lass den den Apache einen Alias auf das Buildverzeichnis zeigen:

/etc/apache2/sites-enabled/000-default
<VirtualHost *:80>
       ServerAdmin webmaster@localhost

       DocumentRoot /var/www
       <Directory />
               Options FollowSymLinks
               AllowOverride None
       </Directory>
       <Directory /var/www/>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride None
               Order allow,deny
               allow from all
       </Directory>

       ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
       <Directory "/usr/lib/cgi-bin">
               AllowOverride None
               Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
               Order allow,deny
               Allow from all
       </Directory>

       ErrorLog ${APACHE_LOG_DIR}/error.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       CustomLog ${APACHE_LOG_DIR}/access.log combined

       Alias /map /opt/ffmap-d3/build
</VirtualHost>

Unter http://example.com/map ist jetzt schon die leere Karte zu sehen.

Backend[Bearbeiten]

Das Backend hat die Aufgabe die Daten für die Karte zu besorgen.

Dazu benutzt es die Ausgabe folgender Kommandos:

alfred-json -z -r 158
alfred-json -z -r 159
batadv-vis -u /var/run/alfred.sock -i bat0 -f json
batctl -m bat0 gwl -n
batctl -m bat0 gw

Und eine "Konfigurationsdatei":

/opt/ffmap-backend/aliases.json

Die gewonnenen Informationen landen hier:

1. /opt/ffmap-d3/build/nodes.json
Die zentrale Informationsammlung, die via Web Verfügbar gemacht wird. Hieraus bedient sich die Geo Karte, die Mesh-Karte, die Liste und sogar externe Dienste, freifunk-karte.de und hoffentlich bald auch die IOS Freifunk App.
2.. /opt/ffmap-d3/build/nodes/*png
Graphen die auf der Karte verlinkt sind. Hier liegen auch die sehr interessanten Übersichtsgraphen globalGraph_30d.png, globalGraph_365d.png und globalGraph.png
3. /opt/ffmap-backend/state.json
Statusinformationen, die auch Nodes beinhalten die mangels Aktivität aus der Alfred Datenbank verschwunden sind. Dank dieser Datei haben wir auch ausgeschaltete Nodes auf der Karte.
4. /opt/ffmap-backend/nodesdb/<mac>.rrd
RRD Datenbanken in denen für jeden einzelnen Node gespeichert wird, wann er Online war und wieviele Clients er hatte
5. /opt/ffmap-backend/nodesdb/nodes.rrd
RRD Datenbank mit der Anzahl Knoten und Clients im Netz über das gesamte letzte Jahr

Das Backend gibt es in zig unterschiedlichen Versionen. Die Ursprungsversion ist zur Zeit hier: https://github.com/ffnord/ffmap-backend

Wir haben uns nach Studium des Entwicklungsverlaufs dazu entschieden, die Version von Freifunk Mainz, Wiesbaden & Umgebung zu nehmen.

root@linux:/opt# git clone https://github.com/freifunk-mwu/ffmap-backend.git -b mwu
Cloning into 'ffmap-backend'...
remote: Counting objects: 1501, done.
remote: Compressing objects: 100% (581/581), done.
remote: Total 1501 (delta 912), reused 1492 (delta 907) 
Receiving objects: 100% (1501/1501), 489.23 KiB | 285 KiB/s, done.
Resolving deltas: 100% (912/912), done.

Photon Installieren[Bearbeiten]

Das MWU Backend verwendet eine spezielle Software. Ob das folgende so ist wie es sich der Autor gedacht hat weiss ich nicht 100%ig.

Paketmanager...

root@linux:/opt/ffmap-backend#  aptitude install python3-pip


Photon..

root@linux:/opt/ffmap-backend#  pip-3.2 install photon_core
Requirement already satisfied (use --upgrade to upgrade): photon-core in /usr/local/lib/python3.2/dist-packages
Requirement already satisfied (use --upgrade to upgrade): PyYAML in /usr/lib/python3/dist-packages (from photon-core)
Cleaning up...

Offenbar wird das hier auch noch gebraucht:

root@linux:/opt/ffmap-backend# git clone https://github.com/spookey/photon.git
root@linux:/opt/ffmap-backend# cd photon/
root@linux:/opt/ffmap-backend/photon# python3 setup.py install

Aliases Datei[Bearbeiten]

Die Aliases Datei ist wichtig. Aus ihr geht hervor welche der Nodes VPN Gateways sind. Ohne das sieht die Karte falsch aus:

root@linux:/opt/ffmap-backend# cat aliases.json
{
   "ca:fe:13:37:00:01" : {
      "name" : "Gauß (VPN1)",
      "vpn" : true,
      "firmware" : "Linux",
      "hardware" : "x86"
   },
   "ca:fe:13:37:00:02" : {
      "name" : "Weber (VPN2)",
      "vpn" : true,
      "firmware" : "Linux",
      "hardware" : "x86"
   }
}

Cron[Bearbeiten]

Einen Cron-Job einrichten der folgendes so oft tut wie die Karte upgedatet werden soll:

cd /opt/ffmap-backend
./bat2nodes.py -a aliases.json -m bat0 -d /opt/ffmap-d3/build/ 

Das wars.