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


NestDAQ 本体および NestDAQ User Implementation (nestdaq-user-impl) のインストール

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

そのため、このマニュアルでは簡略化されたインストール方法を記述する。ライブラリのバージョンを切り替えて NestDAQ の動作検証などを行いたい場合は、公式のインストールのページを参考にするのがよいだろう。また、ネット上には NestDAQ のインストール方法に関するドキュメントがいくつかある。J-PARC MARQ spectrometer T103 実験 (白鳥 et al.) のサーバーマシンのインストール方法のメモとしては、e50server01 のインストールログがある。

NestDAQ User Implementation のインストール方法は、以下のドキュメントに従えば良い。

インターネットを漁ると、以下のような NestDAQ 利用者のページも参考にできるだろう。

準備

インストールを行う環境は2024年9月30日時点で最新の AlmaLinux 9.4 を想定する。AlmaLinux 9.X であれば、ほぼ同じインストール手順になるはずである。AlmaLinux 9.4 の環境としては、サーバー環境として Graphical User Interface (GUI) がなくてもインストールできるがずであるが、GUIがあると便利であるため、GUI 環境のインストールを仮定する。さらに、言語は英語 (US) を仮定する。また、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日以前のインストール先は実験毎に変わっている場合があったが、本マニュアルでは spadi アカウントを作成し、ホームディレクトリ以下にインストールを行うことをデフォルトとする。

/home/spadi/

ちなみに、2024年9月30日以前は nestdaq アカウントを作成し、/home/nestdaq ホームディレクトリ以下にインストールする場合が多かったが、SPADI Alliance のさまざまな活動により nestdaq に限らず、他のソフトウェアを利用することが増えてきたため /home/nestdaq ディレクトリではなく、spadi アカウントをデフォルトとする。また、公式の NestDAQ のスクリプトも順次 /home/spadi に対応させていくと良いと考えられる。

さらに、SPADI-A DAQ パッケージ関連の Git リポジトリやソースコードは

/home/spadi/repos

というディレクトリにクローンもしくはダウンロードし、ここでビルドすることを本マニュアルのデフォルトとする。また、インストール先は

/home/spadi/local/
                 |-- bin
                 |-- etc
                 |-- include
                 |-- lib
                 |-- lib64
                 |-- scripts
                 `-- share

をデフォルトとする。Linux に慣れている人であれば、このディレクトリでなくても運用できるであろう。

NestDAQ 本体のインストール

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

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

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

redis のインストール

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

mkdir $HOME/repos
cd $HOME/repos
git clone https://github.com/redis/redis.git
cd redis
git checkout -b 6.0.16 6.0.16
make -j10 PREFIX=$HOME/local
make PREFIX=$HOME/local install

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

mkdir $HOME/local/etc
cp $HOME/repos/redis/redis.conf $HOME/local/etc/

daemon mode をオンにする。$HOME/local/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 no

RedisTimeSeries をインストール

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

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

$ make -j2
make[1]: warning: -j0 forced in submake: resetting jobserver mode.
Submodule path 'deps/RedisModulesSDK': checked out 'c0740b8209abae38775adc6f3fefe05a520be55b'
Submodule path 'deps/readies': checked out '32e37e68f6ffa66f5a6e41cb37794147e84c38cb'
../deps/readies/mk/main:67: /home/spadi/repos/RedisTimeSeries/deps/readies/mk/cfg: No such file or directory
make[1]: *** No rule to make target '/home/spadi/repos/RedisTimeSeries/deps/readies/mk/cfg'.  Stop.
make: *** [Makefile:31: build] Error 2

Boost をインストール

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

cd $HOME/repos
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/local \
 -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/repos
git clone https://github.com/zeromq/libzmq.git
cd libzmq
mkdir build
cmake \
  -DCMAKE_INSTALL_PREFIX=$HOME/local \
  -DCMAKE_CXX_STANDARD=17 \
  -B ./build -S .
cd build
make -j10
make install

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

FairLogger をインストール

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

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

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

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

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

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

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

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

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

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

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

nestdaq のインストール

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

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

redisinsight のインストール

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

$ mv <ダウンロードしたディレクトリ>/redisinsight-linux64 $HOME/local/bin
$ cd $HOME/local/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/repos
git clone https://github.com/spadi-alliance/uhbook
git clone https://github.com/spadi-alliance/nestdaq-user-impl
cd $HOME/repos/nestdaq-user-impl
cmake  -DCMAKE_INSTALL_PREFIX=$HOME/local \
       -DCMAKE_PREFIX_PATH="$HOME/local;$HOME/repos/uhbook"\
       -B ./build     -S .
cd build
make -j10
make install

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

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

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

# For NestDAQ Oct. 2, 2024
export PATH=$HOME/local/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 の公式のインストール方法では、異なるディレクトリにインストールしているため、バージョンの切り替えが容易になっている。