Skip to content

Instantly share code, notes, and snippets.

@s0lesurviv0r
Last active February 27, 2023 07:38
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save s0lesurviv0r/c2499e8f96559e467d243896608c8ec6 to your computer and use it in GitHub Desktop.
Amateur Radio Linux Machine Provisioning

Amateur Radio Linux Machine Provisioning

IN PROGRESS - Still working out a few bugs and filling in a few details

These are some notes I use for configuring my amateur radio Linux machines. The base operating system is Ubuntu 22.04 LTS. This is not a comprehensive guide, just a quick reference for myself and others to install commonly used amateur radio applications on a Linux machine. Please don't blindly copy and paste these into your terminal without understanding what they do. I will include links in the reference section for more detailed newbie instructions.

Overview

The system that these instructions intends to build is a Linux system using the Ubuntu distribution. The goal is to use as much open source software as possible. I think currently all the amateur radio software used in this guide is open source. Additionally, the software chosen provides a good cross-section of capabilities needed for emcomm, as well as for more recreational activities. Here's a list of software and the capabilities they provide:

  • chirp
    • Radio programming
  • gpsd
    • GPS daemon, provides GPS support for a variety of other applications
  • hamlib
    • Library and applications for rig control
  • xastir
    • APRS client
  • YAAC
    • APRS client
    • Offline OpenStreetMap view with search feature
  • gpredict
    • Satellite pass predictor
  • gqrx-sdr
    • SDR receiver
  • rtl-sdr
    • SDR tools and library needed to use RTL based SDRs
  • direwolf
    • AFSK KISS TNC with additional APRS capabilities included
  • pat
    • Winlink client
  • ax25-tools
  • flrig
    • Rig control application compatible with fldigi
  • fldigi
    • Digital mode application. Supports PSK, RTTY, MFSK, and more
  • js8call
    • Weak signal digital mode for messaging
  • wsjtx
    • Weak signal digital mode (FT8, etc)
  • noaa-apt
  • gpxsee
    • TODO Add installation instructions

Variables

These are some variables that will be used throughout this guide:

<CALL_SIGN> = My call sign

<SSID> = An SSID is used to differentiate other instances using this call sign. It's known as the substation id

<RIG_MODEL> = Hamlib rig model number

<RIG_SERIAL> = Rig serial port

<RIG_SERIAL_BAUD> = Baud rate for rig's serial port

<RIG_ALSA_DEVICE> = The ALSA device for the rig

<APRS_PASSWORD> = The password for APRS-IS for my call sign

<GPS_SERIAL> = The serial device for my GPS

Install Packages

This will install most applications we need through Ubuntu's package manager:

sudo apt-get install \
    chirp \
    gpsd \
    hamlib4 \
    hamlib-utils \
    xastir \
    gpredict \
    gqrx-sdr \
    rtl-sdr \
    direwolf \
    pat \
    ax25-tools \
    flrig \
    fldigi \
    js8call \
    wsjtx \
    openjdk-11-jre \
    openjdk-17-jre \
    ntp

To install ARDOP we'll need to do the following:

sudo wget -O /usr/local/bin/ardopc64 "http://www.cantab.net/users/john.wiseman/Downloads/ardopc64"
sudo chmod +x /usr/local/bin/ardopc64

To install noaa-app:

wget https://github.com/martinber/noaa-apt/releases/download/v1.3.1/noaa-apt_1.3.1-1_amd64.deb
sudo dpkg -i noaa-apt_1.3.1-1_amd64.deb

Configure gpsd

sudo nano /etc/default/gpsd and set:

DEVICES="<GPS_SERIAL>"

GPSD_OPTIONS="-n"

USBAUTO="false"

We use this config to pin to our GPS serial device explicitly and prevent gpsd from latching onto out rig's serial device.

sudo systemctl enable gpsd to enable gpsd on boot.

sudo systemctl start gpsd to start gpsd on the spot.

Configure ntpd

sudo timedatectl set-ntp no to turn off timesyncd.

sudo nano /etc/ntp.conf to edit config and add:

# GPS Serial data reference
server 127.127.28.0 minpoll 4 maxpoll 4
fudge 127.127.28.0 time1 0.0 refid GPS

