radiocondaを用いてUbuntu 22.04でGNU Radioをインストール

2023/11/10 4:52 PM

GNU Radioを用いて開発や研究を行う方にとっては,2023年10月現在,radiocondaによるGNU Radioのインストールが最も便利だと思われる.https://github.com/ryanvolz/radioconda からLinux用(x86_64 (amd64)アーキテクチャ用)のインストーラをダウンロードして,以下のように実行する.検証に使用したパソコンは,Ubuntu 22.04.3 LTSを新規にインストールした状態である(GNU Radioのバイナリパッケージは,一切インストールしていない).

$ bash ./radioconda-2023.07.26-Linux-x86_64.sh

画面に膨大なインストールログが表示される.ログの末尾には,対象とするソフトウェア無線環境ごとに必要な設定も記載されている(GitHubにも,設定に関するほぼ同等の内容の記載はある).

radioconda は,GNU Radioを含む主要なオープンソースのソフトウェア無線パッケージ集である.Anaconda, Inc.謹製の conda package manager(およびconda互換のより高速なソフトウェア mamba)がバンドルされている.radiocondaを用いることで,各種のソフトウェア無線機に対応したGNU Radio環境を,Ubuntuユーザの(主として)ホームディレクトリ以下に容易に構築できる.1台のUbuntuマシンに複数バージョンのGNU Radio環境を共存させたい,という要求にも応えられそうだ.とりあえずradiocondaをインストールすれば,対応しているソフトウェア無線機の使用を開始できる,という状況となることを目指して提供されているようで,とてもありがたい.

GNU Radioをインストールする際には,上記のradiocondaのインストールで準備された base conda environment で直接行うのではなく,ユーザが命名するGNU Radio用の「環境」内で行うことが強く推奨されている.GNU Radio Wikiでの説明は以下の通り.

It’s almost never a good idea to install additional packages to your base conda environment because their dependencies may interfere with conda’s own dependencies. We recommend creating an environment specifically for GNU Radio and related packages. From a console with the base conda environment activated, run
$ conda create -n gnuradio
to create an empty environment called “gnuradio".

上記のやり方は,condaを用いて必要なライブラリを備えたPythonの開発環境を準備する際の考え方と同じなので,Pythonで開発をされる方や機械学習/深層学習界隈の方にとっては,おなじみかと思います.

Enter the environment by activating it with the command: というドキュメントの記載に従って以下のコマンドを実行し,先ほど作成した conda での「gnuradio 環境」をactivateする.ここでの「gnuradio」は,利用者が先ほど作成(命名)した環境の名称を表す単なる文字列である.

$ conda activate gnuradio

続いて,Before installing the GNU Radio packages, we need to ensure that the environment is set up to look for packages from conda-forge: というGNU Radio Wikiの記載に従って下記を実行する((gnuradio) sdr2023@dsp:~$までは単なるプロンプト).

(gnuradio) sdr2023@dsp:~$ conda config --env --add channels conda-forge
(gnuradio) sdr2023@dsp:~$ conda config --env --set channel_priority strict

GNU Radioをインストールする準備ができたので,以下によりインストールを実行する.下記のコマンドラインでの「gnuradio」は,主要なソフトウェア無線機向けのGNU Radioと関連ツール一式が含まれるradioconda(conda-forge)でのパッケージ名である.対象デバイス等は,GitHubに記載がある.

(gnuradio) sdr2023@dsp:~$ conda install gnuradio

以上でインストールは完了する.コマンドプロンプトの前にある(gnuradio)という文字列は,「gnuradio環境」でのコマンドプロンプトであることを示す単なる目印である.USRPを使いたいので,下記を実行しておく.

(gnuradio) sdr2023@dsp:~$ uhd_images_downloader

また,ADALM-PLUTO(IIO(Pluto SDR))も使いたいので,GitHubの記載に基づき下記を実行しておく.

(gnuradio) sdr2023@dsp:~$ sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/90-libiio.rules /etc/udev/rules.d/90-radioconda-libiio.rules
(gnuradio) sdr2023@dsp:~$ sudo udevadm control --reload
(gnuradio) sdr2023@dsp:~$ sudo udevadm trigger

