ここでは 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/ |-- bin |-- etc |-- include |-- lib |-- lib64 |-- scripts |-- share |-- build | |-- nestdaq | |-- nestdaq-user-impl | |-- boost | `-- etc... | `-- src |-- nestdaq |-- nestdaq-user-impl |-- boost `-- etc...
SPADI-A DAQ パッケージ関連の Git リポジトリのソースコードは $HOME/spadi/src/ にクローン、もしくはダウンロードする。また、インストール先は bin, etc, include, lib ディレクトリである。ただ、これらはあくまで参考であり、Linux に慣れている人であれば、このディレクトリ構造でなくても運用できるであろう。
NestDAQ のビルドに必要な以下のライブラリをまずインストールする。
ちなみに、Boost のビルドの前に、zstd, libzstd-devel, bzip2-devel パッケージをパッケージマネージャでインストールしておく必要がある。これらパッケージをインストールしていなくても Boost 自体のコンパイルはできてしまうが、nestdaq-user-impl のコンパイル時にエラーとなる。さらに、以下の redisinsight をインストールしてもよい。
このプログラムは Redis データベースの中身を便利に見るためのソフトウェアである。ただ、Redis デフォルトの CUI コマンド (redis-cli) でも Redis データベースの中身を見ることができるので、必ずしも redisinsight をインストールする必要はない。上記パッケージをインストールしたら、NestDAQ 本体のインストールを行う。以下、それぞれのライブラリのインストール方法を記述する。以下では、shell は bash を仮定する。
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
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 をダウンロードしてきて 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 を持ってきてコンパイル
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秒程度。
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秒程度。
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分程度。
cd $HOME/spadi/src git clone https://github.com/redis/hiredis.git cd hiredis make PREFIX=$HOME/spadi install
make の所要時間は数秒程度。
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/build/redis-plus-plus make -j10 install
make -j10 の所要時間は数秒程度。
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/spadi \ -DCMAKE_PREFIX_PATH=$HOME/spadi \ -B ./build/nestdaq -S ./src/nestdaq cd $HOME/spadi/build/nestdaq make -j10 install
make -j10 の所用時間は 20-30 秒程度。
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 本体をインストールしたら、 nestdaq-user-impl (ユーザーが実験ごとに編集するユーザーソース部分) をインストールする。基本的に公式のドキュメントに従えば良い。
準備の項目を参考に 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)