# GPS PPS reference
server 127.127.28.1 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.1 refid PPS

After restarting ntpd use ntpq -p and gpsmon for testing.

Rig Serial Port Permissions

We need to configure udev rules to allow our user to read/write to the rig's USB serial port. In this example I'm creating one for my IC-705. The idVendor and idProduct can be found using sudo lsusb -v.

sudo nano /etc/udev/rules.d/50-radios.rules to create/open a file for radio udev rules. I place the following in that file for my IC-705:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0c26", ATTRS{idProduct}=="0036", GROUP="users", MODE="0666"

sudo usermod -a -G dialout $USER to add the current user to the dialout group so it can get permissions for the rig's USB serial port.

sudo udevadm control --reload to reload the udev rules.

Find Rig's ALSA SoundCard Device

arecord --list-pcms

plughw:CARD=CODEC,DEV=0
USB Audio CODEC, USB Audio
Hardware device with all software conversions

My IC-705's <RIG_ALSA_DEVICE> would be plughw:CARD=CODEC. This value would also work for my IC-7100 and IC-7300.

Find Rig's Serial Device

Afterwards find the serial device for CAT control ls /dev/serial/by-id/. My output looks like:

usb-Sierra_Wireless__Incorporated_MC7750_001027009999999-if00-port0
usb-Sierra_Wireless__Incorporated_MC7750_001027009999999-if02-port0
usb-Sierra_Wireless__Incorporated_MC7750_001027009999999-if03-port0
usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_IC-7100_02012442_A-if00-port0
usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_IC-7100_02012442_B-if00-port0

After looking at this list, I've identified the second to last as being my IC-7100's CAT control. Therefore the serial device is /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_IC-7100_02012442_A-if00-port0

This will be used where we see <RIG_SERIAL>

Find hamlib Rig Model Number

rigctld -l to find hamlib rig model numbers

This number will be used where we see <RIG_MODEL>

Configure Direwolf

sudo nano ~/direwolf.conf

ADEVICE <RIG_ALSA_DEVICE>
CHANNEL 0
MYCALL <CALL_SIGN>-<SSID>
MODEM 1200
PTT RIG <RIG_MODEL> <RIG_SERIAL> <RIG_SERIAL_BAUD>
AGWPORT 8000
KISSPORT 8001
GPSD localhost

Configure Direwolf ARPS

These are optional and used as needed

Digipeater

This will digipeat but also emit the station's position as a fill-in digipeater. This is what I would add to the existing config:

DIGIPEAT 0 0 ^WIDE[3-7]-[1-7]$ ^WIDE[12]-[12]$
TBEACON SYMBOL=1# POWER=5

IGate

This will listen for ARPS traffic and send it over to the internet APRS servers. This should be added to the existing config:

IGSERVER noam.aprs2.net
IGLOGIN <CALLSIGN>-<SSID> <APRS_PASSWORD>

Run Direwolf

direwolf -c ~/direwolf.conf

AX25

sudo nano /etc/ax25/axports to open the config file for AX.25 ports. I put the following on one line in that file:

wl2k <CALL_SIGN> 0 255 7 Winlink

sudo kissattach $(readlink -f /tmp/kisstnc) wl2k whenever I connect my rig and start direwolf. This will bind the direwolf KISS TNC to Linux AX.25 stack.

sudo kissparms -p wl2k -t 300 -l 10 -s 12 -r 80 -f n to set the correct parameters.

sudo killall kissattach after finished using the AX.25 port.

Virtual Device for ARDOP

echo 'pcm.ARDOP {type rate slave {pcm "<RIG_ALSA_DEVICE>" rate 48000}}' > ~/.asoundrc will create a new ALSA device, tied to my rig's ALSA device, that will have the correct sample rate for use with ARDOP.

Run ARDOP

ardopc 8515 <RIG_ALSA_DEVICE> <RIG_ALSA_DEVICE> -l /tmp if the rig ALSA device can support the needed sample rate. Otherwise use ardopc 8515 -l /tmp which will use the virtual device we setup earlier.

Note: Make sure that when using ARDOP that the radio filter is set to the selected gateway's bandwidth. For example, if using a gateway with 500 then set the filter at 600 Hz.

