← Back to Server Documentation

This page provides guidance on deploying RemoteRF hosts, which provide a way to connect SDRs to the RemoteRF server over Wi-Fi, LAN, or VPN. Hosts thus allow instructors to create large-scale testbeds where SDRs may be geographically distributed across rooms, buildings, or even entire campuses. A typical host may be a lightweight single-board computer, such as a Raspberry Pi, or similar low-cost computer with one or more SDRs physicall connected to it. As long as the host is connected to the same network as the RemoteRF server, its SDRs will be accessible to RemoteRF users, just as those SDRs directly connected to the server are. Assuming a RemoteRF server has already been set up, deployment of RemoteRF hosts consists of the following steps:


Hardware Requirements

The first step in deploying RemoteRF is to acquire the necessary hardware. While this can vary widely across deployments, every deployment will need the following:

  • A Linux-based computer to act as the RemoteRF server.
  • One or more SDRs that will be made remotely accessible by the RemoteRF server.

Each of these hardware components can be purchased from any vendor of your choice.

Linux-Based Machine

RemoteRF host software must be run on a Linux-based machine, such as a single-board computer, like a Raspberry Pi. It can be either x86_64 or ARM.

The RemoteRF host software is confirmed to work properly on Ubuntu 24.04 LTS (desktop or server). If you prefer another Linux distribution, feel free, but we cannot ensure serious issues will not be encountered.

We recommend that you begin set up of the RemoteRF host on a fresh installation of Ubuntu 24.04 LTS. To do so, follow the instructions on this page to install/boot Ubuntu Server by downloading the Ubuntu Server ISO, writing it to a USB installer, rebooting the target PC, opening the BIOS/UEFI boot menu (often F12/Esc/Del), and booting from the USB to run the installer.

This documentation will assume a fresh install of Ubuntu 24.04 LTS and that you have root/sudo access.

One or More SDRs

You will need to acquire one or more SDRs to connect to the RemoteRF host. For initial setup of a RemoteRF host, we recommend using one Pluto SDRs, each of which can be purchased for less than $250 from DigiKey or Mouser Electronics.


Host Software Installation

Once the above hardware components have been acquired, installation of the RemoteRF host software can commence, which we provide documentation for below. Our walkthrough below uses conda and mamba to create a remoterf environment and then install dependencies.

System Prerequisites

After booting up the Ubuntu machine, log into your user account. Then open a terminal and run the following commands:

sudo apt update
sudo apt install -y curl ca-certificates bzip2 git build-essential
sudo apt install -y libusb-1.0-0 udev

To confirm which architecture you have, run the following in the terminal:

uname -m

The output will correspond to the following:

  • x86_64 → Intel/AMD (many conventional desktop machines)
  • aarch64 → ARM64 (Raspberry Pi 64-bit, some servers)

Install Miniconda

The next step is to install Miniconda, a minimalist installer of the popular environment/package manager Anaconda.

If your machine is Intel/AMD (x86_64), then run:

cd /tmp
curl -fsSLO https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p "$HOME/miniconda3"

If your machine is ARM64 (aarch64), then run:

cd /tmp
curl -fsSLO https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
bash Miniconda3-latest-Linux-aarch64.sh -b -p "$HOME/miniconda3"

Enable Conda in Terminal

Run the following to enable conda in your current terminal.

source "$HOME/miniconda3/etc/profile.d/conda.sh"
conda --version

To make conda available automatically in new terminals, run the following:

"$HOME/miniconda3/bin/conda" init bash
source ~/.bashrc

To confirm conda has been installed correctly, run the following.

conda --version

Install Mamba

Next, we will use conda to install mamba, which will be used to install dependencies needed to install the RemoteRF server software. Install mamba with the following:

conda install -n base -c conda-forge -y mamba

You may need to accept Conda’s terms of service by running the following:

conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r

To confirm mamba has been installed correctly, run the following:

mamba --version

Create the Environment

Now, use conda to create the remoterf environment with the following:

mamba create -n remoterf -y -c conda-forge -c defaults python=3.10 pip setuptools wheel grpcio protobuf python-dotenv numpy scipy libiio pylibiio libusb

Then, activate the newly created environment with the following:

conda activate remoterf

Then, update pip with the following:

python -m pip install -U pip

Finally, run the following to install the remoterf-server software.

python -m pip install pyadi-iio remoterf-server

Network Configuration

