Ubiquiti Nanostation M5 with AirOS firmware and OLSR
Ubiquiti Networks provides developers with a SDK to build their factory firmware, AirOS. Both the SDK and the cross-compiler toolchain can be found in the support section of their homepage [0].
By default AirOS uses no dynamic routing protocol, while Ninux.org uses OLSR. The only way to use OLSR with AirOS to make a Ninux node speak OLSR is to patch the firmware and the web interface to include OLSR support.
This patch does not modify the existing kernel configuration nor the wifi driver in order to preserve the stability and functionality of the original firmware. So please note that this patched firmware, like the original one, has no adhoc mode.
Indice
You can build your own Image on your preferred linux distribution by invoking the following commands:
SDK 3.5 with Debian/Ubuntu
# mkdir ubnt-3.x # cd ubnt-3.x # wget http://www.ubnt.com/downloads/sdk/toolchain-mips-ls_0.1-1.deb # dpkg -i toolchain-mips-ls_0.1-1.deb # wget http://www.ubnt.com/downloads/firmwares/XS-fw/v3.5/SDK.UBNT.v3.5.4499.tar.bz2 # tar xjf SDK.UBNT.v3.5.4499.tar.bz2 # wget http://svn.ninux.org/ninuxdeveloping/browser/UbntM5AirOsOLSR/patches/AirOS3.x/patches.tar.gz # tar -xzvf patches.tar.gz # cd SDK.UBNT.v3.5.4499 # patch -p1 < ../UBNT_SDK3.5_with_olsrd-01.patch # tar xzf ../UBNT_SDK3.5_files-02.tar.gz
now we have to download and copy the olsrd source
# cd apps/gpl/olsrd # wget http://www.olsr.org/releases/0.6/olsrd-<version>.tar.bz2 # tar --strip 1 -xjf olsrd-<version>.tar.bz2 # rm olsrd-<version>.tar.bz2 # cd ../../../ # make xs5
You can build a image for 2.4GHz Hardware by replacing the xs5 with xs2.
After building the Image it can be installed via the AirOS Webinterface. If the interface complaints about a wrong image file you have to upgrade AirOS to a newer version which allows the use of third party firmware images.
SDK 5.2 with OLSR 0.6.0
# mkdir ubnt-5.x # cd ubnt-5.x # wget http://www.ubnt.com/downloads/firmwares/XN-fw/v5.2/SDK.UBNT.v5.2.tar.bz2 # tar xjf SDK.UBNT.v5.2.tar.bz2 # wget http://svn.ninux.org/ninuxdeveloping/browser/UbntM5AirOsOLSR/patches/AirOS5.x/patches.tar.gz # tar -xzvf patches.tar.gz # cd SDK.UBNT.v5.2 # patch -p1 < ../olsrd-package.patch # patch -p1 < ../ubnt-web-with-olsrd.patch # patch -p1 < ../optional-default-gw.patch # patch -p1 < ../fffversion.patch # tar xzf ../additional-files.tar.gz # cd openwrt # make
SDK 5.2.1 with OLSR 0.6.1
# mkdir ubnt-5.x # cd ubnt-5.x # wget http://www.ubnt.com/downloads/firmwares/XN-fw/v5.2.1/SDK.UBNT.v5.2.1.tar.bz2 # tar jxf SDK.UBNT.v5.2.1.tar.bz2 # wget http://svn.ninux.org/ninuxdeveloping/browser/UbntM5AirOsOLSR/patches/AirOS5.x/patches.tar.gz # tar -xzvf patches.tar.gz # cd SDK.UBNT.v5.2.1 # patch -p1 < ../ninux-airos_olsr0.6.1_final.patch # tar -zxvf ../additional-content.tar.gz # cd openwrt # make
After building the binary file can be found in openwrt/bin and can be installed via the AirOS Webinterface.
If you have successfully installed the image you can turn on olsrd using the enable button at the services section of the Web Interface.
You can also download your own olsrd.conf via the Webinterface. If you download an own configuration file be sure it includes the configuration lines for the txtinfo plugin as this plugin is needed by the Web Inteface to show the OLSR Info.
If you want to edit the olsrd.conf via ssh or telnet you have to make sure that it gets stored inside the persistent storage area of the flash. Create the Configuration file inside the /etc/persistent/ directory and invoke the following command:
# cfgmtd -w -p /etc/
After that you have to reboot.
Official Ubiquiti SDK 5.3.3 with olsrd (stable git)
This document is written for people that are already a little familiar with the OpenWRT toolchain.
Download the SDK (here we provide a mirror): http://stud.netgroup.uniroma2.it/~saverio/SDK.UBNT.v5.3.3.tar.bz2
Go in the openwrt folder and add to the feeds.conf.default these lines:
src-svn zninux https://svn.ninux.org/svn/ninuxdeveloping/packages src-svn zopenwrtpackages svn://svn.openwrt.org/openwrt/packages/
OPTIONAL: I like to use the src-link feed because usually I have already the Ninux packages and the OpenWRT packages on my machine but you can also use src-svn feeds style
src-link zninux /somepath/packagesninux src-link zopenwrtpackages /somepath/packages
Update the feeds:
./scripts/feeds update
Install necessary package in the toolchain. Note that for some packages like radvd, that are present in more feeds, we need to specify which feed where to pick the package from.
./scripts/feeds install olsrd-ninux ./scripts/feeds install -p zopenwrtpackages radvd
run make menuconfig and select packages you need, like olsrd-ninux, ipv6, radvd and so on.
UPDATE: Add this security patch https://svn.ninux.org/ninuxdeveloping/browser/UbntM5AirOsOLSR/patches/AirOS5.3.3/lighttpd-mod-airos-exploit-fix.patch
Update: Apply the patch to remove mandatory default gw from web interface https://svn.ninux.org/ninuxdeveloping/browser/UbntM5AirOsOLSR/patches/AirOS5.3.3/optional-default-gw.patch
Now apply this patch to the ubnt-base-files package: https://svn.ninux.org/ninuxdeveloping/browser/UbntM5AirOsOLSR/patches/AirOS5.3.3/000-ubnt-base-files.patch
the patch adds a file called /ninux in the / directory, remember to set it executable with chmod +x
What is this patch doing ?
At boot time the existance of /etc/persistent/ninux is cheched. If it exists it is executed, otherwise the file /ninux is executed.
The /ninux script acts in the same way, checking for the existance of /etc/persistent/olsrd.conf, otherwise it uses /olsrd.conf
This means that when the device is freshly flashed, olsrd is already running with a default configuration, ideally just the HNA configuration is missing.
Binary Firmware Images
AirOS version 5.2.1 + OLSR 0.6.0 (stable) + tinc: https://svn.ninux.org/ninuxdeveloping/browser/UbntM5AirOsOLSR/fw-binaries/XM.v5.2.1.sdk-olsr0.6.0-tinc.bin
md5: cd28bfcd173c9e019ed8e781526deb6b
AirOS version 5.2.1 + OLSR 0.6.1 (git) + tinc: https://svn.ninux.org/ninuxdeveloping/browser/UbntM5AirOsOLSR/fw-binaries/XM.v5.2.1.sdk-olsr0.6.1-tinc.bin
md5: e7bd9bc254639aec389876326b3ff3b6
AirOS version 5.3 + OLSR 0.6.1 + tinc + IPv6: https://svn.ninux.org/ninuxdeveloping/browser/UbntM5AirOsOLSR/fw-binaries/XM.v5.3.sdk-olsr0.6.1-tinc-ipv6.bin
md5: f4590559755e99c8c1afaefb53d35121
Links
http://www.ubnt.com/support/downloads
https://wiki.graz.funkfeuer.at/UbntStations
persistent configurations
http://www.ubnt.com/wiki/Manual_Routes
Quick and dirty notes
Comandi da terminale comodi su AirOS
Per fare upgrade del firmware se /tmp/fwupdate.bin è l'immagine che vogliamo flashare (controllate l'md5 prima di proseguire)
/sbin/ubntbox fwupdate.real -m /tmp/fwupdate.bin -d
Per caricare un file di configurazione
cfgmtd -f /tmp/system.cfg -w && reboot