GenieACS consists of a back end and a front end. The back end is where the heavy lifting is done and the front end is just a web-based interface for management. Each of the sections below contains two sub sections for each part. See the wiki for more info.

Installation

Back end

Install Node.js, Redis, and MongoDB. Refer to the corresponding documentation for installation guides. Then use NPM to install GenieACS by typing:

npm install -g genieacs

You may need to modify the configuration files under “config” directory (in /lib/node_modules/genieacs/config) depending on your setup.

Alternatively, you can use git to get the latest development version (not recommended for production use):

cd /opt
git clone https://github.com/zaidka/genieacs.git --branch v1.0
cd genieacs
npm install
npm run configure
npm run compile

Finally, run the following in GNU Screen session or something similar:

genieacs-cwmp

This is the service that the CPEs will communicate with. It listens to port 7547 by default (see config/config.json). Configure the ACS URL of your devices accordingly.

genieacs-nbi

This is the northbound interface module. It exposes a REST API on port 7557 by default. This is needed for the GUI front end to communicate with.

genieacs-fs

This is the file server from which the CPEs will download firmware images and other types of files.

You can use stream redirection to output to log files:

genieacs-cwmp >> /var/log/genieacs-cwmp.log 2>> /var/log/genieacs-cwmp-err.log
genieacs-nbi >> /var/log/genieacs-nbi.log 2>> /var/log/genieacs-nbi-err.log
genieacs-fs >> /var/log/genieacs-fs.log 2>> /var/log/genieacs-fs-err.log

TR-069 Central has a detailed installation guide for Ubuntu.

GUI

The front end component is built with Ruby on Rails 4. We recommend using RVM to install Ruby on Rails.

Clone the git repository:

git clone https://github.com/zaidka/genieacs-gui.git

Once that is done, create configuration files by copying the provided templates.

cd genieacs-gui
cp config/graphs-sample.json.erb config/graphs.json.erb
cp config/index_parameters-sample.yml config/index_parameters.yml
cp config/summary_parameters-sample.yml config/summary_parameters.yml
cp config/parameters_edit-sample.yml config/parameters_edit.yml
cp config/parameter_renderers-sample.yml config/parameter_renderers.yml
cp config/roles-sample.yml config/roles.yml
cp config/users-sample.yml config/users.yml

Refer to the configuration section below for description of each configuration file.

Now install the required gems by typing (while in the project directory):

bundle

You’re now good to go. Run the application:

rails s

Make sure the back end is running as the GUI depends on it.

Configuration

The sample config files should work out of the box in most cases. Modify the settings as you see fit depending on your environment.

Back end

You’ll find the following configuration files under the config directory:

config.json

This file contaisn basic options:

  • DATABASE_NAME: The name of MongoDB database to use.
  • MONGODB_SOCKET: The UNIX socket file or IP:port to use to connect to MongoDB.
  • REDIS_SOCKET: The port (or UNIX socket) for connecting to redis server.
  • ACS_INTERFACE/ACS_HTTPS_INTERFACE/ACS_PORT/ACS_HTTPS_PORT: What network interface and port to use to listen for incoming connections from CPE. The value 0.0.0.0 implies listening to all available interface on the server. The port 7547 is the standard for TR-069 protocol but you’re free to change it if needed. Make sure to use the correct IP and port when mapping your devices to your GenieACS instance.
  • API_INTERFACE/API_PORT: The network interface and port to use for exposing the northbound API.
  • FILES_INTERFACE/FILES_PORT: The network interface and port to serve files to the CPEs such as firmware images.
  • FILES_IP: The IP (or host name) used to construct the file URL to be sent to CPE.
  • LOG_INFORMS: Whether or not you want to log inform requests. Should probably be turned off unless needed.
  • DEBUG_DEVICES: Enable HTTP dump for certain devices. This is useful for debugging. Use the format {“device 1 ID” : true, “device 2 ID” : true}.

parameters.json

Parameter configuration is defined here. For each parameter, you can define an alias and/or a type. Aliases, as the name implies, allow you to map that parameter to an alias. Types let you specify the expected type of that parameter for better search. For example, specifying the type “mac” lets you search for that parameter by partial MAC address ignoring colons or capitalization.

There’s 3 types “float”, “date” (for data and time), and “mac”. In future releases, types will be modular allowing you to impelment your owntypes.

Note that you may either use exact parameter path or use a regular expression to match parts of the paraemter path that may not be constant such as the index of an object instance.

custom_commands.json

With custom commands, you can integrate GenieACS with other systems or communicate with the device outside of TR-069 protocol (e.g. telnet). These custom commands are exposed like a regular parameters and can be set from presets.

This files maps devices to custom commands implemetned in config/custom_commands directory. The key in each key-value pair refers to the filename of the custom command, and the value is a regular expression to match device ID. You’ll most likely want to match against the product class part of the device ID. See the sample implementations for reference.

auth.js

This file exports a function that returns connection request authentication credentials for a given device.

GUI

The front end configuration files are round under “config” directory.

graphs.json.erb

Home page charts are configurable. This file defines the different chart details.

index_parameters.yml

Specifies which parameters are to appear in the devices’ index and search pages.

summary_parameters.yml

Similar to index_parameters.yml, but for the parameters in the summary section of the device page.

parameters_edit.yml

Specify possible values for editable parameter that should not accept free text input.

roles.yml

Define different roles and their permissions. Configure this depending on the different access levels for users you need.

users.yml

This file contains the list of user credentials and their roles.