Rig Control for Pat Winlink

rigctld -m <RIG_MODEL> -r <RIG_SERIAL> -s <RIG_SERIAL_BAUD> will open rigctld for Pat Winlink to use to control my rig.

Configure Pat Winlink

pat configure to do a one time configuration.

For rigs we'll just make one called my_rig, it'll point to our rigctld process.

"hamlib_rigs": {
    "my_rig": {"address": "localhost:4532", "network": "tcp"}
},

Default ARDOP settings:

"ardop": {
    "rig": "my_rig",
    "ptt_ctrl": true,
    "addr": "localhost:8515",
    "arq_bandwidth": {
        "Forced":false,
        "Max":500
    },
    "beacon_interval": 0,
    "cwid_enabled": false
},

Default AX.25 settings:

"ax25": {
    "port": "wl2k",
    "beacon": {
        "every": 0,
        "message": "Winlink P2P",
        "destination": "IDENT"
    }
},

Use GPSD:

"gpsd": {
    "enable_http": true,
    "allow_forms": true,
    "use_server_time": true,
    "addr": "localhost:2947"
}

Run Pat

pat --listen="ardop,ax25" http to start the UI for Pat Winlink, listening for ARDOP and AX25.

Running YAAC

sudo update-alternatives --config java to select Java 11 if the machine as more than one version of Java on it.

java -jar YAAC.jar

Sending SMS via APRS

Register number with SMSGTE: #mynumber {add, delete, show} <number>.

Registration example:

To: SMSGTE
#mynumber add 6135551234

Send SMS example:

To: SMSGTE
@6135551234 No cell coverage here, ping me on radio 

Send APRS message example (from phone):

To: 2015551234
@VE3OTB-10 Did you forget your cellphone? 

Sending Email via APRS

Send email example:

To: EMAIL-2
test@gmail.com Test Email

Appendix

Rig Serial Parameters for My Radios

These are the settings I'd need for setting up applications like JS8Call, WSJT-X, and Flrig.

IC-705

Rig as IC-7300
19200 baud
8 data bits
1 stop bit
No handshake
Force DTR and RTS to low
Set CI-V Address on Radio: 94h

Set modes to -D (e.g. USB-D, FM-D) so the radio uses the USB device instead of microphone.

IC-7100

Rig as IC-7100
19200 baud
8 data bits
1 stop bit
No handshake
Force DTR and RTS to low
Data Mod USB

Set modes to -D (e.g. USB-D, FM-D) so the radio uses the USB device instead of microphone.

IC-7300

19200 baud
8 data bits
2 stop bit
No handshake
Force DTR and RTS to low
CI-V Address: 94h

Set modes to -D (e.g. USB-D, FM-D) so the radio uses the USB device instead of microphone.

My Variables

IC-705

<RIG_SERIAL> = /dev/serial/by-id/usb-Icom_Inc._IC-705_IC-705_12004306-if00
<RIG_BAUD> = 19200
<RIG_ALSA_DEVICE> = plughw:CARD=CODEC

Udev rules:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0c26", ATTRS{idProduct}=="0036", GROUP="users", MODE="0666"

IC-7100

<RIG_SERIAL> = /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_IC-7100_02012442_A-if00-port0
<RIG_BAUD> = 19200
<RIG_ALSA_DEVICE> = plughw:CARD=CODEC
<HAMLIB_RIG_MODEL> = 3070

Udev rules:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c3", ATTRS{idProduct}=="ea60", GROUP="users", MODE="0666"

Notes: alsamixer to 50%.

Digirig

<RIG_SERIAL> = /dev/serial/by-id/usb-Silicon_Labs_CP2102N_USB_to_UART_Bridge_Controller_226d25d349a4ec11bff2e789a29c855c-if00-port0
<RIG_ALSA_DEVICE> = plughw:CARD=Device,DEV=0

Udev rules:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="013c", GROUP="users", MODE="0666"

Notes: Set speakers and microphone with alsamixer to 100% and disable auto gain using the m key.

U-blox7 GPS

<GPS_SERIAL> = /dev/serial/by-id/usb-u-blox_AG_-_www.u-blox.com_u-blox_7_-_GPS_GNSS_Receiver-if00

References

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment