Wiki - Freifunk Pinneberg

Freies WLAN im Kreis Pinneberg

Benutzer-Werkzeuge

Webseiten-Werkzeuge


alfred

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
alfred [05.12.2015 19:34] – created havelockalfred [17.07.2017 22:08] havelock
Zeile 3: Zeile 3:
 siehe: http://www.open-mesh.org/projects/alfred/wiki siehe: http://www.open-mesh.org/projects/alfred/wiki
  
-Es gibt bereits eine Version 2015.1. Wir setzen sie aber noch nicht für den Produktivbetrieb ein.+Produktiv wird die Version 2015.0 bzw. die gepatchte Version 2017.1 eingesetzt. 
 + 
 +Ab der Version 2015.1 gibt es anscheinend Probleme: 
 +  can't bind: Cannot assign requested address 
 +  Failed to open interfaces 
 + 
 +Das Verhalten tritt auf, wenn die Link-Lokale IPv6-Adresse des Bridge-Interfaces (über den Parameter ''-i''nicht zu der MAC-Adresse paßt. Vermutlich kann als Workaround die MAC-Adresse für das betreffende Interface mit ''bridge_hw <MAC>'' fixiert werden. 
 + 
 +Wenn man das nicht macht, führt das Hinzufügen von ''bat0'' zur Bridge dazu, daß  
 +die Bridge die MAC vom ''bat0''-Interface übernimmt.  
 + 
 +Details: In der Funktion ''netsock_open'' in ''netsock.c'' wird in Version 2015.0 ein bind 
 +mit ''in6addr_any'' gemacht. In den darauffolgenden Versionen geht der bind auf die Interface-Adresse, die allerdings mit ''mac_to_ipv6(&interface->hwaddr, &interface->address);'' ermittelt wurde. 
 +Insbesondere bei Bridge-Interfaces schlägt dieses aus o.a. Gründen fehl. 
  
 Voraussetzungen Voraussetzungen
-  aptitude install git cmake+  aptitude install git cmake pkg-config ca-certificates 
 + 
 +Für Version 2016.5 zusätzlich: 
 +  aptitude install libnl-genl-3-dev
  
 Quellen herunterladen und entpacken Quellen herunterladen und entpacken
 <code> <code>
 +cd /usr/local/src
 aptitude install libcap-dev aptitude install libcap-dev
-wget http://downloads.open-mesh.org/batman/stable/sources/alfred/alfred-2015.0.tar.gz +wget http://downloads.open-mesh.org/batman/stable/sources/alfred/alfred-2017.1.tar.gz 
-tar xzf alfred-2015.0.tar.gz +tar xzf alfred-2017.1.tar.gz 
-cd alfred-2015.0+cd alfred-2017.1
 </code> </code>
  
-Leider ist das Makefile irgendwie kaputt, deshalb einfach entsprechend  +++++ Patch für alfred >= 2016.5 | 
-nachfolgendem Patch korrigieren:+<file patch ffpi.patch> 
 +diff --git a/netsock.c b/netsock.c 
 +index 86db8a6..9b137f1 100644 
 +--- a/netsock.c 
 ++++ b/netsock.c 
 +@@ -25,6 +25,7 @@ 
 + #include <net/ethernet.h> 
 + #include <net/if.h> 
 + #include <netinet/in.h> 
 ++#include <ifaddrs.h> 
 + #include <stdio.h> 
 + #include <string.h> 
 + #include <sys/ioctl.h> 
 +@@ -210,6 +211,30 @@ out: 
 +  return ret; 
 + } 
 +  
 ++static int get_link_local_addr(uint32_t scope_id, struct in6_addr *addr) 
 ++{ 
 ++ struct ifaddrs *ifaddr, *ifa; 
 +
 ++ if (getifaddrs(&ifaddr) == -1) { 
 ++ perror("getifaddrs"); 
 ++ return -1; 
 ++ } 
 ++ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { 
 ++ if (ifa->ifa_addr == NULL) 
 ++ continue; 
 ++ if (ifa->ifa_addr->sa_family != AF_INET6) 
 ++ continue; 
 +
 ++ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) ifa->ifa_addr; 
 ++ if (sin6->sin6_scope_id == scope_id) { 
 ++ memcpy(addr, &sin6->sin6_addr ,sizeof(struct in6_addr)); 
 ++ break; 
 ++ } 
 ++ } 
 ++ freeifaddrs(ifaddr); 
 ++ return 0; 
 ++} 
 +
 + static int netsock_open(struct interface *interface) 
 + { 
 +  int sock; 
 +@@ -256,7 +281,10 @@ static int netsock_open(struct interface *interface) 
 +  memset(&sin6, 0, sizeof(sin6)); 
 +  sin6.sin6_port = htons(ALFRED_PORT); 
 +  sin6.sin6_family = AF_INET6; 
 +- memcpy(&sin6.sin6_addr, &interface->address, sizeof(sin6.sin6_addr)); 
 ++ if (get_link_local_addr(interface->scope_id, &sin6.sin6_addr) < 0) { 
 ++ perror("cannot get link local address"); 
 ++ goto err; 
 ++ } 
 +  sin6.sin6_scope_id = interface->scope_id; 
 +  
 +  memset(&sin6_mc, 0, sizeof(sin6_mc)); 
 +</file> 
 +++++ 
 + 
 +Anschließend bauen. Den [[GPS]]-Daemon brauchen wir nicht 
 +<code> 
 +git apply -v ffpi.patch 
 +make CONFIG_ALFRED_GPSD=n 
 +make install CONFIG_ALFRED_GPSD=n 
 +</code> 
 + 
 +++++ Informationen für Debian Wheezy: | Leider ist das Makefile unter Wheezy irgendwie kaputt, deshalb einfach entsprechend nachfolgendem Patch korrigieren: 
 <file patch alfred_make.patch> <file patch alfred_make.patch>
 --- ../alfred_/Makefile 2015-05-01 23:47:25.179644579 +0000 --- ../alfred_/Makefile 2015-05-01 23:47:25.179644579 +0000
Zeile 40: Zeile 125:
    CPPFLAGS += -DCONFIG_ALFRED_CAPABILITIES    CPPFLAGS += -DCONFIG_ALFRED_CAPABILITIES
 </file> </file>
- +++++
-Anschließend bauen. Den GPS-Daemon brauchen wir nicht +
-<code> +
-make CONFIG_ALFRED_GPSD=n +
-make install CONFIG_ALFRED_GPSD=n +
-</code>+
  
  
Zeile 52: Zeile 132:
 Wird nur auf dem Server benötigt wo der Meshviewer läuft. Wird nur auf dem Server benötigt wo der Meshviewer läuft.
 Schadet ansonsten aber auch nicht. Schadet ansonsten aber auch nicht.
 +
 +Wichtig: Bei einem fehlerhaften JSON wird eine Warnung ausgegeben. Dieses Verhalten sollte
 +noch verbessert werden, indem:
 +  * ein Schalter ''-q'' "Quiet" eingebaut wird
 +  * der Fehler genauer eingegrenzt wird, damit der betreffende Knoten ggf. markiert werden kann
  
 Tip: Falls das klonen mit Git einen CA SSL Fehler wirft, kann man den umgehen mit: Tip: Falls das klonen mit Git einen CA SSL Fehler wirft, kann man den umgehen mit:
Zeile 66: Zeile 151:
 make install make install
 </code> </code>
 +
 +Tests:
 +  * ''alfred-json -zr 158''
  
 ===== Übersicht über die Alfred-Datenstrukturen ===== ===== Übersicht über die Alfred-Datenstrukturen =====
alfred.txt · Zuletzt geändert: 24.07.2017 10:08 von havelock