The Source Code

The code is stored inside a git tree which contains all branches and releases.

All repositories can be browsed online through GitHub.

Getting The LibreMesh Code

Most of LibreMesh development happens in the lime-packages git repository which can be browsed on GitHub or downloaded using git:

git clone https://github.com/libremesh/lime-packages.git
cd lime-packages

The Web Presence

The pages you’re reading are generated from text files using the AsciiDoc suite plus Jekyll.

Any changes made to lime-web repository will be reflected on our libremesh.org website.

In order to generate these pages locally:

git clone https://github.com/libremesh/lime-web.git
cd lime-web && bundle install
bundle exec jekyll serve

For more details, check the README on Github.

If you would like to contribute to the documentation then please send patches to our mailing list or open a pull request on GitHub.

Please use the AsciiDoc syntax for contributions on the web page.

Submitting Patches

We accept pull requests via GitHub. But patches can also be submitted via the lime-dev mailing list.

Compiling LibreMesh from source code

This procedure has been tested on GNU/Linux, on other systems it could require some modifications or it can be run in a Linux virtual machine. Generally, the first compilation takes a few hours and requires at least 10 GB of disk space.

First of all you need to install a few packages to your system. Building OpenWrt requires a bunch of installed software.

If you are unsure about your system having all the dependencies installed, you can just go on with the OpenWrt compilation (see below) and, if it fails, check out the error messages.

On an Ubuntu system, the following command will install the minimum compilation dependencies:

sudo apt update
sudo apt install --no-install-recommends git ca-certificates subversion wget make gcc g++ libncurses5-dev gawk unzip file patch python3-distutils python3-minimal python-minimal

For other Linux distributions the packets list could be slightly different, check out the OpenWrt build system installation page.

Then you need to get the OpenWrt source code. Make sure to git clone the source code as normal user (i.e. do not use root): the compilation will refuse to run if the administrator user root is being used.

Download OpenWrt source code
git clone -b openwrt-18.06 --single-branch https://git.openwrt.org/openwrt/openwrt.git
Enter OpenWrt build root
cd openwrt
Take default OpenWrt repositories feeds
cp feeds.conf.default feeds.conf
And add LibreMesh repositories to the OpenWrt feeds
cat << EOF >> feeds.conf

src-git libremesh https://github.com/libremesh/lime-packages.git
src-git libremap https://github.com/libremesh/libremap-agent.git
EOF
Update the packages from the feeds
scripts/feeds update -a
scripts/feeds install -a
Run the configuration menu
make menuconfig

Check out the target (e.g. ar71xx), subtarget (e.g. generic) and profile (e.g. tl-wdr3600-v1) of your router on OpenWrt table of hardware.

Select the Target System, Subtarget and Target Profile accordingly.

Deselect problematic packages:

  • Base system → dnsmasq

  • Base system → firewall

  • Network → odhcpd-ipv6only

Optionally, deselect unused packages:

  • Network → ppp

Select (press space until when an asterisk * appears, like <*>) LibreMesh packages:

  • LiMe → lime-system (LibreMesh system files)

  • LiMe → lime-proto-babeld (LiMe babeld proto support)

  • LiMe → lime-proto-batadv (LiMe batman-adv proto support)

  • LiMe → lime-proto-anygw (LiMe anygw proto support)

  • LiMe → lime-hwd-openwrt-wan (Respect openwrt wan interface as default)

  • LiMe → shared-state-babeld_hosts (babeld-hosts module for shared-state)

  • LiMe → shared-state-bat_hosts (bat-hosts module for shared-state)

  • LiMe → shared-state-nodes_and_links (nodes_and_links module for shared-state)

  • LiMe → check-date-http (Keep local date under NTP too far away skew)

  • LiMe → lime-app (LimeApp)

  • LiMe → Offline Documentation → lime-docs-minimal (LibreMesh English documentation)

Some more packages are recommended but not mandatory for a working LibreMesh network. Consider avoiding to select the following packages only if the created image is too large and does not fit in the router memory.

  • LiMe → Offline Documentation → lime-docs (LibreMesh minimal documentation)

  • LiMe → lime-hwd-ground-routing (Manage 802.1q VLANs for ground routing)

  • LiMe → lime-debug (libremesh debug utils)

Save and exit.

Finally, compile the images
make -j$(nproc)

If everything goes well you should find the produced binaries inside the bin/ directory.