SPY Server на Linux ARM.

Автор: Administrator вкл. . Опубликовано в RTL-SDR

Одним из вариантов организации удаленного доступа к SDR-приемнику является SPY Server от Airspy.

Схематично техническая реализация представлена на картинке ниже:

 

А картинка такая есть по ссылке https://airspy.com/airspy-hf-plus/

В качестве клиентской части ПО возможно использование SDRSharp и SDR Console.

Конечно, это серверное ПО, в первую очередь, предназначено для продукции компании Airspy (Airspy HF+, Airspy R2, Airspy Mini), но производитель предоставил возможность использовать это ПО и с RTL-SDR тоже, и даже в полном объеме возможностей.

На скрине ниже кусок конфига серверной части, из которого видно, для каких устройств применимо ПО.

 

Откуда такая невиданная щедрость? А все просто – в составе Airspy R2 и Airspy Mini используется чип R820T2, точно такой же, как и в RTL-SDR. Даже, скорее всего, «свистки» от Airspy, являются «теми же» RTL-SDR в некоторой степени, только с другой «обвязкой» в плане электронных компонентов (другой АЦП и проч.).

Вот, например, Airspy R2, на котором виден R820T2:

 

Картинка отсюда - https://airspy.com/airspy-r2/

 

Итак, суть задачи – настроить серверную часть, аналогично тому, как это было сделано ранее с применением rtl_tcp, но теперь использовать spyserver вместо rtl_tcp.

В качестве подопытных будут OrangePi One с ОС Armbian 5.73, rtl-sdr.com v3 и конвертер HFUC-125 v.4.1. Еще в составе применяется активный USB-HUB, о котором я писал тут.

Первично эта методика настройки была испытана мною еще в 2017 году на OrangePi Zero и каком-то нетбуке с Linux на процессоре Intel Atom.

 

 

 

 

Есть некое руководство по довольно беглой настройке spуserver от самой компании Airspy, в котором в качестве устройств фигурирует продукция компании Airspy, и про настройку для RTL-SDR там, естественно, не пишут.

Однако, есть другой ресурс с руководством по настройке такого сервера именно на основе RTL-SDR.

 

Общая суть процесса установки:

1 - Установка драйверов для свистка RTL-SDR (от Osmocom, например).

2 – Скачивание готовых исполняемых файлов серверной части SPY Server.

3 – Внесение необходимых изменений в файл конфигурации сервера.

4 – Запуск серверного ПО SPY Server.

5 - Настройка автозапуска серверного ПО SPY Server.

 

 

В принципе, начальная стадия (установка драйверов для RTL-SDR) уже описана ранее здесь и ничем не отличается. Но приведу нужные команды еще раз:

sudo apt-get install libusb-1.0-0-dev

git clone git://git.osmocom.org/rtl-sdr.git

cd rtl-sdr/

mkdir build

cd build

cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON

make

sudo make install

sudo ldconfig

 

 

В приведенной чуть выше инструкции предлагается несколько иной вариант установки драйверов:

sudo apt install rtl-sdr librtlsdr-dev

 

И он тоже вполне рабочий. Однако я предпочел свой, уже проверенный ранее, способ с драйверами от Osmocom.

Точно также имеет важность прохождение тестов по командам «sudo rtl_test –t» и «sudo rtl_test» без ошибок.

 

Если на этом этапе все хорошо, то можно переходить к скачиванию серверной части.

Находясь в домашней директории (cd ~) нужно создать папку (spyserver) в которую будет скачан необходимый архивный файл:

cd ~

mkdir spyserver

cd spyserver

 

 

А теперь в эту папку надо скачать архивный файл. Сделать это можно несколькими способами. Например, тут советуют делать это командой «wget https://airspy.com/downloads/spyserver-arm32.tgz». Причем как-то в одну строчку написаны команды и сразу можно не понять, что их там, в этой строчке, аж три для трех различных действий.

 

А вот тут советуют сходить сперва на страничку https://airspy.com/download/ и посмотреть, куда ведет ссылка на нужную версию дистрибутива (может вам не для ARM, а для Intel/AMD x32 или x64 надо). Кстати говоря, на плате с процессором ARM x64 и 64-битной ОС (OrangePi PC 2) у меня запустить spyserver не получилось, а отдельно файлы сервера под ARM x64 почему-то компания Airspy не предоставляет.

 

 

