freifunkmanager/README.md

109 lines
4.9 KiB
Markdown

# FreifunkManager [![Build Status](https://travis-ci.org/FreifunkBremen/freifunkmanager.svg?branch=master)](https://travis-ci.org/FreifunkBremen/freifunkmanager) [![Coverage Status](https://coveralls.io/repos/github/FreifunkBremen/freifunkmanager/badge.svg?branch=master)](https://coveralls.io/github/FreifunkBremen/freifunkmanager?branch=master)
is a little software to manage gluon nodes with the help of ssh and yanic
(used on the Breminale since 2017)
## Preparations for Building
Install Go 1.10 or newer:
```
mkdir -p ~/inst
cd ~/inst
wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
tar xf go1.10.3.linux-amd64.tar.gz
export PATH=~/inst/go/bin/:$PATH
export GOROOT=~/inst/go/
```
Set $GOPATH:
```
export GOPATH=$HOME/go
```
Install nodejs >= 4.8:
```
mkdir -p ~/inst
cd ~/inst
wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz
tar xf node-v8.11.3-linux-x64.tar.xz
export PATH=~/inst/node-v8.11.3-linux-x64/bin/:$PATH
```
Install yarn (https://yarnpkg.com/en/docs/install):
```
mkdir -p ~/inst
cd ~/inst
wget https://github.com/yarnpkg/yarn/releases/download/v1.7.0/yarn-v1.7.0.tar.gz
tar xf yarn-v1.7.0.tar.gz
export PATH=~/inst/yarn-v1.7.0/bin/:$PATH
```
## Building & Running
Download and build freifunkmanager:
```
go get -t github.com/FreifunkBremen/freifunkmanager/...
go get github.com/mattn/goveralls
go get golang.org/x/tools/cmd/cover
cd $GOPATH/src/github.com/FreifunkBremen/freifunkmanager/
go build
sudo setcap cap_net_raw+ep freifunkmanager # necessary for sending ping packets
cd webroot
yarn install
yarn gulp build
```
Run:
```
./freifunkmanager -config config_example.conf
```
## Usage
Visit http://localhost:8080/
Navigation bar at top of page:
- marker icon: (TODO)
- List: show list of all known nodes
- use Edit link in last column of a node to edit its details; changes made on the Edit page are saved immediately
- to change just the hostname, double-click on hostname field in list and make your change
- Map: show map of nodes
- use Layers icon in upper right corner to enable geojson overlay and view clients
- Statistics: show statistics about nodes, clients, used channels...
- Login with text field: enter password (value of "secret" in config file) and click "Login" to log in
- this is necessary to make any changes
- there is no user management; anybody who has the password has full access
- blue rectangle on the far right: (TODO: connection status?)
## Technical Details
List of known nodes will be retrieved with the [respondd](https://github.com/freifunk-gluon/packages/tree/master/net/respondd) protocol (ie. by periodic UDP multicast requests to all reachable nodes). For this, FFMan uses a built-in [Yanic](https://github.com/FreifunkBremen/yanic) instance. The respondd protocol provides configuration details and statistics for each node.
Alternatively, FFMan can also be configured to just listen to respondd responses (without sending requests); this is useful to "listen in" on the responses requested by a separate Yanic process running on the same network. This mode can be enabled by setting `yanic_collect_interval` to `0s` and settings `yanic.send_no_request` to `true`.
Additionally, nodes can be added manually by visiting a page like /#/n/apname (where "apname" is the node-id of the new device), and then setting a hostname.
The web interface displays all nodes that were found (except for nodes which don't respond to SSH - these are blacklisted). The web interface is updated live, by using a websocket connection; this also means that changes made in one tab will appear immediately in other tabs as well.
When node settings are changed in the web interface, an SSH connection is opened to the node to apply the new settings.
All changes are also saved to a state file (eg. /tmp/freifunkmanager.json - can be changed in config file).
And all of the received node data is also stored in a database (see `db_type` and `db_connection` config options).
## Creating dummy respondd data
- create dummy "eth10" network interface:
```
sudo -s
modprobe dummy
ifconfig dummy0 hw ether 00:22:22:ff:ff:ff
ipaddr=`ipv6calc --in prefix+mac --action prefixmac2ipv6 --out ipv6addr fe80:: 00:22:22:ff:ff:ff`
ip a add dev dummy0 scope link $ipaddr/64
ip link set dummy0 up
```
- edit tools/example-response.json to set network addresses for each node that are reachable with SSH (otherwise the nodes will be blacklisted immediately)
- also, if necessary adjust the `ssh_ipaddress_prefix` setting in config_example.conf to match the addresses from example-response.json
- edit config_example.conf: in [yanic] section set ifname="dummy0"
- edit $GOPATH/src/github.com/FreifunkBremen/yanic/respond/respond.go: change port=10001
- go to $GOPATH/src/github.com/FreifunkBremen/freifunkmanager/ and run "go build"
- start FFMan as usual (`./freifunkmanager -config config_example.conf`)
- in another shell run `./tools/respondd-sim.py -p 10001 -i dummy0 -f tools/example-response.json`
- FFMan should now display two new nodes with the example hostnames