Mesh RPi
This article describes the needed modifications for PirateBox RPi image 1.1.3 to get a similar setup like on OpenWrt. Similar setup means a bridged network between AP and Mesh.
Note: Due to kernel incompatibilities of BATMAN-advanced betweeen OpenWrt and RPi, both Systems can not talk to each other.
Requirements:
- 2nd wifi card for mesh only
- some time ;)
All the scripts will be executed on the Pi. The configuration consists of the following steps:
- Setup a software bridge
- Reconfigure PirateBox to make use use of the bridge interface
- Enable IPv6 configuration for PirateBox
- Create Mesh setup script & make it bootable
- Configure Avahi to announce PirateBox
Prereq.
Check the internet is working and sudo is active:
sudo touch /tmp/sudo_test sudo rm /etc/resolv.conf sudo sh -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf' dig google.de | grep -q -e 192.168.77.1 && echo "error, Internet is not working!"
Software bridge
Create the network configuration file for the bridge:
cat <<EOF > piratebox_bridge Description="General bridge interface for PirateBox" Connection=bridge Interface=br-lan BindsToInterfaces=() ForceConnect=yes #Enabling DHCP stuff SkipForwardingDelay=yes IP=static Address=(192.168.77.1/24) EOF sudo mv piratebox_bridge /etc/netctl/ sudo netctl enable piratebox_bridge sudo netctl start piratebox_bridge
Reconfigure PirateBox
sudo sed -i -e 's|DO_IFCONFIG="yes"|DO_IFCONFIG="no"|' \ -e 's|DO_BRIDGE="no"|DO_BRIDGE="yes"|' \ -e 's|DNSMASQ_INTERFACE="wlan0"|DNSMASQ_INTERFACE="br-lan"|' \ /opt/piratebox/conf/piratebox.conf
Edit piratebox.service file for system dependencies
sudo nano /etc/systemd/system/piratebox.service
The top of the file needs to look like this:
[Unit] Description=PirateBox Service PartOf=netctl@piratebox_bridge.service
IPv6 Setup
Let's start with fixes on PirateBox 1.1.3
sudo sed -i -e 's| radvd|/usr/bin/radvd|g' /opt/piratebox/init.d/piratebox_alt
Do the following commands..
PREFIX="fdc0:ffea" FIXED=$(hexdump -n8 -e '/2 ":%03x" ' /dev/random ) V6_GEN_RESULT="$PREFIX:$FIXED" prefix=`</dev/urandom tr -dc a-zA-Z1-9 | head -c8` work_hostname="$prefix.piratebox.lan" sudo touch /opt/piratebox/conf/node.conf sudo sed -i -e "s|NODE_CONFIG_ACTIVE='no'|NODE_CONFIG_ACTIVE='yes'|" /opt/piratebox/conf/node.conf sudo sed -i -e "s|NODE_IPV6_IP=''|NODE_IPV6_IP='$V6_GEN_RESULT'|" \ -e "s|NODE_NAME=''|NODE_NAME='$prefix'|" \ /opt/piratebox/conf/node.conf sudo sed -i -e 's|IPV6_ENABLE="no"|IPV6_ENABLE="yes"|' \ -e "s|fdc0:ffea::1|$V6_GEN_RESULT|" \ /opt/piratebox/conf/ipv6.conf echo "IP6=static Address6=($V6_GEN_RESULT/64)" > ipv6.netctl sudo sh -c 'cat ipv6.netctl >> /etc/netctl/piratebox_bridge' echo " OK. Please note the following infos: Generated node name: $work_hostname Generated IPv6: $V6_GEN_RESULT Prefix: /64 "
Mesh config script
This step assumes, that you have a working network connection and the wifi adapter for mesh is the 2nd (phy1).
sudo sh -c 'echo "br_netfilter" > /etc/modules-load.d/netfilter.conf' sudo modprobe br_netfilter sudo pacman -Sy --noconfirm batctl wget https://github.com/PirateBox-Dev/PirateBox-Mesh/releases/download/1.1.4/piratebox-mesh_1.1.4_all_NON_WRT.sh chmod a+x piratebox-mesh_1.1.4_all_NON_WRT.sh sudo mv piratebox-mesh_1.1.4_all_NON_WRT.sh /bin/piratebox-mesh.sh sudo sed -i -e 's|phy0|phy1|g' \ -e 's|MESH_CHANNEL=0|MESH_CHANNEL=6|' \ -e 's|EXCHANGE_MAC="yes"|EXCHANGE_MAC="no"|' \ /bin/piratebox-mesh.sh
Create a start/stop script:
cat <<EOF > ~/mesh.service [Unit] Description=PirateBox Mesh Service PartOf=netctl@piratebox_bridge.service [Service] Type=idle RemainAfterExit=yes ExecStart=/bin/piratebox-mesh.sh start ExecStop=/bin/piratebox-mesh.sh stop [Install] WantedBy=multi-user.target EOF sudo mv ~/mesh.service /etc/systemd/system sudo systemctl daemon-reload sudo systemctl start mesh.service sudo systemctl enable mesh.service
AVAHI
sudo mv /etc/avahi /etc/avahi.old sudo ln -s /opt/piratebox/conf/avahi/ /etc/avahi sudo systemctl start avahi-daemon sudo systemctl enable avahi-daemon
Finalize
At the end you should do a reboot
sudo reboot