Hello everyone, my name is Irina and I am working in this edition of GSoC 2022 on the project “Try LibreMesh without having a router” with Altermundi. I will start this post by explaining what LibreMesh is, what are some of the obstacles that appeared when we were testing it, some solutions that we did to those problems, the knowledge acquired in community bonding, and what objectives are in the next weeks.
What is LibreMesh?
LibreMesh is a framework for creating OpenWrt-based firmware for wireless mesh nodes. LibreMesh works in a decentralized way and is used as a base for community networks. These mesh networks allow the connected nodes to route each other’s traffic.
Problems when testing LibreMesh
In the first steps, it was necessary to install QEMU, download the LibreRouterOS images and its dependencies,. LibreRouterOS has an automatic configuration to be able to run virtual mesh networks on any computer. Then the LibreMesh test was based on the following steps:
1. Run a node: this has been made without major issues.
However, we discovered a bug when we were running the node: if you want to close the virtual node the network interface isn’t removed from the network configuration of the host. This is because the script that closes it does not eliminate that network interface.
2. Set up a node with internet access: for this it was necessary to install dnsmasq. In this case there were some inconveniences since giving this access required to use a port that was occupied by a dnsmasq process and a systemd-resolve, so it was necessary to free that port by killing those processes. By doing that, the host loses its DNS capabilities so we’re planning to solve this bug by allowing the user to give the node internet access without killing the processes.
3. Set up a cloud of nodes: it was necessary to install ansible and clusterssh.
When running the node cloud, it threw an error because it couldn’t find the location where the image files should be. To solve this, we modified some lines of the qemu_cloud_start.yml script:
- rootfs: files/generic-rootfs.tar.gz
- ramfs: files/ramfs.bzImage
placing as suffix “./” to each one
- rootfs: ./files/generic-rootfs.tar.gz
- ramfs: ./files/ramfs.bzImage
also in the same script it was necessary to change the following lines to use the LibreRouterOS Images:
- rootfs_url: https://repo.librerouter.org/lros/releases/1.5/targets/x86/64/librerouteros-1.5-r0+11434-e93615c947-x86-64-generic-rootfs.tar.gz
- ramfs_url: https://repo.librerouter.org/lros/releases/1.5/targets/x86/64/librerouteros-1.5-r0+11434-e93615c947-x86-64-generic-ramfs.bzImage
Another problem that appeared was that in the script there were calls to ifconfig
def if config (self, cmd):
return self.module.run_command ([ ‘ifconfig’] + cmd)
Since ifconfig is not installed in versions later than Ubuntu 18.04, we have to install it through this commands:
- sudo apt-get update
- sudo apt-get install net-tools
Period Community bonding
During this period I had a first approach to my mentor Germán Ferrero and an accompaniment from my advisor Tomás Assenza, who helped me in understanding and solving the different problems mentioned.
Each meeting has been very effective and useful since I was able to familiarize myself and learn about virtualization. The goals to be met in the following weeks were very clearly set out in the plan to achieve all the goals by the end of the project.
That is why I appreciate the kindness, predisposition, accompaniment, and pleasant help of both of them.
Goals for next weeks
– Explore different virtualization and containerization technologies such as Linux Containers, Docker, Virtual Box.
– Run some node on these tools in order to compare which of them turns out to be easier for such a fact.