Updated guide to setting up an APRS RX only iGate using a Raspberry Pi, RTL-SDR dongle and a pre-built image

** image has been updated as of 21/04/2018 to resolve the problems some people had booting their Pi **

This post is an updated version of the original article I wrote in February 2017.  It’s using Raspbian Stretch rather than Raspbian Jessie, has Direwolf 1.4 instead of Direwolf 1.3 and the method used to start the gateway has changed.  Direwolf is now running as a service and can be easily started, stopped, restarted, enabled or disabled through simple commands.  It has been tested on a Raspberry Pi Zero, a Pi Zero W, a Pi 2B, a Pi 3B and the latest Raspberry Pi 3B+.  You now only need to edit one file to get a working gateway unless you want to select a different frequency from 144.800MHz, then you’ll need make an additional edit.

The instructions are very similar to my previous post except the process of automatically starting Direwolf which has been simplified.  Even if you are familiar with the previous image, please ensure you read the entire article, especially if you need to change the frequency as the file structure has changed.

The entire process detailed here should take less than half an hour to complete.
You will only need to edit one or perhaps two files.

First, download my custom built Raspberry Pi image from here (the filename is aprs-igate-stretch.img) or preferably as a torrent from here.  This is a 2.2Gb file which will expand to approximately 8Gb when you decompress it.  Unzip it and write it to an SD card.  The image was created using an 8Gb SD card but I recommend you use a 16Gb card in your Raspberry Pi.  4Gb cards are practically impossible to find these days and 8Gb cards are going the same way.  I’ve found SanDisk Ultra 16Gb cards to be about the best when it comes to performance and price and they can be picked up for about £8.  This image is fully up to date as of 21st April 2018.

There are two methods of downloading the Raspberry Pi image. The first is direct from SourceForge (aprs-igate-stretch.img) and the second is as a torrent.  If you use the torrent method, please seed the file for as long as possible because the more people who seed, the quicker the download will be for others.
Thank you.

MD5 of aprs-igate-stretch.zip is f8469173f3e3d9c420dbaefaff7d9875
MD5 of aprs-igate-stretch.img is 22998d62e7dd1b3f270834f6bfd5f089

If you get a CRC error when trying to unzip the downloaded file, first check the MD5 to make sure it’s correct. Assuming it is, then you should use a third party tool such as WinRAR or 7-Zip to extract the image from the .zip file.

Connect your RTL-SDR dongle and a network cable to your Raspberry Pi and boot it.  I thoroughly recommend you use a dongle with TCXO as it won’t drift in frequency and you shouldn’t need to do any frequency calibration.  I’m using an RTL-SDR R820T2 RTL2832U 1PPM TCXO SMA Software Defined Radio (Dongle Only) device which is the latest model, complete with TCXO.  Other dongles are available such as this NooElec version from Amazon which is a little cheaper and will arrive quicker or you can search eBay for similar dongles.

These instructions are written to do everything from a command line.  If you plug in a monitor, mouse and keyboard and boot to the Graphical User Interface (GUI), you will see an icon on the desktop called Dire Wolf. DO NOT click on this icon, it does not start Direwolf.  You’ll get an error message telling you it can’t open an audio device.

You will need to know what IP address your Raspberry Pi has on the network.  I do this by looking at my router and checking what devices have connected and then set up a DHCP reservation so each particular Raspberry Pi I own will always have the same address each time it reboots.

Open up a terminal/dos prompt or whatever client software you’re going to use to connect to the Raspberry Pi and log in.  In my case, the Raspberry Pi is on so I use the command
ssh pi@

You’ll be prompted for a password – It’s currently set to raspberry.
Use the following command to enter the Raspberry Pi config utility:

sudo raspi-config

It’s very important to expand the filesystem – You do this by selecting option 7 Advanced Options, then A1 Expand Filesystem, then select OK and you’ll be returned to the main screen.

Now select the first option Change User Password and press enter.  Press enter again and you will be prompted to Enter new UNIX password.  Type a new password, press enter and re-type your new password again.  You will get a message telling you your password has been changed successfully.

