Antoine's Research

From WirelessAfrica
Revision as of 17:31, 12 December 2008 by Antoine (talk | contribs)


“ The greatest challenge to any thinker is stating the problem in a way that will allow a solution.
  - Bertrand Russell

“ Go to the people
Live among the people
Learn from the people
Plan with the people
Work with the people
Start with what the people know
Build on what the people have
Teach by showing; learn by doing
Not a showcase but a pattern
Not odds and ends but a system
Not a piecemeal but an integrated approach
Not to conform but to transform
Not relief but release
  - James Yen

ARCHITECTURE

Architecture

TESTBED

Test Bed

 2x Inveneo          (CSIR's)
 2x Linksys WRT54GL  (Antoine's)
 8x Meraki routers   (CSIR's)
 2x Accton routers   (Antoine's)



PREPARE DEVELOPMENT ENVIRONMENT

1. Check out sources

  • Check out meraka trunk
 TODO - we need a name for this code so that we can create a public source repo for it!
  • One of:
    • Check out: OpenWRT Kamikaze
 $ cd ~
 $ svn checkout https://svn.openwrt.org/openwrt/trunk/ kamikaze/
 $ cd kamikaze/
 $ ./scripts/feeds update -a                 # Checkout the extra packages
 $ ./scripts/feeds install <name_1> <name_2> # Creates the symlinks for the packages you like to install
 $ make menuconfig                           # Select your target, packages and other options. Only select the packages you need.
 $ make world
    • Symink to existing OpenWRT
 TODO

2. Configure OpenWRT

  • Read:
 http://wiki.openwrt.org/OpenWrtDocs/BuildingKamikazeHowTo
 http://wiki.openwrt.org/OpenWrtDocs/Packages
  • Do: Check out SVN version of coova-chilli
 cd package ; svn co http://dev.coova.org/svn/coova-ap/packages/kamikaze/coova-chilli ; cd ..
  • Run:
 ./scripts/feeds install libnetsnmp
 ./scripts/feeds install batmand
 ./scripts/feeds install batmand-adv
 ./scripts/feeds install libjson
 ./scripts/feeds install curl
  • Compile packages:
 make package/feeds/packages/net-snmp-compile
 make package/feeds/packages/libjson-c-compile
  • Select packages:
 Base->libpthread
 Administration->meraka-widgets
 Libraries->libjson
 Libraries->libcurl
 Libraries->libnetsnmp
 Libraries->libopenssl
 Network->Captive Portals->coova-chilli
 Network->batmand
 Network->curl


  • Edit: package/opkg/files/opkg.conf : 2
 src packages http://l-cube.artifactual.org.za/~antoine/firmware/packages/mipsel

3. Build Everything

  • Run:
 make
 TODO


INSTALLATION AND CONFIGURATION FOR LINKSYS WRT54G(L)

0. prepare router

  • Handy:
 nvram set boot_wait=on
 nvram commit
 wget http://l-cube.artifactual.org.za/~antoine/firmware/openwrt-brcm-2.4-squashfs.trx -O - | mtd -e linux -r write - linux
 opkg update
 opkg install snmpd ; ln -s ../init.d/snmpd S70snmpd

1. flash router

  • Run:
 wget http://l-cube.artifactual.org.za/~antoine/firmware/openwrt-brcm-2.4-squashfs.trx -O - | mtd -e linux -r write - linux

2.a. configure portal interface (when using wireless port for dev - DEPRECATE)

 uci delete network.lan.type
 uci set wireless.@wifi-iface[0].network=wifi      # TODO - that's whats with the numbers
  • DEPRECATE Append: /etc/config/network
 config 'interface' 'wifi'
         option 'ifname' 'wl0'
  • Run:
 uci set dhcp.lan.ignore=1
 uci set wireless.wl0.disabled=0 
 uci set network.wifi.ifname=wl0
 uci set network.wifi.proto=static
 uci set network.wifi.ipaddr=0.0.0.0
 uci commit
 reboot
  • Test:
 echo 1 > /proc/sys/net/ipv4/ip_forward
 iptables -I POSTROUTING -t nat -o eth0.0 -j MASQUERADE
  • Append: TODO
 echo "echo 1 > /proc/sys/net/ipv4/ip_forward" >> ???
 echo "iptables -I POSTROUTING -t nat -o eth0.0 -j MASQUERADE" >> ???

2.b. Configure router for B.A.T.M.A.N. (using lan port for dev)

  • Read:
 https://dev.open-mesh.net/svn/batman/trunk/batman-adv-kernelland/batman-core/README
 http://open-mesh.net/batman/doc/RoutingVodoo
 http://www.blogin.it/check-batman.html
 http://trac2.assembla.com/nightwing/browser/trunk/etc/config/batman
 http://trac2.assembla.com/nightwing/browser/trunk/etc/config/batman_mode
  • Run: (configure LAN interface)
 uci delete network.lan.type
 uci delete network.lan.gateway
 uci delete network.lan.dns
 uci set network.lan.ipaddr=192.168.1.1
 uci commit
  • Run: (temmporarily disable firewall so we can get in to the WAN interface from my own lan side)
 iptables --flush
  • Run: (OPTIONAL: configure WAN interface for a gateway mesh-node)
 uci set network.wan.proto=static
 uci set network.wan.ipaddr=192.168.20.200
 uci set network.wan.netmask=255.255.255.0
 uci set network.wan.dns=192.168.20.5
 uci set network.wan.gateway=192.168.20.1
 uci commit
  • Edit: /etc/config/wireless
 append 'cfg' to wifi-iface
  • Run: (bring up WIFI interface)
 uci set network.wifi=interface
 uci set network.wifi.ifname=wl0
 uci set wireless.wl0.disabled=0
 uci set wireless.wl0.channel=5
 uci set wireless.cfg.network=wifi
 uci set wireless.cfg.mode=adhoc              # TODO - wtf is it with the numbers ?
 uci set wireless.cfg.ssid=batman
 uci set wireless.cfg.bssid="BB:BB:BB:BB:BB:BB"
 uci commit 
 reboot
  • Append: /etc/opkg.conf (for some reason libpthread has gone missing from master)
 src packages http://l-cube.artifactual.org.za/~antoine/firmware/packages/mipsel
  • One of:
    • Run: (install BATMAN)
 opkg update
 opkg install kmod-batgat                           # gateway only
 opkg install batmand batmand-adv                   # TODO - how do we get the stable branch to install ?
    • Run:
 http://downloads.open-mesh.net/batman/stable/mipsel-kamikaze/batmand_0.3-current_mipsel-kk-elf-32-lsb-static.tgz
  • Configure: (gateway mesh-node)
 rm /etc/rc.d/S45firewall
 uci set network.wifi.proto=static
 uci set network.wifi.ipaddr=10.0.0.1
 uci set network.wifi.netmask=255.0.0.0
  • Configure: (normal mesh-node)
 rm /etc/rc.d/S45firewall
 uci set network.wifi.proto=static
 uci set network.wifi.ipaddr=10.0.0.2
 uci set network.wifi.netmask=255.0.0.0
 uci set network.lan.dns=192.168.20.5             # TODO - LOSE
  • Test: (on gateway mesh-node)
 iptables -t nat -A POSTROUTING -o eth0.1 -j MASQUERADE   # NAT mesh nodes
 batmand -g 100mbit wl0                                   # Start BATMAN
 batmand -s 192.168.20.226 -g 100mbit wl0                 # If you want viz
 batmand -c -d 1                                          # Monitor
 uci set batmand.general.interface=wl0
 uci set batmand.general.gateway_class=100mbit
 uci set batmand.general.visualisation_srv=192.168.20.226
 uci commit
  • Test: (on normal mesh-node)
 batmand -r 3 wl0
 batmand -s 192.168.20.226 -r 3 wl0
 uci set batmand.general.interface=wl0
 uci set batmand.general.routing_class=3
 uci set batmand.general.visualisation_srv=192.168.20.226
 uci commit
 # iptables -t nat -A POSTROUTING --source 192.168.0.0/24 -o gate0 -j MASQUERADE
 iptables -t nat -A POSTROUTING --source 192.168.1.0/24 -o gate0 -j MASQUERADE
 ifconfig eth0.0 0.0.0.0    # for portal
 /etc/init.d/chilli start   # for portal
  • Test: (on meraki normal mesh-node)
 batmand -r 3 ath0   # Start BATMAN
 batmand -s 192.168.20.226 -r 3 ath0                 # If you want viz
 iptables -t nat -A POSTROUTING --source 192.168.1.0/24 -o gate0 -j MASQUERADE   # NAT any clients of this node
 uci set batmand.general.interface=ath0
 uci set batmand.general.routing_class=3
 uci set batmand.general.visualisation_srv=192.168.20.226
 uci commit
  • Run:
 cd /etc/rc.d
 ln -s ../init.d/batmand S80batmand
  • Clean up before restarting BATMAN: - TODO


configure vis server

  • Read:
 https://list.open-mesh.net/pipermail/b.a.t.m.a.n/2008-November/001041.html
  • Do on dashboard:
 svn co http://downloads.open-mesh.net/svn/batman/trunk/ batman-svn
 cd batman-svn/vis
 make
 ./vis eth0


3. configure portal (coova-chilli)

  • Read:
 !!! http://hotcakes.wiki.sourceforge.net/Coova+Chilli+JSON+Interface
 !!! https://help.ubuntu.com/community/WifiDocs/CoovaChilli
 http://daloradius.wiki.sourceforge.net/Chillispot+Integration
 http://coova.org/wiki/index.php/CoovaChilli/JSON
 http://coova.org/wordpress/index.php/2007/08/15/any-page-a-login-page/
  • Run:
 opkg update
 opkg install kmod-tun
 opkg install http://l-cube.artifactual.org.za/~antoine/firmware/packages/mipsel/coova-chilli_1.0.12-1_mipsel.ipk
  • AUTO * Edit: /etc/chilli/defaults
 HS_WANIF=eth0.0    (gate0  for batman)
 HS_LANIF=wl0       (eth0.0 for batman)
 (HS_NETWORK=192.168.1.0/24 for batman)
 (HS_UAMLISTEN=192.168.1.1  for batman)
 HS_DNS1=10.1.0.1   (192.168.20.5)
 HS_RADIUS=192.168.20.225                           
 HS_RADIUS2=192.168.20.225    
 HS_ADMUSR=chillispot
 HS_ADMPWD=thechillispotsecret                      
 HS_RADSECRET=theradiussecret 
 HS_UAMSECRET=theuamsecret    
 HS_UAMALLOW=10.1.0.0/24,192.168.20.0/24   (192.168.1.0/24, 192.168.20.0/24)
 HS_UAMSERVER=10.1.0.1                     (192.168.1.1)
 HS_UAMHOMEPAGE=http://\$HS_UAMLISTEN:\$HS_UAMPORT/www/coova.html  # redirects to HS_UAMFORMAT
 HS_UAMFORMAT=http://\$HS_UAMSERVER:\$HS_UAMPORT/www/index.html    # does JSON login
 HS_UAMSERVICE=http://192.168.20.225/cgi-bin/uam.pl                # Generates pap-password - Needs perl
  • AUTO * Edit: meraka-portal/files/www/cgi-bin/uam.pl
 $uamsecret = "theaumsecret";
  • AUTO * Edit: /etc/chilli/www/ChilliLibrary.js:296
 var logonUrl = chilliController.urlRoot() + 'logon?username=' + escape(username) + '&response='  + resp.response;
  • Do on node:
 scp -r antoine@l-cube.artifactual.org.za:~/Projects/meraka/trunk/package/meraka-portal/files/* /
  • Do on dashboard-server:
 scp -r antoine@l-cube.artifactual.org.za:~/Projects/meraka/trunk/package/meraka-portal/files/www/cgi-bin/* /usr/lib/cgi-bin
  • Test:
 reboot
 #echo 1 > /proc/sys/net/ipv4/ip_forward
 #iptables -I POSTROUTING -t nat -o eth0.0 -j MASQUERADE
 ifconfig eth0.0 0.0.0.0 # (BATMAN)
 /etc/init.d/chilli start
 http://192.168.1.1:3990/json/status?lang=en
  • Run:
  /etc/rc.d ; ln -s ../init.d/chilli S70chilli

== 3b. Integrate coova-chilli + B.A.T.M.A.N.

  • Do: (on mesh-node)
 uci set network.lan.ipaddr=0.0.0.0
 uci set network.wifi.proto=static
 uci set network.wifi.ipaddr=10.0.0.2
 uci set network.wifi.netmask=255.0.0.0
 uci commit

4. install afromesh-*

  • Run:
  make package/afromesh-widgets-compile V=99
  make package/index
  # scp ./build_dir/mipsel/meraka-widgets-0.1/village-bus-* root@192.168.20.200:/www/cgi-bin/
 opkg remove meraka-widgets  
 opkg install http://l-cube.artifactual.org.za/~antoine/firmware/packages/mipsel/meraka-widgets_0.1-1_mipsel.ipk   
 clear;opkg remove meraka-widgets;opkg update;opkg install http://192.168.20.100/~antoine/firmware/packages/mipsel/meraka-widgets_0.1-1_mipsel.ipk
 clear;opkg remove meraka-widgets;opkg install http://192.168.20.100/~antoine/firmware/packages/mipsel/meraka-widgets_0.1-1_mipsel.ipk
 clear;opkg remove afromesh-widgets;opkg install http://192.168.20.100/~antoine/firmware/packages/mipsel/afromesh-widgets_0.1-1_mipsel.ipk


INSTALLATION AND CONFIGURATION FOR OPENMESH

1. FLASHING OPENMESH

  • Read:
 http://www.open-mesh.com/activekb/questions/8/Flashing+the+Accton+Mini-Router+with+ROBIN
 http://wiki.openwrt.org/OpenWrtDocs/Hardware/Fon/Fonera

INSTALLATION AND CONFIGURATION FOR MERAKI

1. FLASHING MERAKI

  • Useful:
 screwdriver
 soldering iron
 A max232 and a handful of capacitors
 hammer (sledge)
  • Read:
 http://sodoityourself.com/max232-serial-level-converter
 http://www.nslu2-linux.org/wiki/HowTo/TelnetIntoRedBoot
 http://wiki.openwrt.org/OpenWrtDocs/Hardware/Meraki/Mini
  • Edit: (Baud rate)
 /Users/antoine/Projects/meraka/ext/kamikaze/target/linux/atheros/config-2.6.26
 /Users/antoine/Projects/meraka/ext/kamikaze/target/linux/atheros/config-2.6.27
  • Do:
 Set computer/laptop ethernet to 192.168.84.9 and plug in Meraki
 -> Serial @ 115200
 ^C to break into redboot
  • Test kernel:
 baudrate -b 9600
 -> Serial @ 9600
 load -r -d -b 0x80041000 -m http -p 80 -h 192.168.84.9 /~antoine/firmware/openwrt-atheros-vmlinux.gz    
 exec
 # ??? load -h 192.168.84.9 -p 80 -m http /~antoine/firmware/openwrt-atheros-vmlinux.elf
  • Create partitions:
 fis delete linux
 fis delete rootfs
 # fis create -b 0x80041000 -l 0x340000 -f 0xa8150000 -e 0x80041000 -r 0x80041000 -n linux 
 # fis create -b 0x80041000 -l 0x340000 -f 0xa8490000 -e 0x80041000 -r 0x80041000 -n rootfs
 fis list
  • Flash the kernel and root filesystem -> OPTION 1: Boot directly from RedBoot
 load -r -b 0x80041000 -m http -p 80 -h 192.168.84.9 /~antoine/firmware/openwrt-atheros-vmlinux.gz
 fis create -r 0x80041000 -e 0x80041000 linux
 load -r -b 0x80041000 -m http -p 80 -h 192.168.84.9 /~antoine/firmware/openwrt-atheros-root.jffs2-64k
 fis create -r 0x80041000 -e 0x80041000 rootfs
    • Test:
 fis load -d linux
 exec
    • Activate:
 fconfig  (-l to show script)
 >> fis load -d linux
 >> exec
    • For Reference the orig is:
 check_mac
 load art_ap51.elf
 go
 fis load stage2
 exec
  • Flash the kernel and root filesystem -> OPTION 2: Booting using the Meraki stage2 loader
 TODO

2. CONFIGURING MERAKI

  • Configure:
 uci delete network.lan.type
 uci set wireless.wifi0.disabled=0
 uci set network.wifi=interface
 uci set network.wifi.ifname=ath0 
 uci set wireless.wifi0.channel=5
 uci set wireless.@wifi-iface[0].ssid=batman
 uci set wireless.@wifi-iface[0].mode=adhoc                # TODO - edit /etc/config/wireless -> config 'wifi-iface' 'cfg'
 uci set wireless.@wifi-iface[0].bssid="BB:BB:BB:BB:BB:BB"
 uci set wireless.@wifi-iface[0].network=wifi            # ??? was lan
 # uci set wireless.@wifi-iface[0].device=ath0             # ??? seems to be happy with being called wifi0
 uci commit
    • Test:
 ifconfig ath0 10.0.0.3
  • Bring eth0 up on local net:
 ifconfig eth0 192.168.20.201
 route add default gw 192.168.20.1
 vi /etc/resolv.conf  
  • Edit: /etc/opkg.conf
 src packages http://l-cube.artifactual.org.za/~antoine/firmware/packages/mips  
  • B.A.T.M.A.N:
 opkg install batmand
    • Configure:
 rm /etc/rc.d/S45firewall
 uci set network.wifi.proto=static
 uci set network.wifi.ipaddr=10.0.0.10
 uci set network.wifi.netmask=255.0.0.0
    • Test:
 batmand -r 3 ath0   # Start BATMAN
 iptables -t nat -A POSTROUTING --source 192.168.1.0/24 -o gate0 -j MASQUERADE   # NAT any clients of this node
 batmand -c -d 2     # Monitor



INSTALLATION AND CONFIGURATION FOR GATEWAY SERVER (Inveneo)

0. Get OS install image onto a USB Stick

  • xubuntu:
 . unetbootin
 . root (hd1,0)
 . kernel /casper/vmlinuz file=preseed/xubuntu.seed boot=casper
 . initrd /casper/initrd.gz
 . boot
  • Puppy:
 . kernel /vmlinuz
 . initrd /initrd.gz
 . boot

1. Depends

  • Starting with ubuntu-8.10 JEOS
 apt-get --no-install-recommends install ssh
 apt-get --no-install-recommends install mysql-server mysql-client mysql-common  (mysql admin password: 1nvene0)
 apt-get install freeradius freeradius-mysql
 apt-get install apache2
 ??? apt-get --no-install-recommends install dnsmasq
 (optional) apt-get install make gcc autoconf libtool libmysqlclient15-dev gdb 
 (optional for vmware-tools) sudo apt-get install linux-headers-`uname -r` (From: http://www.marc-seeger.de/2008/08/06/vmware-tools-on-ubuntu-jeos/)
 (optional for vmware-tools) ln -s /usr/src/linux-headers-2.6.27-7-server /usr/src/linux
  • Starting with xubuntu-8.10-rc desktop edition
 apt-get install ssh                                      (for openssh-server)
 apt-get install rrdtool snmp                             (needed for: phpMyPrepaid)
 apt-get install mysql-server mysql-client mysql-common   (needed for: phpMyPrepaid)
 apt-get install apache2                                  (needed for: phpMyPrepaid)
 apt-get install php5 php5-snmp php5-gd php5-mysql        (needed for: phpMyPrepaid)
 apt-get install freeradius freeradius-mysql
 apt-get install dnsmasq                                  (for dns/dhcp and tftp)
 wget http://ap.coova.org/chilli/coova-chilli_1.0.12-1_i386.deb
 dpkg -i ./coova-chilli_1.0.12-1_i386.deb 
  • Without php-myprepaid
 apt-get install freeradius


2. Configure Billing

  • Read: man rlm_counter
       http://projects.asn.pl/freemods/wiki/rlm_backcounter
       http://www.warungdigital.com/freeradius-disconnected-user-when-time-limit-exceed.htm
  • Edit: /etc/freeradius/modules/counter
 # check-name sets the maximum value of the counter & read from user db
 # count-attribute sets the counter increment
 counter prepaid {
         filename = ${db_dir}/db.prepaid
         counter-name = Prepaid-Session-Time
         check-name = Max-Prepaid-Session
         count-attribute = Acct-Session-Time
         key = User-Name
         reset = never
         reply-name = Session-Timeout
         cache-size = 1000
 }
  • Edit: /etc/freeradius/radiusd.conf
 line 709 uncomment: daily
 line 710 add:       prepaid
  • Edit: /etc/freeradius/sites-enabled/default
 line 166: uncomment daily
 line 167: add prepaid
 line 320: uncomment daily
 line 321: add prepaid
  • Edit: /etc/freeradius/users.chilli -> Add to prepaid users:
 Max-Prepaid-Session=360
  • Check:
 chown -R freerad:freerad /etc/freeradius
  • Add: /etc/group
 www-data to freerad

3. Customer Management - dashboard server

  • Read:
 !!! http://wiki.freeradius.org/Status
 http://wiki.freeradius.org/SNMP_HOWTO
 http://www.w3.org/TR/css3-layout/
  • Do:
 ln -s /etc/freeradius/sites-available/status /etc/freeradius/sites-enabled/status
  • Status:
 echo "Message-Authenticator = 0x00, FreeRADIUS-Statistics-Type = 31" | radclient localhost:18120 status adminsecret
 /var/log/freeradius/radutmp,   /var/log/freeradius/radwtmp
 radwho, radlast


4a. configure flatfile authentication (freeradius - running on dashboard server -> ubuntu JEOS)

  • Read:
 !!! http://coova.org/wiki/index.php/CoovaChilli/RADIUS
 http://wiki.freeradius.org/index.php/FreeRADIUS_Wiki:FAQ#How_do_I_get_radius_to_pick_up_changes_in_the_raddb.2Fusers_file.3F
  • Run:
 apt-get install freeradius
  • Edit: /etc/freeradius/radiusd.conf:113
 pidfile = /var/run/freeradius/freeradius.pid
  • Edit: /etc/freeradius/clients.conf
 client 192.168.20.0/24 {
   secret     = theradiussecret
   shortname  = meshportal
   #nastype    = other
 }
  • Edit: /etc/freeradius/users
 $INCLUDE users.chilli
 DEFAULT Auth-Type := Reject
         Reply-Message = "Login attempt failed.",
         Fall-Through = No
  • Create: /etc/freeradius/users.chilli
 chillispot     ClearText-Password := "thechillispotsecret"
 joe            ClearText-Password := "smith"
 guest          ClearText-Password := "guest"
                Session-Timeout = 300,
                Idle-Timeout = 60,
                WISPr-Bandwidth-Max-Up = 64000,
                WISPr-Bandwidth-Max-Down = 32000
 prepaid        ClearText-Password := "prepaid", Max-Prepaid-Session := 3600
                Reply-Message := "%{Session-Timeout} left %{User-Name}."
  • Test:
 radiusd -X
 radtest chillispot chillispot 192.168.20.225 10 theradiussecret
 /etc/init.d/freeradius start
 kill -1 `cat /var/run/freeradius/freeradius.pid`
  • Edit: /etc/group (Permissions)
 freerad:x:124:www-data
  • Run: (Permissions)
 chmod -R g+w /etc/freeradius
  • Run:
 copy over our custom radius users files&dir


4b. configure mysql authentication (freeradius - running on dashboard server -> ubuntu JEOS)

  • Install:
 apt-get install libmysqlclient-dev
  • Edit: /etc/freeradius/users (disable flat file user entries)
 . comment out users.chilli include and DEFAULT rule
  • Edit: /etc/freeradius/sql.conf
 database = "mysql"
 server = "localhost"
 login = "radius"
 password = "radpass"
 radius_db = "radius"
  • Edit: /etc/freeradius/sites-enabled/default
 authorize:152 -> sql
 accounting:344 -> sql
 session:369 -> sql
 post-auth:396 -> sql
  • Edit: village-bus-radius/Makefile
 .set correct mysql username and password
  • Run: (create radius tables for mysql)
 make mysql
  • Run: (populate radius tables for mysql with defaults & test data)
 make mysql-populate


5. install asterisk & a2billing

  • Read:
 http://www.asterisk2billing.org/cgi-bin/trac.cgi/wiki/Installation%20Guide
  • Do:
 wget http://www.asterisk2billing.org/downloads/A2Billing_1.3.4.tar.gz
 RTFM -> VOIP Lab C From IT46


6. install, configure and create maps

  • Install
    • Get a big hard drive
    • Download the database
    • Install software
    • Import data
  • Configure
    • Configure dashboard with your location
  • Creation
    • Mapnik updates weekly on Wednesdays, be sure to get changes in early!
    • Osma takes around 12 hours
    • Examples
 http://openstreetmap.org/edit?lat=-34.138061&lon=18.339733&zoom=15
 Trigger re-render:  http://www.informationfreeway.org/?lat=-34.138061&lon=18.339733&zoom=15&layers=B0000F000F
 http://openstreetmap.org/?lat=-34.13962&lon=18.33913&zoom=17
 Trigger re-render: Tile url + '/dirty' at the end