SPADI-A Wiki/SPADI-A DAQ マニュアル/ソフトウェア/ソフトウェアのインストール/NestDAQ


NestDAQ および NestDAQ User Implementation のインストール

ここでは NestDAQ および NestDAQ User Implementaion (nestdaq-user-impl) のインストール方法を解説する。NestDAQ をインストールするには、以下のGitHub のインストールのページを参考にすれば良いが、このページは比較的玄人向け、もしくは開発者向けの記述になっている。

そのため、このマニュアルでは簡略化されたインストール方法を記述する。ライブラリのバージョンを切り替えて NestDAQ の動作検証などを行いたい場合は、公式のインストールのページを参考にするのがよいだろう。NestDAQ User Implementation のインストール方法は、以下のドキュメントに従えば良い。

以下、NestDAQ の関連ページも参考のこと。

準備

インストールを行う環境は AlmaLinux 9.4 を想定する。ただ、AlmaLinux 9.X であれば、ほぼ同じインストール手順になるはずである。AlmaLinux 9.4 の環境としては、サーバー環境として Graphical User Interface (GUI) がなくてもインストールできるはずであるが、GUI があると便利であるため、GUI 環境のインストールを仮定する。さらに、言語は英語 (US) を仮定する。また、AlmaLinux9.4を minimal でインストール状態から、NestDAQ と user implementation に必要なパッケージを一括でインストールするには、以下のようにインストールすればよい。

$ su
Password: <root のパスワード>
# dnf install git-core python3-pip gcc-c++ cmake automake libtool openssl-devel zlib-devel zstd libzstd-devel bzip2-devel epel-release
# dnf install root-tree-webviewer

以下、各パッケージを説明する。まず、NestDAQ のインストールに必要なパッケージは、以下のものである。

さらに、nestdaq-user-impl では、以下のパッケージが必要になるため、これもインストールしておく。これらがないと、コンパイル時にエラーとなる。

これらのパッケージを個別にインストールするには、sudo コマンドを使うか、以下のように su コマンドで root ユーザーになり、dnf コマンドでパッケージをインストールする。

$ su
Password: <root のパスワード入力>
# dnf install zlib-devel zstd libzstd-devel bzip2-devel

現在インストールされているパッケージを確認する場合は、dnf list といったコマンドがある。このあたりのコマンドは、Google で調べれば出てくるはず。

さらに、nestdaq-user-impl をインストールするには、CERN ROOT が必要。ROOTのバージョンはそれなりに新しいものが必要で ROOT v6.1X などはコンパイルが通らなかったはず。ROOT は CERN のページからソースをダウンロードしてインストールするか、dnf コマンドで以下のパッケージをインストールすればよい。

dnf でインストールする場合、まず Extra Packages for Enterprise Linux (EPEL) リポジトリを有効にする必要がある。EPELリポジトリが有効になったら、パッケージのインストールを行う。具体的には以下のようなコマンドを打てば良い。

$ su
root のパスワード入力
# dnf install epel-release
# dnf install root root-tree-webviewer

root パッケージだけだと、THttpServer.h といったヘッダがインストールされず、nestdaq-user-impl の cmake が通らない。

root & root-tree-webviewer パッケージをインストールすることで、cmake が通るようになる。cmake 時に Warning (?) メッセージが大量に出るが気にしない。

SELinux は大抵問題を引き起こすので、切っておきたい。以下のコマンドで切れているか確認可能。

$ getenforce
Disabled

SELinux の切り方は Google で "AlmaLinux 9 SELinux 切り方" などと調べればたぶん出てくるだろう。以下、参考例のページ。

具体的には、以下のような編集を行い、再起動。

$ su
Password: <root のパスワード入力>
# vi /etc/selinux/config

SELINUX=enforcing
         | | |
         V V V
#SELINUX=enforcing
SELINUX=disabled

setenforce コマンドを用いて一時的に SELinux を enforcing から permissive に変更することはできるが、恒久的に disabled にするには、このファイルを編集して、再起動するしかない模様。また、この方法は上記参考ページによると "SELinux は起動するがポリシーがロードされていない状態"であるそうだが、我々の使用用途の場合これで問題ないだろう。気になる場合は kernel パラメータを与えて、SELinux を完全に無効化することもできるらしい。

さらに、一般に DAQ の開発段階では firewall は切っておくとデバッグが捗り、労力削減になる。そのため、LAN 環境などでは、最初は firewall を切って動作検証することを推奨とする。例えば、