В таком случае, команда для скачивания выглядит как
«wget –O spyserver.tgz http://airspy.com/?ddownload=4247»

 

 

А можно вообще с большого компа скачать куда-либо этот архив, а потом закинуть по FTP, WinSCP на одноплатный компьютер. Или «забрать» с большого компа (или NAS) одноплатником по тому же FTP через MC (midnight commander).

Я использовал следующие команды:

Скачать архив.

wget https://airspy.com/downloads/spyserver-arm32.tgz

 

Распаковать архив.

tar xzf spyserver-arm32.tgz

 

 

По желанию можно удалить скачанный и, уже распакованный, архив.

rm spyserver-arm32.tgz

 

 

 

 

 

 

Далее можно приступать к редактированию конфигурационного файла, но сперва надо рассказать о некоторых изменениях в последней версии сервера (2.0.1700). А именно – появление некой карты мира, на которой обозначены сервера SPY Server в открытом общественном доступе. О чем была соответствующая новость.

 

 

Так-то оно, конечно, хорошо, но в конфиге появились новые строчки, зачастую добавляющие лишь порцию граблей в тех случаях, когда этот общий доступ (по крайне мере всемирный) организовывать цель не стоит. И файлов в архиве стало три – добавили какую-то пинговалку, для отображения статуса сервера на карте (online или offline).

Плюс в версии клиента (SDRSharp 1700) теперь при подключении к spyserver-у автоматически запускается аудио и панорама, причем с шириной в 2МГц (для RTL-SDR). Разработчики почему-то посчитали эти изменения удобными.

Первый сервер (для меня он был первым), версии 2.0.1629, сконфигурированный еще в 2017 году я очень не спешу обновлять по этим причинам.

 

Итак, для редактирования конфигурационного файла нужно в папке «/home/orangepi/spyserver» открыть на редактирование файл «spyserver.config»

sudo nano spyserver.config

 

Ниже я приведу лишь значимые блоки конфига и строки в нем. И первый из них – IP-адрес и порт для ожидания соединений. С IP-адресом все понятно – пишем IP одноплатного компьютера, на котором запущен этот сервер. Можно оставить "0.0.0.0" и тогда сервер будет стартовать с тем IP, который будет на сетевом интерфейсе, и, теоретически, это должно быть удобно при переносе сервера из одной подсети в другую (переместили в другую удаленную точку, например, и не надо в конфиге менять IP), но задать здесь IP-адрес вручную все же надежнее, на мой взгляд. А вот с портами есть нюанс. Дело в том, что в версии сервера 2.0.1629 порт указывался один – 5555, а в версии сервера 2.0.1700 уже указывается диапазон портов (5555-6666). Связано это, вероятно, с организацией общего доступа и отображением на карте. Так-то ладно, пусть диапазон, если надо так, но при перезапуске сервера может выбраться порт не 5555, а 5556, например, что внесет сложности при подключении клиентом.

Такая проблема описана на форуме и ответ там дан простой и очевидный – использовать один порт в конфиге. Т.е. сделать так, как было в старой версии сервера.

# TCP Listener

#

bind_host = 192.168.3.108

bind_port = 5555

 

Следующая подлянка – сервер автоматически будет отображаться на карте. По крайней мере будет пытаться это сделать. На форуме тоже писали. Вырубить с помощью значения «0».

# List Server in Airspy Directory

#

list_in_directory = 0

 

Максимальное число одновременно подключающихся клиентов. Тут зависит от мощности железа сервера, ширины канала связи, да и просто от целей и задач.

# User sessions

#

maximum_clients = 3

 

Длительность сессии в минутах. Т.е. после истечения заданного числа минут клиент будет отключен принудительно.

# Maximum session duration

# In minutes. 0 for no limit

#

#maximum_session_duration = 60

 

Тип устройства. В данном случае это RTL-SDR.

# Device Type

# Possible Values:

#   AirspyOne (R0, R2, Mini)

#   AirspyHF+

#   RTL-SDR

#   Auto     (Scans for the first available device)

#

device_type = RTL-SDR

 

Частота, которая будет у клиента при подключении. Я настраиваю для работы с конвертером на КВ. Так что начальной частотой делаю 7,1 МГц.

# Initial Center Frequency

#

initial_frequency = 7100000

 

