← Back to Server Documentation

The key steps associated with initial deployment of a RemoteRF server are as follows:

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

The RemoteRF server must be run on a Linux-based machine. It can be either x86_64 or ARM. The RemoteRF server 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 server 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 server. For initial deployment, we recommend using two Pluto SDRs, each of which can be purchased for less than $250 from DigiKey or Mouser Electronics.

For guidance on determining how many SDRs you may need for your course, please see the following guide. How Many SDRs Do I Need?

Server Software Installation

Once the above hardware components have been acquired, installation of the RemoteRF server 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 Server

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.

Fetching Usage Data

If you desire to pull the server information (ie: live updates of reservation, server usage parameters, etc.)

It uses GitHub Gists to push the status updates.

Create public gist on your github. Keep note of the file name: (as a .json)

(example) https://gist.github.com/ethange1/2a35e08a90bf88a70dfe7f42a55685ed

The last one is the “GIST_ID” part of the URL, e.g. “2a35e08a90bf88a70dfe7f42a55685ed”

Creating the GitHub PAT Token

  • GitHub → Settings
  • Developer settings
  • Personal access tokens → Fine-grained tokens
  • Generate new token
  • Set repository access to “Public Respositories”
  • Permissions: enable Gists: Read and write
  • Generate + copy the token (you only see it once)
serverrf --gist --set --id <gist_id> --file <filename>

Run the server normally, and you should see your gist change every minute!

serverrf -s

This walkthrough uses Miniconda + mamba to create a remoterf-server environment, install RemoteRF Server dependencies, and confirms everything works on Ubuntu 24.04 LTS (Desktop or Server). If you prefer another distro or package manager feel free, but it won’t be covered here.

Recommended: Use a Linux machine (x86_64 or ARM), ideally a fresh install for a clean, reproducible setup. This guide assumes root/sudo access.

After booting in, you should be at a fresh Ubuntu login prompt (console or GUI). If you still need to install/boot Ubuntu Server on the machine: download the Ubuntu Server ISO, write it to a USB installer, reboot the target PC, open the BIOS/UEFI boot menu (often F12/Esc/Del), and boot from the USB to run the installer. (Ubuntu)


CAN MULTIPLE REMOTERF PLATFORMS LIVE ON THE SAME LOCAL NETWORK? FAQ SECTION?


This page explains how to deploy a full RemoteRF instance. It is intended for instructors, researchers, or lab administrators who want to host RemoteRF themselves to provide shared access to RF hardware. The guide covers server setup, host configuration, and operational workflows needed to run a functioning RemoteRF environment.

  • TOC