Use the arrow keys again to move down to 4 Localisation Options and press enter.  Use the arrow keys again to select Change Timezone and press enter.  First select your Geographical area and press enter and then select your Time zone and press enter.

Now you should set your Wi-Fi country – By default, this image is set to GB (Great Britain) so if you’re in a different country you should change this to ensure that the Pi uses the correct frequencies.  Select 4 Localisation Options and press enter.  Scroll down to I4 Change Wi-fi Country and press enter. Find your country, press enter and then press enter again to return to the main screen.

Finally, select 2 Network Options and press enter.  Press enter again on N1 Hostname and give your Raspberry Pi a suitable name.

You will now be returned to the main Raspberry Pi Software Configuration Tool main screen.  Use the tab key to select <Finish> and press enter.  You will be asked if you would like to reboot now.  Press enter to reboot and once your Pi has rebooted, log back in using the new password you set earlier.  Make a note of this password because if you forget it, you’ll need to start from scratch.

You will need an APRS passcode so use the APRS Passcode Generator at Magicbug to generate one.

All the software has been pre installed, all you need to do is edit one (or possibly two) files.

cd ~
sudo nano -c sdr.conf

Scroll down to line eight and change the xxx to your callsign and required SSID.  I use -10 as my SSID so this line reads MYCALL G6NHU-10.  Please use your own callsign, mine is just shown as an example.

In the section below, edit the line starting with IGSERVER to be the correct one for your region.  I’m in Europe so my line reads IGSERVER euro.aprs2.net

Scroll further down and you’ll find a line that starts with IGLOGIN.  Change the xxx to be the same as the callsign you entered above (including SSID) and then change the numbers 123456 to the passcode you obtained from the APRS Passcode Generator.

At the bottom of that file there is one long line that starts with PBEACON.  Replace xx.xxxxxx with your latitude, yyy.yyyyyy with your longitude and zz with your callsign (including SSID).

Save the file by pressing ctrl-x, then hit the Y key and then press enter.

You can now perfom a test using the following command
(144.800 is the APRS frequency in the UK, change as required).

rtl_fm -f 144.80M - | direwolf -c sdr.conf -r 24000 -D 1 -

If all is well, you should see something like this.

Initial test of the RPi and RTL-SDR Dongle APRS RX only iGate using Raspbian Stretch

Initial test of the RPi and RTL-SDR Dongle APRS RX only iGate using Raspbian Stretch

Press ctrl-c to exit the test.

If you’re using a Mac and connecting to your Raspberry Pi via the terminal you may notice the screen flashes badly.  You can fix this easily and quickly by going into the terminal Preferences/Profiles and make sure the box “Allow blinking text” is not ticked.

On some Raspberry Pis, you may get an error when you try and run the initial test.  There are two possible errors, the first is:
Signal caught, exiting!

User cancel, exiting…
Illegal instruction

The second error which has been spotted in testing is:
Dire Wolf version 1.4
No supported devices found
Illegal instruction

