Updated console site

This commit is contained in:
Mark Qvist 2023-01-13 01:12:20 +01:00
parent a60b16fb46
commit 6e03084c1b
16 changed files with 483 additions and 106 deletions

View File

@ -1,3 +1,6 @@
PATH_RETICULUM_WEBSITE=../../sites/reticulum.network
PATH_PACKAGES=../../dist_archive
clean: clean:
@echo Cleaning... @echo Cleaning...
@-rm -rf ./build @-rm -rf ./build
@ -12,20 +15,25 @@ pages:
python ./build.py python ./build.py
pages-debug: pages-debug:
python ./build.py --no-gz python ./build.py --no-gz --no-remap
data: data:
@echo Including assets... @echo Including assets...
@cp assets/css/* build/css/ @cp assets/css/* build/css/
@cp assets/gfx/* build/gfx/ @cp assets/gfx/* build/gfx/
# @cp assets/images/* build/images/ @cp assets/images/* build/images/
# @cp assets/scripts/* build/scripts/ # @cp assets/scripts/* build/scripts/
# @cp -r ../../Reticulum/docs/manual/* build/reticulum_manual/ # @cp -r ../../Reticulum/docs/manual/* build/reticulum_manual/
# @cp -r ../../Reticulum/docs/Reticulum\ Manual.pdf build/reticulum_manual/ # @cp -r ../../Reticulum/docs/Reticulum\ Manual.pdf build/reticulum_manual/
site: dirs data pages external:
make -C $(PATH_RETICULUM_WEBSITE) clean website
rm -r $(PATH_PACKAGES)/reticulum.network
cp -r $(PATH_RETICULUM_WEBSITE)/build $(PATH_PACKAGES)/reticulum.network
local: dirs data pages-debug site: clean external dirs data pages
local: clean external dirs data pages-debug
serve: serve:
python -m http.server 7777 --bind 127.0.0.1 --directory ./build python -m http.server 7777 --bind 127.0.0.1 --directory ./build

View File

@ -28,6 +28,17 @@
src: url(yond.woff2); src: url(yond.woff2);
} }
html {
text-size-adjust: none;
-webkit-text-size-adjust: none;
-moz-text-size-adjust: none;
-ms-text-size-adjust: none;
}
body {
font-size: 1.1em;
}
body button { body button {
margin-bottom: 0.8em; margin-bottom: 0.8em;
margin-left: 0.2em; margin-left: 0.2em;
@ -196,7 +207,7 @@ textarea {
} }
h1 { h1 {
font-size: 2.2em; font-size: 1.7em;
margin-top: 0; margin-top: 0;
} }
@ -216,6 +227,7 @@ h1 {
} }
h2 { h2 {
font-size: 1.4em;
color: #fff; color: #fff;
color: var(--text-bright); color: var(--text-bright);
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -13,16 +13,17 @@ DEFAULT_TITLE = "RNode Bootstrap Console"
SOURCES_PATH="./source" SOURCES_PATH="./source"
BUILD_PATH="./build" BUILD_PATH="./build"
PACKAGES_PATH = "../../dist_archive" PACKAGES_PATH = "../../dist_archive"
RNS_SOURCE_PATH = "../../Reticulum"
INPUT_ENCODING="utf-8" INPUT_ENCODING="utf-8"
OUTPUT_ENCODING="utf-8" OUTPUT_ENCODING="utf-8"
LXMF_ADDRESS = "8dd57a738226809646089335a6b03695" LXMF_ADDRESS = "8dd57a738226809646089335a6b03695"
document_start = """ document_start = """
<!doctype html> <!DOCTYPE html>
<html> <html>
<head> <head>
<link rel="stylesheet" href="{ASSET_PATH}css/water.css"> <link rel="stylesheet" href="{ASSET_PATH}css/water.css?v=2">
<link rel="shortcut icon" type="image/x-icon" href="{ASSET_PATH}gfx/icon.png"> <link rel="shortcut icon" type="image/x-icon" href="{ASSET_PATH}gfx/icon.png">
<meta charset="utf-8"/> <meta charset="utf-8"/>
<title>{PAGE_TITLE}</title> <title>{PAGE_TITLE}</title>
@ -35,7 +36,24 @@ document_start = """
document_end = """</body></html>""" document_end = """</body></html>"""
menu_md = """<center><span class="menu">[Start]({CONTENT_PATH}index.html) | [Replicate]({CONTENT_PATH}replicate.html) | [Software]({CONTENT_PATH}software.html) | [Guides]({CONTENT_PATH}guides.html) | [Help](help.html) | [Contribute]({CONTENT_PATH}contribute.html)</span></center>""" menu_md = """<center><span class="menu">[Start]({CONTENT_PATH}index.html) | [Replicate]({CONTENT_PATH}replicate.html) | [Software]({CONTENT_PATH}software.html) | [Learn]({CONTENT_PATH}learn.html) | [Help](help.html) | [Contribute]({CONTENT_PATH}contribute.html)</span></center>"""
manual_redirect = """
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; url=/m/index.html">
</head>
</html>
"""
help_redirect = """
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; url=/help.html">
</head>
</html>
"""
url_maps = [ url_maps = [
# { "path": "", "target": "/.md"}, # { "path": "", "target": "/.md"},
@ -146,12 +164,91 @@ def generate_html(f, root_path):
source_files = scan_pages(SOURCES_PATH) source_files = scan_pages(SOURCES_PATH)
mf = open(BUILD_PATH+"/m.html", "w")
mf.write(manual_redirect)
mf.close()
mf = open(BUILD_PATH+"/h.html", "w")
mf.write(help_redirect)
mf.close()
def optimise_manual(path):
scale_imgs = [
("_images/board_rnodev2.png", 256),
("_images/board_rnode.png", 256),
("_images/board_heltec32.png", 256),
("_images/board_t3v21.png", 256),
("_images/board_t3v20.png", 256),
("_images/sideband_devices.webp", 380),
("_images/board_tbeam.png", 256),
("_images/nomadnet_3.png", 380),
("_images/radio_is5ac.png", 256),
("_images/radio_rblhg5.png", 256),
("_static/rns_logo_512.png", 256),
]
import subprocess
import shlex
for i,s in scale_imgs:
fp = path+"/"+i
resize = "convert "+fp+" -resize "+str(s)+" "+fp
print(resize)
subprocess.call(shlex.split(resize), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
remove_files = [
"objects.inv",
"Reticulum Manual.pdf",
"_static/styles/furo.css.map",
"_static/scripts/furo.js.map",
"_static/jquery-3.6.0.js",
"_static/jquery.js",
"_images/sideband_1.png",
# Too long
# "_static/sphinx_highlight.js",
# "_static/copybutton_funcs.js",
"_static/_sphinx_javascript_frameworks_compat.js",
# "_static/underscore-1.13.1.js",
# "_static/documentation_options.js",
# "_static/scripts/furo-extensions.js",
"_static/scripts/furo.js.LICENSE.txt",
# "_static/styles/furo-extensions.css",
"_static/styles/furo-extensions.css.map",
]
for file in remove_files:
fp = path+"/"+file
print("Removing file: "+str(fp))
os.unlink(fp)
remove_dirs = [
"_sources",
]
for d in remove_dirs:
fp = path+"/"+d
print("Removing dir: "+str(fp))
shutil.rmtree(fp)
shutil.move(path, BUILD_PATH+"/m")
def fetch_reticulum_site(): def fetch_reticulum_site():
r_site_path = BUILD_PATH+"/r" r_site_path = BUILD_PATH+"/r"
if not os.path.isdir(r_site_path): if not os.path.isdir(r_site_path):
shutil.copytree(PACKAGES_PATH+"/reticulum.network", r_site_path) shutil.copytree(PACKAGES_PATH+"/reticulum.network", r_site_path)
if os.path.isdir(r_site_path+"/manual"): if os.path.isdir(r_site_path+"/manual"):
shutil.rmtree(r_site_path+"/manual") optimise_manual(r_site_path+"/manual")
def remap_names():
for root, dirs, files in os.walk(BUILD_PATH):
for file in files:
fpath = root+"/"+file
spath = fpath.replace(BUILD_PATH, "")
if len(spath) > 31:
print("Path "+spath+" is too long, remapping...")
if not os.path.isdir(BUILD_PATH+"/d"):
os.makedirs(BUILD_PATH+"/d")
shutil.move(fpath, BUILD_PATH+"/d/")
def gz_all(): def gz_all():
import gzip import gzip
@ -212,3 +309,6 @@ for mdf in source_files:
fetch_reticulum_site() fetch_reticulum_site()
if not "--no-gz" in sys.argv: if not "--no-gz" in sys.argv:
gz_all() gz_all()
if not "--no-remap" in sys.argv:
remap_names()

View File

@ -29,8 +29,8 @@ Another great way to contribute, is to spread awareness about the RNode project.
- Teach others to build and use RNodes, and how to set up resilient and private communications systems - Teach others to build and use RNodes, and how to set up resilient and private communications systems
- Learn about using Reticulum to set up resilient communications networks, and teach these skills to people in your area that need them - Learn about using Reticulum to set up resilient communications networks, and teach these skills to people in your area that need them
## Contribute Code & Ideas ## Contribute Code & Material
If you like to build and design, there is plenty of oppertunities to take part in the community around RNode, and the wider Reticulum community as well. There's always plenty of work to do, from writing code, to translating guides and information, to designing parts, devices and integrations. You can find us the following places: If you like to write, build and design, there is plenty of oppertunities to take part in the community around RNode, and the wider Reticulum community as well. There's always plenty of work to do, from writing code, tutorials and guides, to designing parts, devices and integrations, and translating material to other languages. You can find us the following places:
- The [Reticulum Matrix Channel](element://room/!TRaVWNnQhAbvuiSnEK%3Amatrix.org?via=matrix.org) at `#reticulum:matrix.org` - The [Reticulum Matrix Channel](element://room/!TRaVWNnQhAbvuiSnEK%3Amatrix.org?via=matrix.org) at `#reticulum:matrix.org`
- The [discussion forum](https://github.com/markqvist/Reticulum/discussions) on GitHub - The [discussion forum](https://github.com/markqvist/Reticulum/discussions) on GitHub

View File

@ -0,0 +1,237 @@
[date]: <> (2022-03-26)
[title]: <> (Private, Secure and Uncensorable Messaging Over a LoRa Mesh)
[image]: <> (images/g1p.jpeg)
[excerpt]: <> (Or: How to set up a completely private, independent and encrypted communication system in half an hour, using stuff you can buy for under $100.)
<div class="article_date">{DATE}</div>
# Private, Secure and Uncensorable Messaging Over a LoRa Mesh
*Or: How to set up a completely private, independent and encrypted communication system in half an hour, using stuff you can buy for under $100.*
![]({ASSET_PATH}images/g1p.jpeg)
In this post, we will explore how two people, Alice and Bob, can set up a LoRa mesh communication system for their use that has the following characteristics:
- Allows both real-time and asynchronous text message communication between Alice and Bob.
- Works *completely* indpendently of any infrastructure outside the control of Alice and Bob. Even if the Internet, cellular networks and the power grid fails, Alice and Bob must still be able to communicate.
- Is completely private and outside the reach of automated surveillance, and does not reveal any identifying information about Alice or Bob, nor any contents of or information about their conversations.
In later parts of this series, we will expand the system to provide these oppertunities to an entire community, and add other mediums like Packet Radio, but for now we will focus on learning the basics by just establishing a Free Communications System between Alice and Bob.
To accomplish this, we will be building a small and simple system based on freely available and Open Source software. To realise our system we will need the following components:
- A networking system that can function reliably and efficiently even without any functional Internet infrastructure available. This will be provided by [Reticulum](https://reticulum.network).
- Software that Alice and Bob can interact with on their computers and mobile devices to actually communicate with each other. This will be provided by the programs [Nomad Network](https://unsigned.io/nomadnet) and [Sideband](https://unsigned.io/sideband).
- Radio hardware that Reticulum can use to cover the 7 kilometer distance between Bobs apartment and Alices house. This will be provided by installing the [RNode Firmware](https://unsigned.io/rnode_firmware) on a couple of small LoRa radio modules that can be purchased cheaply off Amazon or similar online vendors.
As you might have already guessed, the "magic glue" that acutally makes this entire system possible is [Reticulum](https://reticulum.network/).
Reticulum is a complete networking stack that was designed to handle challenging situations and requirements like this. Reticulum is an incredibly flexible networking platform, that can use almost anything as a carrier for digital information transfer, and it can automatically form secure mesh networks with very minimal resources, infrastructure and setup.
Please do keep in mind though, that at the time of writing this, Reticulum is still in beta. There might be bugs and security issues that have not yet been discovered. You can keep up with such things, and get updates on the general development and releases, over on the [Reticulum GitHub page](https://github.com/markqvist/reticulum).
The user-facing software that Alice and Bob will be installing already includes Reticulum, so there is no complicated installation and configuration setups, and getting everything up and running will be quite simple. The requirements are also very minimal, and everything can run on hardware they already have available, be that an old computer, a Raspberry Pi, or an Android phone.
Let's get started.
# LoRa Radio Setup
The first step is to get the LoRa radios prepared and installed. I have written in more length and details about these subjects in other posts on this site ([Installing RNode Firmware on Supported Devices](https://unsigned.io/installing-rnode-firmware-on-supported-devices/) and [How To Make Your Own RNodes](https://unsigned.io/how-to-make-your-own-rnodes/)), so this article will just quickly guide you through the basics required to get up and running. For much more information, read the above articles.
First of all, Alice and Bob need to get a compatible piece of radio hardware to use. Had they been living closer to each other, they might have just been able to use WiFi, but they need to cover a distance of more than 7 kilometers, so they decide to go with a couple of LoRa radios.
They take a look at the RNode Firmware [Supported Devices List](https://unsigned.io/rnode_firmware/#supported-hardware) , and decide to go with a couple of LilyGO T-Beam devices. They could have also used others, and they don't need to choose the same device, as long as they are within the same frequency range, all compatible devices work with Reticulum and can communicate with each other, as soon as the RNode Firmware has been installed on them.
![]({ASSET_PATH}images/lora_rnodes.jpeg)
Once the devices arrive, it is time to get the firmware installed. For this they will need a computer running some sort of Linux. Alice has a computer with Ubuntu installed, so they decide to use that. Since Python3 came installed as standard with the OS, Alice can go ahead and install the RNode configuration program by simply opening a terminal and typing:
```
pip install rnodeconf
```
The above command installs the program they need to flash the LoRa radios with the right firmware. If for some reason Python3 had not already been installed on Alices computer, she would have had to install it first with the command `sudo apt install python3 python3-pip`.
Now that the firmware installer is ready, it is time to actually get the firmware on to the devices. Alice launches the installer with the following command:
```
rnodeconf --autoinstall
```
After this she is greated with an interactive guide that asks a few questions about the device type, grabs the latest firmware files, and installs them onto the device. After repeating with the second device, that is all there is to it, and the LoRa radios are now ready for use with Reticulum.
# Installation at Alices House
To get a better signal, Alice mounts her LoRa radio in the attic of her house. She then runs a USB cable from the mounting location to the computer she wants to use for messaging, and plugs the cable into the computer. The LoRa radio is now directly connected to her computer via USB, and receives power from it when the computer is on.
At her computer (running Ubuntu Linux), she installs the Nomad Network program by entering the following command in a terminal:
```
pip install nomadnet
```
After a few seconds, Nomad Network and Reticulum is installed and ready to use. She can now run the Nomad Network client by entering the following command:
```
nomadnet
```
All required directories and configuration files will now be created, and the client will start up. After a few seconds, Alice will be greeted with a screen like this:
![]({ASSET_PATH}images/nomadnet_init-1024x640.jpg)
Confirming that everything is installed and working, it is time to add the LoRa radio as an interface that Reticulum can use. To do this, she opens up the Reticulum configuration file (located at `˜/.reticulum/config`) in a text editor.
By referring to the [RNode LoRa Interface](https://markqvist.github.io/Reticulum/manual/interfaces.html#rnode-lora-interface) section of the [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/), she can just copy-and-paste in a new configuration section for the interface, and edit the radio parameters to her requirements. She ends up with a configuration file that looks like this in it's entirity:
```
[reticulum]
enable_transport = False
share_instance = Yes
shared_instance_port = 37428
instance_control_port = 37429
panic_on_interface_error = No
[logging]
loglevel = 4
[interfaces]
[[Default Interface]]
type = AutoInterface
interface_enabled = True
[[RNode LoRa Interface]]
type = RNodeInterface
interface_enabled = True
port = /dev/ttyUSB0
frequency = 867200000
bandwidth = 125000
txpower = 7
spreadingfactor = 8
codingrate = 5
```
*Please note that the assignment and use of radio frequency spectrum is completely outside the scope of this exploratory post. Laws and regulations about spectrum use vary greatly around the world, and you will have to do your own research for what frequencies and modes you can use in your location, and what licenses, if any, are required for any given use case.*
Alice can now start the Nomad Network client again, and this time around it will initialise and use the LoRa radio installed in her attic. Having completed Alices part of the setup, lets move on to Bobs apartment.
# Installation at Bobs Apartment
Bob likes his messaging to happen on a handy device like a phone, so he decides to go with the [Sideband](https://unsigned.io/sideband) app instead of Nomad Network. He goes to the [download page](https://github.com/markqvist/Sideband/releases/latest) and installs the APK on his Android phone. He now needs a way to connect to the LoRa radio already running at Alices house to establish communication.
Since he doesn't want to walk around with the LoRa radio constantly dangling by a USB cable from his phone, he decides to set up a Reticulum gateway in his apartment using a Raspberry Pi he had lying around. The RNode LoRa radio will connect via USB to the Raspberry Pi, and the Raspberry Pi will be connected to the WiFi network in his apartment.
This way, any device on his WiFi network (including his Android phone) will be able to route information through the LoRa radio as well. Reticulum takes care of everything automatically, and there is no need to configure addresses, subnet, routing rules or anything.
Both his WiFi router and the Rasperry Pi is powered by a small battery system, so even if the power goes out, the system will be able to stay on for several days on the battery, and indefinitely if he props up a solar panel on his balcony.
Bob installs a fresh copy of Raspberry Pi OS on the small computer, and in the terminal issues the following command to install Reticulum:
```
pip install rns
```
In this case, Bob will not be running any user-facing software on the Raspberry Pi itself, so instead he starts Reticulum as a service, by running the `rnsd` program, to check that everything installed correctly:
```
rnsd
```
After a moment, the following output is shown from the `rnsd` program, signalling that everything is working properly, but that a new, default configuration file has just been created:
```
[2022-03-26 17:14:05] [Notice] Could not load config file, creating default configuration file...
[2022-03-26 17:14:05] [Notice] Default config file created. Make any necessary changes in /home/bob/.reticulum/config and restart Reticulum if needed.
[2022-03-26 17:14:09] [Notice] Started rnsd version 0.3.3
```
Bob terminates the `rnsd` program, and then connects the LoRa radio to the Raspberry Pi with a USB cable. Since he doesn't have any particular access to the roof or attic of the building, he just sticky-tapes the LoRa radio to a window facing in the general direction of Alices house.
He then proceeds to add the same interface configuration to his Reticulum configuration file as Alice did, so that the radio parameters of their respective LoRa radios match each other.
To allow other devices on his network to route through his new Reticulum gateway, he also adds the line `enable_transport = yes` to his Reticulum config file, so the file in it's entirity looks like this:
```
[reticulum]
enable_transport = Yes
share_instance = Yes
shared_instance_port = 37428
instance_control_port = 37429
panic_on_interface_error = No
[logging]
loglevel = 4
[interfaces]
[[Default Interface]]
type = AutoInterface
interface_enabled = True
[[RNode LoRa Interface]]
type = RNodeInterface
interface_enabled = True
port = /dev/ttyUSB0
frequency = 867200000
bandwidth = 125000
txpower = 7
spreadingfactor = 8
codingrate = 5
```
After starting the program again, this time using `rnsd -vvv` to get more verbose output, he can now see that the LoRa radio is correctly configured and used by Reticulum:
```
[2022-03-26 18:17:43] [Debug] Bringing up system interfaces...
[2022-03-26 18:17:43] [Verbose] AutoInterface[Default Interface] discovering peers for 1.8 seconds...
[2022-03-26 18:17:45] [Notice] Opening serial port /dev/ttyUSB0...
[2022-03-26 18:17:47] [Notice] Serial port /dev/ttyUSB0 is now open
[2022-03-26 18:17:47] [Verbose] Configuring RNode interface...
[2022-03-26 18:17:47] [Verbose] Wating for radio configuration validation for RNodeInterface[RNode LoRa Interface]...
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting frequency is 867.2 MHz
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting bandwidth is 125 KHz
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting TX power is 7 dBm
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting spreading factor is 8
[2022-03-26 18:17:47] [Debug] RNodeInterface[RNode LoRa Interface] Radio reporting coding rate is 5
[2022-03-26 18:17:47] [Verbose] RNodeInterface[RNode LoRa Interface] On-air bitrate is now 3.1 kbps
[2022-03-26 18:17:47] [Notice] RNodeInterface[RNode LoRa Interface] is configured and powered up
[2022-03-26 18:17:48] [Debug] System interfaces are ready
[2022-03-26 18:17:48] [Verbose] Configuration loaded from /home/bob/.reticulum/config
[2022-03-26 18:17:50] [Verbose] Loaded 0 path table entries from storage
[2022-03-26 18:17:50] [Verbose] Loaded 0 tunnel table entries from storage
[2022-03-26 18:17:50] [Verbose] Transport instance <a5dc367015b30f2d7b59> started
[2022-03-26 18:17:50] [Notice] Started rnsd version 0.3.3
```
Everything is ready, and when Bob launches the Sideband appplication on his phone, Alice and him will now be able to communicate securely and independently of any other infrastructure.
# Communication
Both the [Nomad Network](https://unsigned.io/nomadnet) program and the [Sideband](https://unsigned.io/sideband) application use a cryptographic message delivery system named [LXMF](https://unsigned.io/lxmf), that in turn uses Reticulum for encryption and privacy guarantees. Both Nomad Network and Sideband are *LXMF clients*.
Much like many different e-mail clients exist, so can many different LXMF clients, and they can all communicate with each other, which is why Alice and Bob can message each other even though they prefer to use very different kinds of user-facing software.
An LXMF addresses consist of 32 hexadecimal characters, and are usually encapsulated in single angle quotation marks like this: `<9824f6367015b30f2d7b8a24bc6205d7>`.
Nobody controls the allocation of addresses, and since the address space is so huge, and governed by cryptographic principles, you can create as many or as few adresses as you need.
Since you can just create them with freely avaible software, and without any sort of permission from anyone, they are never linked to any personally identifiable information either. They are completely and truly anonymous from the beginning, and you control how much or how little of your identity you associate with them.
For an LXMF address to be reachable for direct-delivery instant messaging on a Reticulum network, it must announce it's public keys on the network. Both Sideband and Nomad Network allows you to send an announce on the network, and both programs can be configured to do so automatically when they start. If you only want to use the system for "email-style" communication (via LXMF propagation nodes), you don't *need* to send any announces on the network, but to learn how it all works, it is a good idea to just set the programs to automatically announce at start up.
To make sure his public cryptographic key is known by the network, Bob taps the **Announce** button in the Sideband app:
<center><p><img src="{ASSET_PATH}images/1_announce-e1648319612571.png"/></p></center>
After a few seconds, Bobs announce shows up in the **Announce Stream** section of the Nomad Network program on Alices computer:
<center><p><img src="{ASSET_PATH}images/nomadnet_announce-1024x640.jpg"/></p></center>
Using the received announce, Alice starts a conversation with Bob. Either one of them could also have started the conversation by manually typing in the others LXMF address in their program, but in many cases it can be convenient to use the announces. Now that everything is ready, they exchange a few messages to test the system. On Bobs Android phone, this looks like this:
<center><p><img style="max-width: 100%; width: 400px;" src="{ASSET_PATH}images/3_conv.png"/></p></center>
And on Alices computer running Nomad Network, it looks like this:
<center><p><img src="{ASSET_PATH}images/nomadnet_conv-1024x640.jpg"/></p></center>
Although pretty useful, what we have explored here does not even begin to scratch the surface of what is possible with Reticulum and associated software. I hope you will find yourself inspired to explore and read deeper into the documentation and available software.
In the next parts of this series, we will explore how to add more features to the system, such as offline message delivery, expanding the system to allow communication for a larger number of people, bridging isolated networks over both the Internet and the Invisible Internet (I2P), using Reticulum over Packet Radio, and using LoRa interfaces diretcly on Android devices.

View File

@ -1,10 +1,10 @@
[title]: <> (Get Help) [title]: <> (Get Help)
## Get Help ## Get Help
If you are having trouble, or if something is not working, these resources may be useful: If you are having trouble, or if something is not working, this RNode contains a number of useful resources.
- The [Questions & Answers](qa.html) section - Read [Questions & Answers](qa.html) section
- The [No-Grid Communications Handbook](nghb.html) - Read the [Reticulum Manual](m/index.html) stored on this RNode
- The [Reticulum Manual](manual/index.html) - Browse a copy of the [Reticulum Website](r/index.html) stored on this RNode
## Community & Support ## Community & Support
If things still aren't working as expected here are some great places to ask for help: If things still aren't working as expected here are some great places to ask for help:

View File

@ -1,14 +1,15 @@
<table> ## Hello!
<table style="margin-bottom: 1.5em;">
<tbody> <tbody>
<tr> <tr>
<td style="vertical-align:middle;"><b>Hello!</b><br/> <td style="vertical-align:middle;padding-left: 0;">
You have connected to the <b>RNode Bootstrap Console</b>.<br/> You have connected to the <b>RNode Bootstrap Console</b>.<br/>
<br/> <br/>
The tools and information contained in this RNode will allow you to replicate the design, build more RNodes and grow your communications ecosystems.<br/> The tools and information contained in this RNode will allow you to replicate the design, build more RNodes and grow your communications ecosystems.<br/>
<br/> <br/>
This repository also contains tools, software and information necessary to bootstrap networks and communications systems based on Reticulum and RNodes. This repository also contains tools, software and information necessary to bootstrap networks and communications systems based on Reticulum and RNodes.
</td> </td>
<td width="33%" style="vertical-align:middle;"> <td width="33%" style="vertical-align:middle;padding-right: 0;">
<img src="{ASSET_PATH}gfx/rnode_iso.png" width="100%"/></td> <img src="{ASSET_PATH}gfx/rnode_iso.png" width="100%"/></td>
</tr> </tr>
</tbody> </tbody>
@ -19,7 +20,7 @@ This repository also contains tools, software and information necessary to boots
<div style="width:66%">You can browse this repository freely, or jump straight into a task-oriented workflow by selecting one of the starting points below.</div> <div style="width:66%">You can browse this repository freely, or jump straight into a task-oriented workflow by selecting one of the starting points below.</div>
<a href="./replicate.html"><button type="button" id="task-replicate">Create RNodes</button></a> <a href="./replicate.html"><button type="button" id="task-replicate">Create RNodes</button></a>
<a href="./software.html"><button type="button" id="task-rns">Install Software</button></a> <a href="./software.html"><button type="button" id="task-rns">Install Software</button></a>
<a href="./guides.html"><button type="button" id="task-rns">Learn More</button></a> <a href="./learn.html"><button type="button" id="task-rns">Learn More</button></a>
<a href="./networks.html"><button type="button" id="task-rns">Build A Network</button></a> <a href="./networks.html"><button type="button" id="task-rns">Build A Network</button></a>
<a href="./help.html"><button type="button" id="task-rns">Get Help</button></a> <a href="./help.html"><button type="button" id="task-rns">Get Help</button></a>
<a href="./contribute.html"><button type="button" id="task-rns">Contribute</button></a> <a href="./contribute.html"><button type="button" id="task-rns">Contribute</button></a>

11
Console/source/learn.md Normal file
View File

@ -0,0 +1,11 @@
[title]: <> (Learn More)
## Learn More
This RNode contains a selection of tutorials and guides on setting up communications, creating RNodes, building networks and using Reticulum. You can find additional information in the following sections:
- The [Questions & Answers](qa.html) section
- The [Reticulum Manual](m/index.html) stored on this RNode
- A copy of the [Reticulum Website](r/index.html) stored on this RNode
## Guides
{TOPIC:guides}

View File

@ -1,3 +1,3 @@
[title]: <> (Replicate) [title]: <> (Replicate)
# Create RNodes ## Create RNodes
This section contains the tools and guides necessary to create more RNodes. This section contains the tools and guides necessary to create more RNodes.

24
Console/source/s_lxmf.md Normal file
View File

@ -0,0 +1,24 @@
[title]: <> (LXMF)
## LXMF
LXMF is a simple and flexible messaging format and delivery protocol that allows a wide variety of implementations, while using as little bandwidth as possible. It is built on top of [Reticulum](https://reticulum.network) and offers zero-conf message routing, end-to-end encryption and Forward Secrecy, and can be transported over any kind of medium that Reticulum supports.
LXMF is efficient enough that it can deliver messages over extremely low-bandwidth systems such as packet radio or LoRa. Encrypted LXMF messages can also be encoded as QR-codes or text-based URIs, allowing completely analog *paper message* transport.
Installing this LXMF library allows other programs on your system, like Nomad Network, to use the LXMF messaging system. It also includes the `lxmd` program that you can use to run LXMF propagation nodes on your network.
**Local Installation**
If you do not have access to the Internet, or would prefer to install LXMF directly from this RNode, you can use the following instructions.
- Download the [{PKG_lxmf}]({ASSET_PATH}{PKG_lxmf}) package from this RNode and unzip it
- Install it with the command `pip install {PKG_NAME_lxmf}`
- Verify the installed Reticulum version by running `lxmd --version`
If you do not have an Internet connection while installing make sure to install the [Reticulum](./s_rns.html) package first.
**Online Installation**
If you are connected to the Internet, you can try to install the latest version of LXMF via the `pip` package manager.
- Install Nomad Network by running the command `pip install lxmf`
- Verify the installed Reticulum version by running `lxmd --version`

28
Console/source/s_nn.md Normal file
View File

@ -0,0 +1,28 @@
[title]: <> (Nomad Network)
## Nomad Network
Off-grid, resilient mesh communication with strong encryption, forward secrecy and extreme privacy.
Nomad Network Allows you to build private and resilient communications platforms that are in complete control and ownership of the people that use them. No signups, no agreements, no handover of any data, no permissions and gatekeepers.
![Screenshot]({ASSET_PATH}gfx/nn.webp)
Nomad Network is build on [LXMF](lxmf.html) and [Reticulum]({ASSET_PATH}r/), which together provides the cryptographic mesh functionality and peer-to-peer message routing that Nomad Network relies on. This foundation also makes it possible to use the program over a very wide variety of communication mediums, from packet radio to fiber optics.
Nomad Network does not need any connections to the public internet to work. In fact, it doesn't even need an IP or Ethernet network. You can use it entirely over packet radio, LoRa or even serial lines. But if you wish, you can bridge islanded networks over the Internet or private ethernet networks, or you can build networks running completely over the Internet. The choice is yours.
### Local Installation
If you do not have access to the Internet, or would prefer to install Nomad Network directly from this RNode, you can use the following instructions.
- Download the [{PKG_nomadnet}]({ASSET_PATH}{PKG_nomadnet}) package from this RNode and unzip it
- Install it with the command `pip install {PKG_NAME_nomadnet}`
- Verify the installed Reticulum version by running `nomadnet --version`
If you do not have an Internet connection while installing make sure to install the [Reticulum](./s_rns.html) and [LXMF](./s_lxmf.html) packages first.
### Online Installation
If you are connected to the Internet, you can try to install the latest version of Nomad Network via the `pip` package manager.
- Install Nomad Network by running the command `pip install nomadnet`
- Verify the installed Reticulum version by running `nomadnet --version`

19
Console/source/s_rns.md Normal file
View File

@ -0,0 +1,19 @@
[title]: <> (Reticulum)
## Reticulum
The cryptographic networking stack for building resilient networks anywhere. This packages requires you have `python` and `pip` installed on your computer. This should come as standard on most operating systems released since 2020.
### Local Installation
If you do not have access to the Internet, or would prefer to install Reticulum directly from this RNode, you can use the following instructions.
- Download the [{PKG_rns}]({ASSET_PATH}{PKG_rns}) package from this RNode and unzip it
- Install it with the command `pip install {PKG_NAME_rns}`
- Verify the installed Reticulum version by running `rnstatus --version`
### Online Installation
If you are connected to the Internet, you can try to install the latest version of Reticulum via the `pip` package manager.
- Install Reticulum by running the command `pip install rns`
- Verify the installed Reticulum version by running `rnstatus --version`
### Dependencies
If the installation has problems resolving dependencies, you can try to install the `python-cryptography`, `python-netifaces` and `python-pyserial` packages from your systems package manager, if they are locally available. If this is not possible, you please read the [Getting Started section of the Reticulum Manual]({ASSET_PATH}m/gettingstartedfast.html) for more detailed information. Specifically the [Pure-Python Reticulum]({ASSET_PATH}m/gettingstartedfast.html#pure-python-reticulum) section may be of use.

View File

@ -0,0 +1,13 @@
[title]: <> (Nomad Network)
## Sideband
Sideband is an LXMF client for Android, Linux and macOS. It has built-in support for communicating over RNodes, and many other mediums, such as Packet Radio, WiFi, I2P, or anything else Reticulum supports.
Sideband also supports exchanging messages through encrypted QR-codes on paper, or through messages embedded directly in lxm:// links.
![Screenshot]({ASSET_PATH}gfx/sideband.webp)
The installation files for the Sideband program is too large to be included on this RNode, but downloads for Linux, Android and macOS can be obtained from following sources:
- The [Sideband page](https://unsigned.io/sideband/) on [unsigned.io](https://unsigned.io/)
- The [GitHub release page for Sideband](https://github.com/markqvist/Sideband/releases/latest)
- The [IzzyOnDroid repository for F-Droid](https://android.izzysoft.de/repo/apk/io.unsigned.sideband)

View File

@ -1,5 +1,5 @@
[title]: <> (Software) [title]: <> (Software)
# Software ## Software
This RNode contains a repository of downloadable software and utilities, that are useful for bootstrapping communications networks, and for replicating RNodes. This RNode contains a repository of downloadable software and utilities, that are useful for bootstrapping communications networks, and for replicating RNodes.
**Please Note!** Whenever you install software onto your computer, there is a risk that someone modified this software to include malicious code. Be extra careful installing anything from this RNode, if you did not get it from a source you trust, or if there is a risk it was modified in transit. **Please Note!** Whenever you install software onto your computer, there is a risk that someone modified this software to include malicious code. Be extra careful installing anything from this RNode, if you did not get it from a source you trust, or if there is a risk it was modified in transit.
@ -7,88 +7,12 @@ This RNode contains a repository of downloadable software and utilities, that ar
If possible, you can check that the `SHA-256` hashes of any downloaded files correspond to the list of release hashes published on the [Reticulum Release page](https://github.com/markqvist/Reticulum/releases). If possible, you can check that the `SHA-256` hashes of any downloaded files correspond to the list of release hashes published on the [Reticulum Release page](https://github.com/markqvist/Reticulum/releases).
**You Have The Source!** Due to the size limitations of shipping all this software within an RNode, we don't include separate source-code archives for the below programs, but *all the source code is included within the Python .whl files*! You can simply unzip any of them with any program that understands `zip` files, and you will find the source code inside the unzipped directory (for some zip programs, you may need to change the file ending to `.zip`). **You Have The Source!** Due to the size limitations of shipping all this software within an RNode, we don't include separate source-code archives for the below programs, but *all the source code is included within the Python .whl files*! You can simply unzip any of them with any program that understands `zip` files, and you will find the source code inside the unzipped directory (for some zip programs, you may need to change the file ending to `.zip`).
<br/><br/>
## Reticulum <center>
------------- <h3>Choose a software package to get started</h3>
The cryptographic networking stack for building resilient networks anywhere. This packages requires you have `python` and `pip` installed on your computer. This should come as standard on most operating systems released since 2020. <br/>
<a href="./s_rns.html"><button type="button" id="task-rns">Reticulum</button></a>
**Local Installation** <a href="./s_lxmf.html"><button type="button" id="task-rns">LXMF</button></a>
<a href="./s_nn.html"><button type="button" id="task-rns">Nomad Network</button></a>
If you do not have access to the Internet, or would prefer to install Reticulum directly from this RNode, you can use the following instructions. <a href="./s_sideband.html"><button type="button" id="task-rns">Sideband</button></a>
</center>
- Download the [{PKG_rns}]({ASSET_PATH}{PKG_rns}) package from this RNode and unzip it
- Install it with the command `pip install {PKG_NAME_rns}`
- Verify the installed Reticulum version by running `rnstatus --version`
**Online Installation**
If you are connected to the Internet, you can try to install the latest version of Reticulum via the `pip` package manager.
- Install Reticulum by running the command `pip install rns`
- Verify the installed Reticulum version by running `rnstatus --version`
If the installation has problems resolving dependencies, you can try to install the `python-cryptography`, `python-netifaces` and `python-pyserial` packages from your systems package manager, if they are locally available. If this is not possible, you please read the [Getting Started section of the Reticulum Manual]({ASSET_PATH}manual/gettingstartedfast.html) for more detailed information.
## LXMF
-------------
LXMF is a simple and flexible messaging format and delivery protocol that allows a wide variety of implementations, while using as little bandwidth as possible. It is built on top of [Reticulum](https://reticulum.network) and offers zero-conf message routing, end-to-end encryption and Forward Secrecy, and can be transported over any kind of medium that Reticulum supports.
LXMF is efficient enough that it can deliver messages over extremely low-bandwidth systems such as packet radio or LoRa. Encrypted LXMF messages can also be encoded as QR-codes or text-based URIs, allowing completely analog *paper message* transport.
Installing this LXMF library allows other programs on your system, like Nomad Network, to use the LXMF messaging system. It also includes the `lxmd` program that you can use to run LXMF propagation nodes on your network.
**Local Installation**
If you do not have access to the Internet, or would prefer to install LXMF directly from this RNode, you can use the following instructions.
- Download the [{PKG_lxmf}]({ASSET_PATH}{PKG_lxmf}) package from this RNode and unzip it
- Install it with the command `pip install {PKG_NAME_lxmf}`
- Verify the installed Reticulum version by running `lxmd --version`
**Online Installation**
If you are connected to the Internet, you can try to install the latest version of LXMF via the `pip` package manager.
- Install Nomad Network by running the command `pip install lxmf`
- Verify the installed Reticulum version by running `lxmd --version`
## Nomad Network
-------------
Off-grid, resilient mesh communication with strong encryption, forward secrecy and extreme privacy.
Nomad Network Allows you to build private and resilient communications platforms that are in complete control and ownership of the people that use them. No signups, no agreements, no handover of any data, no permissions and gatekeepers.
![Screenshot]({ASSET_PATH}gfx/nn.webp)
Nomad Network is build on [LXMF](lxmf.html) and [Reticulum]({ASSET_PATH}r/), which together provides the cryptographic mesh functionality and peer-to-peer message routing that Nomad Network relies on. This foundation also makes it possible to use the program over a very wide variety of communication mediums, from packet radio to fiber optics.
Nomad Network does not need any connections to the public internet to work. In fact, it doesn't even need an IP or Ethernet network. You can use it entirely over packet radio, LoRa or even serial lines. But if you wish, you can bridge islanded networks over the Internet or private ethernet networks, or you can build networks running completely over the Internet. The choice is yours.
**Local Installation**
If you do not have access to the Internet, or would prefer to install Nomad Network directly from this RNode, you can use the following instructions.
- Download the [{PKG_nomadnet}]({ASSET_PATH}{PKG_nomadnet}) package from this RNode and unzip it
- Install it with the command `pip install {PKG_NAME_nomadnet}`
- Verify the installed Reticulum version by running `nomadnet --version`
**Online Installation**
If you are connected to the Internet, you can try to install the latest version of Nomad Network via the `pip` package manager.
- Install Nomad Network by running the command `pip install nomadnet`
- Verify the installed Reticulum version by running `nomadnet --version`
## Sideband
-------------
Sideband is an LXMF client for Android, Linux and macOS. It has built-in support for communicating over RNodes, and many other mediums, such as Packet Radio, WiFi, I2P, or anything else Reticulum supports.
Sideband also supports exchanging messages through encrypted QR-codes on paper, or through messages embedded directly in lxm:// links.
![Screenshot]({ASSET_PATH}gfx/sideband.webp)
The installation files for the Sideband program is too large to be included on this RNode, but downloads for Linux, Android and macOS can be obtained from following sources:
- The [Sideband page](https://unsigned.io/sideband/) on [unsigned.io](https://unsigned.io/)
- The [GitHub release page for Sideband](https://github.com/markqvist/Sideband/releases/latest)
- The [IzzyOnDroid repository for F-Droid](https://android.izzysoft.de/repo/apk/io.unsigned.sideband)