Максимальная возможная частота для перестройки. В моем случае, в конвертере ФНЧ на 30МГц, поэтому тут тоже пишу 30МГц.

# Maximum Tunable Frequency

# Comment if using the device default

#

maximum_frequency = 30000000

 

Режим работы RTL-SDR. Либо обычный (квадратурный) для УКВ и с конвертером, либо Direct Sampling (и два пина на выбор).

# RTL-SDR Sampling mode

# Quadrature = 0,

# Direct Sampling I Branch = 1

# Direct Sampling Q Branch = 2

rtl_sampling_mode = 0

 

Сдвиг частоты конвертера. В моем конвертере это значение равно 125 МГц. В клиентах этот параметр задавать не надо, он задается здесь, на сервере.

# Converter Offset

# Set to -120000000 to enable the SpyVerter offset

converter_offset = -125000000

 

Это основные пункты с параметрами конфигурации сервера, и, уже на этом этапе настройки, все должно заработать.

По сему, сохраним и закроем файл.

CTRL+O и нажать Enter

CTRL+X

 

 

 

Пробный запуск сервера.

Находясь в папке «/home/orangepi/spyserver» выполнить команду:

 

sudo ./spyserver spyserver.config

 

Если выполнить ее без sudo, то при подключении клиентом будет

Device was sleeping. Wake up!

usb_open error -3

Please fix the device permissions, e.g. by installing the udev rules file rtl-sdr.rules

Could not acquire the device

 

 

Поэтому выполнять ее надо с «sudo»:

 

 

Далее подключаемся SDRSharp и видим, что все работает.

 

 

 

Сразу можно посмотреть на возможные для выбора значения ширины полосы обзора. Их предостаточно.

Также стоит обратить внимание на скорость потока данных от сервера и сделать удивленное лицо. Панорама и звук «влазят» в, примерно, 300 кбит/сек (привет rtl_tcp), что дает возможность применять такой сервер для размещения на очень удаленных точках с использованием 3G-4G-каналов связи. Для такого режима работы важно, чтобы пункт «Use full IQ» не был отмечен галочкой, иначе получится все тот же rtl_tcp. Подробнее про скорость писал тут.

 

 

 

 

 

 

 

Для настройки автостарта сервера, нужно, находясь в папке «/home/orangepi/spyserver», выполнить команду:

sudo touch start_srv.sh

 

А потом открыть на редактирование только что созданный файл:

sudo nano start_srv.sh

 

В него вписать следующие строки, про паузу в несколько секунд я писал ранее тут:

---------------------------

#! /bin/bash

 

sleep 60

cd /home/orangepi/spyserver

./spyserver spyserver.config &

 

----------------------------------------------

 

Сохранить и закрыть файл.

CTRL+O и нажать Enter

CTRL+X

 

 

 

Далее сделать его исполняемым:

sudo chmod +x start_srv.sh

 

 

 

Ради проверки можно запустить этот скрипт командой sudo ./start_srv.sh и убедится, что через 60 секунд spyserver запускается.

 

 

sudo nano /etc/rc.local           - - открыть на редактирование файл /etc/rc.local

И дописать следующие строчки до строки «exit 0»:

-----------------------------

cd /home/orangepi/

./start_srv.sh

--------------------------------

 

Либо:

sudo /home/orangepi/start_srv.sh

 

CTRL+O и нажать Enter

CTRL+X

 

 

Ради проверки (проверки правильности написания пути) можно дать команду sudo /home/orangepi/start_srv.sh

и убедится, что через 60 секунд spyserver запускается.

 

Получилась такая схема - в файле «rc.local» указываем какой файл скрипта запускать при старте системы (start_srv.sh), а в файле start_srv.sh указываем какую программу запускать с задержкой в 60 секунд (spyserver).

sudo reboot 0

 

После перезапуска сервера, ждем 60 секунд, запускаем на нем «htop» и убеждаемся, что процесс «spyserver» запущен:

 

Теперь можно клиентскими программами (SDRSharp, SDR Console) подключаться к серверу.

 

 

Про пропускную способность и Spyserver.

Про другие нюансы в Spyserver.

Прочие статьи про RTL-SDR.

SPY Server на Linux ARM и Airspy HF+.

 

 

 

P.S.: Вот еще нашел кое-какое руководство по установке SpyServer.