# Установка и сборка ## Зависимости Сборка не компилирует 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](https://gitlab.com/librespacefoundation/satnogs/gr-satnogs) | 3.1.x | блоки `satnogs_*`: доплер, водопад, декодер кадров, OGG-энкодер | | [gr-satellites](https://github.com/daniestevez/gr-satellites) | ≥ 5.x | **только** для Geoscan и USP | | SoapySDR + драйвер приёмника | — | блок `soapy_source` | | Hamlib с Python-биндингами | — | `import Hamlib` во всех флоуграфах с доплер-компенсацией | | Python: `pyzmq`, `numpy`, `soundfile` | — | процессы-подписчики | :::{note} Без `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](https://build.opensuse.org/repositories/home:librespace:satnogs2) на openSUSE Open Build Service. После подключения репозитория: ```sh 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). Если в вашем дистрибутиве пакета нет — ставьте из [исходников](https://gr-satellites.readthedocs.io/en/latest/installation.html). Проверить, что всё на месте: ```sh gnuradio-config-info --version # ожидается 3.10.x python3 -c "import satnogs; import satellites; import Hamlib; print('ok')" which grcc ``` ## Сборка из исходников ```sh 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` вся сборка проверяется в образе, на котором собран клиент станции. Дерево монтируется только на чтение, копия собирается внутри: ```sh 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`. :::{note} Станция собирается иначе: `soniks-client-new/Dockerfile` берёт тот же базовый образ, но `gr-satnogs` компилирует из `master`, а не ставит из OBS. Если правка `.grc` опирается на свежий блок `gr-satnogs`, проверяйте её именно так. ::: ### Сборка одного флоуграфа Каждому `.grc` соответствует цель CMake, названная по имени файла без расширения: ```sh make fm # generic/fm.grc make usp_fsk_decoder # satellites/usp_fsk_decoder.grc make geoscan_gfsk_decoder ``` Удобно при отладке: не нужно ждать прогона `grcc` по всем 20 флоуграфам. ### Что и куда ставится | Источник | Куда | Что получается | |---|---|---| | `generic/*.grc`, `satellites/*.grc` | `/bin/` | `satnogs_<имя>.py`, исполняемые скрипты флоуграфов | | `flowgraph_dispatcher/*.py` | `/share/flowgraph_dispatcher/` | исходники, плюс символические ссылки без расширения в `/bin/`: `flowgraph_dispatcher`, `zmq_frame_decoder_sub`, `zmq_iq_sub`, `zmq_audio_sub` | :::{note} `test_flowgraphs/` в сборку **не входит**: генераторы писались бы `grcc -u` в домашний каталог сборщика на этапе `make`, а не `make install`. Разработчику, которому они нужны в палитре GRC, — `grcc -u *.grc` вручную, см. [](flowgraphs/index.md). ::: ### Удаление ```sh sudo make uninstall ``` ## Сборка Debian-пакета ```sh sudo apt-get build-dep . # либо поставьте Build-Depends вручную dpkg-buildpackage -us -uc -b ``` Метаданные — в [`debian/control`](https://gitlab.com/space-education-development/soniks/soniks-flowgraphs/-/blob/soniks/debian/control): пакет `soniks-flowgraphs`, архитектурно-независимый. Он заменяет собой `satnogs-flowgraphs` (`Provides`/`Conflicts`/`Replaces`), поэтому обновление с апстримового пакета проходит без ручного удаления. В CI пакет **не собирается**: форк больше не публикует в OBS-проекты Libre Space Foundation, а своей инфраструктуры пока нет. См. [](dev/known-issues.md). ## Проверка установки ```sh flowgraph_dispatcher --help ls $(dirname $(which flowgraph_dispatcher))/satnogs_*.py | head ``` Первый запуск с реальным приёмником — [](quickstart.md).