を参考に

# systemctl stop firewalld

で一時的にファイアウォールを切る。さらに、

# systemctl disable firewalld

のコマンドを打つことで次回起動時以降もファイアウォールを恒久的に切ることができる。

ディレクトリ構成

NestDAQ のインストールでは管理者権限 (いわゆる root 権限) は必要なく、どのディレクトリにインストールしても構わない。ただ、本マニュアルでは Linux 初心者向けに推奨のディレクトリ構造を紹介する。いくつかのスクリプトでは、ディレクトリのパスをベタ書きしているところがあるため、他のディレクトリにインストールを行うと、修正項目が増える場合がある。2024年9月30日以前のインストール先は実験毎に変わっている場合があったが、本マニュアルでは以下のインストールを行うことをデフォルトとする。

$HOME/spadi/

ここで、$HOMEはホームディレクトリを表す。また、このディレクトリの中は以下のような構造とする。

$HOME/spadi/
           |-- src
           |     |-- nestdaq
           |     |-- nestdaq-user-impl
           |     |-- boost
           |     `-- etc...
           |-- build
           |     |-- nestdaq
           |     |-- nestdaq-user-impl
           |     |-- boost
           |     `-- etc...
           |-- bin
           |-- etc
           |-- include
           `-- lib
                 |-- lib64
                 |-- scripts
                 `-- share

SPADI-A DAQ パッケージ関連の Git リポジトリのソースコードは $HOME/spadi/src/ にクローン、もしくはダウンロードする。また、インストール先は bin, etc, include, lib ディレクトリである。ただ、これらはあくまで参考であり、Linux に慣れている人であれば、このディレクトリ構造でなくても運用できるであろう。

NestDAQ のインストール

NestDAQ のビルドに必要な以下のライブラリをまずインストールする。

ちなみに、Boost のビルドの前に、zstd, libzstd-devel, bzip2-devel パッケージをパッケージマネージャでインストールしておく必要がある。これらパッケージをインストールしていなくても Boost 自体のコンパイルはできてしまうが、nestdaq-user-impl のコンパイル時にエラーとなる。さらに、以下の redisinsight をインストールしてもよい。

このプログラムは Redis データベースの中身を便利に見るためのソフトウェアである。ただ、Redis デフォルトの CUI コマンド (redis-cli) でも Redis データベースの中身を見ることができるので、必ずしも redisinsight をインストールする必要はない。上記パッケージをインストールしたら、NestDAQ 本体のインストールを行う。以下、それぞれのライブラリのインストール方法を記述する。以下では、shell は bash を仮定する。

redis のインストール

git でソースをダウンロードしてコンパイル

mkdir -p $HOME/spadi/src/
cd $HOME/spadi/src/
git clone https://github.com/redis/redis.git
cd redis
git checkout -b 6.0.10 6.0.10
make -j4 PREFIX=$HOME/spadi
make PREFIX=$HOME/spadi install

make の所要時間は 20 - 30秒程度。設定ファイルを $HOME/spadi/etc にコピー

mkdir $HOME/spadi/etc
cp $HOME/spadi/src/redis/redis.conf $HOME/spadi/etc/

daemon mode をオンにする。$HOME/spadi/etc/redis.confをエディタで開いて、以下のように編集。

daemonize no
  | | |
  V V V
#daemonize no
daemonize yes

さらに、コンピュータ外からのアクセスを有効にするために、以下の行をコメントアウト。

bind 127.0.0.1
| | |
V V V
#bind 127.0.0.1

bind 0.0.0.0 にすべしと解説しているweb サイトもあるが、redis.conf 内の設定方法の説明を読むと、単にコメントアウトだけで良い模様。また、プロテクトモードを無効にする。これをしないと、redis-cli などで外部コンピュータからアクセスはできるがデータベースの中身を見られない。

protected-mode yes
               |||
               VVV
#protected-mode yes
protected-mode no

RedisTimeSeries をインストール

cd $HOME/spadi/src/
git clone --recursive https://github.com/RedisTimeSeries/RedisTimeSeries.git
cd RedisTimeSeries
git checkout -b v1.4.8 v1.4.8
make
mkdir $HOME/spadi/lib
cp $HOME/spadi/src/RedisTimeSeries/bin/linux-x64-release/redistimeseries.so $HOME/spadi/lib/

make の所要時間は数秒程度。make 時に make -j2 とするとエラーとなるので、-jオプションは使わないようにすべし。

