Skip to content

SDRangel server

f4exb edited this page Sep 18, 2018 · 36 revisions

Introduction

Starting with version 4 (v4.0.0) it is a fully implemented feature with support of nearly all plugins:

  • Channel Rx: AM, BFM, DSD, NFM, SSB, WFM demodulators and UDP source.
  • Channel Tx: AM, ATV, NFM, SSB, WFM modulators and UDP sink.
  • Sample sources: Airspy, AirspyHF, BladeRF, FCDPro, FCDPro+, File source, HackRF, LimeSDR, Perseus, PlutoSDR, RTL-SDR, SDRdaemon, SDRPlay, Test source (that's all of them)
  • Sample sinks: BladeRF, File sink, HackRF, LimeSDR, PlutoSDR, SDRdaemon (that's all of them also)

The most graphical plugins: Channel analyzer and ATV related demods are not part of the deal but they are also very unlikely to be useful in a server. However for DATV support could be added in the future with a proper implementation of TS communication.

It is implemented as a new binary sdrangelsrv that is similar to sdrangel but does not fire up a GUI. This server mode binary has therefore no dependency on Qt Widgets nor OpenGL. Since it has no GUI its control is left entirely up to the web REST API interface. It also uses a different set of plugins with their GUI parts removed. These are placed in the lib/pluginssrv directory.

The main motivations are:

  • open to third party development for custom GUI implementation thanks to the REST API.
  • be able to run SDRangel on hardware without graphics (server).
  • be used in sophisticated remote transponders or repeaters in a headless server configuration.
  • possibility to use Docker technology to host SDRangel server instances in a distributed environment.
  • using SDRdaemon for the RF device interface even more distributed architectures can be supported to share workload in a cluster.

This is distributed only in Linux packages.

Controlling the process with supervisor

Supervisor is a Python package that makes it very easy to manage processes using a simple web interface

In OpenSUSE

This was tested on a Raspberry Pi 3B under OpenSUSE LEAP 15.0

Install supervisor

sudo zypper in python2-pip
sudo pip install supervisor

This creates /usr/bin/supervisorctl and /usr/bin/supervisord and is only the bare minimum.

Create the service

Create /etc/init.d/supervisord with this content:

#!/bin/sh
### BEGIN INIT INFO
# Provides:        supervisord
# Required-Start:  $network $syslog
# Required-Stop:   $network $syslog
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: Supervisor daemon
### END INIT INFO
# Do 'sudo systemctl daemon-reload' to implement and after each change to this file

. /lib/lsb/init-functions
DAEMON=/usr/bin/supervisord
PIDFILE=/var/run/supervisord.pid
CONF_FILE=/etc/supervisor/supervisord.conf
test -x $DAEMON || exit 5
test -f ${CONF_FILE} || exit 5

case $1 in
    start)
        echo -n "Starting supervisor service" "supervisord"
        /sbin/startproc $DAEMON -n -c ${CONF_FILE}
        rc_status -v
        ;;
    stop)
        echo -n "Stopping supervisor service" "supervisord"
        /sbin/killproc -TERM $DAEMON
        rc_status -v
        ;;
    restart|force-reload)
        $0 stop && sleep 2 && $0 start
        rc_status
        ;;
    status)
        /sbin/checkproc $DAEMON
        rc_status -v
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|force-reload|status}"
        exit2
        ;;
esac

give it execution permission:

sudo chmod +x /etc/init.d/supervisord

Setup the service

sudo mkdir /var/log/supervisor
sudo systemctl enable supervisord

Configuration:

sudo mkdir -p /etc/supervisor/conf.d

Create /etc/supervisor/supervisord.conf with this content:

Clone this wiki locally