Reticulum: Chapter 3 — Prep the Raspberry Pi 3
Where I’m starting from
My Pi 3 is sitting in front of me with a blank SD card — nothing on it yet. I’ll be accessing it headlessly over SSH from my main computer, so I need to get the OS imaged and SSH configured before the Pi even boots for the first time. This chapter is purely software and setup — no Heltec hardware involved yet.
Step 1: Flashing the OS with Raspberry Pi Imager
I downloaded Raspberry Pi Imager from raspberrypi.com/software onto my main computer. The process is straightforward but there are a couple of choices worth making deliberately rather than just accepting defaults.
Insert the SD card, open Imager, then:
- Choose Device → Raspberry Pi 3
- Choose OS → Raspberry Pi OS (Other) → Raspberry Pi OS Lite (64-bit)
I’m going with Lite deliberately — I don’t need a desktop environment on a headless node, and keeping it lean means more CPU and RAM available for rnsd and mesh traffic later. Less cruft, more performance.
⚠️ NOTICE: as of late 2025, the newest Raspberry Pi OS images based on Debian Trixie have WiFi issues that can prevent headless setup from working on first boot. I’m sticking with the Bookworm image. If Imager only offers you Trixie and your Pi will be on Ethernet rather than WiFi, this doesn’t apply — but for a WiFi-based headless setup like mine, Bookworm is the safer choice right now.


- Click the gear/settings icon (Advanced Options) before writing — this is the crucial step for headless setup. Here I configure:
- Hostname:
rns-pi - Username and password
- WiFi SSID and password, plus WiFi country (important — set this to your actual country)
- Timezone and locale
- Enable SSH (password authentication is fine to start)
- Hostname:
- Write the image and wait for verification to complete before ejecting.
Step 2: First boot
SD card in the Pi, power it on, and wait about 90 seconds — it does an automatic first-boot resize and reboot cycle before settling. Then from my main computer:
ssh myusername@rns-pi.local
If .local hostname resolution fails (some routers block mDNS), I can find the Pi’s IP address from my router’s admin interface and SSH directly to that instead. Once I’m in, I know the hard part of headless setup is done.
Alternatively, you could just use an app like PuTTY if you already have it installed on your computer.
Step 3: Update everything first
Before installing anything, I want the system fully current. So let’s update and upgrade everything:
sudo apt update && sudo apt full-upgrade -y
sudo reboot
Reconnect via SSH after the reboot. This takes a few minutes on a Pi 3 — worth being patient rather than rushing past it.
Step 4: Install Python prerequisites
Raspberry Pi OS Bookworm ships with Python 3 already, but I need pip, venv tools, and a couple of extras:
python3 --version
sudo apt install -y python3-pip python3-venv python3-full git
Step 5: Set up a virtual environment
Here’s something that caught me out initially: Raspberry Pi OS Bookworm enforces PEP 668, which means a bare pip install at the system level gets refused. The clean solution is a Python virtual environment dedicated to Reticulum — it also means everything stays tidy and isolated from any other Python tools I might add later.
python3 -m venv ~/rns-env
source ~/rns-env/bin/activate
I’ll need to run that source command at the start of any new terminal session where I want to use these tools. It’s a small habit to build — and in Chapter 10 when I set up systemd services, the always-on daemon side of things handles this automatically anyway, so it only matters for interactive sessions.
Step 6: Install Reticulum and rnodeconf
With the venv active:
pip install rns --upgrade
This single command installs the full Reticulum Python package, which includes everything I need:
rnsd— the Reticulum daemon itselfrnodeconf— the RNode firmware flashing and configuration tool I’ll use in Chapter 4rnstatus,rnpath,rnprobe— the diagnostic tools I’ll lean on heavily in Chapter 8
Let me verify both key tools installed correctly:
rnsd --version
rnodeconf --version
If both return version numbers without errors, I’m in good shape.
NOTE: At the time of writing this post and stepping through everything, rnsd = v1.3.5, and rnodeconf = v2.5.0.
Parts of this write-up may be different if there is a large delta between the versions what I am using here and future builds.
Step 7: Sort out USB serial permissions
This is a small but important step that’s easy to forget and causes confusing errors later. My user account needs permission to access serial ports (/dev/ttyACM0 etc.) without requiring sudo every time:
sudo usermod -a -G dialout $USER
This group change doesn’t take effect in the current session — I need to log out and back in, or just reboot:
sudo reboot
Reconnect via SSH after reboot and confirm the group is applied:
groups
I should see dialout in the list. If it’s there, the Pi is fully prepped.
Where I am now
At this point my Pi 3 is updated, has a clean Python venv with Reticulum installed, and has serial port permissions sorted. Nothing is physically connected to it yet — the Heltec boards are still sitting on my bench with their antennas attached, waiting for Chapter 4 where I’ll plug the first one in and flash it with RNode firmware.