我々のところでは,以上のように作業を行ってきたUbuntuマシンのログインユーザは,専らGNU Radioを使用するためのユーザと想定している.ホームディレクトリの.bashrcの末尾に以下を書いておいた.mambaは,condaと書いても同じである.

mamba activate gnuradio

作業はこれで終わりで,以下のようにGNU Radio Companionを起動できる.2023年10月11日の状況では,GNU Radio 3.10.7.0がインストールされた.インストールされたUHDは,UHD 4.5.0.HEAD-releaseという最新版であった.

(gnuradio) sdr2023@dsp:~$ gnuradio-companion

radioconda環境でインストールしたGNU Radio Companion
(gnuradio) sdr2023@dsp:~$ uhd_config_info --print-all
UHD 4.5.0.HEAD-release
Build date: Wed, 04 Oct 2023 05:55:34
C compiler: GNU 12.3.0
C++ compiler: GNU 12.3.0
C flags: -DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_ASIO_DISABLE_STD_STRING_VIEW -DBOOST_ASIO_DISABLE_STD_EXPERIMENTAL_STRING_VIEW -DHAVE_CONFIG_H -DUHD_LOG_MIN_LEVEL=1 -DUHD_LOG_CONSOLE_LEVEL=2 -DUHD_LOG_FILE_LEVEL=2 -DUHD_LOG_CONSOLE_COLOR-march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem /home/sdr2023/radioconda/envs/gnuradio/include -fdebug-prefix-map=/home/conda/feedstock_root/build_artifacts/uhd_1696398762321/work=/usr/local/src/conda/uhd-4.5.0.0 -fdebug-prefix-map=/home/sdr2023/radioconda/envs/gnuradio=/usr/local/src/conda-prefix
C++ flags: -DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_ASIO_DISABLE_STD_STRING_VIEW -DBOOST_ASIO_DISABLE_STD_EXPERIMENTAL_STRING_VIEW -DHAVE_CONFIG_H -DUHD_LOG_MIN_LEVEL=1 -DUHD_LOG_CONSOLE_LEVEL=2 -DUHD_LOG_FILE_LEVEL=2 -DUHD_LOG_CONSOLE_COLOR-fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem /home/sdr2023/radioconda/envs/gnuradio/include -fdebug-prefix-map=/home/conda/feedstock_root/build_artifacts/uhd_1696398762321/work=/usr/local/src/conda/uhd-4.5.0.0 -fdebug-prefix-map=/home/sdr2023/radioconda/envs/gnuradio=/usr/local/src/conda-prefix -fvisibility=hidden -fvisibility-inlines-hidden
Enabled components: LibUHD, LibUHD - C API, LibUHD - Python API, Examples, Utils, USB, B100, B200, USRP1, USRP2, X300, MPMD, N300, N320, E320, X400, OctoClock
Install prefix: /home/conda/feedstock_root/build_artifacts/uhd_1696398762321/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho
Boost version: 1.82
Libusb version: 1.0.27
Library path: /home/sdr2023/radioconda/envs/gnuradio/lib
Package path: /home/sdr2023/radioconda/envs/gnuradio
Images directory: /home/sdr2023/radioconda/envs/gnuradio/share/uhd/images
ABI version string: 4.5.0

conda および mambaは,Python開発環境での複雑なライブラリ問題に対処している有用なツールで,広く使われている.これを活用して,GNU Radio環境(GNU Radioから使用できる主要なソフトウェア無線機に対応可能な状態)や関連のツールをインストールする手段を提供しているradiocondaは,とても役に立つ.GNU Radio界隈とって非常に有用な存在だと感じている.長くGNU Radioを使っていくと,バージョンの混在がどうしても発生してしまう(以前に作成したGRCブロックが,最新版では動かないなどの理由から).この種の問題にはPyBOMBSで対処してきたが,これからはradiocondaが役に立つのではないか.先の記事で示したUbuntu PPA Installationではなく,radioconda環境でインストールしたGNU Radioを使っていきたいと思った.