Boost をインストール

Boost をダウンロードしてきて make する。

cd $HOME/spadi/src
git clone https://github.com/boostorg/boost.git
cd boost
git checkout -b boost-1.80.0 boost-1.80.0
git submodule update --init --recursive
./bootstrap.sh
./b2 install \
 link=static,shared \
 threading=single,multi \
 cxxstd=17 \
 variant=release,debug \
 --layout=tagged \
 --prefix=$HOME/spadi -j10

というようにコマンドを打つ。git submodule update --init --recursive が数分程度(?)時間がかかる。早いコンピュータであれば、./b2 install の所要時間は 10 分程度。./b2 install の最後は

 ...updated 20399 targets...

という感じになる。zlib-devel, zstd, libzstd-devel, bzip2-devel パッケージをインストールし忘れて boost のコンパイルとインストールを行った場合、これらのパッケージをインストールして再度コンパイルしようとしても、うまく行かない模様。なんらかのキャッシュが残っているようだ?少なくとも boost ディレクトリを削除して、git clone からやり直すとうまく行く。

ZeroMQ をインストール

ZeroMQ を持ってきてコンパイル

cd $HOME/spadi/src
git clone https://github.com/zeromq/libzmq.git
mkdir -p $HOME/spadi/build/libzmq
cd $HOME/spadi
cmake \
  -DCMAKE_INSTALL_PREFIX=$HOME/spadi \
  -DCMAKE_CXX_STANDARD=17 \
  -B ./build/libzmq -S ./src/libzmq
cd $HOME/spadi/build/libzmq
make -j10
make install

make -jの数字はコンピュータのコア数に合わせて適宜変更する。早いサーバーであれば、make -j10 の所要時間は20秒程度。

FairLogger をインストール

cd $HOME/spadi/src
git clone https://github.com/FairRootGroup/FairLogger.git
mkdir -p $HOME/spadi/build/FairLogger
cd $HOME/spadi
cmake \
  -DCMAKE_INSTALL_PREFIX=$HOME/spadi \
  -DCMAKE_CXX_STANDARD=17 \
  -DUSE_EXTERNAL_FMT=OFF \
  -B ./build/FairLogger -S ./src/FairLogger
cd $HOME/spadi/build/FairLogger
make -j10
make install

make -j10 の所要時間は20秒程度。

FairMQ をインストール (v1.4.55)

cd $HOME/spadi/src
git clone https://github.com/FairRootGroup/FairMQ.git
git checkout -b v1.4.55 v1.4.55
mkdir -p $HOME/spadi/build/FairMQ
cd $HOME/spadi
cmake \
  -DCMAKE_INSTALL_PREFIX=$HOME/spadi \
  -DCMAKE_CXX_STANDARD=17 \
  -DCMAKE_PREFIX_PATH=$HOME/spadi \
  -B ./build/FairMQ -S ./src/FairMQ
cd $HOME/spadi/build/FairMQ
make -j10
make install

make -j10 の所要時間は2分程度。

hiredis のインストール (v1.1.0)

cd $HOME/spadi/src
git clone https://github.com/redis/hiredis.git
cd hiredis
make PREFIX=$HOME/spadi install

make の所要時間は数秒程度。

redis-plus-plus のインストール (1.3.6)

cd $HOME/spadi/src/
git clone https://github.com/sewenew/redis-plus-plus.git
mkdir -p $HOME/spadi/build/redis-plus-plus
cd $HOME/spadi
cmake \
  -DCMAKE_INSTALL_PREFIX=$HOME/spadi \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_PREFIX_PATH=$HOME/spadi \
  -DREDIS_PLUS_PLUS_CXX_STANDARD=17 \
  -DREDIS_PLUS_PLUS_BUILD_TEST=OFF \
  -B ./build/redis-plus-plus -S ./src/redis-plus-plus
cd $HOME/spadi/redis-plus-plus/build
make -j10 install

make -j10 の所要時間は数秒程度。

nestdaq のインストール

cd $HOME/spadi/src
git clone https://github.com/spadi-alliance/nestdaq.git
mkdir -p $HOME/spadi/build/nestdaq
cd $HOME/spadi
cmake \
  -DCMAKE_INSTALL_PREFIX=$HOME/local \
  -DCMAKE_PREFIX_PATH=$HOME/local \
  -B ./build/nestdaq -S ./src/nestdaq
