On Thu, Oct 24, 2013 at 8:46 AM, Mitar
<mitar(a)tnode.com> wrote:
Hi!
I remember you had some discussion about how to flash routers. I
think
there are several options:
- having a generic firmware you configure by hand/webinterface
- having a image generator which generates image with all
configuration
included for a particular node
- having an generic autoconfiguring firmware, which
- does everything by itself
- optionally fetches additional/configuration data from the
network/central server
- registers at first boot with networks/central server
We are working on a two-part solution:
1. A script that makes it super easy to bulk-flash ubiquiti routers
with
a single firmware. We only have a script that uses the TFTP method, but
I'll make the script attempt to flash via the web interface first, and
then
use the tftp method as a fallback.
2. A node-configurator daemon. Nodes look for this on the local network
on first boot (actually every boot until they've been configured) and
connect. The node-configurator is controlled via a web interface that
talks
to the server in real time using websockets. So you just go to the
website,
using a laptop or smartphone, and wait for one or more nodes to pop up
in
the list as they boot and connect to the configurator server. Then you
fill
out a few essential pieces of info and the configurator sends that +
secure
ssh keys and a few other essentials to the node. The idea is that first
boot happens on sudomesh's LAN, not on the mesh, so the nodes are fully
configured before they are shipped.
Initially we were going to flash each node with its individual
pre-configured firmware, and we may still add that feature into the
node-configurator (by scanning the LAN for nodes with port 80 open
running
known web admin interfaces), but for now we will have dedicated
flashing-sessions where we focus on just getting the firmware on to the
devices in bulk, and then we can configure and upgrade the firmware
from
the node-configurator before shipping. Flashing used routers
unfortunately
means that we often have to use the TFTP method, since the settings
have
been changed from the defaults.
We're pretty close to a version 0.0.1 of the node-configurator stack.
I'm
hoping that Rhodey and myself can finish it over the next 3-4 days.
We'll probably re-use parts of this to create the in-field update
functionality. A lof ot our choices in the next few weeks hinge on
whether
or not we want to support devices with 4 MB of flash memory, since that
would mean using squashfs which basically required us to reflash the
devices for any non-trivial updates. If we use jffs2, then we'd almost
certainly need more than 4 MB of flash, but we'd be able to continually
update most things without requiring a reflash and reboot. Limiting
ourselves to 4 MB and in-field reflashing has the following against it:
1. If in-field re-flashing fails then recovery means physically
replacing
the node.
2. The node will be down for minutes while it re-flashes.
3. Re-flashing requires enough free ram for the entirety of the new
firmware (e.g. 4 MB free at all times) effectively reducing the amount
of
ram we can use at any time by 4 MB. This may not be a problem since
Attitude Adjustment basically dropped support for 16 MB ram devices.
4. Fitting everything into 4 MB of flash is somewhat limiting and
annoying to deal with. We'd be sacrificing precious developer time in
order
to support slightly cheaper routers.
It seems silly that we have to worry about 4 MB vs. 8 MB flash in 2013.
If
we knew for certain that all devices coming out starting e.g. next year
were at least 8 MB, then the solution would be obvious, but I don't
know
the industry well enough to say either way.
The only device we're looking to support that has 4 MB of ram is the
TP-Link WRT-703N. It has 32 MB of ram, so not a problem for Attitude
Adjustment. It has host-mode USB, so it would be pretty simple to
simply
add a usb memory stick for an additional cost of ~$2.50, which would
give
them 256 MB of flash and open up some other exciting opportunities.
I guess I'm pretty much saying: Let's set our minimum specs at 8 MB
flash
and 32 MB ram, use jffs2 and see where it takes us.
Am I missing any?
Some possible relevant links for flashing and ideas:
-
https://github.com/battlemesh/openwrt-config-system
-
https://dev.wlan-si.net/ticket/1135
-
https://dev.wlan-si.net/ticket/654
-
https://dev.wlan-si.net/ticket/1153
Some ideas we were playing around as well:
- a phone app which you install, connect to the existing original
wireless network of the node you want to flash, press a button and it
flashes
Interesting idea!
- entering your public IP of your home router you
want to flash and
some
server flashes the node for you over the
Internet
Huh? Is this even possible? Is the web interface enabled on the
public-facing side of ubiquiti nodes per default?
This exists already. Dont reinvent the wheel. Contribute to existing projects.
Look at altermundi. Also look at the links that mitar sent out. Look at potato flash from
villagetelco. Few other solutions as well, google for them.
Also you'll need a switch with vlans. So you can flash in parallel, all nodes having
the same addy for tftp. Isolate each node into a vlan. Just make the vlan number the port
number.
--
Charles Wyble
(818) 280-7059 charles(a)knownelement.com
CTO Free Network Foundation (