Diferencia entre revisiones de «Redes Autónomas por fuera de Internet»

De fabwiki
Ir a la navegación Ir a la búsqueda
Gaba (discusión | contribs.)
Página creada con «El 6 de junio nos reunimos para hablar sobre meshastic, meshcore y otras redes que utilizan LoRa.»
 
Sin resumen de edición
 
Línea 1: Línea 1:
El 6 de junio nos reunimos para hablar sobre meshastic, meshcore y otras redes que utilizan LoRa.
El 6 de junio nos reunimos para hablar sobre meshastic, meshcore y otras redes que utilizan LoRa.
= Reticulum =
El 27 de junio estuvimos reunidos aprendiendo y probando Reticulum. A continuación, algunas instrucciones para instalar un stack básico de Reticulum[https://es.wikipedia.org/wiki/Reticulum_Network_Stack]. El stack que usamos consiste en: 
* <code>rnsd</code> [https://markqvist.github.io/Reticulum/manual/using.html#the-rnsd-utility] (el daemon con el stack de red básico).
* <code>LXMF</code> [https://github.com/markqvist/lxmf] [https://reticulum.network/manual/software.html#lxmf] (un protocolo encima de Reticulum que permite la entrega de "mensajes" de manera flexible, eficiente y asíncrona, ya que permite el reenvío, almacenamiento y entrega de mensajes a nodos que no están conectados en el momento de la transmisión).
* <code>NomadNetwork</code> [https://github.com/markqvist/nomadnet] Una plataforma de comunicación encima de Reticulum para comunicarse con otras personas con o sin conexión directa a internet.
== Instalación en linux ==
Para instalar el stack de Reticulum en Linux necesitamos tener Python 3 y PiP [https://pypi.org/project/pip/] instalado. Se recomienda también instalar virtualenv [https://virtualenv.pypa.io/en/latest/] para evitar posibles conflictos en las versiones de las dependencias de Python.
== Python y dependencias ==
Primero tenemos que instalar python, su gestor de dependencias (pip) y virtualenv para aislar esas dependencias y que solo se instalen para el entorno de estas aplicaciones.
=== En Debian/Ubuntu y derivados ===
sudo apt install python3-full python3-pip python3-virtualenv
=== En Arch Linux ===
sudo pacman -Syu python python-pip python-virtualenv
== Aplicaciones ==
Una vez instalado, ya deberíamos tenemos en el sistema Python, PiP y virtualenv instalados, junto con lo necesario para instalar las aplicaciones. Es recomendable crear una carpeta llamada `reticulum`.
mkdir reticulum
cd reticulum
Ahora, creamos el entorno virtual de Python que usaremos para nuestras apps:
virtualenv reticulum_env
Ahí nos crea una carpeta `reticulum_env`, para "activar" (empezar a usar) el entorno virtual hacemos:
source reticulum_env/bin/activate
Ahora, todos los comandos de python que usemos, usaran las librerías instaladas en este entorno. Ahora usaremos `pip` para instalar los paquetes necesarios:
pip install rns
pip install lxmf
pip install nomadnet
Ahora ya tenemos instaladas todas las aplicaciones que necesitamos para poder probar Reticulum. Antes de arrancar, es recomendable actualizar los archivos de configuración.
=== rnsd ===
Por defecto, `rnsd` buscará su configuración en cualquiera de las siguientes carpetas:
/etc/reticulum
~/.config/reticulum
~/.reticulum
Si por algún motivo prefieres usar una ubicación diferente, puedes crear la carpeta de configuración en cualquier sitio y usar el parámetro `--config /ubicación/de/la/configuración` al ejecutar el comando. Para nuestro ejemplo, vamos a usar `~/.reticulum`. Para ver un ejemplo detallado de un archivo de configuración, podemos ejecutar el comando `rnsd` con el parámetro `--exampleconfig`, e imprimirá por pantalla un archivo de configuración. Es recomendable leer la sección [https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity bootstrapping connectivity] del manual de Reticulum para decidir qué nodos o instancias queremos usar, dependiendo de la estrategia que queramos implmentar.
Nosotros en el taller usamos el siguiente archivo de configuración, proporcionado por Fátima, con una serie de instancias a las que conectar.
Abrimos `~/.reticulum/config` con nuestro editor favorito y pegamos el contenido de abajo:
<pre>
[reticulum]
# If you enable Transport, your system will route traffic
# for other peers, pass announces and serve path requests.
# This should be done for systems that are suited to act
# as transport nodes, ie. if they are stationary and
# always-on. This directive is optional and can be removed
# for brevity.
enable_transport = yes
[logging]
# Extreme logging
loglevel = 7
[interfaces]
  [[Home]]
    type = TCPServerInterface
    listen_port = 4242
  [[Direct to server]]
    type = TCPClientInterface
    enabled = true
    target_host = 62.169.20.91
    target_port = 4242   
  [[Chicagoland RNS]]
    type = TCPClientInterface
    enabled = true
    target_host = rns.noderage.org
    target_port = 4242   
  [[Sydney RNS]]
    type = TCPClientInterface
    enabled = true
    target_host = sydney.reticulum.au
    target_port = 4242   
  [[dismails TCP Interface]]
    type = TCPClientInterface
    interface_enabled = true
    target_host = rns.dismail.de
    target_port = 7822
  [[interloper node]]
    type = TCPClientInterface
    interface_enabled = true
    target_host = intr.cx
    target_port = 4242
  [[noDNS1]]
    type = TCPClientInterface
    interface_enabled = true
    target_host = 202.61.243.41
    target_port = 4965
  [[Beleth RNS Hub]]
    type = TCPClientInterface
    interface_enabled = true
    target_host = rns.beleth.net
    target_port = 4242
  #Reticulum Portugal
  [[RNS reticulum.pt]]
    type = TCPClientInterface
    interface_enabled = true
    name = RNS reticulum.pt
    target_host = network.reticulum.pt
    target_port = 4242
  #BSDHell
  [[BSDHell]]
    type = TCPClientInterface
    enabled = yes
    target_host = reticulum.bsdhell.com
    target_port = 4242
  #Jenny
  [[RNS - Derpy Cloud]]
    type = TCPClientInterface
    enabled = yes
    target_host = rns.derps.me
    target_port = 34242
</pre>
En este ejemplo, todas las conexiones ocurren sobre TCP, pero usando el archivo de configuración de ejemplo que `rnsd --exampleconfig` devuelve, es posible ver cómo se configurarían otras interfaces diferentes de TCP, como UDP, I2P, RNode (LoRa) u otras interfaces de radio. Ahora ya podemos arrancar el servicio, si usamos uno de los tres directorios mencionados arriba para configuración, podemos simplemente ejecutar <code>rnsd</code> y el servicio quedará corriendo en primer plano. Ahora podemos continuar abriendo una nueva terminal.
'''Importante''' recordar, al abrir una nueva terminal, es necesario activar de nuevo el entorno virtual de python que creamos al principio, si no los paquetes que instalamos no estarán disponibles.
=== LXMF ===
En una nueva terminal, volvemos a la carpeta <code>reticulum</code> que creamos al prinpipio y activamos el entorno virtual:
virtualenv reticulum_env
Una vez activado, igual que con el programa anterior, el archivo de configuración será, por defecto, leído de cualquiera de los siguientes directorios:
/etc/lxmd
~/.config/lxmd
~/.lxmd
Si por cualquier motivo queremos guardar la configuración en un directorio diferente, podemos crearlo y ejecutar la aplicación con <code>--config /el/directorio/que/queramos</code>. Igual que con la aplicación anterior, también se puede generar un archivo de configuración de ejemplo, ampliamente comentado, usando `--exampleconfig`.
Nosotros usamos el siguiente, es recomendable cambiar el "Display name" por uno diferente para cada persona.
<pre>
# This is an example LXM Daemon config file.
# You should probably edit it to suit your
# intended usage.
[propagation]
# Whether to enable propagation node
enable_node = yes
# You can specify identity hashes for remotes
# that are allowed to control and query status
# for this propagation node.
# control_allowed = 7d7e542829b40f32364499b27438dba8, 437229f8e29598b2282b88bad5e44698
# An optional name for this node, included
# in announces.
# node_name = Anonymous Propagation Node
# Automatic announce interval in minutes.
# 6 hours by default.
announce_interval = 360
# Whether to announce when the node starts.
announce_at_start = yes
# Wheter to automatically peer with other
# propagation nodes on the network.
autopeer = yes
# The maximum peering depth (in hops) for
# automatically peered nodes.
autopeer_maxdepth = 6
# The maximum amount of storage to use for
# the LXMF Propagation Node message store,
# specified in megabytes. When this limit
# is reached, LXMF will periodically remove
# messages in its message store. By default,
# LXMF prioritises keeping messages that are
# new and small. Large and old messages will
# be removed first. This setting is optional
# and defaults to 500 megabytes.
message_storage_limit = 500
# The maximum accepted transfer size per in-
# coming propagation message, in kilobytes.
# This sets the upper limit for the size of
# single messages accepted onto this node.
propagation_message_max_accepted_size = 256
# The maximum accepted transfer size per in-
# coming propagation node sync.
#
# If a node wants to propagate a larger number
# of messages to this node, than what can fit
# within this limit, it will prioritise sending
# the smallest messages first, and try again
# with any remaining messages at a later point.
propagation_sync_max_accepted_size = 10240
# You can configure the target stamp cost
# required to deliver messages via this node.
propagation_stamp_cost_target = 16
# If set higher than 0, the stamp cost flexi-
# bility option will make this node accept
# messages with a lower stamp cost than the
# target from other propagation nodes (but
# not from peers directly). This allows the
# network to gradually adjust stamp cost.
propagation_stamp_cost_flexibility = 3
# The peering_cost option configures the target
# value required for a remote node to peer with
# and deliver messages to this node.
peering_cost = 18
# You can configure the maximum peering cost
# of remote nodes that this node will peer with.
# Setting this to a higher number will allow
# this node to peer with other nodes requiring
# a higher peering key value, but will require
# more computation time during initial peering
# when generating the peering key.
remote_peering_cost_max = 26
# You can tell the LXMF message router to
# prioritise storage for one or more
# destinations. If the message store reaches
# the specified limit, LXMF will prioritise
# keeping messages for destinations specified
# with this option. This setting is optional,
# and generally you do not need to use it.
# prioritise_destinations = 41d20c727598a3fbbdf9106133a3a0ed, d924b81822ca24e68e2effea99bcb8cf
# You can configure the maximum number of other
# propagation nodes that this node will peer
# with automatically. The default is 20.
max_peers = 20
# You can configure a list of static propagation
# node peers, that this node will always be
# peered with, by specifying a list of
# destination hashes.
# static_peers = e17f833c4ddf8890dd3a79a6fea8161d, 5a2d0029b6e5ec87020abaea0d746da4
# You can configure the propagation node to
# only accept incoming propagation messages
# from configured static peers.
# from_static_only = True
# By default, any destination is allowed to
# connect and download messages, but you can
# optionally restrict this. If you enable
# authentication, you must provide a list of
# allowed identity hashes in the a file named
# "allowed" in the lxmd config directory.
auth_required = no
[lxmf]
# The LXM Daemon will create an LXMF destination
# that it can receive messages on. This option sets
# the announced display name for this destination.
display_name = Anonymous Peer
# It is possible to announce the internal LXMF
# destination when the LXM Daemon starts up.
announce_at_start = yes
# You can also announce the delivery destination
# at a specified interval. This is not enabled by
# default.
announce_interval = 1
# The maximum accepted unpacked size for mes-
# sages received directly from other peers,
# specified in kilobytes. Messages larger than
# this will be rejected before the transfer
# begins.
delivery_transfer_max_accepted_size = 1000
# You can configure an external program to be run
# every time a message is received. The program
# will receive as an argument the full path to the
# message saved as a file. The example below will
# simply result in the message getting deleted as
# soon as it has been received.
# on_inbound = rm
[logging]
# Valid log levels are 0 through 7:
#  0: Log only critical information
#  1: Log errors and lower log levels
#  2: Log warnings and lower log levels
#  3: Log notices and lower log levels
#  4: Log info and lower (this is the default)
#  5: Verbose logging
#  6: Debug logging
#  7: Extreme logging
loglevel = 7
</pre>
Con el archivo de configuración en su lugar, podemos ejecutar <code>lxmd</code> y, si usamos los directorios por defecto especificados arriba para <code>rnsd</code>, no debería hacer falta nada más, pero si usamos uno diferente , es posible especificar el directorio de configuración de reticulum usando <code>--rnsconfig</code>.
=== Nomad Network ===
Este es el último, el cliente que nos permite interactuar con la red. Hay que abrir otra terminal, ir al directorio <code>reticulum</code> que creamos al principio, y ahí cargar el entorno virtual para poder usar las aplicaciones que instalamos (<code>virtualenv reticulum_env</code>). Igual que los anteriores, esta app busca su configuración en cualquiera de estas 3 ubicaciones:
/etc/nomadnetwork
~/.config/nomadnetwork
~/.nomadnetwork
En cualquiera de ellas podemos crear un archivo <code>config</code>. En este caso no hay un comando para una configuración de ejemplo, pero Fátima nos compartió el siguiente archivo:
<pre>
# This is the default Nomad Network config file.
# You should probably edit it to suit your needs and use-case,
[logging]
# Valid log levels are 0 through 7:
#  0: Log only critical information
#  1: Log errors and lower log levels
#  2: Log warnings and lower log levels
#  3: Log notices and lower log levels
#  4: Log info and lower (this is the default)
#  5: Verbose logging
#  6: Debug logging
#  7: Extreme logging
loglevel = 7
destination = file
[client]
enable_client = yes
user_interface = text
downloads_path = ~/Downloads
notify_on_new_message = yes
# By default, the peer is announced at startup
# to let other peers reach it immediately.
announce_at_start = yes
# By default, the client will try to deliver a
# message via the LXMF propagation network, if
# a direct delivery to the recipient is not
# possible.
try_propagation_on_send_fail = yes
# Nomadnet will periodically sync messages from
# LXMF propagation nodes by default, if any are
# present. You can disable this if you want to
# only sync when manually initiated.
periodic_lxmf_sync = yes
# The sync interval in minutes. This value is
# equal to 6 hours (360 minutes) by default.
lxmf_sync_interval = 360
# By default, automatic LXMF syncs will only
# download 8 messages at a time. You can change
# this number, or set the option to 0 to disable
# the limit, and download everything every time.
lxmf_sync_limit = 8
# You can specify a required stamp cost for
# inbound messages to be accepted. Specifying
# a stamp cost will require untrusted senders
# that message you to include a cryptographic
# stamp in their messages. Performing this
# operation takes the sender an amount of time
# proportional to the stamp cost. As a rough
# estimate, a stamp cost of 8 will take less
# than a second to compute, and a stamp cost
# of 20 could take several minutes, even on
# a fast computer.
required_stamp_cost = None
# You can signal stamp requirements to senders,
# but still accept messages with invalid stamps
# by setting this option to True.
accept_invalid_stamps = False
# The maximum accepted unpacked size for mes-
# sages received directly from other peers,
# specified in kilobytes. Messages larger than
# this will be rejected before the transfer
# begins.
max_accepted_size = 500
# The announce stream will only show one entry
# per destination or node by default. You can
# change this to show as many announces as have
# been received, for every destination.
compact_announce_stream = yes
[textui]
# Amount of time to show intro screen
intro_time = 1
# You can specify the display theme.
# theme = light
theme = dark
# Specify the number of colors to use
# valid colormodes are:
# monochrome, 16, 88, 256 and 24bit
#
# The default is a conservative 256 colors.
# If your terminal does not support this,
# you can lower it. Some terminals support
# 24 bit color.
# colormode = monochrome
# colormode = 16
# colormode = 88
colormode = 256
# colormode = 24bit
# By default, unicode glyphs are used. If
# you have a Nerd Font installed, you can
# enable this for a better user interface.
# You can also enable plain text glyphs if
# your terminal doesn't support unicode.
# glyphs = plain
glyphs = unicode
# glyphs = nerdfont
# You can specify whether mouse events
# should be considered as input to the
# application. On by default.
mouse_enabled = True
# What editor to use for editing text.
editor = nano
# If you don't want the Guide section to
# show up in the menu, you can disable it.
hide_guide = no
[node]
# Whether to enable node hosting
enable_node = yes
# The node name will be visible to other
# peers on the network, and included in
# announces.
node_name = Fatima
# Automatic announce interval in minutes.
# 6 hours by default.
announce_interval = 360
# Whether to announce when the node starts.
announce_at_start = Yes
# When Nomad Network is hosting a page-serving
# node, it can also act as an LXMF propagation
# node. This is a convenient feature that lets
# you easily set up and run a propagation node
# on the network, but it is not as fully
# featured as using the lxmd program to host a
# propagation node. For complete control and
# flexibility, use lxmd to run a PN. For a
# small local system or network, the built-in
# PN functionality will suffice for most cases.
#
# If there is already a large amount of
# propagation nodes on the network, or you
# simply want to run a pageserving-only node,
# you should disable running a propagation node.
# Due to lots of propagation nodes being
# available, this is currently the default.
disable_propagation = Yes
# For clients and other propagation nodes
# delivering messages via this node, you can
# configure the minimum required propagation
# stamp costs. All messages delivered to the
# propagation node network must have a valid
# propagation stamp, or they will be rejected.
# Clients automatically detect the stamp cost
# for the node they are delivering to, and
# compute a corresponding stamp before trying
# to deliver the message to the propagation
# node.
#
# Propagation stamps are easier to verify in
# large batches, and therefore also somewhat
# easier to compute for the senders. As such,
# a reasonable propagation stamp cost should
# be a bit higher than the normal peer-to-peer
# stamp costs.
#
# Propagation stamps does not incur any extra
# load for propagation nodes processing them,
# since they are only required to verify that
# they are correct, and only the generation
# is computationally costly. Setting a sensible
# propagation stamp cost (and periodically
# checking the average network consensus) helps
# keep spam and misuse out of the propagation
# node network.
propagation_cost = 16
# The maximum amount of storage to use for
# the LXMF Propagation Node message store,
# specified in megabytes. When this limit
# is reached, LXMF will periodically remove
# messages in its message store. By default,
# LXMF prioritises keeping messages that are
# new and small. Large and old messages will
# be removed first. This setting is optional
# and defaults to 2 gigabytes.
# message_storage_limit = 2000
# The maximum accepted transfer size per in-
# coming propagation message, in kilobytes.
# This sets the upper limit for the size of
# single messages accepted onto this node.
max_transfer_size = 256
# The maximum accepted transfer size per in-
# coming propagation node sync.
#
# If a node wants to propagate a larger number
# of messages to this node, than what can fit
# within this limit, it will prioritise sending
# the smallest messages first, and try again
# with any remaining messages at a later point.
max_sync_size = 10240
# You can tell the LXMF message router to
# prioritise storage for one or more
# destinations. If the message store reaches
# the specified limit, LXMF will prioritise
# keeping messages for destinations specified
# with this option. This setting is optional,
# and generally you do not need to use it.
# prioritise_destinations = 41d20c727598a3fbbdf9106133a3a0ed, d924b81822ca24e68e2effea99bcb8cf
# You can configure the maximum number of other
# propagation nodes that this node will peer
# with automatically. The default is 20.
# max_peers = 20
# You can configure a list of static propagation
# node peers, that this node will always be
# peered with, by specifying a list of
# destination hashes.
# static_peers = e17f833c4ddf8890dd3a79a6fea8161d, 5a2d0029b6e5ec87020abaea0d746da4
# You can specify the interval in minutes for
# rescanning the hosted pages path. By default,
# this option is disabled, and the pages path
# will only be scanned on startup.
# page_refresh_interval = 0
# You can specify the interval in minutes for
# rescanning the hosted files path. By default,
# this option is disabled, and the files path
# will only be scanned on startup.
# file_refresh_interval = 0
[printing]
# You can configure Nomad Network to print
# various kinds of information and messages.
# Printing messages is disabled by default
print_messages = No
# You can configure a custom template for
# message printing. If you uncomment this
# option, set a path to the template and
# restart Nomad Network, a default template
# will be created that you can edit.
# message_template = ~/.nomadnetwork/print_template_msg.txt
# You can configure Nomad Network to only
# print messages from trusted destinations.
# print_from = trusted
# Or specify the source LXMF addresses that
# will automatically have messages printed
# on arrival.
# print_from = 76fe5751a56067d1e84eef3e88eab85b, 0e70b5848eb57c13154154feaeeb89b7
# Or allow printing from anywhere, if you
# are feeling brave and adventurous.
# print_from = everywhere
# You can configure the printing command.
# This will use the default CUPS printer on
# your system.
print_command = lp
# You can specify what printer to use
# print_command = lp -d [PRINTER_NAME]
# Or specify more advanced options. This
# example works well for small thermal-
# roll printers:
# print_command = lp -d [PRINTER_NAME] -o cpi=16 -o lpi=8
# This one is more suitable for full-sheet
# printers. It will print a QR code at the center of any media
# your printer will accept, print in portrait mode, and move the message to
# the top of the print queue:
# print_command = lp -d [PRINTER_NAME] -o job-priority=100 -o media=Custom.75x75mm -o orientation-requested=3
# But you can modify the size to fit your needs.
# The custom media option accepts millimeters, centimeters, and
# inches in a width by length format like so:
# -o media=Custom.[WIDTH]x[LENGTH][mm,cm,in]
#
# The job priority option accepts 1-100, though you can remove it
# entirely if you aren't concerned with a print queue:
# -o job-priority=[1-100]
#
# Finally, the orientation option allows for 90 degree rotations beginning with 3, so:
# -o orientation-requested=4 (landscape, 90 degrees)
# -o orientation-requested=5 (reverse portrait, 180 degrees)
#
# Here is the full command with the recommended customizable variables:
# print_command = lp -d [PRINTER_NAME] -o job-priority=[N] -o media=[MEDIA_SIZE] -o orientation-requested=[N] -o sides=one-sided
# For example, here's a configuration for USB thermal printer that uses the POS-58 PPD driver
# with rolls 47.98x209.9mm in size:
# print_command = lp -d [PRINTER_NAME] -o job-priority=100 -o media=custom_47.98x209.9mm_47.98x209.9mm -o sides=one-sided
</pre>
Si creaste la configuración en cualquiera de los directorios mencionados antes, podes ejectuar <code>nomadnet</code> directamente en tu terminal y ahí debería cargar la interfaz de texto que te permitirá comunicarte con la red. Es probable que tarde un rato en descubrir otros peers y nodes, así conviene dejarlo un rato ejecutándose después de abrirlo.

Revisión actual - 22:55 27 jun 2026

El 6 de junio nos reunimos para hablar sobre meshastic, meshcore y otras redes que utilizan LoRa.

Reticulum

El 27 de junio estuvimos reunidos aprendiendo y probando Reticulum. A continuación, algunas instrucciones para instalar un stack básico de Reticulum[1]. El stack que usamos consiste en:

  • rnsd [2] (el daemon con el stack de red básico).
  • LXMF [3] [4] (un protocolo encima de Reticulum que permite la entrega de "mensajes" de manera flexible, eficiente y asíncrona, ya que permite el reenvío, almacenamiento y entrega de mensajes a nodos que no están conectados en el momento de la transmisión).
  • NomadNetwork [5] Una plataforma de comunicación encima de Reticulum para comunicarse con otras personas con o sin conexión directa a internet.

Instalación en linux

Para instalar el stack de Reticulum en Linux necesitamos tener Python 3 y PiP [6] instalado. Se recomienda también instalar virtualenv [7] para evitar posibles conflictos en las versiones de las dependencias de Python.

Python y dependencias

Primero tenemos que instalar python, su gestor de dependencias (pip) y virtualenv para aislar esas dependencias y que solo se instalen para el entorno de estas aplicaciones.

En Debian/Ubuntu y derivados

sudo apt install python3-full python3-pip python3-virtualenv

En Arch Linux

sudo pacman -Syu python python-pip python-virtualenv

Aplicaciones

Una vez instalado, ya deberíamos tenemos en el sistema Python, PiP y virtualenv instalados, junto con lo necesario para instalar las aplicaciones. Es recomendable crear una carpeta llamada `reticulum`.

mkdir reticulum
cd reticulum

Ahora, creamos el entorno virtual de Python que usaremos para nuestras apps:

virtualenv reticulum_env

Ahí nos crea una carpeta `reticulum_env`, para "activar" (empezar a usar) el entorno virtual hacemos:

source reticulum_env/bin/activate

Ahora, todos los comandos de python que usemos, usaran las librerías instaladas en este entorno. Ahora usaremos `pip` para instalar los paquetes necesarios:

pip install rns
pip install lxmf
pip install nomadnet

Ahora ya tenemos instaladas todas las aplicaciones que necesitamos para poder probar Reticulum. Antes de arrancar, es recomendable actualizar los archivos de configuración.

rnsd

Por defecto, `rnsd` buscará su configuración en cualquiera de las siguientes carpetas:

/etc/reticulum
~/.config/reticulum
~/.reticulum

Si por algún motivo prefieres usar una ubicación diferente, puedes crear la carpeta de configuración en cualquier sitio y usar el parámetro `--config /ubicación/de/la/configuración` al ejecutar el comando. Para nuestro ejemplo, vamos a usar `~/.reticulum`. Para ver un ejemplo detallado de un archivo de configuración, podemos ejecutar el comando `rnsd` con el parámetro `--exampleconfig`, e imprimirá por pantalla un archivo de configuración. Es recomendable leer la sección bootstrapping connectivity del manual de Reticulum para decidir qué nodos o instancias queremos usar, dependiendo de la estrategia que queramos implmentar.

Nosotros en el taller usamos el siguiente archivo de configuración, proporcionado por Fátima, con una serie de instancias a las que conectar.

Abrimos `~/.reticulum/config` con nuestro editor favorito y pegamos el contenido de abajo:

[reticulum]

# If you enable Transport, your system will route traffic
# for other peers, pass announces and serve path requests.
# This should be done for systems that are suited to act
# as transport nodes, ie. if they are stationary and
# always-on. This directive is optional and can be removed
# for brevity.
enable_transport = yes

[logging]
# Extreme logging
loglevel = 7

[interfaces]

  [[Home]]
    type = TCPServerInterface
    listen_port = 4242

  [[Direct to server]]
    type = TCPClientInterface
    enabled = true
    target_host = 62.169.20.91
    target_port = 4242    

  [[Chicagoland RNS]]
    type = TCPClientInterface
    enabled = true
    target_host = rns.noderage.org
    target_port = 4242    

  [[Sydney RNS]]
    type = TCPClientInterface
    enabled = true
    target_host = sydney.reticulum.au
    target_port = 4242    

  [[dismails TCP Interface]]
    type = TCPClientInterface
    interface_enabled = true
    target_host = rns.dismail.de
    target_port = 7822

  [[interloper node]]
    type = TCPClientInterface
    interface_enabled = true
    target_host = intr.cx
    target_port = 4242

  [[noDNS1]]
    type = TCPClientInterface
    interface_enabled = true
    target_host = 202.61.243.41
    target_port = 4965

  [[Beleth RNS Hub]]
    type = TCPClientInterface
    interface_enabled = true
    target_host = rns.beleth.net
    target_port = 4242

  #Reticulum Portugal
  [[RNS reticulum.pt]]
    type = TCPClientInterface
    interface_enabled = true
    name = RNS reticulum.pt
    target_host = network.reticulum.pt
    target_port = 4242

  #BSDHell
  [[BSDHell]]
    type = TCPClientInterface
    enabled = yes
    target_host = reticulum.bsdhell.com
    target_port = 4242

  #Jenny
  [[RNS - Derpy Cloud]]
    type = TCPClientInterface
    enabled = yes
    target_host = rns.derps.me
    target_port = 34242

En este ejemplo, todas las conexiones ocurren sobre TCP, pero usando el archivo de configuración de ejemplo que `rnsd --exampleconfig` devuelve, es posible ver cómo se configurarían otras interfaces diferentes de TCP, como UDP, I2P, RNode (LoRa) u otras interfaces de radio. Ahora ya podemos arrancar el servicio, si usamos uno de los tres directorios mencionados arriba para configuración, podemos simplemente ejecutar rnsd y el servicio quedará corriendo en primer plano. Ahora podemos continuar abriendo una nueva terminal.

Importante recordar, al abrir una nueva terminal, es necesario activar de nuevo el entorno virtual de python que creamos al principio, si no los paquetes que instalamos no estarán disponibles.

LXMF

En una nueva terminal, volvemos a la carpeta reticulum que creamos al prinpipio y activamos el entorno virtual:

virtualenv reticulum_env

Una vez activado, igual que con el programa anterior, el archivo de configuración será, por defecto, leído de cualquiera de los siguientes directorios:

/etc/lxmd
~/.config/lxmd
~/.lxmd

Si por cualquier motivo queremos guardar la configuración en un directorio diferente, podemos crearlo y ejecutar la aplicación con --config /el/directorio/que/queramos. Igual que con la aplicación anterior, también se puede generar un archivo de configuración de ejemplo, ampliamente comentado, usando `--exampleconfig`.

Nosotros usamos el siguiente, es recomendable cambiar el "Display name" por uno diferente para cada persona.

# This is an example LXM Daemon config file.
# You should probably edit it to suit your
# intended usage.

[propagation]

# Whether to enable propagation node

enable_node = yes

# You can specify identity hashes for remotes
# that are allowed to control and query status
# for this propagation node.

# control_allowed = 7d7e542829b40f32364499b27438dba8, 437229f8e29598b2282b88bad5e44698

# An optional name for this node, included
# in announces.

# node_name = Anonymous Propagation Node

# Automatic announce interval in minutes.
# 6 hours by default.

announce_interval = 360

# Whether to announce when the node starts.

announce_at_start = yes

# Wheter to automatically peer with other
# propagation nodes on the network.

autopeer = yes

# The maximum peering depth (in hops) for
# automatically peered nodes.

autopeer_maxdepth = 6

# The maximum amount of storage to use for
# the LXMF Propagation Node message store,
# specified in megabytes. When this limit
# is reached, LXMF will periodically remove
# messages in its message store. By default,
# LXMF prioritises keeping messages that are
# new and small. Large and old messages will
# be removed first. This setting is optional
# and defaults to 500 megabytes.

message_storage_limit = 500

# The maximum accepted transfer size per in-
# coming propagation message, in kilobytes.
# This sets the upper limit for the size of
# single messages accepted onto this node.

propagation_message_max_accepted_size = 256

# The maximum accepted transfer size per in-
# coming propagation node sync.
#
# If a node wants to propagate a larger number
# of messages to this node, than what can fit
# within this limit, it will prioritise sending
# the smallest messages first, and try again
# with any remaining messages at a later point.

propagation_sync_max_accepted_size = 10240

# You can configure the target stamp cost
# required to deliver messages via this node.

propagation_stamp_cost_target = 16

# If set higher than 0, the stamp cost flexi-
# bility option will make this node accept
# messages with a lower stamp cost than the
# target from other propagation nodes (but
# not from peers directly). This allows the
# network to gradually adjust stamp cost.

propagation_stamp_cost_flexibility = 3

# The peering_cost option configures the target
# value required for a remote node to peer with
# and deliver messages to this node.

peering_cost = 18

# You can configure the maximum peering cost
# of remote nodes that this node will peer with.
# Setting this to a higher number will allow
# this node to peer with other nodes requiring
# a higher peering key value, but will require
# more computation time during initial peering
# when generating the peering key.

remote_peering_cost_max = 26

# You can tell the LXMF message router to
# prioritise storage for one or more
# destinations. If the message store reaches
# the specified limit, LXMF will prioritise
# keeping messages for destinations specified
# with this option. This setting is optional,
# and generally you do not need to use it.

# prioritise_destinations = 41d20c727598a3fbbdf9106133a3a0ed, d924b81822ca24e68e2effea99bcb8cf

# You can configure the maximum number of other
# propagation nodes that this node will peer
# with automatically. The default is 20.

max_peers = 20

# You can configure a list of static propagation
# node peers, that this node will always be
# peered with, by specifying a list of
# destination hashes.

# static_peers = e17f833c4ddf8890dd3a79a6fea8161d, 5a2d0029b6e5ec87020abaea0d746da4

# You can configure the propagation node to
# only accept incoming propagation messages
# from configured static peers.

# from_static_only = True

# By default, any destination is allowed to
# connect and download messages, but you can
# optionally restrict this. If you enable
# authentication, you must provide a list of
# allowed identity hashes in the a file named
# "allowed" in the lxmd config directory.

auth_required = no


[lxmf]

# The LXM Daemon will create an LXMF destination
# that it can receive messages on. This option sets
# the announced display name for this destination.

display_name = Anonymous Peer

# It is possible to announce the internal LXMF
# destination when the LXM Daemon starts up.

announce_at_start = yes

# You can also announce the delivery destination
# at a specified interval. This is not enabled by
# default.

announce_interval = 1

# The maximum accepted unpacked size for mes-
# sages received directly from other peers,
# specified in kilobytes. Messages larger than
# this will be rejected before the transfer
# begins.

delivery_transfer_max_accepted_size = 1000

# You can configure an external program to be run
# every time a message is received. The program
# will receive as an argument the full path to the
# message saved as a file. The example below will
# simply result in the message getting deleted as
# soon as it has been received.

# on_inbound = rm


[logging]
# Valid log levels are 0 through 7:
#   0: Log only critical information
#   1: Log errors and lower log levels
#   2: Log warnings and lower log levels
#   3: Log notices and lower log levels
#   4: Log info and lower (this is the default)
#   5: Verbose logging
#   6: Debug logging
#   7: Extreme logging

loglevel = 7

Con el archivo de configuración en su lugar, podemos ejecutar lxmd y, si usamos los directorios por defecto especificados arriba para rnsd, no debería hacer falta nada más, pero si usamos uno diferente , es posible especificar el directorio de configuración de reticulum usando --rnsconfig.

Nomad Network

Este es el último, el cliente que nos permite interactuar con la red. Hay que abrir otra terminal, ir al directorio reticulum que creamos al principio, y ahí cargar el entorno virtual para poder usar las aplicaciones que instalamos (virtualenv reticulum_env). Igual que los anteriores, esta app busca su configuración en cualquiera de estas 3 ubicaciones:

/etc/nomadnetwork
~/.config/nomadnetwork
~/.nomadnetwork

En cualquiera de ellas podemos crear un archivo config. En este caso no hay un comando para una configuración de ejemplo, pero Fátima nos compartió el siguiente archivo:

# This is the default Nomad Network config file.
# You should probably edit it to suit your needs and use-case,

[logging]
# Valid log levels are 0 through 7:
#   0: Log only critical information
#   1: Log errors and lower log levels
#   2: Log warnings and lower log levels
#   3: Log notices and lower log levels
#   4: Log info and lower (this is the default)
#   5: Verbose logging
#   6: Debug logging
#   7: Extreme logging

loglevel = 7
destination = file

[client]

enable_client = yes
user_interface = text
downloads_path = ~/Downloads
notify_on_new_message = yes

# By default, the peer is announced at startup
# to let other peers reach it immediately.
announce_at_start = yes

# By default, the client will try to deliver a
# message via the LXMF propagation network, if
# a direct delivery to the recipient is not
# possible.
try_propagation_on_send_fail = yes

# Nomadnet will periodically sync messages from
# LXMF propagation nodes by default, if any are
# present. You can disable this if you want to
# only sync when manually initiated.
periodic_lxmf_sync = yes

# The sync interval in minutes. This value is
# equal to 6 hours (360 minutes) by default.
lxmf_sync_interval = 360

# By default, automatic LXMF syncs will only
# download 8 messages at a time. You can change
# this number, or set the option to 0 to disable
# the limit, and download everything every time.
lxmf_sync_limit = 8

# You can specify a required stamp cost for
# inbound messages to be accepted. Specifying
# a stamp cost will require untrusted senders
# that message you to include a cryptographic
# stamp in their messages. Performing this
# operation takes the sender an amount of time
# proportional to the stamp cost. As a rough
# estimate, a stamp cost of 8 will take less
# than a second to compute, and a stamp cost
# of 20 could take several minutes, even on
# a fast computer.
required_stamp_cost = None

# You can signal stamp requirements to senders,
# but still accept messages with invalid stamps
# by setting this option to True.
accept_invalid_stamps = False

# The maximum accepted unpacked size for mes-
# sages received directly from other peers,
# specified in kilobytes. Messages larger than
# this will be rejected before the transfer
# begins.
max_accepted_size = 500

# The announce stream will only show one entry
# per destination or node by default. You can
# change this to show as many announces as have
# been received, for every destination.
compact_announce_stream = yes

[textui]

# Amount of time to show intro screen
intro_time = 1

# You can specify the display theme.
# theme = light
theme = dark

# Specify the number of colors to use
# valid colormodes are:
# monochrome, 16, 88, 256 and 24bit
#
# The default is a conservative 256 colors.
# If your terminal does not support this,
# you can lower it. Some terminals support
# 24 bit color.

# colormode = monochrome
# colormode = 16
# colormode = 88
colormode = 256
# colormode = 24bit

# By default, unicode glyphs are used. If
# you have a Nerd Font installed, you can
# enable this for a better user interface.
# You can also enable plain text glyphs if
# your terminal doesn't support unicode.

# glyphs = plain
glyphs = unicode
# glyphs = nerdfont

# You can specify whether mouse events
# should be considered as input to the
# application. On by default.
mouse_enabled = True

# What editor to use for editing text.
editor = nano

# If you don't want the Guide section to
# show up in the menu, you can disable it.
hide_guide = no

[node]

# Whether to enable node hosting
enable_node = yes

# The node name will be visible to other
# peers on the network, and included in
# announces.
node_name = Fatima

# Automatic announce interval in minutes.
# 6 hours by default.
announce_interval = 360

# Whether to announce when the node starts.
announce_at_start = Yes

# When Nomad Network is hosting a page-serving
# node, it can also act as an LXMF propagation
# node. This is a convenient feature that lets
# you easily set up and run a propagation node
# on the network, but it is not as fully
# featured as using the lxmd program to host a
# propagation node. For complete control and
# flexibility, use lxmd to run a PN. For a
# small local system or network, the built-in
# PN functionality will suffice for most cases.
#
# If there is already a large amount of
# propagation nodes on the network, or you
# simply want to run a pageserving-only node,
# you should disable running a propagation node.
# Due to lots of propagation nodes being
# available, this is currently the default.

disable_propagation = Yes

# For clients and other propagation nodes
# delivering messages via this node, you can
# configure the minimum required propagation
# stamp costs. All messages delivered to the
# propagation node network must have a valid
# propagation stamp, or they will be rejected.
# Clients automatically detect the stamp cost
# for the node they are delivering to, and
# compute a corresponding stamp before trying
# to deliver the message to the propagation
# node.
#
# Propagation stamps are easier to verify in
# large batches, and therefore also somewhat
# easier to compute for the senders. As such,
# a reasonable propagation stamp cost should
# be a bit higher than the normal peer-to-peer
# stamp costs.
#
# Propagation stamps does not incur any extra
# load for propagation nodes processing them,
# since they are only required to verify that
# they are correct, and only the generation
# is computationally costly. Setting a sensible
# propagation stamp cost (and periodically
# checking the average network consensus) helps
# keep spam and misuse out of the propagation
# node network.

propagation_cost = 16

# The maximum amount of storage to use for
# the LXMF Propagation Node message store,
# specified in megabytes. When this limit
# is reached, LXMF will periodically remove
# messages in its message store. By default,
# LXMF prioritises keeping messages that are
# new and small. Large and old messages will
# be removed first. This setting is optional
# and defaults to 2 gigabytes.

# message_storage_limit = 2000

# The maximum accepted transfer size per in-
# coming propagation message, in kilobytes.
# This sets the upper limit for the size of
# single messages accepted onto this node.

max_transfer_size = 256

# The maximum accepted transfer size per in-
# coming propagation node sync.
#
# If a node wants to propagate a larger number
# of messages to this node, than what can fit
# within this limit, it will prioritise sending
# the smallest messages first, and try again
# with any remaining messages at a later point.

max_sync_size = 10240

# You can tell the LXMF message router to
# prioritise storage for one or more
# destinations. If the message store reaches
# the specified limit, LXMF will prioritise
# keeping messages for destinations specified
# with this option. This setting is optional,
# and generally you do not need to use it.

# prioritise_destinations = 41d20c727598a3fbbdf9106133a3a0ed, d924b81822ca24e68e2effea99bcb8cf

# You can configure the maximum number of other
# propagation nodes that this node will peer
# with automatically. The default is 20.

# max_peers = 20

# You can configure a list of static propagation
# node peers, that this node will always be
# peered with, by specifying a list of
# destination hashes.

# static_peers = e17f833c4ddf8890dd3a79a6fea8161d, 5a2d0029b6e5ec87020abaea0d746da4

# You can specify the interval in minutes for
# rescanning the hosted pages path. By default,
# this option is disabled, and the pages path
# will only be scanned on startup.

# page_refresh_interval = 0

# You can specify the interval in minutes for
# rescanning the hosted files path. By default,
# this option is disabled, and the files path
# will only be scanned on startup.

# file_refresh_interval = 0

[printing]

# You can configure Nomad Network to print
# various kinds of information and messages.

# Printing messages is disabled by default

print_messages = No

# You can configure a custom template for
# message printing. If you uncomment this
# option, set a path to the template and
# restart Nomad Network, a default template
# will be created that you can edit.

# message_template = ~/.nomadnetwork/print_template_msg.txt

# You can configure Nomad Network to only
# print messages from trusted destinations.

# print_from = trusted

# Or specify the source LXMF addresses that
# will automatically have messages printed
# on arrival.

# print_from = 76fe5751a56067d1e84eef3e88eab85b, 0e70b5848eb57c13154154feaeeb89b7

# Or allow printing from anywhere, if you
# are feeling brave and adventurous.

# print_from = everywhere

# You can configure the printing command.
# This will use the default CUPS printer on
# your system.

print_command = lp

# You can specify what printer to use
# print_command = lp -d [PRINTER_NAME]

# Or specify more advanced options. This
# example works well for small thermal-
# roll printers:
# print_command = lp -d [PRINTER_NAME] -o cpi=16 -o lpi=8

# This one is more suitable for full-sheet
# printers. It will print a QR code at the center of any media
# your printer will accept, print in portrait mode, and move the message to
# the top of the print queue:
# print_command = lp -d [PRINTER_NAME] -o job-priority=100 -o media=Custom.75x75mm -o orientation-requested=3

# But you can modify the size to fit your needs.
# The custom media option accepts millimeters, centimeters, and
# inches in a width by length format like so:
# -o media=Custom.[WIDTH]x[LENGTH][mm,cm,in]
#
# The job priority option accepts 1-100, though you can remove it
# entirely if you aren't concerned with a print queue:
# -o job-priority=[1-100]
#
# Finally, the orientation option allows for 90 degree rotations beginning with 3, so:
# -o orientation-requested=4 (landscape, 90 degrees)
# -o orientation-requested=5 (reverse portrait, 180 degrees)
#
# Here is the full command with the recommended customizable variables:
# print_command = lp -d [PRINTER_NAME] -o job-priority=[N] -o media=[MEDIA_SIZE] -o orientation-requested=[N] -o sides=one-sided

# For example, here's a configuration for USB thermal printer that uses the POS-58 PPD driver
# with rolls 47.98x209.9mm in size:
# print_command = lp -d [PRINTER_NAME] -o job-priority=100 -o media=custom_47.98x209.9mm_47.98x209.9mm -o sides=one-sided

Si creaste la configuración en cualquiera de los directorios mencionados antes, podes ejectuar nomadnet directamente en tu terminal y ahí debería cargar la interfaz de texto que te permitirá comunicarte con la red. Es probable que tarde un rato en descubrir otros peers y nodes, así conviene dejarlo un rato ejecutándose después de abrirlo.