Как уже говорилось ранее, если у вас устройство с 64-битным ARM-процессором (типа NanoPi NEO2 с процессором ARM Cortex-A53 (Allwinner H5)), для того, чтобы SpyServer нормально работал – необходимо, чтобы библиотека libairspy
была скомпилирована под архитектуру armhf
(ARM hard-float), т.к. сам сервер spyserver
скомпилирован под ту же архитектуру.
Если у Вас 32-битный ARM-процессор, то можете воспользоваться прошлой инструкцией, но если у Вас 64-битный ARM-процессор, то при сборке по официальной инструкции – библиотека libairspy
будет компилироваться под архитектуру aarch64
и при подключении к spyserver
– будет появляться ошибка Could not acquire the device
.
Установка необходимых библиотек
Устанавливаем необходимые утилиты для компиляции 32-битных библиотек на 64-битной системе:
$ sudo apt install build-essential cmake pkg-config gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
Далее приступаем к скачиванию и сборке библиотеки libairspy
и утилит для SDR-приёмников AirSpy mini / R2:
$ wget https://github.com/airspy/airspyone_host/archive/master.zip
$ unzip master.zip
$ rm -f master.zip
$ cd airspyone_host-master/
$ nano -w toolchain-arm32.cmake
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(TARGET_ABI "linux-gnueabihf")
SET(CMAKE_C_COMPILER arm-${TARGET_ABI}-gcc)
SET(CMAKE_CXX_COMPILER arm-${TARGET_ABI}-g++)
SET(CMAKE_FIND_ROOT_PATH /usr/arm-${TARGET_ABI})
$ mkdir build
$ cd build/
$ cmake ../ -DINSTALL_UDEV_RULES=ON -DCMAKE_TOOLCHAIN_FILE=../toolchain-arm32.cmake
$ make
$ sudo make install
$ sudo ldconfig
$ cd ../../
$ rm -rf airspyone_host-master/
Затем проверим, определился ли SDR-приёмник:
$ sudo airspy_info
airspy_lib_version: 1.0.9
Found AirSpy board 1
Board ID Number: 0 (AIRSPY)
Firmware Version: AirSpy MINI v1.0.0-rc9-0-ga56adfd 2016-06-12V
Part ID Number: 0x6906002B 0x00000030
Serial Number: 0x061C67DC286C91A3
Supported sample rates:
6.000000 MSPS
3.000000 MSPS
Close board 1
Далее пробуем выполнить эту команду с правами обычного пользователя:
$ airspy_info
airspy_lib_version: 1.0.9
airspy_open() board 1 failed: AIRSPY_ERROR_NOT_FOUND (-5)
При выполнении этой команды с правами обычного пользователя возникает ошибка AIRSPY_ERROR_NOT_FOUND (-5)
, значит у пользователя не хватает прав для доступа к SDR-приёмнику. Исправим эту ситуацию:
$ sudo usermod -a -G plugdev `whoami`
После включения пользователя в группу plugdev
необходимо перелогиниться и можно пробовать ещё раз:
$ airspy_info
airspy_lib_version: 1.0.9
Found AirSpy board 1
Board ID Number: 0 (AIRSPY)
Firmware Version: AirSpy MINI v1.0.0-rc9-0-ga56adfd 2016-06-12V
Part ID Number: 0x6906002B 0x00000030
Serial Number: 0x061C67DC286C91A3
Supported sample rates:
6.000000 MSPS
3.000000 MSPS
Close board 1
Теперь прав достаточно и у обычного пользователя.
В случае если у Вас есть SDR-приёмник AirSpy HF+, то таким же образом необходимо установить библиотеки и утилиты для HF+:
$ wget https://github.com/airspy/airspyhf/archive/master.zip
$ unzip master.zip
$ rm -f master.zip
$ cd airspyhf-master/
$ nano -w toolchain-arm32.cmake
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(TARGET_ABI "linux-gnueabihf")
SET(CMAKE_C_COMPILER arm-${TARGET_ABI}-gcc)
SET(CMAKE_CXX_COMPILER arm-${TARGET_ABI}-g++)
SET(CMAKE_FIND_ROOT_PATH /usr/arm-${TARGET_ABI})
$ mkdir build
$ cd build/
$ cmake ../ -DINSTALL_UDEV_RULES=ON -DCMAKE_TOOLCHAIN_FILE=../toolchain-arm32.cmake
$ make
$ sudo make install
$ sudo ldconfig
$ cd ../../
$ rm -rf airspyhf-master/
Затем проверим, определился ли SDR-приёмник:
$ sudo airspyhf_info
AirSpy HF library version: 1.4.2
S/N: 0x3652948040D23FD2
Part ID: 0x00000001
Firmware Version: R1.6.1
Available sample rate: 768 kS/s
Далее пробуем выполнить эту команду с правами обычного пользователя:
$ airspyhf_info
AirSpy HF library version: 1.4.2
No devices attached.
При выполнении этой команды с правами обычного пользователя возникает ошибка No devices attached
, значит у пользователя не хватает прав для доступа к SDR-приёмнику. Т.к. в группу plugdev
мы себя уже добавили – попробуйте просто переподключить SDR-приёмник к USB-порту. Это должно помочь, т.к. при установки библиотеки libairspyhf
в папку /etc/udev/rules.d/
были помещены соответствующие правила, при переподключении SDR-приёмника, устройство /dev/airspyhf-*
будет создано с правами позволяющими пользователям из группы plugdev
работать с данным устройством.
Установка и настройка SpyServer
Теперь откроем страницу https://airspy.com/download/ и установим SpyServer. Для этого скачаем файл
spyserver-arm32.tgz
для систем с ARM-процессором (Raspberry Pi, ASUS Tinker Board, Odroid, NanoPi NEO и т.д.).
$ wget https://airspy.com/downloads/spyserver-arm32.tgz
$ tar zxvf spyserver-arm32.tgz
$ rm -f spyserver-arm32.tgz
$ sudo mv spyserver /usr/local/bin/
$ sudo mv spyserver_ping /usr/local/bin/
$ sed -i 's/\r//g' spyserver.config
$ mkdir -p ~/.config/spyserver
$ mv spyserver.config ~/.config/spyserver/
Правильнее всего для каждого устройства создавать свой конфигурационный файл:
$ cp ~/.config/spyserver/spyserver.config ~/.config/spyserver/spyserver.mini.config
$ nano -w ~/.config/spyserver/spyserver.mini.config
bind_host = 0.0.0.0
bind_port = 5555
list_in_directory = 0
maximum_clients = 1
allow_control = 1
device_type = AirspyOne
device_serial = 0x061C67DC286C91A3
minimum_frequency = 24000000
maximum_frequency = 1750000000
initial_gain = 17
enable_bias_tee = 0
Параметр initial_gain
нужно будет позже подобрать экспериментальным путём. В названии конфигурационного файла вместо mini
– можно указать любой алиас, я у себя использую алиасы mini
(AirSpy mini), mini-gain
(AirSpy mini для которого включен параметр Bias-Tee, т.к. к этому SDR-приёмнику подключен LNA), hf
(AirSpy HF+), rtl1
(RTL-SDR), rtl2
(RTL-SDR) и т.д. Эти алиасы далее будут использована для создания сервисов в systemd, для автозапуска SpyServer.
Пробуем запустить SpyServer и подключиться к нему из SDR#. Всё должно заработать и вывод в консоли будет таким:
$ spyserver ~/.config/spyserver/spyserver.mini.config
SPY Server v2.0.1700
Copyright (C) 2016-2018 Youssef Touil - https://airspy.com
Reading the configuration file: /home/wakko/.config/spyserver/spyserver.mini.config
Listening for connections on 0.0.0.0:5555
Accepted client 192.168.255.20:52246 running SDR# v1.0.0.1700 on Microsoft Windows NT 6.2.9200.0
Device was sleeping. Wake up!
Acquired an AirspyOne device
Настройка автозапуска в systemd
Создадим файл сервиса systemd:
$ sudo nano -w /etc/systemd/system/spyserver@.service
[Unit]
Description=Spy Server
After=network-online.target
[Service]
Type=simple
PAMName=login
Restart=always
RestartSec=2
ExecStartPre=/usr/bin/test -f ${HOME}/.config/spyserver/spyserver.%i.config
ExecStart=/usr/local/bin/spyserver ${HOME}/.config/spyserver/spyserver.%i.config
User=wakko
[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
А теперь можно создавать сервисы для каждого SDR-приёмника. Как говорилось ранее, в названиях конфигурационных файлов для SpyServer содержится алиас устройства, который используется для создания соответствующего сервиса в systemd. В примере ниже используется устройство с алиасом mini
:
$ sudo systemctl enable spyserver@mini.service
Created symlink /etc/systemd/system/multi-user.target.wants/spyserver@mini.service → /etc/systemd/system/spyserver@.service.
$ sudo systemctl start spyserver@mini.service
$ sudo systemctl status spyserver@mini.service
● spyserver@mini.service - Spy Server
Loaded: loaded (/etc/systemd/system/spyserver@.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2019-02-23 13:12:08 MSK; 5s ago
Main PID: 3245 (spyserver)
CGroup: /system.slice/system-spyserver.slice/spyserver@mini.service
‣ 3245 /usr/local/bin/spyserver /home/wakko/.config/spyserver/spyserver.mini.config
Feb 23 13:12:08 NanoPi systemd[1]: Started Spy Server.
Feb 23 13:12:08 NanoPi systemd[3245]: pam_unix(login:session): session opened for user wakko by (uid=0)
Для каждого устройства нужно создавать и запускать свою копию сервиса командами:
$ sudo systemctl enable spyserver@alias.service
$ sudo systemctl start spyserver@alias.service
$ sudo systemctl status spyserver@alias.service