Установка и сборка

Зависимости

Сборка не компилирует C++ — она прогоняет каждый .grc через grcc и получает Python-скрипты. Поэтому все зависимости нужны уже на этапе сборки: grcc импортирует блоки, чтобы сгенерировать код, и падает, если блока нет.

Компонент

Версия

Зачем

CMake

≥ 3.20

сборочная система; версия заявлена в CMakeLists.txt и нужна из-за cmake_path()

GNU Radio

3.10.x

ядро; нужны компоненты runtime blocks fft analog filter digital pmt gnuradio-soapy

grcc

из GNU Radio

генератор Python из .grc, должен быть в PATH

gr-satnogs

3.1.x

блоки satnogs_*: доплер, водопад, декодер кадров, OGG-энкодер

gr-satellites

≥ 5.x

только для Geoscan и USP

SoapySDR + драйвер приёмника

блок soapy_source

Hamlib с Python-биндингами

import Hamlib во всех флоуграфах с доплер-компенсацией

Python: pyzmq, numpy, soundfile

процессы-подписчики

Примечание

Без gr-satellites сборка дойдёт до satellites/geoscan_gfsk_decoder.grc и satellites/usp_fsk_decoder.grc и упадёт там с ошибкой про отсутствующий блок satellites_fsk_demodulator. Все перечисленные зависимости объявлены в debian/control, поэтому apt-get build-dep . их подтянет.

Debian

Пакеты gr-satnogs доступны в репозиториях home:librespace:satnogs2 на openSUSE Open Build Service. После подключения репозитория:

sudo apt-get install build-essential cmake pkgconf \
    gnuradio-dev gr-satnogs \
    python3-soapysdr python3-zmq python3-numpy python3-soundfile

gr-satellites там тоже есть (проверено на Debian 12: gr-satnogs 3.1.0.1, gr-satellites 5.9.0). Если в вашем дистрибутиве пакета нет — ставьте из исходников.

Проверить, что всё на месте:

gnuradio-config-info --version          # ожидается 3.10.x
python3 -c "import satnogs; import satellites; import Hamlib; print('ok')"
which grcc

Сборка из исходников

git clone git@gitlab.com:space-education-development/soniks/soniks-flowgraphs.git
cd soniks-flowgraphs
mkdir build && cd build
cmake ..
make
sudo make install

Сборка в контейнере

На машине без gr-satnogs вся сборка проверяется в образе, на котором собран клиент станции. Дерево монтируется только на чтение, копия собирается внутри:

docker run --rm -v "$PWD":/src:ro librespace/gnuradio:3.10.5.1-satnogs bash -c '
set -e
export DEBIAN_FRONTEND=noninteractive
echo "deb http://download.opensuse.org/repositories/home:/librespace:/satnogs2/Debian_12/ /" \
    > /etc/apt/sources.list.d/satnogs.list
apt-get update && apt-get install -y --no-install-recommends curl gnupg
curl -fsSL https://download.opensuse.org/repositories/home:librespace:satnogs2/Debian_12/Release.key \
    | gpg --dearmor > /etc/apt/trusted.gpg.d/satnogs.gpg
apt-get update && apt-get install -y --no-install-recommends \
    build-essential cmake pkgconf debhelper dh-python python3-all gr-satnogs gr-satellites
mkdir /work && cp -a /src/. /work/ && cd /work && rm -rf build
cmake -S . -B build && cmake --build build'

В образе уже есть GNU Radio 3.10.5.1, grcc, gr-satellites и Hamlib; из репозитория OBS доезжает gr-satnogs. Замените последнюю строку на dpkg-buildpackage -b -us -uc, чтобы получить .deb.

Примечание

Станция собирается иначе: soniks-client-new/Dockerfile берёт тот же базовый образ, но gr-satnogs компилирует из master, а не ставит из OBS. Если правка .grc опирается на свежий блок gr-satnogs, проверяйте её именно так.

Сборка одного флоуграфа

Каждому .grc соответствует цель CMake, названная по имени файла без расширения:

make fm                  # generic/fm.grc
make usp_fsk_decoder     # satellites/usp_fsk_decoder.grc
make geoscan_gfsk_decoder

Удобно при отладке: не нужно ждать прогона grcc по всем 20 флоуграфам.

Что и куда ставится

Источник

Куда

Что получается

generic/*.grc, satellites/*.grc

<prefix>/bin/

satnogs_<имя>.py, исполняемые скрипты флоуграфов

flowgraph_dispatcher/*.py

<prefix>/share/flowgraph_dispatcher/

исходники, плюс символические ссылки без расширения в <prefix>/bin/: flowgraph_dispatcher, zmq_frame_decoder_sub, zmq_iq_sub, zmq_audio_sub

Примечание

test_flowgraphs/ в сборку не входит: генераторы писались бы grcc -u в домашний каталог сборщика на этапе make, а не make install. Разработчику, которому они нужны в палитре GRC, — grcc -u *.grc вручную, см. Справочник флоуграфов.

Удаление

sudo make uninstall

Сборка Debian-пакета

sudo apt-get build-dep .        # либо поставьте Build-Depends вручную
dpkg-buildpackage -us -uc -b

Метаданные — в debian/control: пакет soniks-flowgraphs, архитектурно-независимый. Он заменяет собой satnogs-flowgraphs (Provides/Conflicts/Replaces), поэтому обновление с апстримового пакета проходит без ручного удаления.

В CI пакет не собирается: форк больше не публикует в OBS-проекты Libre Space Foundation, а своей инфраструктуры пока нет. См. Известные расхождения.

Проверка установки

flowgraph_dispatcher --help
ls $(dirname $(which flowgraph_dispatcher))/satnogs_*.py | head

Первый запуск с реальным приёмником — Быстрый старт.