This repository contains OpenWrt packages related to the Reticulum ecosystem. The feed currently provides packages for the Reticulum Network Stack, an open-source cryptography-based networking stack designed for reliable communication over high-latency, low-bandwidth networks.
This feed is under active development and not yet ready for general use.
We are working on stabilizing the packages and resolving various implementation challenges, particularly around Python module integration in OpenWrt's constrained environment.
Currently, this feed provides the following packages:
The core Reticulum Network Stack implementation package. Features:
- Full Reticulum Network Stack implementation
- OpenWrt UCI integration for configuration management
- Proper system integration with procd init scripts
- Dedicated system user and group for security
- Automatic service management
- Source code package available separately
Lightweight Extensible Message Format implementation. Features:
- Built on top of Reticulum Network Stack
- Zero-configuration message routing
- End-to-end encryption with Forward Secrecy
- Compatible with all transport mediums supported by Reticulum
- Source code package available separately
A console user interface library dependency:
- Provides text-based user interface capabilities
- Required by some Reticulum ecosystem applications
- Cross-platform compatibility
To use this feed, you need:
- A computer running some Debian
- OpenWrt buildroot environment
- This feed
Install required system packages:
sudo apt update && sudo apt install -qy \
build-essential \
ccache \
file \
flex \
bison \
g++ \
gawk \
gettext \
git \
libncurses5-dev \
libssl-dev \
python3-setuptools \
rsync \
unzip \
wget \
zlib1g-dev
- Clone OpenWrt repository:
git clone --depth 5 https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
- Configure feeds:
# Create feeds configuration if it doesn't exist
[ ! -f feeds.conf ] && cp feeds.conf.default feeds.conf
# Ensure reticulum feed is properly configured
if ! grep -q '^src-git reticulum' feeds.conf; then
# Comment out any existing reticulum entries
sed -i '/src-git reticulum/s/^/#/' feeds.conf
# Add our feed
echo "src-git reticulum https://github.com/gretel/feed-reticulum.git" >> feeds.conf
fi
Your feeds.conf
should look similar to this:
src-git packages https://git.openwrt.org/feed/packages.git
src-git luci https://git.openwrt.org/project/luci.git
src-git reticulum https://github.com/gretel/feed-reticulum.git
- List using the
feeds
utility to confirm:
./scripts/feeds list -s
packages src-git 2b999558db0711124f7b5cf4afa201557352f694 https://git.openwrt.org/feed/packages.git
luci src-git e76155d09484602e2b02e84bb8ffafa4848798f0 https://git.openwrt.org/project/luci.git
reticulum src-git 3d196e9b824158b9a428892c426e8365dc02c373 https://github.com/gretel/feed-reticulum.git
- Update and install from all feeds:
./scripts/feeds update -a
./scripts/feeds install -a
Before building, configure your target platform/architecture:
make menuconfig
Key configuration areas:
- Target System (e.g.,
x86
,MediaTek Ralink MIPS
,Qualcomm Atheros AR7xxx/AR9xxx
) - Subtarget (e.g.,
x86_64
,MT7621
,generic
) - Target Profile (specific device or generic profile)
Common platforms include:
Target System Subtarget Example Devices
────────────────────────────────────────────────────────────────────
MediaTek Ralink MIPS (ramips) MT7621 Ubiquiti EdgeRouter X
Qualcomm Atheros AR7xxx generic GL.iNet GL-AR750S
x86 x86_64 Generic PC/VM
Raspberry Pi bcm27xx Raspberry Pi 4
Select at minimum:
- Target System
- Subtarget
- Target Profile (if building for specific device)
- Package
rns
underNetwork -> Reticulum
Save your configuration and exit menuconfig.
Backup
.config
file. It get's overwritten easily.
For a basic configuration:
make defconfig
To build specific packages:
# Clean and rebuild RNS package
make package/feeds/reticulum/rns/clean
make package/feeds/reticulum/rns/compile V=s
make package/index
NO_DEPS=1
will skip building dependencies. Building of therns
package will fail if the required dependencies have not been built before. It's meant to speed up development iterations.
V=s
adds very verbose output logging. Remove for proven builds.
make package/feeds/reticulum/rns/compile V=s NO_DEPS=1
For a full system build (optional):
make -j$(nproc) world
This could result in a bootable distribution. No testing has been done yet!
Basic UCI configuration:
# Enable the service
uci set rns.main.enabled=1
uci commit rns
# Start the service
service rns start
Configuration directory: /var/run/rns
Configuration file: /etc/config/rns
Basic UCI configuration:
# Enable the service
uci set lxmf.main.enabled=1
# Enable propagation node (optional)
uci set lxmf.main.propagation_node=1
uci commit lxmf
# Start the service
service lxmf start
Configuration directory: /var/run/rns
Configuration file: /etc/config/lxmf
No configuration required - library package.
Python module import issues related to OpenWrt's bytecode-only packagingService initialization requires further testing- Documentation needs expansion
nomadnet
package not done yet, buturwid
is prepared.
We welcome contributions to expand the Reticulum ecosystem on OpenWrt. Please ensure your pull requests are well-documented and include appropriate test cases.
The feed follows OpenWrt's standard directory structure:
feed-reticulum/
├── lxmf/ # LXMF package
│ ├── Makefile
│ └── files/
│ ├── lxmf.init
│ └── lxmf.config
├── rns/ # Reticulum Network Stack package
│ ├── Makefile
│ └── files/
│ ├── rns.init
│ └── rns.config
├── python3-urwid/ # urwid UI library package
│ └── Makefile
├── LICENSE
└── README.md
Each package is released under its respective license:
- RNS: MIT License
- LXMF: MIT License
- python3-urwid: LGPL-2.1 or later
- Mark Qvist for creating Reticulum Network Stack
- The OpenWrt team
- All contributors to the Reticulum ecosystem