Depending on your IT/ISP setup, the details vary, but you will need a stable address for the Server—either a static IP or a DNS name that resolves to it. In most campus networks this means requesting IT to (1) assign a static IP / DNS for the server, and (2) allow inbound connectivity to the server on the required ports (e.g., TCP 61005–61006) so machines on the campus LAN/VPN can reach it directly.

Example will use: Static IP: 192.168.1.50 Ports: 61005, 61006

Generate CA Certificates

If static IP connection: (force overrides existing)

serverrf --gen-certs 192.168.1.50 --days 3650 --force
serverrf --show-certs

Specify Outward-Facing Ports

serverrf --config --main-port 61005 --cert-port 61006
serverrf --config --show

Testing Connection

The server now should be functional in its most basic form. In the same conda env:

serverrf --serve

or

serverrf -s

If you see a error similar to the below, make sure the ports you are using are not OS reserved (<1024).

self.socket.bind(self.server_address) PermissionError: [Errno 13] Permission Denied

Confirm Local Functionality

Start the server:

serverrf --serve

Take note of the Local IP and Local Port, for example, if you see:

Local IP:   164.67.195.210
Local Port: 61005

then run the below on a seperate terminal (make sure to keep serverrf -s running!)

Confirm that its reachable:

nc -vz 164.67.195.210 61005
nc -vz 164.67.195.210 61006

Network Testing

Same test, but on a different computer. Works for UNIX based machines:

Confirm that the Server is reachable:

nc -vz 164.67.195.210 61000
nc -vz 164.67.195.210 61001

Troubleshooting: Some distros come with default firewall settings that block traffic on specific ports. Make sure that your firewall settings permit traffic to and from the server. Depending on the setup, you may also have ISP firewalls.


Connecting SDRs to the Host

We now walk through how to connect SDRs to the server. Currently, only Pluto SDRs are supported, with work ongoing to add support for other SDRs. We will thus describe below how to connect a Pluto SDR to the server, with the understanding that this process would be repeated to connect more than one.

To start, open a new terminal and run the following to activate the remoterf environment.

conda activate remoterf

Connect the Pluto SDR to the server via USB. Information about connecting SDRs to the server via LAN, Wi-Fi, or VPN will be covered on this page, which documents setup of RemoteRF hosts.

After connecting the Pluto SDR, run the following command in the newly opened terminal:

iio_info -s

If the Pluto SDR is not listed upon running the above command, run the following:

sudo iio_info -s

Then, run the commands below:

sudo groupadd -f plugdev
sudo usermod -aG plugdev "$USER"

sudo tee /etc/udev/rules.d/53-adi-usb.rules >/dev/null <<'EOF'
# Type the below in
SUBSYSTEM=="usb", ATTR{idVendor}=="0456", MODE="0660", GROUP="plugdev"
EOF

sudo udevadm control --reload-rules
sudo udevadm trigger

Then, reboot the server by typing the following into the terminal:

sudo reboot now

Upon reboot, log back in, and open a new terminal. Activate the remoterf environment by typing the following.

conda activate remoterf

The below should work as intended now:

iio_info -s

The output should be something similar to the following:

TODO!!!!!

Look for ‘serial=’. Take note of this serial.

serverrf --device --add --pluto <device_id:name:serial>
serverrf --device --show

# example
serverrf --device --add --pluto 0:pluto_0:104473f6
serverrf --device --add --pluto "1:Pluto SDR (OTA):58472j"

Run the below to edit names of existing devices:

serverrf -d --edit-name 0 "New Name"

Note: after updating any server/device config, you must restart the running server instance by terminating serverrf -s, then relaunching it.


Verifying Host Deployment

On the RemoteRF server, start it via serverrf -s, if it is not already running. Then, run the command hosts status, which should produce an output similar to the following.

Terminal (RemoteRF Server)
server@remoterf: hosts status Welcome to the RemoteRF Platform Current version: 1.1.2 (LATEST) All times are in Pacific Time (Los Angeles) Please login or register to continue. (l/r): r Registering new account ... Enrollment Code: JFZU Username: ian Password (Hidden): Confirm Password: Email: email@ucla.edu

You should see your newly added host, and that is online.

If the host doesn’t show up, confirm that the server is reachable from your host machine (using the server’s static IP and port):

nc -vz 164.67.195.210 61000
nc -vz 164.67.195.210 61001

If not, then it is a network issue. Contact your ISP/IT.

Once the host is properly connected, all devices under the host will be accessible from users/server in the same way as server-local devices. Each host will try to reconnect over and over again if the server goes down/can’t be found.