For fun, I run a rx-only APRS iGate at home. My setup consists of:

All told, it’s about $100 in parts (including case and SD card and all that), which doesn’t seem so bad. The rtl_fm and direwolf processes take about 3-5% of the CPU power of the board, or about 10-20% of one core; a more modest CPU could certainly function, but my brief attempt at using a 600MHz Kirkwood found that it could not keep up with the audio stream.

I don’t have a great view of the sky in my flat, but I hear the local environs reasonably well, at least, as well as a local WIDE digi.

Ultimately, though, I hope to have the RTL-SDR able to listen to several channels as well as pushing its data into direwolf for igate operation. I have not figured out how to do that yet, sadly.

RTL-SDR Calibration

I made use of and to measure the crystal error in my RTL-SDR (the -p parameter to rtl_fm, below). These tools are delightfully straightforward.

Direwolf Configuration

Since this is an RX-only IGATE and does not use a traditional radio+soundcard setup, most features are turned off. Some parameters have been [omitted]:

# No audio device
ADEVICE null null

IGLOGIN KD8GIN [omitted]

# no incoming packets, ideally

# it is not possible to explicitly state that we cannot tx, but the default
# configuration is to load ->tx_chan with -1, so by omitting igtxvia, we
# will indicate our rx-only nature

# Every 120 minutes, send a position report to the IGate connection
# R& is RX-only IGATE

runit scripts

Direwolf is overseen by runit. The main run script is


mkdir -p /var/log/direwolf
chown direwolf:direwolf /var/log/direwolf

abort() { kill -s TERM -$(jobs -p) ; }

set -m
trap abort EXIT

# Use 144.8M for UK, 144.38M for USA
chpst -u direwolf:direwolf:plugdev rtl_fm -o 4 -p 11.060 -f 144.8M |
  chpst -u direwolf:direwolf direwolf -c /etc/direwolf/sdr-igate.conf -r 24000 -D 1 -