cd $HOME/spadi/build/nestdaq
make -j10 install

make -j10 の所用時間は 20-30 秒程度。

redisinsight のインストール

redisinsight をもし使いたい場合はインストールする。このプログラムは Redis データベースの中身を便利に見るためのソフトウェアである。ただ、Redis デフォルトの CUI コマンド (redis-cli) でも Redis データベースの中身を見ることができるので、必ずしも redisinsight をインストールする必要はない。以前は wget コマンドでコンパイル済のバイナリを配布していたが、最近は web でアカウント登録してからバイナリをダウンロードする方式に変わったようだ?バイナリをダウンロードしたら、$HOME/local/bin ディレクトリにコピーして、chmod コマンドで実行権限を付与する。

$ mv <ダウンロードしたディレクトリ>/redisinsight-linux64 $HOME/spadi/bin
$ cd $HOME/spadi/bin
$ chmod +x redisinsight-linux64
$ ./redisinsight-linux64
<なにも表示されなければOK。Ctrl-Cで殺す。殺したときはいろいろメッセージが出る。>
$

NestDAQ User Implementation のインストール

NestDAQ 本体をインストールしたら、 nestdaq-user-impl (ユーザーが実験ごとに編集するユーザーソース部分) をインストールする。基本的に公式のドキュメントに従えば良い。

NestDAQ User Implementation のインストール

準備の項目を参考に CERN ROOT をインストールしたら、nestdaq-user-impl をコンパイル。

cd $HOME/spadi/src
git clone https://github.com/spadi-alliance/uhbook
git clone https://github.com/spadi-alliance/nestdaq-user-impl
mkdir -p $HOME/spadi/build/nestdaq-user-impl
cd $HOME/spadi
cmake  -DCMAKE_INSTALL_PREFIX=$HOME/spadi \
       -DCMAKE_PREFIX_PATH="$HOME/spadi;$HOME/spadi/src/uhbook"\
       -B ./build/nestdaq-user-impl -S ./src/nestdaq-user-impl
cd $HOME/spadi/build/nestdaq-user-impl
make -j10
make install

ただし、これをすると $HOME/spadi/bin 内の nestdaq のインストール時に作られた実行形式ファイル Sampler や Sink が上書きされる。nestdaq の 実行形式ファイルと nestdaq-user-impl の実行形式ファイルを別々に扱うには、インストール場所を変えるなどの対策が必要 (-DCMAKE_INSTALL_PREFIX を変えるとか)。

ソフトウェアのインストールが終わったら...

上記でソフトウェアのインストールは終了である。さらに、利便性のため $HOME/spadi/bin にパスを通しておくのが良いだろう。具体的には、$HOME/.bashrc に以下の行を書いておく。

# For NestDAQ
export PATH=$HOME/spadi/bin:$PATH

これは、$HOME/.bashrc 内のどこに書いてもいいが、普通は下の方に書く。ちなみに、環境によっては、$HOME/.bash_profile に以下のような行を書いておかないといけないかもしれない。

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

AlmaLinux 9.4 で useradd コマンドでユーザーディレクトリ (例えば /home/spadi) を作った際は /home/spadi/.bash_profile がデフォルトでできて、上記内容も書き込まれている。

.bashrc の追記ができたら、準備完了。この後、NestDAQ 本体の動作確認、nestdaq-user-impl の動作確認などを行っても良いし、実験の本番セットアップのデータ読み出しを行っても良い。NestDAQ のスクリプトの設定、NestDAQ の動かし方は次の項目参照のこと。

付録: エキスパート向けのインストール

NestDAQ はいくつかのライブラリ必要であるが、そのバージョンを切り替えて試したい時がある。そのような場合、ライブラリのバージョンに応じてインストール先を変えて用意しておき、ライブラリのリンクを変えることで、異なるライブラリを用いた動作確認を行う。ただ、Linuxにおけるリンク方法の知識が必要であるため、本マニュアルでは、慣れない人向けにより簡単なインストール方法を説明をしている。もし、異なるライブラリを試したい場合は、いちいちバージョンの異なるライブラリをインストールするか、インストール先のディレクトリを分けるなどの工夫が必要である。NestDAQ の公式のインストール方法では、異なるディレクトリにインストールしているため、バージョンの切り替えが容易になっている。

本稿執筆者

V0 2024/10/18 小林 信之 (大阪大学RCNP)
V1 2025/04/01 小林 信之 (大阪大学RCNP)