GB7EAT – first light

The plan is to start small and build up from there, so this is the starting position:

Hardware

  • Raspberry Pi 4 (I could have used a 3B but I had a Pi 4 sitting doing nothing).
  • Digirig Mobile audio adapter.
  • Tait 8115 25W Mobile Radio.
  • Antenna – initially just my shack 2m/70cm co-linear in the back garden.
  • PSU, cables, etc.

This is pretty much as simple as you can get; a computer to run the software; an audio adapter to convert digital signals to audio; and a radio+antenna.

Software

Again, as simple as I can get to begin with. I’m using the Direwolf sound card modem to start off with.

Configuration

I started by installing the stock bookworm-lite edition of the Raspberry Pi OS – which is a slightly adapted version of Debian. I don’t need the graphical desktop as I’m more used to interacting with Linux via the console.

As with the Remote Shack, I created a dedicated Zerotier network to which the node and my home Mac are connected. The Zerotier “SNOPAC” network uses the address space 192.168.192.0/24 and m5kvk-5 has the address 192.168.192.3. It is this network that I use for all remote access rather than the local VLAN address. That way, if the node is moved to a different location – and LAN – it will still have the same IP address.

The second step was to bootstrap the node using debops so that it had a known configuration. I then re-ran debops to install XRPi and Direwolf and configure them to run as systemd services under tmux.

The reason for this is that neither XRPi nor Direwolf are daemons, so they need to be run from a console. By running them in tmux windows, I can run them simultaneously and access them remotely.

The code for doing this was fairly simple: A systemd service unit that runs a script

[Unit]
StartLimitIntervalSec=5
Description=XRpi service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=forking
Restart=unless-stopped
RestartSec=5
User=pi
WorkingDirectory=/home/pi/xrpi
ExecStart=/home/pi/xrpi/start_xrpi.sh

[Install]
WantedBy=multi-user.target

And the script /home/pi/xrpi/start_xrpi.sh

#!/usr/bin/bash
#
/usr/bin/tmux new -d -s xrpi
/usr/bin/tmux send-keys -t xrpi:0 '/home/pi/xrpi/xrpi64v504m-bullseye' ENTER

The pair of files for Direwolf are similar.

direwolf.conf

This file configures direwolf. Mine is pretty simple:

ADEVICE plughw:3,0
#
CHANNEL 0
MYCALL GB7EAT-5
MODEM 1200
PTT /dev/ttyUSB0 RTS
#
AGWPORT 8000
KISSPORT 8001
#
# Transmit FX25 instead of AX25
#
FX25TX 1
#
# How likely are we to Tx?
#
PERSIST 63
# 
# How often do we check?
#
SLOTTIME 12
#
# How many tries do we try to send a frame before giving up?
#
RETRY 5
#
# How long do we wait for a reply?
#
FRACK 3
#
# How many frames will we send before we wait for an acknowledgement
#
MAXFRAME 4
#
# How long should packets be?
#
PACLEN 128
#
# How long do we allow for PTT to take effect
#
DWAIT 0
#
# How long (10ms) to let the Tx stabilise
#
TXDELAY 30
#
# How do we wait at the end before dropping Tx
#
TXTAIL 15

The line ADEVICE plughw:3,0 tells direwolf the address of the digirig mobile, and comes from running the command: aplay -l To get the card (3) and device (0) of the dgirig.

XROUTER.CFG

This is the main config file for XRPi. This is the version after I applied for and was allocated GB7EAT:

# XROUTER.CFG - Main Configuration file for XRPi / XRLin
#
# This file is read only when the program boots.
#
#===================================================================
#
#       Primary Identity for AX25 & NetRom.
#
NODECALL=GB7EAT-5
NODEALIAS=EATON1
#
#       QTH
#
QTH=St Neots, Cambs, UK, IO92uf
LOCATOR=IO92uf
#
#       Console operations.
#
CONSOLECALL=M5KVK
#
#       Chat server.
#
CHATCALL=GB7EAT-8
CHATALIAS=EATCHT
CHATQUAL=100
#
#        PMS
#
PMSTYPE=4
PMSCALL=GB7EAT-2
PMSALIAS=EATBBS
PMSQUAL=120
PMSHADDR=.#22.GBR.EU
#
#       "Connection text", sent to anyone connecting to the alias
#
CTEXT
M5KVK Test Node chat server
Type '?' for list of commands.
***
#
# This text is the response to the 'I' command
#
INFOTEXT
XRPi Packet Router, St Neots, Cambs, UK, IO92uf
Sysop: Gareth M5KVK (M5KVK@GB7EAT.#22.GBR.EU)
To connect to the BBS, use the command: BBS
Comments/reports.queries to: M5KVK
Website: https://m5kvk.org/packet/gb7eat
***
#
#
#       This ID message is sent every IDINTERVAL.
#
IDTEXT
!5213.72N/00016.79W XRPi EATON (GB7EAT-5), 44.33.3.152, Chat=GB7EAT-8/EATCHT
***
#
# Port used to access Telnet
#
TELNETPORT=8023
# =====================================================================
# Interface definitions - These MUST precede any port definitions
# =====================================================================
#
INTERFACE=1
  TYPE=AGW
  MTU=256
ENDINTERFACE
#
# =====================================================================
# Port definitions. Each one begins with PORT and ends with ENDPORT
# =====================================================================
#
PORT=1
  ID=(FSK) 144.950MHz 1200Bd TESTING
  INTERFACENUM=2
  CHANNEL=A
  MHEARD=50
ENDPORT

Note that I am using the direwolf modem in AGW emulation. This appears to be the most stable method.

Conclusion

So, I have GB7EAT operational on 144.950MHz.

On the To-DO list are connections to the rest of the network, replacement of the direwolf modem with a NinoTNC, connection to AMPRnet and addition of a high speed 70cms link.

Also on the list for longer term exploration are a move of the node to a better physical location, and addition of higher speed links.

Building the test node with Ansible and Debops

Ansible and Debops

I spent some of my early professional years doing what is now known as ‘DevOps’. As well as developing software for data communications products like X.25 Packet Switched Nodes, I also developed test harnesses, build tools etc. Thus, I have always been drawn to tools that ease the process of building, configuring and managing software devices.

I came across Ansible some years ago and adopted it for my personal needs (I stopped developing software professionally about 25 years ago, but still ‘tinker’). Therefore it was natural that I would seek to leverage Ansible when building a packet node.

More recently, I came across Debops, which is a suite of ansible playbooks focused on the management of secure Debian-based Linux environments. This includes the Raspberry Pi that I intend to use as the hardware platform for the nodes.

The reason for this sidebar is that I have chosen to create Ansible Roles for each of the software components and distribute them as an Ansible Collection. By using Ansible to manage the node, I can ‘cookie-cutter’ additional nodes and manage their configuration centrally.

NB: The AWX Project is a trademark of Red Hat, Inc., used with permission

Getting back into Packet Radio

Background

Way back in the 80’s and 90’s I used to be very active on packet radio. I had a well-equipped shack in the good location (VHF-wise) and had links on VHF and UHF (70 cm and 23 cm).

As always, of course, life got in the way and I had to pack (sorry) all the packet stuff away. Then I moved to a new location down by the river here in St Neots with ridges on the west and north sides. The result is very poor VHF/UHF. I can get into my local repeaters – GB3OV and GB3PI – but that’s about it.

I’d pretty much forgotten about packet until I got involved with OARC during the COVID Lockdown. OARC has a very active Discord server with two channels devoted to packet radio. The result was a re-awakening of my interest and hence – eventually – this project.

What am I trying to do?

If you look at the Packet Link Map, you can clearly see that St Neots is in a bit of a desert as far as RF links are concerned. Apart from GB7BED, there’s nothing in VHF or UHF range, so the idea is to put something up that will serve the local HAM community and extend the UK Packet Network.

I’ll start with a test node that has local 1200 BPS access on VHF and Internet links to the rest of the network. Once this proves the concept, I’ll build a second node that will (hopefully) be located in a better location. If this is successful, I’ll add a 70cm 9600 BPS link and maybe an HF 300 BPS link. The latter will most likely be delivered via my Remote Shack