Either error can be resolved by redownloading and compiling Direwolf using these commands (copy and paste them one at a time exactly as written below:

cd ~
sudo cp sdr.conf sdr.old
sudo rm -r direwolf
git clone https://www.github.com/wb2osz/direwolf
cd ~/direwolf
sudo make install
make install-rpi
make install-conf
cd ~
sudo mv sdr.old sdr.conf

Now reboot your Raspberry Pi and run the test again.

You may find that rtl_fm doesn’t report that it’s tuned to exactly the correct frequency, this is nothing to worry about because the RTL-SDR works by mixing the incoming RF with a local oscillator and then IQ sampling the resulting base-band (difference) signal.  The local oscillator therefore needs to be offset a little so that the wanted signal doesn’t fall at the 0Hz point.  rtl_fm automatically selects an appropriate offset for the chosen sampling rate and displays the resulting “offset oscillator” frequency, not the actual “tuned” frequency.

If your local APRS frequency is NOT 144.800MHz then you will need to edit an additional file.
sudo nano /usr/local/bin/dw.sh

You’re looking for this line.

Change 144.80M to whatever your local APRS frequency is.
Save the file by pressing ctrl-x, then hit the Y key and then press enter.

Direwolf is already installed as a service so you must enable it by typing the following command
sudo systemctl enable direwolf

With the service enabled, you have more commands to use

This starts the service
sudo systemctl start direwolf

This command stops the service
sudo systemctl stop direwolf

If you want to disable the service so it doesn’t start automatically on reboot, use this command
sudo systemctl disable direwolf

This very useful command will show the status of the service and see the last few lines of output to demonstrate that it’s all running correctly.
sudo systemctl status direwolf

Sample of the output from running sudo systemctl status direwolf

Sample of the output from running sudo systemctl status direwolf

There is an even more useful command which you can run either via SSH in a terminal window or when you’re logged onto the Raspberry Pi via the GUI which will give you a constantly updating display of the stations heard.  This command is

sudo journalctl -o cat -af -u direwolf

Output from sudo journalctl -o cat -af -u direwolf

Output from sudo journalctl -o cat -af -u direwolf

(press ctrl-c to stop the display)

After enabling the service, reboot your Raspberry Pi and once it’s restarted, it will automatically connect to the APRS network and operate as a receive only iGate. There is an enforced two minute delay from the Pi starting to the gateway connecting, this is to allow all the system services to start up.  Nothing will be echoed to the display while it’s running like this so you can check your status on aprs.fi by searching for the callsign you entered (including SSID).  You don’t even need to log into the Raspberry Pi, the gateway will start automatically within about two and a half minutes from rebooting.

It’s been mentioned that you might like to calibrate the frequency of your RTL-SDR dongle.  I didn’t and I didn’t notice any performance issues but it’s likely that if you’re using an older or cheaper dongle then it might be a little off frequency.  If you’d like to do this, it’s very straightforward to do requiring that you edit just one file.  I’ve written some instructions which you can see by clicking here.

Please note – I am not claiming originality for this setup method, I’ve simply followed what’s already available out there on the internet and created an image based on those instructions for your convenience.  My two source documents were Raspberry Pi SDR IGate and Raspberry Pi Packet TNC.  I thoroughly recommend you familiarise yourself with both of them to see what’s been done here.  You can also read my previous blog article where I list each command I used to create this image.  It’s also worth downloading the full Dire Wolf user guide.  I learned how to add the service by reading a post from Josh, VK2HFF on the Direwolf Yahoo reflector.

I hope this image is useful and as always, I’d appreciate any feedback, comments or thoughts below.


On the 25th April 2018 a massive thunderstorm passed overhead here and caused the Raspberry Pi Zero which runs my APRS iGate (MB7UIV) to crash.  It had ben running flawlessly without a reboot for nearly three hundred days.  I decided to rebuild it using the method above and the total time it took, including writing the SD card and reinstalling Direwolf using the instructions provided was around forty minutes.

This entry was posted in Amateur radio, APRS, Data, FM, Raspberry Pi, VHF and tagged , , , , , , . Bookmark the permalink.

45 Responses to Updated guide to setting up an APRS RX only iGate using a Raspberry Pi, RTL-SDR dongle and a pre-built image

  1. HAL FUGLAAR says:

    I can’t get this image to boot with a RPI 3. I have a older version running with Dire Wolf 1.3. It starts with splash screen, then only a flashing cursor. I have tried 3 SD cards, and 2 pi’s. I have 3 hotspots running with RPI, and am very familiar with configuring them. Any ideas?

    • g6nhu says:

      Hi Hal,

      I never use the GUI so I can’t comment about what you’re seeing on screen but I’ve just written the image to an SD card, plugged it into a Raspberry Pi 3 and it’s booted straight away. I can log on via SSH without any problems.

      73 Keith.

    • g6nhu says:

      Hi Hal, I’ve posted a new image which I hope will resolve the problems booting. I’d appreciate it if you could try it please.
      73 Keith.

  2. Karl Heinz Kremer - K5KHK says:

    I am having the same problem: Only a flashing cursor on a RPi3. I also tried on an original Raspi Zero with the same results. Do you have any instructions about manually configuring the system (without the pre-built image)? What hostname are you using for the system? Is avahi-daemon installed so that I can access the Raspi without knowing the IP address (I have too many devices on my network to easily figure out what the new device is – so far it does not look like it’s even on the network)?

    Thanks and 73, Karl Heinz – K5KHK

    • g6nhu says:

      Hi Karl,
      Yes, avahi-demon is installed and the default hostname is raspberrypi. The build was made using my instructions here: http://qso365.co.uk/2017/02/a-guide-to-setting-up-an-aprs-receive-only-igate-using-a-raspberry-pi-and-an-rtl-sdr-dongle/ with just Direwolf configured differently.

      I’m re-downloading my original image file from SourceForge again now and will unzip and write it again to test.

      Has anyone apart from me got this working?

      73 Keith.

    • g6nhu says:

      I’ve just downloaded the .zip from sourceforge, checked the md5, unzipped it and checked the md5 of the .img.

      I used Etcher to write it to an SD card, booted and connected via SSH straight away.

      In case this is a firmware thing, I checked the firmware, it was at 4.14.30 so I ran sudo rpi-update which updated it to 4.14.34 and it’s still booting successfully.

      I’ve also booted both with and without the RTL dongle attached and it’s fine both ways.

      Very keen to get to the bottom of this.

      73 Keith.

  3. Karl Heinz Kremer - K5KHK says:

    I checked the MD5 sums for both the ZIP and the IMG file, and they match what you’ve posted. I’ll have to go through the step by step instructions to see if anything could trip up the installation. Because Hal said, that he tried with three different SD cards, I won’t play around with that and concentrate on the configuration.

    I’ll keep you posted.

  4. Karl Heinz Kremer - K5KHK says:

    BTW: This is with a 16GB card, I don’t have anything smaller, but that should not be a problem.

    • g6nhu says:

      I’ve done all my testing and building using a 16Gb card.
      Here’s something to try – After writing the card, before you put it in a Pi, mount it in a PC/Mac/Whatever and edit cmdline.txt
      Add init=/usr/lib/raspi-config/init_resize.sh to the end of the line, save the file and try booting from that. I’ve pared the image down to absolute minimum size and I wonder if that’s part of the problem.

      • Karl Heinz Kremer - K5KHK says:

        I’ll give that a try later. For now, I’ve followed your instructions, plus the instructions on the Yahoo Direwolf group to create the service, and was able to create a running system. Interestingly enough, it did not work with just the dw-start.sh script, I needed the service to get Direwolf running.

        • g6nhu says:

          That’s part of the reason I went to running Direwolf as a service – It seems that the startup method using dw-start.sh doesn’t work with Direwolf 1.4.

          • Karl Heinz Kremer - K5KHK says:

            Tried a freshly formatted card with a new image and the init string with the same results. I’ll just keep on using the image I created manually using the steps you’ve provided. Thank you.

  5. Martin Overthrow says:

    is it possible to use a fun-cube dongle pro+ instead of a RTL dongle?

  6. Paul G7BHE says:

    Is there a way to enable the Wi-Fi? It is awkward to run ethernet to where this pi will live.
    Thanks and 73

    • g6nhu says:

      Hi Paul,
      Yes – This is fairly straightforward to do.
      After writing the image, put the SD card into a PC/Mac/Linux/whatever computer – You’ll see a folder called ‘boot’
      On your computer create a text file called wpa_supplicant.conf consisting of the following:
      ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

      Add four spaces before the said and psk lines so they’re indented to start below the o in ‘network’ (this may not be required but I always do it)

      Save that file onto the SD card, put the card back into your Raspberry Pi and reboot. It will connect to your WiFi automatically.

      73 Keith

  7. Joshwaa says:

    This worked for me. However every time I reboot I have to pull the RTL-SDR out of the USB port and put it back in then it will work. Any ideas?

    • Joshwaa says:

      Also getting an error where port 8000 and 8001 are already in use from direwolf. Also I have to run “rtl_fm -f 144.39M – | direwolf -c sdr.conf -r 24000 -D 1 -” for the igate to actually work. After booting up it will not relay APRS from the radio unless I keep that window open. Also is there supposed to be something after the last – in the rtl_fm above?

      • g6nhu says:

        Hi Joshwaa,
        I suggest downloading the new image which I uploaded just a couple of hours ago and following the updated instructions on this post – It should all be working now.
        Make sure you use sudo systemctl enable direwolf once you’ve edited the two files and then reboot.

        (and no, there shouldn’t be anything after the last – in the command line you quoted)

        73 Keith.

        • Joshwaa says:

          It was my fault after reinstalling I forgot to change the freq in dw.sh to 144.390. Oops. Is the torrent updated to the new file? If so I will seed for a while. Thanks again for this.


  8. Jeff B. says:

    I was able to successfully set up an IGate by following these instructions. I had a couple of minor hiccups, detailed as follows.

    I too had the flashing cursor on first boot, before I resized the file system via SSH as the instructions state. Are the ones having this issue skipping this step?

    One other minor snag (which was my fault), was that I hit the CAPS LOCK key by mistake when typing in the “test” command line. When I ran the incorrectly typed command, I got the error “Signal caught, exiting!” as noted in the instructions, and thought I was going to have to recompile Direwolf, but then I noticed the 2nd half of the command line was all upper case. I Retyped it per the instructions, and the test command ran correctly.

    Thanks for providing the SD image and these instructions! Would this work with an rtl_tcp remote dongle?

    • g6nhu says:

      Hi Jeff,
      I’m fairly sure the boot problem is down to lack of space on the filesystem – I never connect to any of my Raspberry Pis using a monitor, mouse and keyboard which is why the instructions are all provided as terminal commands. I suppose it’s quite possible that the problems people are experiencing would be fixed if they were able to connect via SSH as I’ve described and able to run the command to expand the filesystem. However, I’m in the process of creating a new build which will leave a little extra space and will hopefully work via both SSH and through the GUI without any further tweaks being needed. I want this to work for as many people as possible 🙂

      Watch this space for a new image in the next day or so.

      73 Keith.

  9. Pete says:

    I am getting a CRC error both with the torrent and the direct download. Is anyone else experiencing this issue? Thanks

    • g6nhu says:

      Hi Pete,

      The first thing to do is to check the md5 value of the file you’ve downloaded against the figure I’ve posted to ensure you have a good download.

      I’ve successfully unzipped the file on Mac OS, Windows 8 and Windows 10. You might need to use a third party archive utility such as 7zip (free) due to the size of the unzipped image being over 4Gb.

      I haven’t tried unzipping it on Windows XP.

      73 Keith.

  10. Eric D Brown says:

    Just wanted to say Thanks for this image and the write-up. I had followed another article on installing direwolf, etc but could never keep the system running for more than 30 minutes or so before crashing. Your image has been running for 6 hours without issue.

    I appreciate the work you put into this.

    Eric – N0EDB

    • g6nhu says:

      Hi Eric,
      Thanks for the positive feedback, I’m very pleased it’s working for you. I’m keen to know which model Raspberry Pi are you using it on and I wonder if you had to reinstall Direwolf using the instructions I provided?

      73 Keith.

  11. Martin says:

    Hi, thanks for this!
    Have you thought of rebuilding it on the the basis of TinyCore / PiCore, i.e. Linux variants for the Raspberry that are run entirely in RAM? The main advantage of these is that you do not need to worry about any loss of power etc. – if the computer is loosing power, it will simply reboot as soon as it comes back. The traditional Raspbian on SD cards is in my experience prone to corrupt over time, mainly by small glitches in the power supply or improper shutdowns.

    Here is a link: https://www.novaspirit.com/2018/01/09/tiny-core-raspberry-pi-zero-w-install/

    73 de Martin

    • g6nhu says:

      Hi Martin,
      No, I’ve not tried that but will have a look at it. I do agree that early Raspberry Pis were a bit susceptible to SD card corruption but I’ve never experienced it at all. I have a lot of Pis running here and they’ve all had improper shutdowns but none of them have corrupted an SD card…. yet!
      73 Keith.

  12. Marcos says:

    Many many thanks for all.

    The best 73 de EA2EKE

  13. Martin says:

    Hi Keith,
    one more thing: I think it would help people if you indicated the expected format for the GPS coordinates, because APRS uses the DMS format (DDMM.MM if I remember correctly), while most other applications use DD. I assume you mean the latter.

    Again, a big thanks for your work!

    73 de Martin

  14. Martin says:

    Hi all,
    I had to recompile Direwolf, but now it works like a charm.
    A few remarks:

    1. I was at first irritated that my E4000 SDR reported a strangely different frequency (“Tuned to 145052000 Hz” instead of 144.800 MHz). But I found on the Internet that this seems normal behavior: http://kmkeen.com/rtl-demod-guide/
    It is also actually using the correct frequency for demodulation.

    2. I think I will add a power down button, as described here:
    Thus will allow a safe shutdown without SSH or a keyboard.

    3. On my computer, the Direwolf terminal output is blinking all the time. I found that you can disable that by adding “-t 0” to the command-line invocation:

    rtl_fm -f 144.80M – | direwolf -c sdr.conf -r 24000 -D 1 – -t 0

    But I still have to figure out how to incorporate that into the boot configuration.

    4. I am also thinking of adding a small OLED display via I2C, which would render the status or last received packet.

    But again, thanks for the good work!

    73 de Martin

    • g6nhu says:

      Hi Martin,
      Thanks for the feedback – Regarding your points:

      1 – Yes, I mention this specifically in the post and explain why there’s a difference in reported frequency.
      2 – Always useful – Mine is never switched off so I’m not too worried about it.
      3 – Good spot. I did have a few lines in my original article about how to work around this on a Mac which I’ve added to this entry.
      4 – Nice idea – Not something I’ll look at because my iGate is hidden away under my desk!

      73 Keith.

  15. DU2UXH says:

    Hi. This is working for me on the Raspberry Pi although I really have to recompile Direwolf everytime I do a fresh install. But it works like a charm. There are not much APRS here in the Philippines so I thought I would like to try.


    • g6nhu says:

      Hi Max,
      I’m very pleased it’s working for you – What model Raspberry Pi are you using please?
      73 Keith.

      • Maximo Barawid Jr. says:

        I think this is one of the first versions of this model. It says on the board, Raspberry Pi (c)2011.12. This is having only 2 USB ports.


      • Maximo Barawid Jr. says:

        Btw, I’ve seen that you have updated the image recently. How do I update the image to the current, just apt-get update and upgrade?


        • g6nhu says:

          Hi Max,
          No, the only way to get the updated image is to grab it fresh and start again. It’s quick enough to do, if you read the addendum to the blog piece, you’ll see I did it myself to update my own iGate recently.

          • Maximo Barawid Jr. says:

            Hi Keith. Thank you. I will update the image now.


            Max DU2UXH

  16. Andy G7TKK says:

    Hi there – following your examples. Im getting stuck at the Raspi-config –> Localisations –>I4 Change wifi country. Getting …Could not communicate with wpa supplicant….There was an error running option I4 change wifi country.

    RPi Zero W on Atrix docking system.
    Nooelec RTL “blue”

    wpa_supplicant.conf on F:boot drive …..ssd 16Gb
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

    lsusb shows no wifi equipment. even if I insert another pihut usb dongle I dont see the pi zero element.

    wlan 0 and wlan1 not associated when inspecting wlan icon.

    I obviously have done something silly Thanks in advance. Andy G7TKK

    • g6nhu says:

      Hi Andy,

      Firstly, when did you download this image? A few days after it was originally posted, I provided an updated version and part of the reason was for broken WiFi.

      I don’t know anything about the Atrix docking system but my first suggestion would be to try it without that as a bare bones Pi.

      73 Keith.

      • Andy G7TKK says:

        Thank you. I shall try the latest image. The bare bones pi system attached to the atrix dock has been working flawlessly as a rpi laptop for the past 3 years with an assortment of Rpi’s. It makes a good test jigfor trouble shooting hardware. TTFN Andy

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.